Browse Source

Commit before I go rewrite half of this

v1
Adam PIppin 3 years ago
parent
commit
85d84b903f
  1. 54
      watchos/Kernel.cpp
  2. 2
      watchos/Module_Input.cpp
  3. 7
      watchos/Task_Menu.cpp
  4. 2
      watchos/__vm/Compile.vmps.xml

54
watchos/Kernel.cpp

@ -16,6 +16,7 @@ char scope[SCOPE_SIZE];
struct EventSubscription struct EventSubscription
{ {
int handle;
void (*callback)(Event* e); // module, event, param1, param2 void (*callback)(Event* e); // module, event, param1, param2
Task* target; Task* target;
byte source_mask = 0; byte source_mask = 0;
@ -164,20 +165,45 @@ void Kernel::suspend()
/** /**
* Register a new task in the kernel * Register a new task in the kernel
*/ */
void Kernel::registerTask(Task* task) int Kernel::registerTask(Task* task)
{ {
for (int i = 0; i < KERNEL_MAX_TASKS; i++) for (int i = 0; i < KERNEL_MAX_TASKS; i++)
{ {
if (m_task[i] == nullptr) if (m_task[i] == nullptr)
{ {
m_task[i] = task; m_task[i] = task;
task->setId(i); // TODO: real pid task->setId(m_pid++); // TODO: real pid
return; return i;
} }
} }
Kernel::panic("Exceeded KERNEL_MAX_TASKS!"); Kernel::panic("Exceeded KERNEL_MAX_TASKS!");
} }
void Kernel::unregisterTask(int pid)
{
for (int i = 0; i < KERNEL_MAX_TASKS; i++)
{
if (m_task[i] != nullptr && m_task[i]->getId() == pid)
{
delete m_task[i];
m_task[i] = nullptr;
return;
}
}
}
bool Kernel::isTaskRunning(int pid)
{
for (int i = 0; i < KERNEL_MAX_TASKS; i++)
{
if (m_task[i] != nullptr && m_task[i]->getId() == pid)
{
return true;
}
}
return false;
}
/** /**
* Register a new module in the kernel * Register a new module in the kernel
*/ */
@ -234,35 +260,49 @@ void Kernel::event(byte source, byte event, byte param1, byte param2)
} }
} }
void Kernel::subscribe(void (*callback)(Event* e), byte source_mask, byte event_mask) int Kernel::subscribe(void (*callback)(Event* e), byte source_mask, byte event_mask)
{ {
for (int i = 0; i < KERNEL_MAX_EVENT_SUBSCRIPTIONS; i++) for (int i = 0; i < KERNEL_MAX_EVENT_SUBSCRIPTIONS; i++)
{ {
if (m_event_subscription[i] == nullptr) if (m_event_subscription[i] == nullptr)
{ {
m_event_subscription[i] = new EventSubscription(); m_event_subscription[i] = new EventSubscription();
m_event_subscription[i]->handle = ++m_handle;
m_event_subscription[i]->callback = callback; m_event_subscription[i]->callback = callback;
m_event_subscription[i]->source_mask = source_mask; m_event_subscription[i]->source_mask = source_mask;
m_event_subscription[i]->event_mask = event_mask; m_event_subscription[i]->event_mask = event_mask;
return; return m_event_subscription[i]->handle;
} }
} }
Kernel::panic("Exceeded KERNEL_MAX_EVENT_SUBSCRIPTIONS!"); Kernel::panic("Exceeded KERNEL_MAX_EVENT_SUBSCRIPTIONS!");
} }
void Kernel::subscribe(Task* task, byte source_mask, byte event_mask) int Kernel::subscribe(Task* task, byte source_mask, byte event_mask)
{ {
for (int i = 0; i < KERNEL_MAX_EVENT_SUBSCRIPTIONS; i++) for (int i = 0; i < KERNEL_MAX_EVENT_SUBSCRIPTIONS; i++)
{ {
if (m_event_subscription[i] == nullptr) if (m_event_subscription[i] == nullptr)
{ {
m_event_subscription[i] = new EventSubscription(); m_event_subscription[i] = new EventSubscription();
m_event_subscription[i]->handle = ++m_handle;
m_event_subscription[i]->target = task; m_event_subscription[i]->target = task;
m_event_subscription[i]->source_mask = source_mask; m_event_subscription[i]->source_mask = source_mask;
m_event_subscription[i]->event_mask = event_mask; m_event_subscription[i]->event_mask = event_mask;
return; return m_event_subscription[i]->handle;
} }
} }
Kernel::panic("Exceeded KERNEL_MAX_EVENT_SUBSCRIPTIONS!"); Kernel::panic("Exceeded KERNEL_MAX_EVENT_SUBSCRIPTIONS!");
}
void Kernel::unsubscribe(int handle)
{
for (int i = 0; i < KERNEL_MAX_EVENT_SUBSCRIPTIONS; i++)
{
if (m_event_subscription[i] != nullptr && m_event_subscription[i]->handle == handle)
{
delete m_event_subscription[i];
return;
}
}
} }

2
watchos/Module_Input.cpp

@ -86,6 +86,8 @@ void Module_Input::poll()
} }
else else
{ {
if (m_button[i]->pressed)
Kernel::debug("Button released!");
m_button[i]->pressed = false; m_button[i]->pressed = false;
} }
} }

7
watchos/Task_Menu.cpp

@ -9,6 +9,7 @@ private:
Module_UI* ui; Module_UI* ui;
Module_Menu* menu; Module_Menu* menu;
bool m_waiting_for_menu = false; bool m_waiting_for_menu = false;
int m_task_pid = -1;
public: public:
Task_Menu() Task_Menu()
@ -66,7 +67,7 @@ public:
Kernel::debug("Task_Menu::show"); Kernel::debug("Task_Menu::show");
menu->reset(); menu->reset();
menu->addItem(0, "watchos", true); menu->addItem(0, "watchos", true);
menu->addItem(1, "Option 1"); menu->addItem(1, "Set Time");
menu->addItem(2, "Option Two"); menu->addItem(2, "Option Two");
menu->addItem(3, "Option Tres"); menu->addItem(3, "Option Tres");
menu->addItem(0, "config", true); menu->addItem(0, "config", true);
@ -76,4 +77,8 @@ public:
menu->show(); menu->show();
} }
void execute(int option)
{
}
}; };

2
watchos/__vm/Compile.vmps.xml

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save