RADLib
RADical C++ application framework
radekernel.h
Go to the documentation of this file.
1 #ifndef RADEMBEDDEDKERNEL_H
2 #define RADEMBEDDEDKERNEL_H
3 
13 #include <stddef.h>
14 #include <stdint.h>
15 #include <stdarg.h>
16 
17 #if defined(__cplusplus) && !defined(RADLIB_EMBEDDED_NO_CPP_WRAPPERS)
18 #include <string>
19 #include <vector>
20 #endif
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 #define RADEK_VERSION_MAJOR 0
27 #define RADEK_VERSION_MINOR 1
28 #define RADEK_VERSION_PATCH 2
29 
30 #define RAD_IOCTL_NONE 0u
31 #define RAD_IOCTL_WRITE 1u
32 #define RAD_IOCTL_READ 2u
33 #define RAD_IOCTL_READWRITE 3u
34 #define RAD_IOCTL(dir, type, nr, size) ((((uint32_t)(dir) & 3u) << 30) | (((uint32_t)(size) & 0x3fffu) << 16) | (((uint32_t)(type) & 0xffu) << 8) | ((uint32_t)(nr) & 0xffu))
35 #define RAD_IO(type, nr) RAD_IOCTL(RAD_IOCTL_NONE, type, nr, 0u)
36 #define RAD_IOR(type, nr, type_name) RAD_IOCTL(RAD_IOCTL_READ, type, nr, sizeof(type_name))
37 #define RAD_IOW(type, nr, type_name) RAD_IOCTL(RAD_IOCTL_WRITE, type, nr, sizeof(type_name))
38 #define RAD_IOWR(type, nr, type_name) RAD_IOCTL(RAD_IOCTL_READWRITE, type, nr, sizeof(type_name))
39 #define RAD_IOCTL_DIR(request) (((uint32_t)(request) >> 30) & 3u)
40 #define RAD_IOCTL_SIZE(request) (((uint32_t)(request) >> 16) & 0x3fffu)
41 #define RAD_IOCTL_TYPE(request) (((uint32_t)(request) >> 8) & 0xffu)
42 #define RAD_IOCTL_NR(request) ((uint32_t)(request) & 0xffu)
43 
44 #define RAD_IOCTL_TYPE_I2C 'I'
45 #define RAD_IOCTL_TYPE_SPI 'S'
46 #define RAD_IOCTL_TYPE_AUDIO 'A'
47 #define RAD_IOCTL_TYPE_SERIAL 'T'
48 #define RAD_IOCTL_TYPE_FRAMEBUFFER 'F'
49 #define RAD_IOCTL_TYPE_INPUT 'K'
50 #define RAD_IOCTL_TYPE_BLOCK 'B'
51 #define RAD_IOCTL_TYPE_NET 'N'
52 
53 #define RAD_DEVICE_IOCTL_I2C_TRANSFER RAD_IOWR(RAD_IOCTL_TYPE_I2C, 1u, struct rad_i2c_transfer)
54 #define RAD_DEVICE_IOCTL_SPI_TRANSFER RAD_IOWR(RAD_IOCTL_TYPE_SPI, 1u, struct rad_spi_transfer)
55 #define RAD_DEVICE_IOCTL_AUDIO_CONFIGURE RAD_IOW(RAD_IOCTL_TYPE_AUDIO, 1u, struct rad_audio_format)
56 #define RAD_DEVICE_IOCTL_SERIAL_CONFIGURE RAD_IOW(RAD_IOCTL_TYPE_SERIAL, 1u, struct rad_serial_config)
57 #define RAD_DEVICE_IOCTL_FRAMEBUFFER_INFO RAD_IOR(RAD_IOCTL_TYPE_FRAMEBUFFER, 1u, struct rad_framebuffer_info)
58 #define RAD_DEVICE_IOCTL_FRAMEBUFFER_FLUSH RAD_IOW(RAD_IOCTL_TYPE_FRAMEBUFFER, 2u, struct rad_framebuffer_rect)
59 #define RAD_DEVICE_IOCTL_BLOCK_INFO RAD_IOR(RAD_IOCTL_TYPE_BLOCK, 1u, struct rad_block_info)
60 #define RAD_DEVICE_IOCTL_BLOCK_READ RAD_IOWR(RAD_IOCTL_TYPE_BLOCK, 2u, struct rad_block_request)
61 #define RAD_DEVICE_IOCTL_BLOCK_WRITE RAD_IOWR(RAD_IOCTL_TYPE_BLOCK, 3u, struct rad_block_request)
62 #define RAD_DEVICE_IOCTL_BLOCK_FLUSH RAD_IO(RAD_IOCTL_TYPE_BLOCK, 4u)
63 #define RAD_DEVICE_IOCTL_NET_LINK_INFO RAD_IOR(RAD_IOCTL_TYPE_NET, 1u, struct rad_net_link_info)
64 #define RAD_DEVICE_IOCTL_NET_SEND RAD_IOW(RAD_IOCTL_TYPE_NET, 2u, struct rad_net_packet)
65 #define RAD_DEVICE_IOCTL_NET_POLL RAD_IO(RAD_IOCTL_TYPE_NET, 3u)
66 
67 #define RAD_BOOT_MAX_ARGS 16u
68 #define RAD_BOOT_MAX_MEMORY_REGIONS 8u
69 #define RAD_BOOT_MAX_STRING 64u
70 
71 #define RAD_OVERLAY_MAGIC 0x4f444152u
72 #define RAD_OVERLAY_VERSION 1u
73 #define RAD_TREE_MAX_PROPERTY_NAME 64u
74 #define RAD_TREE_MAX_PATH 96u
75 #define RAD_TREE_MAX_VALUE 96u
76 #define RAD_I2C_BUS_NAME_MAX 32u
77 #define RAD_SPI_BUS_NAME_MAX 32u
78 #define RAD_DRIVER_NAME_MAX 32u
79 #define RAD_COMPATIBLE_MAX 64u
80 #define RAD_MODULE_NAME_MAX 32u
81 #define RAD_MODULE_MAX_INFO 32u
82 #define RAD_IRQ_NAME_MAX 32u
83 #define RAD_IRQ_DOMAIN_NAME_MAX 32u
84 #define RAD_IRQ_MAX_RESOURCES 4u
85 #define RAD_FRAMEBUFFER_NAME_MAX 64u
86 #define RAD_DISPLAY_CONNECTOR_MAX 32u
87 #define RAD_FRAMEBUFFER_MAX_MODES 8u
88 #define RAD_PERF_NAME_MAX 32u
89 #define RAD_TIMER_NAME_MAX 32u
90 #define RAD_INPUT_QUEUE_NAME_MAX 64u
91 #define RAD_WAIT_FOREVER 0xffffffffu
92 
93 #define RAD_BOOT_MEMORY_USABLE 1u
94 #define RAD_BOOT_MEMORY_RESERVED 2u
95 #define RAD_BOOT_MEMORY_PSRAM 3u
96 #define RAD_BOOT_MEMORY_MMIO 4u
97 
98 typedef enum rad_status {
109 
110 typedef enum rad_posix_syscall {
147 
148 typedef enum rad_process_state {
153 
154 #define RAD_WAIT_NOHANG 1u
155 #define RAD_FD_CLOEXEC 1u
156 #define RAD_FCNTL_GETFD 1u
157 #define RAD_FCNTL_SETFD 2u
158 #define RAD_FCNTL_GETFL 3u
159 
160 typedef enum rad_vfs_open_flags {
161  RAD_VFS_READ = 1u << 0,
162  RAD_VFS_WRITE = 1u << 1,
163  RAD_VFS_CREATE = 1u << 2,
164  RAD_VFS_TRUNCATE = 1u << 3,
165  RAD_VFS_APPEND = 1u << 4
167 
168 typedef enum rad_seek_origin {
171  RAD_SEEK_END = 2
173 
174 typedef enum rad_device_type {
185  RAD_DEVICE_NETWORK = 10
187 
188 typedef enum rad_input_event_type {
195 
196 typedef enum rad_input_key {
220 
224  RAD_INPUT_MOD_ALT = 1u << 2,
226  RAD_INPUT_MOD_CAPS_LOCK = 1u << 4
228 
234 
235 typedef enum rad_pixel_format {
239 
240 typedef enum rad_sd_mode {
245 
246 typedef enum rad_spi_transfer_mode {
251 
252 typedef enum rad_dma_transfer_type {
257 
258 typedef enum rad_dma_request_id {
266 
274 
275 typedef enum rad_tty_mode_flags {
277  RAD_TTY_MODE_ECHO = 1u << 1,
278  RAD_TTY_MODE_CRLF = 1u << 2
280 
281 typedef enum rad_irq_trigger {
286  RAD_IRQ_TRIGGER_LEVEL_LOW = 1u << 3
288 
289 #define RAD_TASK_CORE_ANY (-1)
290 #define RAD_TASK_CORE_SERVICE 0
291 
292 typedef enum rad_task_state {
301 
302 typedef struct rad_kernel_config {
303  const char *backend_name;
304  const void *boot_info;
306 
307 typedef struct rad_boot_arg {
311 
312 typedef struct rad_boot_memory_region {
313  uint64_t base;
314  uint64_t size;
315  uint32_t type;
316  uint32_t flags;
319 
320 typedef struct rad_boot_info {
321  uint32_t size;
322  uint32_t version;
327  uintptr_t fdt_pointer;
328  uintptr_t initrd_pointer;
329  uint32_t boot_flags;
332  uint32_t arg_count;
335 
336 typedef struct rad_memory_stats {
337  uint64_t allocations;
338  uint64_t frees;
339  uint64_t bytes_allocated;
340  uint64_t bytes_freed;
341  uint64_t bytes_live;
342  uint64_t peak_bytes_live;
344 
345 typedef struct rad_perf_counter_info {
347  uint64_t value;
349 
350 typedef struct rad_timer_source_config {
351  uint32_t size;
352  const char *name;
353  uint32_t frequency_hz;
356 
357 typedef struct rad_timer_source_ops {
358  void *context;
359  rad_status_t (*start_periodic)(void *context, uint32_t frequency_hz);
360  rad_status_t (*schedule_oneshot)(void *context, uint64_t delay_micros);
363 
364 typedef struct rad_timer_source_info {
366  uint32_t frequency_hz;
368  int active;
369  uint64_t ticks;
371 
372 typedef struct rad_task_info {
373  uint64_t id;
374  char name[64];
375  int running;
376  int finished;
380  int priority;
381  size_t stack_size;
382  int detached;
384 
385 typedef struct rad_task_config {
386  uint32_t size;
387  const char *name;
388  size_t stack_size;
390  int priority;
393 
394 typedef struct rad_core_info {
395  uint32_t detected_cores;
396  uint32_t worker_cores;
397  uint32_t service_core;
400 
401 typedef enum rad_scheduler_mode {
405 
406 typedef struct rad_scheduler_info {
407  uint32_t detected_cores;
409  uint32_t running_threads;
410  uint32_t ready_threads;
411  uint32_t blocked_threads;
413  uint32_t exited_threads;
414  uint32_t process_count;
417  char arch[32];
419  uint32_t current_core;
422  uint64_t scheduler_ticks;
424 
432 
433 typedef struct rad_tree_node_handle *rad_tree_node_t;
434 
435 typedef struct rad_tree_node_info {
440  int bound;
442 
443 typedef struct rad_overlay_info {
446  uint32_t node_count;
447  uint32_t property_count;
449 
450 typedef struct rad_vfs_stat {
451  uint64_t size;
453  uint32_t mode;
454  uint64_t mtime_millis;
456 
457 typedef struct rad_block_info {
458  uint32_t size;
459  uint32_t sector_size;
460  uint64_t sector_count;
461  uint32_t flags;
462  uint32_t reserved;
464 
465 typedef struct rad_block_request {
466  uint32_t size;
467  uint64_t sector;
468  uint32_t sector_count;
469  void *buffer;
471 
472 typedef struct rad_mac_address {
473  uint8_t bytes[6];
475 
476 typedef struct rad_ipv4_address {
477  uint8_t bytes[4];
479 
480 typedef struct rad_net_packet {
481  uint32_t size;
482  const void *data;
483  size_t length;
485 
486 typedef struct rad_net_link_info {
487  uint32_t size;
489  uint32_t mtu;
490  int link_up;
491  uint64_t tx_packets;
492  uint64_t rx_packets;
494 
495 typedef struct rad_posix_timeval {
496  int64_t tv_sec;
497  int64_t tv_usec;
499 
500 typedef struct rad_process_info {
501  int32_t pid;
502  int32_t parent_pid;
503  int32_t exited;
504  int32_t exit_code;
506  char path[128];
508 
509 typedef struct rad_process_arch_ops {
510  uint32_t size;
511  void *context;
512  int32_t (*fork_from_frame)(void *context, void *trap_frame);
513  void (*process_reaped)(void *context, int32_t pid, int32_t status);
515 
516 typedef struct rad_vfs_dirent {
517  char name[96];
520 
521 typedef int (*rad_vfs_list_callback_t)(const char *name, const rad_vfs_stat_t *stat, void *context);
522 
523 typedef struct rad_vfs_backend_ops {
524  void *context;
525  rad_status_t (*open)(void *context, const char *path, uint32_t flags, void **file);
526  rad_status_t (*read)(void *file, void *buffer, size_t size, size_t *bytes_read);
527  rad_status_t (*write)(void *file, const void *buffer, size_t size, size_t *bytes_written);
528  rad_status_t (*seek)(void *file, int64_t offset, rad_seek_origin_t origin);
529  uint64_t (*tell)(void *file);
530  void (*close)(void *file);
531  rad_status_t (*stat)(void *context, const char *path, rad_vfs_stat_t *stat);
532  rad_status_t (*list)(void *context, const char *path, rad_vfs_list_callback_t callback, void *callback_context);
533  rad_status_t (*mkdir)(void *context, const char *path);
534  rad_status_t (*remove)(void *context, const char *path);
535  rad_status_t (*rename)(void *context, const char *old_path, const char *new_path);
536  rad_status_t (*rmdir)(void *context, const char *path);
538 
539 typedef enum rad_program_state {
545 
546 typedef struct rad_program_info {
547  uint64_t id;
548  char path[128];
549  char name[64];
551  uint64_t task_id;
554 
555 typedef struct rad_device_ops {
556  void *context;
557  rad_status_t (*read)(void *context, void *buffer, size_t size, size_t *bytes_read);
558  rad_status_t (*write)(void *context, const void *buffer, size_t size, size_t *bytes_written);
559  rad_status_t (*ioctl)(void *context, uint32_t request, void *argument);
561 
562 typedef struct rad_input_event {
563  uint32_t size;
565  uint32_t code;
566  uint32_t codepoint;
567  uint32_t modifiers;
568  uint8_t pressed;
569  uint8_t repeat;
570  uint16_t reserved;
571  int32_t x;
572  int32_t y;
573  int32_t dx;
574  int32_t dy;
575  int32_t scroll_x;
576  int32_t scroll_y;
577  uint32_t buttons;
579 
580 typedef struct rad_framebuffer_rect {
581  uint32_t x;
582  uint32_t y;
583  uint32_t width;
584  uint32_t height;
586 
587 typedef struct rad_framebuffer_info {
588  uint32_t size;
589  uint32_t width;
590  uint32_t height;
591  uint32_t stride_bytes;
593  void *pixels;
595 
596 typedef struct rad_display_mode {
597  uint32_t width;
598  uint32_t height;
599  uint32_t refresh_hz;
600  uint32_t stride_bytes;
603 
604 typedef struct rad_framebuffer_ops {
605  void *context;
608  rad_status_t (*blank)(void *context, int blanked);
609  uint64_t (*get_vsync_counter)(void *context);
611 
612 typedef struct rad_framebuffer_handle *rad_framebuffer_t;
613 
614 typedef struct rad_framebuffer_config {
615  uint32_t size;
616  const char *name;
619  const char *connector;
620  uint32_t mode_count;
621  uint32_t preferred_mode;
623  int primary;
625 
627  uint32_t size;
632  uint32_t mode_count;
633  uint32_t preferred_mode;
634  uint32_t current_mode;
636  int primary;
638 
639 typedef struct rad_i2c_transfer {
640  uint8_t address;
641  const uint8_t *write_data;
642  size_t write_size;
643  uint8_t *read_data;
644  size_t read_size;
646 
647 typedef struct rad_i2c_bus_handle *rad_i2c_bus_t;
648 typedef struct rad_i2c_device rad_i2c_device_t;
649 
650 typedef struct rad_i2c_controller_ops {
651  void *context;
654 
656  uint32_t size;
657  uint32_t bus_id;
658  const char *name;
659  const char *tree_path;
660  uint32_t clock_hz;
661  uint8_t sda_gpio;
662  uint8_t scl_gpio;
664 
665 typedef struct rad_i2c_driver {
666  uint32_t size;
667  const char *name;
668  const char *compatible;
669  void *context;
671  void (*remove)(void *context, rad_i2c_device_t *device);
673 
674 typedef struct rad_spi_transfer {
675  const uint8_t *tx_data;
676  uint8_t *rx_data;
677  size_t size;
678  uint32_t speed_hz;
679  uint8_t mode;
680  uint8_t bits_per_word;
681  uint8_t cs;
682  uint8_t transfer_mode;
684 
685 typedef struct rad_spi_bus_handle *rad_spi_bus_t;
686 typedef struct rad_spi_device rad_spi_device_t;
687 
688 typedef struct rad_dma_channel_handle *rad_dma_channel_t;
689 
690 typedef struct rad_dma_transfer {
691  uint32_t size;
694  const void *source;
695  void *destination;
697  uint32_t flags;
699 
700 typedef struct rad_dma_backend_ops {
701  void *context;
702  rad_status_t (*request)(void *context, rad_dma_request_id_t request_id, void **backend_channel);
703  void (*release)(void *context, void *backend_channel);
704  rad_status_t (*submit)(void *context, void *backend_channel, const rad_dma_transfer_t *transfer);
705  rad_status_t (*wait)(void *context, void *backend_channel, uint32_t timeout_ms);
706  rad_status_t (*cancel)(void *context, void *backend_channel);
708 
710  uint32_t size;
711  const char *name;
712  uint32_t channel_count;
714 
715 typedef struct rad_spi_controller_ops {
716  void *context;
720 
722  uint32_t size;
723  uint32_t bus_id;
724  const char *name;
725  const char *tree_path;
726  uint32_t clock_hz;
727  uint8_t sck_gpio;
728  uint8_t tx_gpio;
729  uint8_t rx_gpio;
730  uint8_t cs_gpio;
732 
733 typedef struct rad_spi_driver {
734  uint32_t size;
735  const char *name;
736  const char *compatible;
737  void *context;
739  void (*remove)(void *context, rad_spi_device_t *device);
741 
742 typedef struct rad_module_descriptor {
743  uint32_t size;
744  const char *name;
745  const char *bus;
746  const char *compatible;
748  void (*exit)(void *context);
749  void *context;
751 
752 typedef enum rad_module_state {
758 
759 typedef struct rad_module_info {
764  int32_t last_status;
766 
767 typedef struct rad_driver_info {
773 
774 typedef struct rad_irq_domain_handle *rad_irq_domain_t;
775 
776 typedef struct rad_irq_domain_config {
777  uint32_t size;
778  const char *name;
779  const char *tree_path;
780  uint32_t interrupt_base;
781  uint32_t line_count;
782  uint32_t interrupt_cells;
784 
785 typedef struct rad_irq_resource {
786  uint32_t irq;
787  uint32_t line;
788  uint32_t flags;
793 
794 typedef struct rad_i2c_device_info {
795  uint32_t bus_id;
796  uint8_t address;
797  uint32_t irq_count;
802  int bound;
804 
805 typedef struct rad_spi_device_info {
806  uint32_t bus_id;
807  uint8_t cs;
808  uint32_t clock_hz;
809  uint8_t mode;
810  uint8_t bits_per_word;
811  uint8_t transfer_mode;
812  uint32_t irq_count;
817  int bound;
819 
820 typedef struct rad_dma_channel_info {
822  uint32_t index;
823  uint32_t request_id;
825  int active;
827 
828 typedef struct rad_irq_info {
829  uint32_t irq;
832  int enabled;
833  uint64_t count;
834  uint64_t unhandled_count;
836 
837 typedef struct rad_audio_format {
838  uint32_t sample_rate;
839  uint16_t channels;
840  uint16_t bits_per_sample;
842 
843 typedef struct rad_serial_config {
844  uint32_t baud_rate;
845  uint8_t data_bits;
846  uint8_t stop_bits;
847  uint8_t parity;
848  uint8_t flow_control;
850 
851 typedef struct rad_sd_config {
853  const char *device_name;
854  const char *mount_point;
855  uint8_t spi_instance;
856  uint8_t sck_gpio;
857  uint8_t tx_gpio;
858  uint8_t rx_gpio;
859  uint8_t cs_gpio;
860  uint8_t pio_instance;
861  uint8_t sdio_clk_gpio;
862  uint8_t sdio_cmd_gpio;
863  uint8_t sdio_dat0_gpio;
866 
867 typedef void (*rad_task_entry_t)(void *context);
868 typedef void (*rad_terminal_write_t)(const char *text, void *context);
869 typedef rad_status_t (*rad_terminal_handler_t)(int argc, const char **argv, rad_terminal_write_t write, void *write_context, void *command_context);
870 typedef void (*rad_tty_output_t)(const void *data, size_t size, void *context);
871 typedef void (*rad_irq_handler_t)(uint32_t irq, void *context);
872 typedef void (*rad_work_handler_t)(void *context);
873 
874 typedef struct rad_task_handle *rad_task_t;
875 typedef struct rad_mutex_handle *rad_mutex_t;
876 typedef struct rad_event_handle *rad_event_t;
877 typedef struct rad_wait_queue_handle *rad_wait_queue_t;
878 typedef struct rad_input_queue_handle *rad_input_queue_t;
879 typedef struct rad_file_handle *rad_file_t;
880 typedef struct rad_dir_handle *rad_dir_t;
881 typedef struct rad_device_handle *rad_device_t;
882 typedef struct rad_program_handle *rad_program_t;
883 typedef struct rad_tty_handle *rad_tty_t;
884 typedef struct rad_pty_handle *rad_pty_t;
885 
886 typedef struct rad_tty_window_size {
887  uint16_t rows;
888  uint16_t columns;
890 
894 const char *rad_kernel_backend_name(void);
895 const char *rad_kernel_version_string(void);
900 int rad_vprintk(const char *format, va_list args);
901 int rad_printk(const char *format, ...);
902 int rad_early_vprintk(const char *format, va_list args);
903 int rad_early_printk(const char *format, ...);
904 void rad_debug_marker(const char *marker);
908 void rad_cpu_idle(void);
912 const char *rad_boot_arg_get(const char *key);
913 
914 uint64_t rad_time_micros(void);
915 uint64_t rad_time_millis(void);
916 void rad_sleep_ms(uint32_t milliseconds);
917 void rad_sleep_us(uint32_t microseconds);
918 uint64_t rad_perf_now_cycles(void);
919 void rad_perf_counter_add(const char *name, uint64_t delta);
920 size_t rad_perf_counter_list(rad_perf_counter_info_t *counters, size_t capacity);
921 rad_status_t rad_work_submit(const char *name, rad_work_handler_t handler, void *context);
922 rad_status_t rad_work_poll(size_t budget, size_t *ran);
930 void rad_timer_tick(uint64_t elapsed_micros);
933 size_t rad_timer_list(rad_timer_source_info_t *timers, size_t capacity);
934 
935 rad_status_t rad_task_create(rad_task_t *task, const char *name, rad_task_entry_t entry, void *context, size_t stack_size);
939 uint64_t rad_task_current_id(void);
941 void rad_task_yield(void);
942 void rad_task_sleep_ms(uint32_t milliseconds);
943 void rad_task_sleep_us(uint32_t microseconds);
944 size_t rad_task_list(rad_task_info_t *tasks, size_t capacity);
951 
956 
957 rad_status_t rad_event_create(rad_event_t *event, int initially_signaled);
959 rad_status_t rad_event_wait(rad_event_t event, uint32_t timeout_ms);
962 
963 void *rad_memory_alloc(size_t size);
964 void rad_memory_free(void *pointer);
966 
967 rad_status_t rad_vfs_mount_host(const char *mount_point, const char *host_path);
969 rad_status_t rad_vfs_mount_provider(const char *mount_point, const rad_vfs_backend_ops_t *ops);
970 rad_status_t rad_vfs_unmount(const char *mount_point);
971 rad_status_t rad_vfs_open(const char *path, uint32_t flags, rad_file_t *file);
972 rad_status_t rad_vfs_read(rad_file_t file, void *buffer, size_t size, size_t *bytes_read);
973 rad_status_t rad_vfs_write(rad_file_t file, const void *buffer, size_t size, size_t *bytes_written);
975 uint64_t rad_vfs_tell(rad_file_t file);
977 rad_status_t rad_vfs_stat(const char *path, rad_vfs_stat_t *stat);
978 rad_status_t rad_vfs_list(const char *path, rad_vfs_list_callback_t callback, void *context);
979 rad_status_t rad_vfs_mkdir(const char *path);
980 rad_status_t rad_vfs_remove(const char *path);
981 rad_status_t rad_vfs_rename(const char *old_path, const char *new_path);
982 rad_status_t rad_vfs_rmdir(const char *path);
983 rad_status_t rad_vfs_chdir(const char *path);
984 rad_status_t rad_vfs_getcwd(char *buffer, size_t size);
985 rad_status_t rad_vfs_opendir(const char *path, rad_dir_t *dir);
988 
991 int32_t rad_process_fork(void);
992 int32_t rad_process_execve(const char *path, const char *const argv[]);
993 int32_t rad_process_waitpid(int32_t pid, int32_t *status, uint32_t options);
994 void rad_process_exit(int32_t status);
995 size_t rad_process_list(rad_process_info_t *processes, size_t capacity);
996 int32_t rad_process_create(const char *path, int32_t parent_pid);
998 void rad_process_set_current_pid(int32_t pid);
999 rad_status_t rad_process_mark_exec(int32_t pid, const char *path);
1000 rad_status_t rad_process_clone_fds(int32_t parent_pid, int32_t child_pid);
1002 int32_t rad_process_fork_from_arch_frame(void *trap_frame);
1003 int32_t rad_process_reap(int32_t pid, int32_t *status);
1004 
1007 size_t rad_module_list(rad_module_info_t *modules, size_t capacity);
1008 
1009 rad_status_t rad_irq_register(uint32_t irq, const char *name, rad_irq_handler_t handler, void *context);
1014 size_t rad_irq_list(rad_irq_info_t *irqs, size_t capacity);
1017 rad_status_t rad_irq_domain_find(const char *tree_path, rad_irq_domain_t *domain);
1018 size_t rad_irq_resolve_tree(rad_tree_node_t node, rad_irq_resource_t *resources, size_t capacity);
1021 rad_status_t rad_irq_resource_register_handler(const rad_irq_resource_t *resource, const char *name, rad_irq_handler_t handler, void *context);
1022 
1023 int32_t rad_fd_open(const char *path, uint32_t flags);
1024 int32_t rad_fd_close(int32_t fd);
1025 intptr_t rad_fd_read(int32_t fd, void *buffer, size_t size);
1026 intptr_t rad_fd_write(int32_t fd, const void *buffer, size_t size);
1027 int64_t rad_fd_lseek(int32_t fd, int64_t offset, rad_seek_origin_t origin);
1028 int32_t rad_fd_ioctl(int32_t fd, uint32_t request, void *argument);
1029 int32_t rad_fd_stat(const char *path, rad_vfs_stat_t *stat);
1030 int32_t rad_fd_fstat(int32_t fd, rad_vfs_stat_t *stat);
1031 int32_t rad_fd_dup(int32_t fd);
1032 int32_t rad_fd_dup2(int32_t old_fd, int32_t new_fd);
1033 int32_t rad_fd_fcntl(int32_t fd, uint32_t command, uintptr_t argument);
1034 int32_t rad_pipe_create(int32_t pipefd[2]);
1035 
1036 intptr_t rad_syscall_dispatch(uintptr_t number, uintptr_t arg0, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5);
1037 
1038 rad_status_t rad_program_load(const char *path, rad_program_t *program);
1039 rad_status_t rad_program_spawn(rad_program_t program, int argc, const char **argv, rad_task_t *task);
1041 size_t rad_program_list(rad_program_info_t *programs, size_t capacity);
1042 
1043 rad_status_t rad_overlay_load_memory(const void *data, size_t size);
1046 size_t rad_overlay_list(rad_overlay_info_t *overlays, size_t capacity);
1047 size_t rad_tree_list(rad_tree_node_info_t *nodes, size_t capacity);
1048 rad_tree_node_t rad_tree_find(const char *path);
1049 rad_status_t rad_tree_get_property_u32(rad_tree_node_t node, const char *name, uint32_t *value);
1050 size_t rad_tree_get_property_u32_array(rad_tree_node_t node, const char *name, uint32_t *values, size_t capacity);
1051 rad_status_t rad_tree_get_property_bool(rad_tree_node_t node, const char *name, int *value);
1052 rad_status_t rad_tree_get_property_string(rad_tree_node_t node, const char *name, char *buffer, size_t size);
1053 
1056 rad_status_t rad_device_open(const char *name, rad_device_t *device);
1058 rad_status_t rad_device_read(rad_device_t device, void *buffer, size_t size, size_t *bytes_read);
1059 rad_status_t rad_device_write(rad_device_t device, const void *buffer, size_t size, size_t *bytes_written);
1060 rad_status_t rad_device_ioctl(rad_device_t device, uint32_t request, void *argument);
1061 size_t rad_device_list(char names[][64], rad_device_type_t *types, size_t capacity);
1062 
1065 rad_status_t rad_input_open(const char *name, rad_device_t *device);
1067 rad_status_t rad_input_queue_create(const char *name, size_t capacity, rad_input_queue_t *queue);
1070 rad_status_t rad_input_queue_read(rad_input_queue_t queue, rad_input_event_t *events, size_t capacity, uint32_t timeout_ms, size_t *count);
1072 
1074 rad_status_t rad_block_open(const char *name, rad_device_t *device);
1076 rad_status_t rad_block_read(rad_device_t device, uint64_t sector, uint32_t sector_count, void *buffer);
1077 rad_status_t rad_block_write(rad_device_t device, uint64_t sector, uint32_t sector_count, const void *buffer);
1080 rad_status_t rad_net_open(const char *name, rad_device_t *device);
1082 rad_status_t rad_net_send(rad_device_t device, const void *data, size_t length);
1084 
1088 rad_status_t rad_framebuffer_open(const char *name, rad_framebuffer_t *framebuffer);
1094 rad_status_t rad_framebuffer_set_mode(rad_framebuffer_t framebuffer, uint32_t mode_index);
1098 rad_status_t rad_framebuffer_draw_text(rad_framebuffer_t framebuffer, uint32_t cell_x, uint32_t cell_y, const char *text, uint32_t foreground, uint32_t background);
1100 size_t rad_framebuffer_list(rad_framebuffer_info_t *framebuffers, char names[][64], size_t capacity);
1101 size_t rad_framebuffer_list_ex(rad_framebuffer_display_info_t *framebuffers, size_t capacity);
1102 
1111 rad_status_t rad_i2c_device_open(uint32_t bus_id, uint8_t address, rad_i2c_device_t **device);
1116 size_t rad_i2c_list_devices(rad_i2c_device_info_t *devices, size_t capacity);
1118 
1126 rad_status_t rad_spi_device_open(uint32_t bus_id, uint8_t cs, rad_spi_device_t **device);
1131 size_t rad_spi_list_devices(rad_spi_device_info_t *devices, size_t capacity);
1133 
1139 rad_status_t rad_dma_wait(rad_dma_channel_t channel, uint32_t timeout_ms);
1141 size_t rad_dma_list_channels(rad_dma_channel_info_t *channels, size_t capacity);
1142 
1143 size_t rad_driver_list(rad_driver_info_t *drivers, size_t capacity);
1146 
1147 rad_status_t rad_tty_open(const char *name, rad_tty_t *tty);
1149 rad_status_t rad_tty_read(rad_tty_t tty, void *buffer, size_t size, size_t *bytes_read);
1150 rad_status_t rad_tty_write(rad_tty_t tty, const void *buffer, size_t size, size_t *bytes_written);
1151 rad_status_t rad_tty_push_input(rad_tty_t tty, const void *buffer, size_t size, size_t *bytes_consumed);
1157 
1158 rad_status_t rad_pty_open_pair(const char *name, rad_pty_t *pty);
1160 rad_status_t rad_pty_read_master(rad_pty_t pty, void *buffer, size_t size, size_t *bytes_read);
1161 rad_status_t rad_pty_write_master(rad_pty_t pty, const void *buffer, size_t size, size_t *bytes_written);
1162 rad_status_t rad_pty_read_slave(rad_pty_t pty, void *buffer, size_t size, size_t *bytes_read);
1163 rad_status_t rad_pty_write_slave(rad_pty_t pty, const void *buffer, size_t size, size_t *bytes_written);
1165 rad_status_t rad_pty_slave_name(rad_pty_t pty, char *buffer, size_t size);
1166 
1167 rad_status_t rad_terminal_register_command(const char *name, const char *description, rad_terminal_handler_t handler, void *context);
1168 rad_status_t rad_terminal_execute(const char *line, rad_terminal_write_t write, void *write_context);
1170 rad_status_t rad_terminal_attach_device(const char *device_name);
1173 
1174 #if defined(__cplusplus)
1175 }
1176 
1177 #ifndef RADLIB_EMBEDDED_NO_CPP_WRAPPERS
1178 namespace RADEmbedded {
1179 
1180 class Kernel {
1181 public:
1182  static rad_status_t init(const char *backend = "linux_sim") {
1183  rad_kernel_config_t config{};
1184  config.backend_name = backend;
1185  return rad_kernel_init(&config);
1186  }
1187  static void shutdown() { rad_kernel_shutdown(); }
1188  static bool initialized() { return rad_kernel_is_initialized() != 0; }
1189  static std::string backendName() { return rad_kernel_backend_name(); }
1190  static std::string version() { return rad_kernel_version_string(); }
1191 };
1192 
1193 class Mutex {
1194 public:
1195  Mutex() { rad_mutex_create(&handle_); }
1196  ~Mutex() { rad_mutex_destroy(handle_); }
1197  Mutex(const Mutex&) = delete;
1198  Mutex& operator=(const Mutex&) = delete;
1199  rad_status_t lock() { return rad_mutex_lock(handle_); }
1200  rad_status_t unlock() { return rad_mutex_unlock(handle_); }
1201  rad_mutex_t native() const { return handle_; }
1202 private:
1203  rad_mutex_t handle_ = nullptr;
1204 };
1205 
1206 class Event {
1207 public:
1208  explicit Event(bool signaled = false) { rad_event_create(&handle_, signaled ? 1 : 0); }
1209  ~Event() { rad_event_destroy(handle_); }
1210  Event(const Event&) = delete;
1211  Event& operator=(const Event&) = delete;
1212  rad_status_t wait(uint32_t timeoutMs) { return rad_event_wait(handle_, timeoutMs); }
1213  rad_status_t signal() { return rad_event_signal(handle_); }
1214  rad_status_t reset() { return rad_event_reset(handle_); }
1215 private:
1216  rad_event_t handle_ = nullptr;
1217 };
1218 
1219 class File {
1220 public:
1221  File() = default;
1222  ~File() { close(); }
1223  File(const File&) = delete;
1224  File& operator=(const File&) = delete;
1225  bool open(const char *path, uint32_t flags) { close(); return rad_vfs_open(path, flags, &handle_) == RAD_STATUS_OK; }
1226  size_t read(void *buffer, size_t size) { size_t done = 0; rad_vfs_read(handle_, buffer, size, &done); return done; }
1227  size_t write(const void *buffer, size_t size) { size_t done = 0; rad_vfs_write(handle_, buffer, size, &done); return done; }
1228  void close() { if (handle_) { rad_vfs_close(handle_); handle_ = nullptr; } }
1229 private:
1230  rad_file_t handle_ = nullptr;
1231 };
1232 
1233 } // namespace RADEmbedded
1234 #endif
1235 #endif
1236 
1237 #endif
Backend & backend()
Returns the installed backend or throws when none is installed.
UniqueHandle< rad_file_t, rad_vfs_close > File
Definition: rad_cpp.h:70
rad_status_t rad_vfs_read(rad_file_t file, void *buffer, size_t size, size_t *bytes_read)
rad_status_t rad_i2c_device_transfer(rad_i2c_device_t *device, const rad_i2c_transfer_t *transfer)
void rad_task_sleep_ms(uint32_t milliseconds)
rad_module_state
Definition: radekernel.h:752
@ RAD_MODULE_EXITED
Definition: radekernel.h:756
@ RAD_MODULE_REGISTERED
Definition: radekernel.h:753
@ RAD_MODULE_FAILED
Definition: radekernel.h:755
@ RAD_MODULE_INITIALIZED
Definition: radekernel.h:754
struct rad_serial_config rad_serial_config_t
rad_status_t rad_input_queue_push(rad_input_queue_t queue, const rad_input_event_t *event)
rad_status_t rad_kernel_init(const rad_kernel_config_t *config)
rad_status_t rad_vfs_mount_sd(const rad_sd_config_t *config)
struct rad_spi_device_info rad_spi_device_info_t
rad_tree_property_type
Definition: radekernel.h:425
@ RAD_TREE_PROP_U32_ARRAY
Definition: radekernel.h:429
@ RAD_TREE_PROP_STRING
Definition: radekernel.h:428
@ RAD_TREE_PROP_STRING_ARRAY
Definition: radekernel.h:430
@ RAD_TREE_PROP_BOOL
Definition: radekernel.h:426
@ RAD_TREE_PROP_U32
Definition: radekernel.h:427
rad_status_t rad_framebuffer_register(const char *name, const rad_framebuffer_info_t *info, const rad_framebuffer_ops_t *ops)
rad_status_t rad_block_info(rad_device_t device, rad_block_info_t *info)
uint64_t rad_vfs_tell(rad_file_t file)
rad_status_t rad_vfs_open(const char *path, uint32_t flags, rad_file_t *file)
struct rad_framebuffer_config rad_framebuffer_config_t
void rad_perf_counter_add(const char *name, uint64_t delta)
#define RAD_COMPATIBLE_MAX
Definition: radekernel.h:79
struct rad_spi_device rad_spi_device_t
Definition: radekernel.h:686
rad_status_t rad_irq_dispatch(uint32_t irq)
size_t rad_module_list(rad_module_info_t *modules, size_t capacity)
#define RAD_IRQ_DOMAIN_NAME_MAX
Definition: radekernel.h:83
uint32_t rad_scheduler_current_core(void)
struct rad_framebuffer_ops rad_framebuffer_ops_t
int rad_task_current_core(void)
rad_status_t rad_dma_controller_register(const rad_dma_controller_config_t *config, const rad_dma_backend_ops_t *ops)
rad_status_t rad_module_unregister(const char *name)
rad_sd_mode
Definition: radekernel.h:240
@ RAD_SD_MODE_PIO_SDIO
Definition: radekernel.h:243
@ RAD_SD_MODE_SPI
Definition: radekernel.h:242
@ RAD_SD_MODE_AUTO
Definition: radekernel.h:241
rad_program_state
Definition: radekernel.h:539
@ RAD_PROGRAM_FAILED
Definition: radekernel.h:543
@ RAD_PROGRAM_LOADED
Definition: radekernel.h:540
@ RAD_PROGRAM_FINISHED
Definition: radekernel.h:542
@ RAD_PROGRAM_RUNNING
Definition: radekernel.h:541
rad_seek_origin
Definition: radekernel.h:168
@ RAD_SEEK_CUR
Definition: radekernel.h:170
@ RAD_SEEK_SET
Definition: radekernel.h:169
@ RAD_SEEK_END
Definition: radekernel.h:171
rad_status_t rad_timer_source_register(const rad_timer_source_config_t *config, const rad_timer_source_ops_t *ops)
int32_t rad_fd_dup(int32_t fd)
struct rad_spi_controller_config rad_spi_controller_config_t
enum rad_device_type rad_device_type_t
rad_status_t rad_pty_write_master(rad_pty_t pty, const void *buffer, size_t size, size_t *bytes_written)
#define RAD_FRAMEBUFFER_NAME_MAX
Definition: radekernel.h:85
size_t rad_device_list(char names[][64], rad_device_type_t *types, size_t capacity)
void rad_spi_bus_close(rad_spi_bus_t bus)
rad_status_t rad_framebuffer_open_primary(rad_framebuffer_t *framebuffer)
struct rad_framebuffer_rect rad_framebuffer_rect_t
enum rad_process_state rad_process_state_t
rad_status_t rad_block_flush(rad_device_t device)
rad_status_t rad_spi_controller_unregister(uint32_t bus_id)
rad_status_t rad_mutex_unlock(rad_mutex_t mutex)
struct rad_ipv4_address rad_ipv4_address_t
rad_status_t rad_net_poll(rad_device_t device)
int32_t rad_process_current_pid(void)
struct rad_irq_info rad_irq_info_t
rad_status_t rad_input_device_unregister(const char *name)
rad_status_t rad_task_create(rad_task_t *task, const char *name, rad_task_entry_t entry, void *context, size_t stack_size)
rad_status_t rad_spi_transfer_device(rad_device_t device, const rad_spi_transfer_t *transfer)
rad_status_t rad_vfs_mount_host(const char *mount_point, const char *host_path)
rad_status_t rad_framebuffer_flush(rad_framebuffer_t framebuffer, const rad_framebuffer_rect_t *rect)
rad_status_t rad_tree_get_property_u32(rad_tree_node_t node, const char *name, uint32_t *value)
struct rad_net_link_info rad_net_link_info_t
int32_t rad_process_fork(void)
rad_task_state
Definition: radekernel.h:292
@ RAD_TASK_BLOCKED
Definition: radekernel.h:297
@ RAD_TASK_DETACHED
Definition: radekernel.h:299
@ RAD_TASK_SLEEPING
Definition: radekernel.h:296
@ RAD_TASK_RUNNING
Definition: radekernel.h:295
@ RAD_TASK_FINISHED
Definition: radekernel.h:298
@ RAD_TASK_NEW
Definition: radekernel.h:293
@ RAD_TASK_READY
Definition: radekernel.h:294
enum rad_vfs_open_flags rad_vfs_open_flags_t
rad_status_t rad_framebuffer_register_ex(const rad_framebuffer_config_t *config, const rad_framebuffer_ops_t *ops)
struct rad_vfs_stat rad_vfs_stat_t
struct rad_irq_domain_handle * rad_irq_domain_t
Definition: radekernel.h:774
struct rad_device_handle * rad_device_t
Definition: radekernel.h:881
struct rad_pty_handle * rad_pty_t
Definition: radekernel.h:884
rad_tree_node_t rad_tree_find(const char *path)
struct rad_process_info rad_process_info_t
rad_status_t rad_terminal_register_command(const char *name, const char *description, rad_terminal_handler_t handler, void *context)
void rad_sleep_us(uint32_t microseconds)
int32_t rad_fd_fstat(int32_t fd, rad_vfs_stat_t *stat)
struct rad_file_handle * rad_file_t
Definition: radekernel.h:879
rad_status_t rad_scheduler_info_get(rad_scheduler_info_t *info)
int32_t rad_process_waitpid(int32_t pid, int32_t *status, uint32_t options)
struct rad_input_event rad_input_event_t
rad_status_t rad_spi_device_get_irq(const rad_spi_device_t *device, size_t index, rad_irq_resource_t *resource)
struct rad_wait_queue_handle * rad_wait_queue_t
Definition: radekernel.h:877
struct rad_module_info rad_module_info_t
#define RAD_TIMER_NAME_MAX
Definition: radekernel.h:89
rad_status_t rad_cpu_interrupts_disable(void)
rad_status_t rad_wait_queue_create(rad_wait_queue_t *queue)
struct rad_dma_backend_ops rad_dma_backend_ops_t
rad_status_t rad_pty_slave_name(rad_pty_t pty, char *buffer, size_t size)
int(* rad_vfs_list_callback_t)(const char *name, const rad_vfs_stat_t *stat, void *context)
Definition: radekernel.h:521
struct rad_mutex_handle * rad_mutex_t
Definition: radekernel.h:875
rad_status_t rad_spi_driver_unregister(const char *name)
rad_status_t rad_spi_controller_register(const rad_spi_controller_config_t *config, const rad_spi_controller_ops_t *ops)
struct rad_mac_address rad_mac_address_t
rad_status_t rad_input_read_event(rad_device_t device, rad_input_event_t *event)
rad_status_t rad_vfs_seek(rad_file_t file, int64_t offset, rad_seek_origin_t origin)
void(* rad_work_handler_t)(void *context)
Definition: radekernel.h:872
struct rad_dma_channel_info rad_dma_channel_info_t
struct rad_i2c_transfer rad_i2c_transfer_t
struct rad_framebuffer_handle * rad_framebuffer_t
Definition: radekernel.h:612
void rad_cpu_idle(void)
rad_status_t rad_kernel_run(void)
rad_status_t rad_event_create(rad_event_t *event, int initially_signaled)
#define RAD_PERF_NAME_MAX
Definition: radekernel.h:88
struct rad_i2c_controller_ops rad_i2c_controller_ops_t
rad_pixel_format
Definition: radekernel.h:235
@ RAD_PIXEL_FORMAT_XRGB8888
Definition: radekernel.h:237
@ RAD_PIXEL_FORMAT_RGB565
Definition: radekernel.h:236
struct rad_dir_handle * rad_dir_t
Definition: radekernel.h:880
void rad_i2c_bus_close(rad_i2c_bus_t bus)
void rad_i2c_device_close(rad_i2c_device_t *device)
void rad_dma_channel_release(rad_dma_channel_t channel)
enum rad_program_state rad_program_state_t
rad_status_t rad_tty_open(const char *name, rad_tty_t *tty)
void rad_sleep_ms(uint32_t milliseconds)
rad_status_t rad_irq_domain_register(const rad_irq_domain_config_t *config, rad_irq_domain_t *domain)
void rad_debug_marker(const char *marker)
rad_status_t rad_cpu_interrupts_enable(void)
rad_status_t rad_tty_set_window_size(rad_tty_t tty, const rad_tty_window_size_t *size)
size_t rad_irq_list(rad_irq_info_t *irqs, size_t capacity)
rad_status_t rad_tty_push_input(rad_tty_t tty, const void *buffer, size_t size, size_t *bytes_consumed)
size_t rad_framebuffer_list_ex(rad_framebuffer_display_info_t *framebuffers, size_t capacity)
int32_t rad_process_reap(int32_t pid, int32_t *status)
rad_status_t rad_dma_cancel(rad_dma_channel_t channel)
rad_status_t rad_dma_channel_request(rad_dma_request_id_t request_id, rad_dma_channel_t *channel)
enum rad_seek_origin rad_seek_origin_t
struct rad_timer_source_info rad_timer_source_info_t
intptr_t rad_syscall_dispatch(uintptr_t number, uintptr_t arg0, uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4, uintptr_t arg5)
int32_t rad_fd_close(int32_t fd)
rad_status_t rad_core_info_get(rad_core_info_t *info)
struct rad_spi_bus_handle * rad_spi_bus_t
Definition: radekernel.h:685
enum rad_task_state rad_task_state_t
rad_status_t rad_i2c_driver_register(const rad_i2c_driver_t *driver)
int32_t rad_process_create(const char *path, int32_t parent_pid)
rad_dma_request_id
Definition: radekernel.h:258
@ RAD_DMA_DREQ_SPI1_TX
Definition: radekernel.h:262
@ RAD_DMA_DREQ_NONE
Definition: radekernel.h:259
@ RAD_DMA_DREQ_SPI1_RX
Definition: radekernel.h:263
@ RAD_DMA_DREQ_SPI0_TX
Definition: radekernel.h:260
@ RAD_DMA_DREQ_SPI0_RX
Definition: radekernel.h:261
@ RAD_DMA_DREQ_RP2350_HSTX_TX
Definition: radekernel.h:264
rad_status_t rad_pty_resize(rad_pty_t pty, const rad_tty_window_size_t *size)
void rad_spi_device_close(rad_spi_device_t *device)
void rad_input_queue_destroy(rad_input_queue_t queue)
rad_status_t rad_net_send(rad_device_t device, const void *data, size_t length)
void rad_process_exit(int32_t status)
rad_status_t rad_framebuffer_unregister(const char *name)
rad_status_t rad_process_attach_task(int32_t pid, rad_task_t task)
enum rad_display_output_type rad_display_output_type_t
rad_status_t rad_mutex_create(rad_mutex_t *mutex)
rad_status_t rad_i2c_controller_register(const rad_i2c_controller_config_t *config, const rad_i2c_controller_ops_t *ops)
void rad_memory_get_stats(rad_memory_stats_t *stats)
rad_status_t rad_vfs_readdir(rad_dir_t dir, rad_vfs_dirent_t *entry)
rad_status_t rad_module_register(const rad_module_descriptor_t *descriptor)
int32_t rad_pipe_create(int32_t pipefd[2])
struct rad_net_packet rad_net_packet_t
rad_input_pointer_button_flags
Definition: radekernel.h:229
@ RAD_INPUT_POINTER_BUTTON_MIDDLE
Definition: radekernel.h:232
@ RAD_INPUT_POINTER_BUTTON_RIGHT
Definition: radekernel.h:231
@ RAD_INPUT_POINTER_BUTTON_LEFT
Definition: radekernel.h:230
rad_status_t rad_spi_device_transfer(rad_spi_device_t *device, const rad_spi_transfer_t *transfer)
size_t rad_program_list(rad_program_info_t *programs, size_t capacity)
rad_status_t rad_vfs_list(const char *path, rad_vfs_list_callback_t callback, void *context)
#define RAD_IRQ_MAX_RESOURCES
Definition: radekernel.h:84
size_t rad_i2c_device_irq_count(const rad_i2c_device_t *device)
rad_status_t rad_boot_info_set(const rad_boot_info_t *boot_info)
rad_status_t rad_device_write(rad_device_t device, const void *buffer, size_t size, size_t *bytes_written)
rad_status_t rad_vfs_rename(const char *old_path, const char *new_path)
struct rad_audio_format rad_audio_format_t
rad_status_t rad_i2c_transfer(rad_i2c_bus_t bus, const rad_i2c_transfer_t *transfer)
rad_status_t rad_tree_get_property_bool(rad_tree_node_t node, const char *name, int *value)
rad_status_t rad_vfs_opendir(const char *path, rad_dir_t *dir)
rad_status_t rad_overlay_load_file(const char *path)
int rad_printk(const char *format,...)
struct rad_boot_arg rad_boot_arg_t
struct rad_block_info rad_block_info_t
rad_status_t rad_block_open(const char *name, rad_device_t *device)
intptr_t rad_fd_read(int32_t fd, void *buffer, size_t size)
rad_status_t rad_vfs_mkdir(const char *path)
struct rad_tree_node_handle * rad_tree_node_t
Definition: radekernel.h:433
rad_status_t rad_pty_open_pair(const char *name, rad_pty_t *pty)
struct rad_tree_node_info rad_tree_node_info_t
void rad_task_detach(rad_task_t task)
rad_status_t rad_timer_source_unregister(const char *name)
enum rad_spi_transfer_mode rad_spi_transfer_mode_t
rad_status_t rad_irq_resource_enable(const rad_irq_resource_t *resource)
int64_t rad_fd_lseek(int32_t fd, int64_t offset, rad_seek_origin_t origin)
rad_posix_syscall
Definition: radekernel.h:110
@ RAD_SYSCALL_CLOSE
Definition: radekernel.h:114
@ RAD_SYSCALL_FCNTL
Definition: radekernel.h:133
@ RAD_SYSCALL_EXECVE
Definition: radekernel.h:123
@ RAD_SYSCALL_SHUTDOWN
Definition: radekernel.h:143
@ RAD_SYSCALL_FSTAT
Definition: radekernel.h:118
@ RAD_SYSCALL_WRITE
Definition: radekernel.h:112
@ RAD_SYSCALL_GETCWD
Definition: radekernel.h:130
@ RAD_SYSCALL_OPEN
Definition: radekernel.h:113
@ RAD_SYSCALL_LSEEK
Definition: radekernel.h:116
@ RAD_SYSCALL_WAITPID
Definition: radekernel.h:124
@ RAD_SYSCALL_DUP
Definition: radekernel.h:127
@ RAD_SYSCALL_PIPE
Definition: radekernel.h:132
@ RAD_SYSCALL_BRK
Definition: radekernel.h:131
@ RAD_SYSCALL_IOCTL
Definition: radekernel.h:115
@ RAD_SYSCALL_LISTEN
Definition: radekernel.h:139
@ RAD_SYSCALL_GETPID
Definition: radekernel.h:125
@ RAD_SYSCALL_CONNECT
Definition: radekernel.h:138
@ RAD_SYSCALL_SOCKET
Definition: radekernel.h:136
@ RAD_SYSCALL_SENDTO
Definition: radekernel.h:141
@ RAD_SYSCALL_DUP2
Definition: radekernel.h:128
@ RAD_SYSCALL_ISATTY
Definition: radekernel.h:135
@ RAD_SYSCALL_RECVFROM
Definition: radekernel.h:142
@ RAD_SYSCALL_GETSOCKOPT
Definition: radekernel.h:145
@ RAD_SYSCALL_NANOSLEEP
Definition: radekernel.h:120
@ RAD_SYSCALL_ACCESS
Definition: radekernel.h:134
@ RAD_SYSCALL_STAT
Definition: radekernel.h:117
@ RAD_SYSCALL_GETTIMEOFDAY
Definition: radekernel.h:119
@ RAD_SYSCALL_ACCEPT
Definition: radekernel.h:140
@ RAD_SYSCALL_SETSOCKOPT
Definition: radekernel.h:144
@ RAD_SYSCALL_BIND
Definition: radekernel.h:137
@ RAD_SYSCALL_FORK
Definition: radekernel.h:122
@ RAD_SYSCALL_EXIT
Definition: radekernel.h:121
@ RAD_SYSCALL_READ
Definition: radekernel.h:111
@ RAD_SYSCALL_CHDIR
Definition: radekernel.h:129
@ RAD_SYSCALL_GETPPID
Definition: radekernel.h:126
rad_status_t rad_device_register(const char *name, rad_device_type_t type, const rad_device_ops_t *ops)
rad_status_t rad_vfs_remove(const char *path)
rad_status_t rad_tty_set_output_callback(rad_tty_t tty, rad_tty_output_t output, void *context)
rad_status_t rad_terminal_poll_tty(rad_tty_t tty)
enum rad_dma_transfer_type rad_dma_transfer_type_t
rad_status_t rad_vfs_chdir(const char *path)
rad_tty_mode_flags
Definition: radekernel.h:275
@ RAD_TTY_MODE_CANONICAL
Definition: radekernel.h:276
@ RAD_TTY_MODE_CRLF
Definition: radekernel.h:278
@ RAD_TTY_MODE_ECHO
Definition: radekernel.h:277
void(* rad_tty_output_t)(const void *data, size_t size, void *context)
Definition: radekernel.h:870
rad_status_t rad_mutex_lock(rad_mutex_t mutex)
int32_t rad_process_execve(const char *path, const char *const argv[])
rad_status_t rad_device_ioctl(rad_device_t device, uint32_t request, void *argument)
rad_status_t rad_spi_driver_register(const rad_spi_driver_t *driver)
rad_status_t rad_net_open(const char *name, rad_device_t *device)
struct rad_dma_transfer rad_dma_transfer_t
void rad_program_unload(rad_program_t program)
struct rad_i2c_device_info rad_i2c_device_info_t
size_t rad_irq_resolve_tree(rad_tree_node_t node, rad_irq_resource_t *resources, size_t capacity)
struct rad_framebuffer_info rad_framebuffer_info_t
rad_status_t rad_pty_write_slave(rad_pty_t pty, const void *buffer, size_t size, size_t *bytes_written)
rad_status_t rad_input_device_register(const char *name, const rad_device_ops_t *ops)
#define RAD_DISPLAY_CONNECTOR_MAX
Definition: radekernel.h:86
struct rad_overlay_info rad_overlay_info_t
int32_t rad_fd_stat(const char *path, rad_vfs_stat_t *stat)
int rad_kernel_is_initialized(void)
intptr_t rad_fd_write(int32_t fd, const void *buffer, size_t size)
uint32_t rad_scheduler_online_core_mask(void)
rad_status_t rad_i2c_bind_tree(void)
rad_status_t rad_vfs_rmdir(const char *path)
#define RAD_TREE_MAX_PATH
Definition: radekernel.h:74
#define RAD_MODULE_NAME_MAX
Definition: radekernel.h:80
rad_dma_transfer_type
Definition: radekernel.h:252
@ RAD_DMA_MEMORY_TO_DEVICE
Definition: radekernel.h:254
@ RAD_DMA_MEMORY_TO_MEMORY
Definition: radekernel.h:253
@ RAD_DMA_DEVICE_TO_MEMORY
Definition: radekernel.h:255
rad_status_t rad_terminal_poll_attached(void)
size_t rad_driver_list(rad_driver_info_t *drivers, size_t capacity)
int32_t rad_process_parent_pid(void)
rad_status_t(* rad_terminal_handler_t)(int argc, const char **argv, rad_terminal_write_t write, void *write_context, void *command_context)
Definition: radekernel.h:869
rad_status_t rad_wait_queue_wait(rad_wait_queue_t queue, uint32_t timeout_ms)
rad_status_t rad_overlay_load_memory(const void *data, size_t size)
rad_status_t rad_block_device_register(const char *name, const rad_device_ops_t *ops)
#define RAD_TREE_MAX_PROPERTY_NAME
Definition: radekernel.h:73
rad_status_t rad_i2c_driver_unregister(const char *name)
void rad_scheduler_set_preemption_enabled(int enabled)
rad_status_t rad_irq_disable(uint32_t irq)
rad_status_t rad_kernel_poll(void)
struct rad_i2c_driver rad_i2c_driver_t
rad_input_event_type
Definition: radekernel.h:188
@ RAD_INPUT_EVENT_POINTER_SCROLL
Definition: radekernel.h:193
@ RAD_INPUT_EVENT_POINTER_BUTTON
Definition: radekernel.h:192
@ RAD_INPUT_EVENT_POINTER_MOTION
Definition: radekernel.h:191
@ RAD_INPUT_EVENT_NONE
Definition: radekernel.h:189
@ RAD_INPUT_EVENT_KEY
Definition: radekernel.h:190
rad_status_t rad_framebuffer_get_display_info(rad_framebuffer_t framebuffer, rad_framebuffer_display_info_t *info)
enum rad_tree_property_type rad_tree_property_type_t
size_t rad_dma_list_channels(rad_dma_channel_info_t *channels, size_t capacity)
int32_t rad_fd_dup2(int32_t old_fd, int32_t new_fd)
enum rad_input_key rad_input_key_t
struct rad_task_config rad_task_config_t
void rad_device_close(rad_device_t device)
struct rad_task_handle * rad_task_t
Definition: radekernel.h:874
struct rad_irq_resource rad_irq_resource_t
rad_status_t rad_framebuffer_draw_text(rad_framebuffer_t framebuffer, uint32_t cell_x, uint32_t cell_y, const char *text, uint32_t foreground, uint32_t background)
rad_status_t rad_input_queue_read(rad_input_queue_t queue, rad_input_event_t *events, size_t capacity, uint32_t timeout_ms, size_t *count)
rad_status_t rad_event_wait(rad_event_t event, uint32_t timeout_ms)
enum rad_irq_trigger rad_irq_trigger_t
rad_status_t rad_framebuffer_set_primary(const char *name)
rad_status_t rad_framebuffer_blank(rad_framebuffer_t framebuffer, int blanked)
int32_t rad_fd_fcntl(int32_t fd, uint32_t command, uintptr_t argument)
rad_status_t rad_tty_get_window_size(rad_tty_t tty, rad_tty_window_size_t *size)
rad_status_t rad_vfs_getcwd(char *buffer, size_t size)
rad_status_t rad_irq_enable(uint32_t irq)
void rad_tty_close(rad_tty_t tty)
rad_device_type
Definition: radekernel.h:174
@ RAD_DEVICE_PTY
Definition: radekernel.h:182
@ RAD_DEVICE_FRAMEBUFFER
Definition: radekernel.h:180
@ RAD_DEVICE_BLOCK
Definition: radekernel.h:184
@ RAD_DEVICE_SPI
Definition: radekernel.h:177
@ RAD_DEVICE_AUDIO
Definition: radekernel.h:178
@ RAD_DEVICE_TTY
Definition: radekernel.h:181
@ RAD_DEVICE_NETWORK
Definition: radekernel.h:185
@ RAD_DEVICE_INPUT
Definition: radekernel.h:183
@ RAD_DEVICE_I2C
Definition: radekernel.h:176
@ RAD_DEVICE_SERIAL
Definition: radekernel.h:179
@ RAD_DEVICE_GENERIC
Definition: radekernel.h:175
void rad_kernel_request_shutdown(void)
rad_status_t rad_dma_submit(rad_dma_channel_t channel, const rad_dma_transfer_t *transfer)
rad_status
Definition: radekernel.h:98
@ RAD_STATUS_NOT_INITIALIZED
Definition: radekernel.h:107
@ RAD_STATUS_ERROR
Definition: radekernel.h:100
@ RAD_STATUS_NO_MEMORY
Definition: radekernel.h:103
@ RAD_STATUS_NOT_SUPPORTED
Definition: radekernel.h:105
@ RAD_STATUS_NOT_FOUND
Definition: radekernel.h:102
@ RAD_STATUS_ALREADY_EXISTS
Definition: radekernel.h:106
@ RAD_STATUS_INVALID_ARGUMENT
Definition: radekernel.h:101
@ RAD_STATUS_TIMEOUT
Definition: radekernel.h:104
@ RAD_STATUS_OK
Definition: radekernel.h:99
uint64_t rad_time_micros(void)
uint64_t rad_time_millis(void)
rad_status_t rad_event_signal(rad_event_t event)
const char * rad_kernel_version_string(void)
void rad_pty_close(rad_pty_t pty)
void rad_framebuffer_close(rad_framebuffer_t framebuffer)
rad_status_t rad_tty_write(rad_tty_t tty, const void *buffer, size_t size, size_t *bytes_written)
struct rad_dma_channel_handle * rad_dma_channel_t
Definition: radekernel.h:688
rad_status_t rad_input_open(const char *name, rad_device_t *device)
void rad_timer_tick(uint64_t elapsed_micros)
size_t rad_terminal_command_count(void)
size_t rad_framebuffer_list(rad_framebuffer_info_t *framebuffers, char names[][64], size_t capacity)
struct rad_driver_info rad_driver_info_t
rad_status_t rad_terminal_attach_device(const char *device_name)
enum rad_posix_syscall rad_posix_syscall_t
#define RAD_BOOT_MAX_ARGS
Definition: radekernel.h:67
struct rad_module_descriptor rad_module_descriptor_t
rad_status_t rad_vfs_stat(const char *path, rad_vfs_stat_t *stat)
size_t rad_spi_device_irq_count(const rad_spi_device_t *device)
struct rad_timer_source_config rad_timer_source_config_t
rad_spi_transfer_mode
Definition: radekernel.h:246
@ RAD_SPI_TRANSFER_MODE_PIO
Definition: radekernel.h:248
@ RAD_SPI_TRANSFER_MODE_DMA
Definition: radekernel.h:249
@ RAD_SPI_TRANSFER_MODE_AUTO
Definition: radekernel.h:247
void(* rad_terminal_write_t)(const char *text, void *context)
Definition: radekernel.h:868
rad_status_t rad_overlay_apply_boot(void)
rad_irq_trigger
Definition: radekernel.h:281
@ RAD_IRQ_TRIGGER_NONE
Definition: radekernel.h:282
@ RAD_IRQ_TRIGGER_EDGE_FALLING
Definition: radekernel.h:284
@ RAD_IRQ_TRIGGER_LEVEL_LOW
Definition: radekernel.h:286
@ RAD_IRQ_TRIGGER_LEVEL_HIGH
Definition: radekernel.h:285
@ RAD_IRQ_TRIGGER_EDGE_RISING
Definition: radekernel.h:283
rad_status_t rad_i2c_transfer_device(rad_device_t device, const rad_i2c_transfer_t *transfer)
rad_status_t rad_wait_queue_wake_one(rad_wait_queue_t queue)
rad_status_t rad_input_device_register_queue(const char *name, rad_input_queue_t queue)
void rad_cpu_halt_forever(void)
struct rad_block_request rad_block_request_t
int rad_cpu_interrupts_enabled(void)
rad_status_t rad_event_reset(rad_event_t event)
int32_t rad_fd_ioctl(int32_t fd, uint32_t request, void *argument)
enum rad_input_pointer_button_flags rad_input_pointer_button_flags_t
struct rad_process_arch_ops rad_process_arch_ops_t
rad_status_t rad_process_arch_register(const rad_process_arch_ops_t *ops)
rad_status_t rad_framebuffer_get_vsync_counter(rad_framebuffer_t framebuffer, uint64_t *counter)
enum rad_sd_mode rad_sd_mode_t
enum rad_input_modifier_flags rad_input_modifier_flags_t
rad_status_t rad_irq_register(uint32_t irq, const char *name, rad_irq_handler_t handler, void *context)
int rad_vprintk(const char *format, va_list args)
void rad_event_destroy(rad_event_t event)
rad_status_t rad_spi_transfer(rad_spi_bus_t bus, const rad_spi_transfer_t *transfer)
rad_status_t rad_spi_device_open(uint32_t bus_id, uint8_t cs, rad_spi_device_t **device)
void rad_vfs_closedir(rad_dir_t dir)
void * rad_memory_alloc(size_t size)
rad_status_t rad_pty_read_master(rad_pty_t pty, void *buffer, size_t size, size_t *bytes_read)
void rad_task_yield(void)
rad_status_t rad_audio_configure(rad_device_t device, const rad_audio_format_t *format)
uint64_t rad_task_current_id(void)
void rad_scheduler_yield_from_irq(void)
rad_status_t rad_block_read(rad_device_t device, uint64_t sector, uint32_t sector_count, void *buffer)
size_t rad_spi_list_devices(rad_spi_device_info_t *devices, size_t capacity)
size_t rad_tree_list(rad_tree_node_info_t *nodes, size_t capacity)
rad_status_t rad_irq_unregister(uint32_t irq)
size_t rad_process_list(rad_process_info_t *processes, size_t capacity)
struct rad_timer_source_ops rad_timer_source_ops_t
rad_status_t rad_program_spawn(rad_program_t program, int argc, const char **argv, rad_task_t *task)
rad_status_t rad_process_mark_exec(int32_t pid, const char *path)
struct rad_posix_timeval rad_posix_timeval_t
void rad_wait_queue_destroy(rad_wait_queue_t queue)
size_t rad_task_list(rad_task_info_t *tasks, size_t capacity)
size_t rad_tree_get_property_u32_array(rad_tree_node_t node, const char *name, uint32_t *values, size_t capacity)
rad_process_state
Definition: radekernel.h:148
@ RAD_PROCESS_WAITING
Definition: radekernel.h:150
@ RAD_PROCESS_RUNNING
Definition: radekernel.h:149
@ RAD_PROCESS_ZOMBIE
Definition: radekernel.h:151
struct rad_display_mode rad_display_mode_t
struct rad_core_info rad_core_info_t
rad_status_t rad_device_unregister(const char *name)
struct rad_dma_controller_config rad_dma_controller_config_t
size_t rad_overlay_list(rad_overlay_info_t *overlays, size_t capacity)
rad_status_t rad_block_write(rad_device_t device, uint64_t sector, uint32_t sector_count, const void *buffer)
rad_status_t rad_work_submit(const char *name, rad_work_handler_t handler, void *context)
rad_status_t rad_framebuffer_clear(rad_framebuffer_t framebuffer, uint32_t color)
struct rad_memory_stats rad_memory_stats_t
void(* rad_task_entry_t)(void *context)
Definition: radekernel.h:867
rad_status_t rad_vfs_write(rad_file_t file, const void *buffer, size_t size, size_t *bytes_written)
enum rad_module_state rad_module_state_t
struct rad_boot_info rad_boot_info_t
struct rad_i2c_device rad_i2c_device_t
Definition: radekernel.h:648
rad_status_t rad_timer_schedule_oneshot(uint64_t delay_micros)
#define RAD_FRAMEBUFFER_MAX_MODES
Definition: radekernel.h:87
rad_status_t rad_framebuffer_get_info(rad_framebuffer_t framebuffer, rad_framebuffer_info_t *info)
struct rad_vfs_backend_ops rad_vfs_backend_ops_t
#define RAD_BOOT_MAX_STRING
Definition: radekernel.h:69
enum rad_dma_request_id rad_dma_request_id_t
int rad_kernel_is_shutdown_requested(void)
#define RAD_BOOT_MAX_MEMORY_REGIONS
Definition: radekernel.h:68
rad_status_t rad_framebuffer_open(const char *name, rad_framebuffer_t *framebuffer)
rad_status_t rad_serial_configure(rad_device_t device, const rad_serial_config_t *config)
rad_status_t rad_irq_resource_disable(const rad_irq_resource_t *resource)
rad_status_t rad_irq_resource_register_handler(const rad_irq_resource_t *resource, const char *name, rad_irq_handler_t handler, void *context)
struct rad_tty_handle * rad_tty_t
Definition: radekernel.h:883
rad_status_t rad_i2c_device_get_irq(const rad_i2c_device_t *device, size_t index, rad_irq_resource_t *resource)
rad_status_t rad_pty_read_slave(rad_pty_t pty, void *buffer, size_t size, size_t *bytes_read)
rad_status_t rad_input_queue_create(const char *name, size_t capacity, rad_input_queue_t *queue)
rad_status_t rad_timer_cancel_oneshot(void)
struct rad_program_handle * rad_program_t
Definition: radekernel.h:882
rad_status_t rad_tty_set_mode(rad_tty_t tty, uint32_t mode)
rad_status_t rad_dma_wait(rad_dma_channel_t channel, uint32_t timeout_ms)
rad_status_t rad_i2c_bus_open(uint32_t bus_id, rad_i2c_bus_t *bus)
const char * rad_kernel_backend_name(void)
rad_status_t rad_irq_domain_unregister(const char *tree_path)
struct rad_task_info rad_task_info_t
rad_status_t rad_vfs_unmount(const char *mount_point)
rad_scheduler_mode
Definition: radekernel.h:401
@ RAD_SCHEDULER_COOPERATIVE
Definition: radekernel.h:402
@ RAD_SCHEDULER_PREEMPTIVE
Definition: radekernel.h:403
int rad_early_printk(const char *format,...)
struct rad_sd_config rad_sd_config_t
int32_t rad_fd_open(const char *path, uint32_t flags)
struct rad_perf_counter_info rad_perf_counter_info_t
void rad_process_set_current_pid(int32_t pid)
struct rad_input_queue_handle * rad_input_queue_t
Definition: radekernel.h:878
rad_status_t rad_dma_controller_unregister(const char *name)
rad_input_key
Definition: radekernel.h:196
@ RAD_INPUT_KEY_UNKNOWN
Definition: radekernel.h:197
@ RAD_INPUT_KEY_UP
Definition: radekernel.h:202
@ RAD_INPUT_KEY_RIGHT_SHIFT
Definition: radekernel.h:213
@ RAD_INPUT_KEY_LEFT_ALT
Definition: radekernel.h:216
@ RAD_INPUT_KEY_RIGHT_CTRL
Definition: radekernel.h:215
@ RAD_INPUT_KEY_END
Definition: radekernel.h:207
@ RAD_INPUT_KEY_TAB
Definition: radekernel.h:201
@ RAD_INPUT_KEY_PAGE_UP
Definition: radekernel.h:208
@ RAD_INPUT_KEY_BACKSPACE
Definition: radekernel.h:200
@ RAD_INPUT_KEY_LEFT_CTRL
Definition: radekernel.h:214
@ RAD_INPUT_KEY_RIGHT_ALT
Definition: radekernel.h:217
@ RAD_INPUT_KEY_ENTER
Definition: radekernel.h:199
@ RAD_INPUT_KEY_INSERT
Definition: radekernel.h:210
@ RAD_INPUT_KEY_DELETE
Definition: radekernel.h:211
@ RAD_INPUT_KEY_ESCAPE
Definition: radekernel.h:198
@ RAD_INPUT_KEY_RIGHT
Definition: radekernel.h:205
@ RAD_INPUT_KEY_DOWN
Definition: radekernel.h:203
@ RAD_INPUT_KEY_LEFT
Definition: radekernel.h:204
@ RAD_INPUT_KEY_HOME
Definition: radekernel.h:206
@ RAD_INPUT_KEY_PAGE_DOWN
Definition: radekernel.h:209
@ RAD_INPUT_KEY_LEFT_SHIFT
Definition: radekernel.h:212
@ RAD_INPUT_KEY_CAPS_LOCK
Definition: radekernel.h:218
void(* rad_irq_handler_t)(uint32_t irq, void *context)
Definition: radekernel.h:871
#define RAD_IRQ_NAME_MAX
Definition: radekernel.h:82
int rad_early_vprintk(const char *format, va_list args)
rad_status_t rad_process_clone_fds(int32_t parent_pid, int32_t child_pid)
rad_status_t rad_tree_get_property_string(rad_tree_node_t node, const char *name, char *buffer, size_t size)
rad_status_t rad_wait_queue_wake_all(rad_wait_queue_t queue)
struct rad_scheduler_info rad_scheduler_info_t
struct rad_event_handle * rad_event_t
Definition: radekernel.h:876
rad_status_t rad_irq_domain_find(const char *tree_path, rad_irq_domain_t *domain)
rad_status_t rad_i2c_controller_unregister(uint32_t bus_id)
void rad_task_sleep_us(uint32_t microseconds)
int32_t rad_process_fork_from_arch_frame(void *trap_frame)
rad_vfs_open_flags
Definition: radekernel.h:160
@ RAD_VFS_READ
Definition: radekernel.h:161
@ RAD_VFS_WRITE
Definition: radekernel.h:162
@ RAD_VFS_CREATE
Definition: radekernel.h:163
@ RAD_VFS_APPEND
Definition: radekernel.h:165
@ RAD_VFS_TRUNCATE
Definition: radekernel.h:164
rad_status_t rad_net_device_register(const char *name, const rad_device_ops_t *ops)
rad_status_t rad_task_create_config(rad_task_t *task, const rad_task_config_t *config, rad_task_entry_t entry, void *context)
rad_status_t rad_tty_read(rad_tty_t tty, void *buffer, size_t size, size_t *bytes_read)
rad_status_t rad_terminal_execute(const char *line, rad_terminal_write_t write, void *write_context)
void rad_mutex_destroy(rad_mutex_t mutex)
rad_display_output_type
Definition: radekernel.h:267
@ RAD_DISPLAY_OUTPUT_GRUB
Definition: radekernel.h:270
@ RAD_DISPLAY_OUTPUT_SPI_PANEL
Definition: radekernel.h:272
@ RAD_DISPLAY_OUTPUT_MEMORY
Definition: radekernel.h:268
@ RAD_DISPLAY_OUTPUT_CIRCLE
Definition: radekernel.h:269
@ RAD_DISPLAY_OUTPUT_RP2350_HSTX
Definition: radekernel.h:271
struct rad_kernel_config rad_kernel_config_t
rad_status_t rad_net_link_info(rad_device_t device, rad_net_link_info_t *info)
enum rad_status rad_status_t
rad_status_t rad_work_poll(size_t budget, size_t *ran)
rad_status_t rad_device_open(const char *name, rad_device_t *device)
void rad_vfs_close(rad_file_t file)
enum rad_input_event_type rad_input_event_type_t
uint64_t rad_perf_now_cycles(void)
rad_status_t rad_program_load(const char *path, rad_program_t *program)
rad_status_t rad_device_read(rad_device_t device, void *buffer, size_t size, size_t *bytes_read)
rad_status_t rad_framebuffer_set_mode(rad_framebuffer_t framebuffer, uint32_t mode_index)
#define RAD_DRIVER_NAME_MAX
Definition: radekernel.h:78
struct rad_i2c_controller_config rad_i2c_controller_config_t
struct rad_i2c_bus_handle * rad_i2c_bus_t
Definition: radekernel.h:647
enum rad_tty_mode_flags rad_tty_mode_flags_t
struct rad_spi_driver rad_spi_driver_t
enum rad_pixel_format rad_pixel_format_t
rad_input_modifier_flags
Definition: radekernel.h:221
@ RAD_INPUT_MOD_CAPS_LOCK
Definition: radekernel.h:226
@ RAD_INPUT_MOD_META
Definition: radekernel.h:225
@ RAD_INPUT_MOD_CTRL
Definition: radekernel.h:223
@ RAD_INPUT_MOD_ALT
Definition: radekernel.h:224
@ RAD_INPUT_MOD_SHIFT
Definition: radekernel.h:222
rad_status_t rad_tty_get_mode(rad_tty_t tty, uint32_t *mode)
size_t rad_perf_counter_list(rad_perf_counter_info_t *counters, size_t capacity)
rad_status_t rad_boot_info_get(rad_boot_info_t *boot_info)
struct rad_spi_controller_ops rad_spi_controller_ops_t
struct rad_boot_memory_region rad_boot_memory_region_t
rad_status_t rad_vfs_mount_provider(const char *mount_point, const rad_vfs_backend_ops_t *ops)
void rad_kernel_shutdown(void)
size_t rad_timer_list(rad_timer_source_info_t *timers, size_t capacity)
const char * rad_boot_arg_get(const char *key)
struct rad_vfs_dirent rad_vfs_dirent_t
struct rad_framebuffer_display_info rad_framebuffer_display_info_t
enum rad_scheduler_mode rad_scheduler_mode_t
size_t rad_i2c_list_devices(rad_i2c_device_info_t *devices, size_t capacity)
rad_status_t rad_i2c_device_open(uint32_t bus_id, uint8_t address, rad_i2c_device_t **device)
struct rad_device_ops rad_device_ops_t
struct rad_tty_window_size rad_tty_window_size_t
rad_status_t rad_spi_bus_open(uint32_t bus_id, rad_spi_bus_t *bus)
struct rad_program_info rad_program_info_t
struct rad_irq_domain_config rad_irq_domain_config_t
struct rad_spi_transfer rad_spi_transfer_t
void rad_memory_free(void *pointer)
rad_status_t rad_task_join(rad_task_t task)
Definition: radekernel.h:837
uint16_t bits_per_sample
Definition: radekernel.h:840
uint32_t sample_rate
Definition: radekernel.h:838
uint16_t channels
Definition: radekernel.h:839
Definition: radekernel.h:457
uint32_t size
Definition: radekernel.h:458
uint32_t reserved
Definition: radekernel.h:462
uint32_t sector_size
Definition: radekernel.h:459
uint32_t flags
Definition: radekernel.h:461
uint64_t sector_count
Definition: radekernel.h:460
Definition: radekernel.h:465
uint64_t sector
Definition: radekernel.h:467
uint32_t size
Definition: radekernel.h:466
uint32_t sector_count
Definition: radekernel.h:468
void * buffer
Definition: radekernel.h:469
Definition: radekernel.h:307
char key[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:308
char value[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:309
Definition: radekernel.h:320
char console_device[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:325
uintptr_t fdt_pointer
Definition: radekernel.h:327
char sd_mode[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:326
uint32_t version
Definition: radekernel.h:322
char board[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:324
uint32_t arg_count
Definition: radekernel.h:332
rad_boot_arg_t args[RAD_BOOT_MAX_ARGS]
Definition: radekernel.h:333
uint32_t boot_flags
Definition: radekernel.h:329
uint32_t memory_region_count
Definition: radekernel.h:330
rad_boot_memory_region_t memory_regions[RAD_BOOT_MAX_MEMORY_REGIONS]
Definition: radekernel.h:331
char backend[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:323
uint32_t size
Definition: radekernel.h:321
uintptr_t initrd_pointer
Definition: radekernel.h:328
Definition: radekernel.h:312
uint64_t size
Definition: radekernel.h:314
uint32_t flags
Definition: radekernel.h:316
uint32_t type
Definition: radekernel.h:315
uint64_t base
Definition: radekernel.h:313
char name[RAD_BOOT_MAX_STRING]
Definition: radekernel.h:317
Definition: radekernel.h:394
uint32_t worker_running_mask
Definition: radekernel.h:398
uint32_t detected_cores
Definition: radekernel.h:395
uint32_t service_core
Definition: radekernel.h:397
uint32_t worker_cores
Definition: radekernel.h:396
Definition: radekernel.h:555
rad_status_t(* write)(void *context, const void *buffer, size_t size, size_t *bytes_written)
Definition: radekernel.h:558
void * context
Definition: radekernel.h:556
rad_status_t(* read)(void *context, void *buffer, size_t size, size_t *bytes_read)
Definition: radekernel.h:557
rad_status_t(* ioctl)(void *context, uint32_t request, void *argument)
Definition: radekernel.h:559
Definition: radekernel.h:596
rad_pixel_format_t pixel_format
Definition: radekernel.h:601
uint32_t width
Definition: radekernel.h:597
uint32_t refresh_hz
Definition: radekernel.h:599
uint32_t stride_bytes
Definition: radekernel.h:600
uint32_t height
Definition: radekernel.h:598
Definition: radekernel.h:700
rad_status_t(* request)(void *context, rad_dma_request_id_t request_id, void **backend_channel)
Definition: radekernel.h:702
rad_status_t(* submit)(void *context, void *backend_channel, const rad_dma_transfer_t *transfer)
Definition: radekernel.h:704
void * context
Definition: radekernel.h:701
rad_status_t(* cancel)(void *context, void *backend_channel)
Definition: radekernel.h:706
rad_status_t(* wait)(void *context, void *backend_channel, uint32_t timeout_ms)
Definition: radekernel.h:705
void(* release)(void *context, void *backend_channel)
Definition: radekernel.h:703
Definition: radekernel.h:820
char controller[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:821
uint32_t index
Definition: radekernel.h:822
int active
Definition: radekernel.h:825
uint32_t request_id
Definition: radekernel.h:823
int allocated
Definition: radekernel.h:824
Definition: radekernel.h:709
const char * name
Definition: radekernel.h:711
uint32_t size
Definition: radekernel.h:710
uint32_t channel_count
Definition: radekernel.h:712
Definition: radekernel.h:690
rad_dma_transfer_type_t type
Definition: radekernel.h:692
const void * source
Definition: radekernel.h:694
uint32_t flags
Definition: radekernel.h:697
uintptr_t peripheral_address
Definition: radekernel.h:696
rad_dma_request_id_t request_id
Definition: radekernel.h:693
void * destination
Definition: radekernel.h:695
uint32_t size
Definition: radekernel.h:691
Definition: radekernel.h:767
char name[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:768
char role[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:771
char compatible[RAD_COMPATIBLE_MAX]
Definition: radekernel.h:770
char bus[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:769
Definition: radekernel.h:614
rad_framebuffer_info_t info
Definition: radekernel.h:617
uint32_t size
Definition: radekernel.h:615
uint32_t mode_count
Definition: radekernel.h:620
const char * name
Definition: radekernel.h:616
uint32_t preferred_mode
Definition: radekernel.h:621
rad_display_output_type_t output_type
Definition: radekernel.h:618
const char * connector
Definition: radekernel.h:619
int primary
Definition: radekernel.h:623
rad_display_mode_t modes[RAD_FRAMEBUFFER_MAX_MODES]
Definition: radekernel.h:622
Definition: radekernel.h:626
char name[RAD_FRAMEBUFFER_NAME_MAX]
Definition: radekernel.h:628
rad_display_output_type_t output_type
Definition: radekernel.h:630
uint32_t mode_count
Definition: radekernel.h:632
uint32_t size
Definition: radekernel.h:627
rad_display_mode_t modes[RAD_FRAMEBUFFER_MAX_MODES]
Definition: radekernel.h:635
uint32_t current_mode
Definition: radekernel.h:634
char connector[RAD_DISPLAY_CONNECTOR_MAX]
Definition: radekernel.h:631
uint32_t preferred_mode
Definition: radekernel.h:633
int primary
Definition: radekernel.h:636
rad_framebuffer_info_t framebuffer
Definition: radekernel.h:629
Definition: radekernel.h:587
uint32_t width
Definition: radekernel.h:589
uint32_t stride_bytes
Definition: radekernel.h:591
rad_pixel_format_t pixel_format
Definition: radekernel.h:592
void * pixels
Definition: radekernel.h:593
uint32_t height
Definition: radekernel.h:590
uint32_t size
Definition: radekernel.h:588
Definition: radekernel.h:604
rad_status_t(* blank)(void *context, int blanked)
Definition: radekernel.h:608
rad_status_t(* flush)(void *context, const rad_framebuffer_rect_t *rect)
Definition: radekernel.h:606
rad_status_t(* set_mode)(void *context, const rad_display_mode_t *mode)
Definition: radekernel.h:607
uint64_t(* get_vsync_counter)(void *context)
Definition: radekernel.h:609
void * context
Definition: radekernel.h:605
Definition: radekernel.h:580
uint32_t height
Definition: radekernel.h:584
uint32_t width
Definition: radekernel.h:583
uint32_t x
Definition: radekernel.h:581
uint32_t y
Definition: radekernel.h:582
Definition: radekernel.h:655
uint32_t clock_hz
Definition: radekernel.h:660
uint8_t sda_gpio
Definition: radekernel.h:661
const char * name
Definition: radekernel.h:658
uint32_t bus_id
Definition: radekernel.h:657
const char * tree_path
Definition: radekernel.h:659
uint8_t scl_gpio
Definition: radekernel.h:662
uint32_t size
Definition: radekernel.h:656
Definition: radekernel.h:650
void * context
Definition: radekernel.h:651
rad_status_t(* transfer)(void *context, const rad_i2c_transfer_t *transfer)
Definition: radekernel.h:652
Definition: radekernel.h:794
char path[RAD_TREE_MAX_PATH]
Definition: radekernel.h:799
int bound
Definition: radekernel.h:802
rad_irq_resource_t irqs[RAD_IRQ_MAX_RESOURCES]
Definition: radekernel.h:798
char compatible[RAD_COMPATIBLE_MAX]
Definition: radekernel.h:800
uint8_t address
Definition: radekernel.h:796
uint32_t bus_id
Definition: radekernel.h:795
char driver[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:801
uint32_t irq_count
Definition: radekernel.h:797
Definition: radekernel.h:665
void(* remove)(void *context, rad_i2c_device_t *device)
Definition: radekernel.h:671
void * context
Definition: radekernel.h:669
const char * name
Definition: radekernel.h:667
const char * compatible
Definition: radekernel.h:668
rad_status_t(* probe)(void *context, rad_i2c_device_t *device)
Definition: radekernel.h:670
uint32_t size
Definition: radekernel.h:666
Definition: radekernel.h:639
size_t read_size
Definition: radekernel.h:644
size_t write_size
Definition: radekernel.h:642
uint8_t * read_data
Definition: radekernel.h:643
const uint8_t * write_data
Definition: radekernel.h:641
uint8_t address
Definition: radekernel.h:640
Definition: radekernel.h:562
int32_t dx
Definition: radekernel.h:573
uint32_t buttons
Definition: radekernel.h:577
int32_t scroll_x
Definition: radekernel.h:575
uint16_t reserved
Definition: radekernel.h:570
uint32_t size
Definition: radekernel.h:563
int32_t scroll_y
Definition: radekernel.h:576
uint32_t modifiers
Definition: radekernel.h:567
uint8_t repeat
Definition: radekernel.h:569
uint8_t pressed
Definition: radekernel.h:568
int32_t x
Definition: radekernel.h:571
uint32_t code
Definition: radekernel.h:565
int32_t y
Definition: radekernel.h:572
int32_t dy
Definition: radekernel.h:574
uint32_t codepoint
Definition: radekernel.h:566
rad_input_event_type_t type
Definition: radekernel.h:564
Definition: radekernel.h:476
uint8_t bytes[4]
Definition: radekernel.h:477
Definition: radekernel.h:776
const char * name
Definition: radekernel.h:778
uint32_t interrupt_base
Definition: radekernel.h:780
uint32_t size
Definition: radekernel.h:777
uint32_t line_count
Definition: radekernel.h:781
const char * tree_path
Definition: radekernel.h:779
uint32_t interrupt_cells
Definition: radekernel.h:782
Definition: radekernel.h:828
char name[RAD_IRQ_NAME_MAX]
Definition: radekernel.h:830
int registered
Definition: radekernel.h:831
int enabled
Definition: radekernel.h:832
uint64_t count
Definition: radekernel.h:833
uint32_t irq
Definition: radekernel.h:829
uint64_t unhandled_count
Definition: radekernel.h:834
Definition: radekernel.h:785
char controller_path[RAD_TREE_MAX_PATH]
Definition: radekernel.h:791
rad_irq_trigger_t trigger
Definition: radekernel.h:789
char domain[RAD_IRQ_DOMAIN_NAME_MAX]
Definition: radekernel.h:790
uint32_t irq
Definition: radekernel.h:786
uint32_t flags
Definition: radekernel.h:788
uint32_t line
Definition: radekernel.h:787
Definition: radekernel.h:302
const char * backend_name
Definition: radekernel.h:303
const void * boot_info
Definition: radekernel.h:304
Definition: radekernel.h:472
uint8_t bytes[6]
Definition: radekernel.h:473
Definition: radekernel.h:336
uint64_t bytes_live
Definition: radekernel.h:341
uint64_t peak_bytes_live
Definition: radekernel.h:342
uint64_t bytes_freed
Definition: radekernel.h:340
uint64_t frees
Definition: radekernel.h:338
uint64_t allocations
Definition: radekernel.h:337
uint64_t bytes_allocated
Definition: radekernel.h:339
Definition: radekernel.h:742
uint32_t size
Definition: radekernel.h:743
const char * compatible
Definition: radekernel.h:746
rad_status_t(* init)(void *context)
Definition: radekernel.h:747
void(* exit)(void *context)
Definition: radekernel.h:748
void * context
Definition: radekernel.h:749
const char * bus
Definition: radekernel.h:745
const char * name
Definition: radekernel.h:744
Definition: radekernel.h:759
int32_t last_status
Definition: radekernel.h:764
char name[RAD_MODULE_NAME_MAX]
Definition: radekernel.h:760
char bus[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:761
char compatible[RAD_COMPATIBLE_MAX]
Definition: radekernel.h:762
rad_module_state_t state
Definition: radekernel.h:763
Definition: radekernel.h:480
size_t length
Definition: radekernel.h:483
const void * data
Definition: radekernel.h:482
uint32_t size
Definition: radekernel.h:481
Definition: radekernel.h:443
uint32_t node_count
Definition: radekernel.h:446
char name[RAD_TREE_MAX_PROPERTY_NAME]
Definition: radekernel.h:444
uint32_t property_count
Definition: radekernel.h:447
char source[RAD_TREE_MAX_PATH]
Definition: radekernel.h:445
Definition: radekernel.h:345
char name[RAD_PERF_NAME_MAX]
Definition: radekernel.h:346
uint64_t value
Definition: radekernel.h:347
Definition: radekernel.h:495
int64_t tv_usec
Definition: radekernel.h:497
int64_t tv_sec
Definition: radekernel.h:496
Definition: radekernel.h:509
uint32_t size
Definition: radekernel.h:510
int32_t(* fork_from_frame)(void *context, void *trap_frame)
Definition: radekernel.h:512
void(* process_reaped)(void *context, int32_t pid, int32_t status)
Definition: radekernel.h:513
void * context
Definition: radekernel.h:511
Definition: radekernel.h:500
int32_t exit_code
Definition: radekernel.h:504
int32_t exited
Definition: radekernel.h:503
char path[128]
Definition: radekernel.h:506
rad_process_state_t state
Definition: radekernel.h:505
int32_t pid
Definition: radekernel.h:501
int32_t parent_pid
Definition: radekernel.h:502
Definition: radekernel.h:546
rad_program_state_t state
Definition: radekernel.h:550
uint64_t id
Definition: radekernel.h:547
char path[128]
Definition: radekernel.h:548
uint64_t task_id
Definition: radekernel.h:551
int exit_code
Definition: radekernel.h:552
char name[64]
Definition: radekernel.h:549
Definition: radekernel.h:406
uint32_t exited_threads
Definition: radekernel.h:413
uint32_t blocked_threads
Definition: radekernel.h:411
uint32_t online_core_mask
Definition: radekernel.h:418
int preemption_enabled
Definition: radekernel.h:420
uint32_t ready_threads
Definition: radekernel.h:410
uint64_t context_switches
Definition: radekernel.h:421
uint32_t sleeping_threads
Definition: radekernel.h:412
rad_scheduler_mode_t mode
Definition: radekernel.h:416
uint32_t running_threads
Definition: radekernel.h:409
uint32_t worker_running_mask
Definition: radekernel.h:408
char arch[32]
Definition: radekernel.h:417
uint32_t detected_cores
Definition: radekernel.h:407
uint64_t scheduler_ticks
Definition: radekernel.h:422
uint32_t process_count
Definition: radekernel.h:414
uint32_t current_core
Definition: radekernel.h:419
int preemption_supported
Definition: radekernel.h:415
Definition: radekernel.h:851
uint8_t rx_gpio
Definition: radekernel.h:858
const char * device_name
Definition: radekernel.h:853
uint8_t sck_gpio
Definition: radekernel.h:856
const char * mount_point
Definition: radekernel.h:854
uint8_t cs_gpio
Definition: radekernel.h:859
uint8_t sdio_clk_gpio
Definition: radekernel.h:861
uint8_t spi_instance
Definition: radekernel.h:855
rad_sd_mode_t mode
Definition: radekernel.h:852
uint8_t sdio_cmd_gpio
Definition: radekernel.h:862
uint8_t card_detect_gpio
Definition: radekernel.h:864
uint8_t sdio_dat0_gpio
Definition: radekernel.h:863
uint8_t tx_gpio
Definition: radekernel.h:857
uint8_t pio_instance
Definition: radekernel.h:860
Definition: radekernel.h:843
uint8_t stop_bits
Definition: radekernel.h:846
uint8_t parity
Definition: radekernel.h:847
uint8_t flow_control
Definition: radekernel.h:848
uint32_t baud_rate
Definition: radekernel.h:844
uint8_t data_bits
Definition: radekernel.h:845
Definition: radekernel.h:721
uint8_t sck_gpio
Definition: radekernel.h:727
uint32_t clock_hz
Definition: radekernel.h:726
const char * tree_path
Definition: radekernel.h:725
const char * name
Definition: radekernel.h:724
uint8_t cs_gpio
Definition: radekernel.h:730
uint32_t size
Definition: radekernel.h:722
uint8_t tx_gpio
Definition: radekernel.h:728
uint8_t rx_gpio
Definition: radekernel.h:729
uint32_t bus_id
Definition: radekernel.h:723
Definition: radekernel.h:715
void * context
Definition: radekernel.h:716
rad_status_t(* transfer_dma)(void *context, const rad_spi_device_t *device, const rad_spi_transfer_t *transfer, rad_dma_channel_t tx_channel, rad_dma_channel_t rx_channel)
Definition: radekernel.h:718
rad_status_t(* transfer)(void *context, const rad_spi_device_t *device, const rad_spi_transfer_t *transfer)
Definition: radekernel.h:717
Definition: radekernel.h:805
char path[RAD_TREE_MAX_PATH]
Definition: radekernel.h:814
uint32_t irq_count
Definition: radekernel.h:812
uint32_t bus_id
Definition: radekernel.h:806
rad_irq_resource_t irqs[RAD_IRQ_MAX_RESOURCES]
Definition: radekernel.h:813
int bound
Definition: radekernel.h:817
uint32_t clock_hz
Definition: radekernel.h:808
uint8_t bits_per_word
Definition: radekernel.h:810
uint8_t cs
Definition: radekernel.h:807
char driver[RAD_DRIVER_NAME_MAX]
Definition: radekernel.h:816
uint8_t transfer_mode
Definition: radekernel.h:811
char compatible[RAD_COMPATIBLE_MAX]
Definition: radekernel.h:815
uint8_t mode
Definition: radekernel.h:809
Definition: radekernel.h:733
void(* remove)(void *context, rad_spi_device_t *device)
Definition: radekernel.h:739
uint32_t size
Definition: radekernel.h:734
const char * name
Definition: radekernel.h:735
const char * compatible
Definition: radekernel.h:736
void * context
Definition: radekernel.h:737
rad_status_t(* probe)(void *context, rad_spi_device_t *device)
Definition: radekernel.h:738
Definition: radekernel.h:674
uint8_t * rx_data
Definition: radekernel.h:676
uint8_t bits_per_word
Definition: radekernel.h:680
uint8_t transfer_mode
Definition: radekernel.h:682
uint8_t mode
Definition: radekernel.h:679
uint8_t cs
Definition: radekernel.h:681
size_t size
Definition: radekernel.h:677
const uint8_t * tx_data
Definition: radekernel.h:675
uint32_t speed_hz
Definition: radekernel.h:678
Definition: radekernel.h:385
size_t stack_size
Definition: radekernel.h:388
void * user_context
Definition: radekernel.h:391
int priority
Definition: radekernel.h:390
uint32_t size
Definition: radekernel.h:386
const char * name
Definition: radekernel.h:387
int target_core
Definition: radekernel.h:389
Definition: radekernel.h:372
int target_core
Definition: radekernel.h:378
int priority
Definition: radekernel.h:380
char name[64]
Definition: radekernel.h:374
size_t stack_size
Definition: radekernel.h:381
int running
Definition: radekernel.h:375
int current_core
Definition: radekernel.h:379
int finished
Definition: radekernel.h:376
uint64_t id
Definition: radekernel.h:373
rad_task_state_t state
Definition: radekernel.h:377
int detached
Definition: radekernel.h:382
Definition: radekernel.h:350
uint32_t frequency_hz
Definition: radekernel.h:353
uint32_t size
Definition: radekernel.h:351
int supports_oneshot
Definition: radekernel.h:354
const char * name
Definition: radekernel.h:352
Definition: radekernel.h:364
int active
Definition: radekernel.h:368
uint32_t frequency_hz
Definition: radekernel.h:366
char name[RAD_TIMER_NAME_MAX]
Definition: radekernel.h:365
uint64_t ticks
Definition: radekernel.h:369
int supports_oneshot
Definition: radekernel.h:367
Definition: radekernel.h:357
void * context
Definition: radekernel.h:358
rad_status_t(* schedule_oneshot)(void *context, uint64_t delay_micros)
Definition: radekernel.h:360
rad_status_t(* cancel_oneshot)(void *context)
Definition: radekernel.h:361
rad_status_t(* start_periodic)(void *context, uint32_t frequency_hz)
Definition: radekernel.h:359
Definition: radekernel.h:435
char parent[RAD_TREE_MAX_PATH]
Definition: radekernel.h:438
char module[RAD_TREE_MAX_PROPERTY_NAME]
Definition: radekernel.h:439
int bound
Definition: radekernel.h:440
char name[RAD_TREE_MAX_PROPERTY_NAME]
Definition: radekernel.h:437
char path[RAD_TREE_MAX_PATH]
Definition: radekernel.h:436
Definition: radekernel.h:886
uint16_t rows
Definition: radekernel.h:887
uint16_t columns
Definition: radekernel.h:888
Definition: radekernel.h:523
rad_status_t(* mkdir)(void *context, const char *path)
Definition: radekernel.h:533
rad_status_t(* list)(void *context, const char *path, rad_vfs_list_callback_t callback, void *callback_context)
Definition: radekernel.h:532
rad_status_t(* remove)(void *context, const char *path)
Definition: radekernel.h:534
void * context
Definition: radekernel.h:524
rad_status_t(* rename)(void *context, const char *old_path, const char *new_path)
Definition: radekernel.h:535
rad_status_t(* write)(void *file, const void *buffer, size_t size, size_t *bytes_written)
Definition: radekernel.h:527
rad_status_t(* seek)(void *file, int64_t offset, rad_seek_origin_t origin)
Definition: radekernel.h:528
void(* close)(void *file)
Definition: radekernel.h:530
rad_status_t(* open)(void *context, const char *path, uint32_t flags, void **file)
Definition: radekernel.h:525
uint64_t(* tell)(void *file)
Definition: radekernel.h:529
rad_status_t(* stat)(void *context, const char *path, rad_vfs_stat_t *stat)
Definition: radekernel.h:531
rad_status_t(* read)(void *file, void *buffer, size_t size, size_t *bytes_read)
Definition: radekernel.h:526
rad_status_t(* rmdir)(void *context, const char *path)
Definition: radekernel.h:536
Definition: radekernel.h:516
char name[96]
Definition: radekernel.h:517
rad_vfs_stat_t stat
Definition: radekernel.h:518
Definition: radekernel.h:450
uint64_t mtime_millis
Definition: radekernel.h:454
int is_directory
Definition: radekernel.h:452
uint64_t size
Definition: radekernel.h:451
uint32_t mode
Definition: radekernel.h:453