| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #include "luat_base.h"
- #include "luat_irq.h"
- #include "luat_msgbus.h"
- #include "luat_gpio.h"
- #include "luat_uart.h"
- #include "luat_mem.h"
- int luat_irq_fire(int tp, int arg, void* args);
- int l_gpio_handler(lua_State *L, void* ptr) ;
- int l_uart_handler(lua_State *L, void* ptr);
- int luat_irq_gpio_cb(int pin, void* args) {
- rtos_msg_t msg = {0};
- msg.handler = l_gpio_handler;
- msg.ptr = NULL;
- msg.arg1 = pin;
- msg.arg2 = luat_gpio_get(pin);
- return luat_msgbus_put(&msg, 0);
- }
- int luat_irq_uart_cb(int id, void* args) {
- int len = (int)(args);
- rtos_msg_t msg = {0};
- msg.handler = l_uart_handler;
- msg.ptr = NULL;
- msg.arg1 = id;
- msg.arg2 = len;
- return luat_msgbus_put(&msg, 0);
- }
- int luat_irq_spi_cb(int id);
- static int luat_irq_topic_cb_handler(lua_State *L, void* ptr) {
- rtos_msg_t* msg = (rtos_msg_t*)lua_topointer(L, -1);
- lua_getglobal(L, "sys_pub");
- if (lua_isfunction(L, -1)) {
- lua_pushstring(L, msg->ptr);
- lua_pushinteger(L, msg->arg1);
- lua_pushboolean(L, !msg->arg2);
- lua_pushinteger(L, msg->arg2);
- lua_call(L, 4, 0);
- }
- luat_heap_free(msg->ptr);
- return 0;
- }
- //pdata 为 result << 16 | device_id, result 为0 则表示成功,其他失败
- //param 为回调topic
- int32_t luat_irq_hardware_cb_handler(void *pdata, void *param)
- {
- rtos_msg_t msg;
- msg.handler = luat_irq_topic_cb_handler;
- msg.ptr = param;
- msg.arg1 = (uint32_t)pdata & 0x0000ffff;
- msg.arg2 = ((uint32_t)pdata >> 16);
- luat_msgbus_put(&msg, 0);
- return 0;
- }
|