Ver código fonte

add: LoRa驱动接收回调把剩下的两个参数加上

https://gitee.com/openLuat/LuatOS/issues/I7XLSC
Wendal Chen 2 anos atrás
pai
commit
d553f042b0
2 arquivos alterados com 41 adições e 18 exclusões
  1. 25 9
      components/lora/luat_lib_lora.c
  2. 16 9
      components/lora2/luat_lib_lora.c

+ 25 - 9
components/lora/luat_lib_lora.c

@@ -27,6 +27,15 @@ extern uint8_t SX126xBusyPin;
 extern uint8_t SX126xDio1Pin;
 static RadioEvents_t RadioEvents;
 
+typedef struct lora_rx_data
+{
+    uint16_t size;
+    int16_t rssi;
+    int8_t snr;
+    char buff[1];
+}lora_rx_data_t;
+
+
 enum{
 LORA_TX_DONE,
 LORA_RX_DONE,
@@ -63,15 +72,19 @@ end)
 LORA 接收完成
 LORA_RX_DONE
 @usage
-sys.subscribe("LORA_RX_DONE", function(data, size)
-    log.info("LORA_RX_DONE: ", data, size)
+sys.subscribe("LORA_RX_DONE", function(data, size, rssi, snr)
+    -- rssi 和  snr 于 2023-09-06 新增
+    log.info("LORA_RX_DONE: ", data, size, rssi, snr)
     lora.send("PING")
 end)
 */
         lua_pushstring(L, "LORA_RX_DONE");
-        lua_pushlstring(L, (const char *)msg->ptr,msg->arg2);
-        lua_pushinteger(L, msg->arg2);
-        lua_call(L, 3, 0);
+        lora_rx_data_t* rx_data = (lora_rx_data_t*)msg->ptr;
+        lua_pushlstring(L, (const char *)rx_data->buff, rx_data->size);
+        lua_pushinteger(L, rx_data->size);
+        lua_pushinteger(L, rx_data->rssi);
+        lua_pushinteger(L, rx_data->snr);
+        lua_call(L, 5, 0);
         luat_heap_free(msg->ptr);
         break;
     case LORA_TX_TIMEOUT:
@@ -129,14 +142,17 @@ static void OnTxDone( void ){
 static void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ){
     // printf("RxDone size:%d rssi:%d snr:%d\n",size,rssi,snr);
     // printf("RxDone payload: %.*s",size,payload);
-    char* rx_buff = luat_heap_malloc(size);
-    memcpy( rx_buff, payload, size );
+    lora_rx_data_t* rx_data = luat_heap_malloc(size + sizeof(lora_rx_data_t));
+    memcpy( rx_data->buff, payload, size );
+    rx_data->size = size;
+    rx_data->rssi = rssi;
+    rx_data->snr = snr;
 
     rtos_msg_t msg = {0};
     msg.handler = l_lora_handler;
-    msg.ptr = rx_buff;
+    msg.ptr = rx_data;
     msg.arg1 = LORA_RX_DONE;
-    msg.arg2 = size;
+    msg.arg2 = 0;
     luat_msgbus_put(&msg, 1);
 }
 

+ 16 - 9
components/lora2/luat_lib_lora.c

@@ -20,6 +20,14 @@
 #define LUAT_LOG_TAG "lora"
 #include "luat_log.h"
 
+typedef struct lora_rx_data
+{
+    uint16_t size;
+    int16_t rssi;
+    int8_t snr;
+    char buff[1];
+}lora_rx_data_t;
+
 enum{
 LORA_TX_DONE,
 LORA_RX_DONE,
@@ -38,11 +46,6 @@ static lora_device_t * get_lora_device(lua_State *L){
 	}
 }
 
-typedef struct lora_data{
-    uint16_t size;
-    uint8_t payload[];
-}lora_data_t;
-
 static int l_lora_handler(lua_State* L, void* ptr) {
     rtos_msg_t* msg = (rtos_msg_t*)lua_topointer(L, -1);
     lora_device_t *lora_device =(lora_device_t *)msg->ptr;
@@ -59,9 +62,11 @@ static int l_lora_handler(lua_State* L, void* ptr) {
             case LORA_RX_DONE:
                 lua_pushstring(L, "rx_done");
                 lora_data_t* rx_buff = (lora_data_t*)msg->arg2;
-                lua_pushlstring(L, (const char *)rx_buff->payload,rx_buff->size);
+                lua_pushlstring(L, (const char *)rx_buff->buff,rx_buff->size);
                 lua_pushinteger(L, rx_buff->size);
-                lua_call(L, 4, 0);
+                lua_pushinteger(L, rx_buff->rssi);
+                lua_pushinteger(L, rx_buff->snr);
+                lua_call(L, 6, 0);
                 luat_heap_free(rx_buff);
                 break;
             case LORA_TX_TIMEOUT:
@@ -93,9 +98,11 @@ static void OnTxDone( lora_device_t* lora_device ){
 static void OnRxDone( lora_device_t* lora_device,uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr ){
     // LLOGD("RxDone size:%d rssi:%d snr:%d",size,rssi,snr);
     // LLOGD("RxDone payload: %.*s",size,payload);
-    lora_data_t* rx_buff = luat_heap_malloc(sizeof(lora_data_t)+ size);
+    lora_rx_data* rx_buff = luat_heap_malloc(sizeof(lora_data_t)+ size);
     rx_buff->size = size;
-    memcpy( rx_buff->payload, payload, size );
+    rx_buff->rssi = rssi;
+    rx_buff->snr = snr;
+    memcpy( rx_buff->buff, payload, size );
 
     rtos_msg_t msg = {0};
     msg.handler = l_lora_handler;