A simple operating system for the ESP32-based M5StickC
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

63 lines
1.7 KiB

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_pending = 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
int 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);
void Kernel_set_run_interval(int pid, unsigned long interval);
// 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);
// Get how long *actually* elapsed since the last tick since we don't provide hard guarantees
unsigned long Kernel_get_last_tick_duration();
#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 SIGNAL_REDRAW 0x0020
#define KERNEL_INPUT_BUTTON_A 0
#define KERNEL_INPUT_BUTTON_B 1