|
|
|
|
|
|
|
struct Task
|
|
|
|
{
|
|
|
|
int pid = 0;
|
|
|
|
bool running = false;
|
|
|
|
int exit_code = 0;
|
|
|
|
int (*callback)(int, unsigned int);
|
|
|
|
unsigned long run_interval = 0;
|
|
|
|
unsigned long run_accumulator = 0;
|
|
|
|
unsigned int signal = 0;
|
|
|
|
unsigned int signal_mask = 0xFFFF;
|
|
|
|
};
|
|
|
|
|
|
|
|
void Kernel_setup();
|
|
|
|
void Kernel_tick();
|
|
|
|
|
|
|
|
// Panic and stop everything
|
|
|
|
void Kernel_panic(char* message);
|
|
|
|
|
|
|
|
// Start a new process
|
|
|
|
void Kernel_start(int (*callback)(int, unsigned int), unsigned long interval);
|
|
|
|
// Continue execution of a process
|
|
|
|
void Kernel_enable(int pid);
|
|
|
|
// Pause execution of a process
|
|
|
|
void Kernel_disable(int pid);
|
|
|
|
// Clean up exited process
|
|
|
|
void Kernel_reap(int pid);
|
|
|
|
|
|
|
|
// Send a signal to a/all processes
|
|
|
|
void Kernel_signal(int pid, unsigned int signal);
|
|
|
|
void Kernel_signal(unsigned int signal);
|
|
|
|
|
|
|
|
// Set a tasks's signal mask
|
|
|
|
void Kernel_signal_mask(int pid, unsigned int signal_mask);
|
|
|
|
|
|
|
|
// Get the run interval of a process
|
|
|
|
unsigned long Kernel_get_run_interval(int pid);
|
|
|
|
|
|
|
|
// Count how many tasks are running
|
|
|
|
int Kernel_count_running_tasks();
|
|
|
|
|
|
|
|
// Check if process has exited
|
|
|
|
bool Kernel_is_exited(int pid);
|
|
|
|
// Get exit code of process
|
|
|
|
int Kernel_get_exit_code(int pid);
|
|
|
|
|
|
|
|
// Check if a button was pressed
|
|
|
|
bool Kernel_read_input(int input);
|
|
|
|
|
|
|
|
#define SIGNAL_NONE 0x0000
|
|
|
|
#define SIGNAL_TICK 0x0001
|
|
|
|
#define SIGNAL_START 0x0002
|
|
|
|
#define SIGNAL_STOP 0x0004
|
|
|
|
#define SIGNAL_INPUT_A 0x0008
|
|
|
|
#define SIGNAL_INPUT_B 0x0010
|
|
|
|
|
|
|
|
#define KERNEL_INPUT_BUTTON_A 0
|
|
|
|
#define KERNEL_INPUT_BUTTON_B 1
|