| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include <stdint.h>
- #include <stddef.h>
- #include <stdbool.h>
- #include "zv_types.h"
- #include "kernel.h"
- #include "task.h"
- #include "event.h"
- #include "zv_time.h"
- static inline bool __zv_event_empty(zv_event_t *self) {
- return self->type == ZV_EVENT_EMPTY;
- }
- bool zv_event_push_number(
- struct zv_kernel_s *self,
- zv_tid_t target,
- int64_t content
- ) {
- zv_task_t *task = __zv_kernel_get_task(self, target);
- zv_event_t *event = &task->event;
- if (!__zv_event_empty(event)) {
- return false;
- }
- event->type = ZV_EVENT_DATA;
- event->content.number = content;
- return true;
- }
- bool zv_event_push_unumber(
- struct zv_kernel_s *self,
- zv_tid_t target,
- uint64_t content
- ) {
- zv_task_t *task = __zv_kernel_get_task(self, target);
- zv_event_t *event = &task->event;
- if (!__zv_event_empty(event)) {
- return false;
- }
- event->type = ZV_EVENT_DATA;
- event->content.unumber = content;
- return true;
- }
- bool zv_event_set_timer(
- struct zv_kernel_s *self,
- zv_tid_t target,
- zv_time_t time
- ) {
- zv_task_t *task = __zv_kernel_get_task(self, target);
- zv_event_t *event = &task->event;
- if (!__zv_event_empty(event)) {
- return false;
- }
- zv_time_t current_time = zv_platform_get_time();
- zv_time_t final_time = current_time + time;
- event->type = ZV_EVENT_TIMER;
- event->content.time = final_time;
- return true;
- }
- bool zv_event_push_object(
- struct zv_kernel_s *self,
- zv_tid_t target,
- void *content
- ) {
- if (content == NULL) {
- return false;
- }
- zv_task_t *task = __zv_kernel_get_task(self, target);
- zv_event_t *event = &task->event;
- if (!__zv_event_empty(event)) {
- return false;
- }
- event->type = ZV_EVENT_OBJECT;
- event->content.object = content;
- return true;
- }
|