| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- #include <jerry_callbacks.h>
- struct js_callback *_js_callback = NULL;
- static js_mq_func _js_mq_func = NULL;
- static void append_callback(struct js_callback *callback)
- {
- struct js_callback *_callback = _js_callback;
- if (_js_callback == NULL)
- {
- _js_callback = callback;
- return;
- }
- while (_callback->next != NULL)
- {
- _callback = _callback->next;
- }
- _callback->next = callback;
- }
- static void remove_callback(struct js_callback *callback)
- {
- struct js_callback *_callback = _js_callback;
- if (_js_callback == NULL)
- return;
-
- if (_js_callback == callback)
- {
- _js_callback = _js_callback->next;
- rt_free(callback);
- return;
- }
- while (_callback->next != NULL)
- {
- if (_callback->next == callback)
- {
- _callback->next = callback->next;
- rt_free(callback);
- break;
- }
- _callback = _callback->next;
- }
- }
- static rt_bool_t has_callback(struct js_callback *callback)
- {
- struct js_callback *_callback = _js_callback;
- if (callback == NULL || _js_callback == NULL)
- {
- return RT_FALSE;
- }
- do
- {
- if (_callback == callback)
- {
- return RT_TRUE;
- }
- _callback = _callback->next;
- }
- while (_callback != NULL);
- return RT_FALSE;
- }
- struct js_callback *js_add_callback(js_callback_func callback)
- {
- struct js_callback *cb = (struct js_callback *)rt_calloc(1, sizeof(struct js_callback));
- if (!cb)
- {
- return NULL;
- }
- cb->function = callback;
- cb->next = NULL;
- append_callback(cb);
- return cb;
- }
- void js_remove_callback(struct js_callback *callback)
- {
- remove_callback(callback);
- }
- void js_remove_all_callbacks(void)
- {
- struct js_callback *_callback_free;
- while (_js_callback != NULL)
- {
- _callback_free = _js_callback;
- _js_callback = _js_callback->next;
- rt_free(_callback_free);
- }
- _js_callback = NULL;
- }
- void js_call_callback(struct js_callback *callback, const void *data, uint32_t size)
- {
- if (has_callback(callback))
- {
- if (callback->function)
- {
- callback->function(data, size);
- }
- }
- }
- rt_bool_t js_send_callback(struct js_callback *callback, const void *args, uint32_t size)
- {
- rt_bool_t ret = RT_FALSE;
- struct js_mq_callback *jmc = NULL;
- jmc = (struct js_mq_callback *)rt_calloc(1, sizeof(struct js_mq_callback));
- if (jmc)
- {
- jmc->callback = callback;
- jmc->args = rt_malloc(size);
- if (jmc->args && args)
- {
- memcpy(jmc->args, args, size);
- }
- jmc->size = size;
- if (_js_mq_func)
- {
- ret = _js_mq_func(jmc);
- }
- if (ret == RT_FALSE)
- {
- rt_free(jmc->args);
- rt_free(jmc);
- }
- }
- return ret;
- }
- void js_mq_func_init(js_mq_func signal)
- {
- _js_mq_func = signal;
- }
- void js_mq_func_deinit(void)
- {
- _js_mq_func = NULL;
- js_remove_all_callbacks();
- }
|