Forráskód Böngészése

成功实现100个字节以内的接收

ZhaoSai 2 hónapja
szülő
commit
9ee5fec108
2 módosított fájl, 52 hozzáadás és 29 törlés
  1. 51 28
      drv_periph/sx126x_driver.lua
  2. 1 1
      main.lua

+ 51 - 28
drv_periph/sx126x_driver.lua

@@ -539,49 +539,72 @@ local function hex_to_string(hex_str)
 end
 
 
-function SX126xReadBuffer(offset,size)
-    local command = sx126x_reg.RadioCommands.RADIO_READ_BUFFER .. offset .. "00"
+-- function SX126xReadBuffer(offset,size)
+--     local command = sx126x_reg.RadioCommands.RADIO_READ_BUFFER .. offset .. "00"
 
-    for i = 1, size do
-        command = command .. "00"
-    end
-    local ret = Drv_spi.drv_spi_read_write_byte(command,size)
-    log.info("SX126xReadBuffer",ret)
-    -- 测试示例
-    -- local hex_str = "617368696E696E67"  -- "ashining"的十六进制表示
-    local original_str = hex_to_string(ret)
+--     for i = 1, size do
+--         command = command .. "00"
+--     end
+--     local ret = Drv_spi.drv_spi_read_write_byte(command,size)
+--     log.info("SX126xReadBuffer",ret)
+--     -- 测试示例
+--     -- local hex_str = "617368696E696E67"  -- "ashining"的十六进制表示
+--     local original_str = hex_to_string(ret)
     
-    -- print("转换后的字符串: " .. original_str)  -- 输出: ashining
-    log.info("原始字符串: " .. original_str)
+--     -- print("转换后的字符串: " .. original_str)  -- 输出: ashining
+--     log.info("原始字符串: " .. original_str)
+--     return original_str
+-- end
+local CHUNK_SIZE = 12  
+
+function SX126xReadBuffer(offset, size)
+    local all_data = ""
+
+    local remain = size
+    local cur_offset = offset
+
+    while remain > 0 do
+        local this_size = math.min(remain, CHUNK_SIZE)
+
+        -- offset 转成 2位 hex
+        local offset_hex = string.format("%02X", cur_offset)
+        local command = sx126x_reg.RadioCommands.RADIO_READ_BUFFER .. offset_hex .. "00"
+
+        for i = 1, this_size do
+            command = command .. "00"
+        end
+
+        local ret = Drv_spi.drv_spi_read_write_byte(command, this_size)
+        all_data = all_data .. ret
+
+        cur_offset = cur_offset + this_size
+        remain = remain - this_size
+    end
+
+    return all_data
 end
 
 
 sys.subscribe("LORA_CALL_BACK", function()
-    -- log.info("我是携程")
     RadioClearIrqStatus()
     log.info("清除中断")
     SX126xSetStandby(sx126x_reg.RadioStandbyModes_t.STDBY_RC)
     RadioRx()
-    local ret = SX126xReadCommand( sx126x_reg.RadioCommands.RADIO_GET_RXBUFFERSTATUS, 3 )
-    log.info("LORA_CALL_BACK",ret)
-    -- 从第1个字符截取到第2个字符,得到"A4"
-    -- local rxStartBufferPointer = ret:sub(1, 2)
 
-    -- 从第3个字符截取到第4个字符,得到"08"
-    local payloadLength = ret:sub(3, 4)
+    local ret = SX126xReadCommand(sx126x_reg.RadioCommands.RADIO_GET_RXBUFFERSTATUS, 3)
+    log.info("LORA_CALL_BACK", ret)
 
-    local num1 = tonumber(payloadLength, 16)  -- 第二个参数 16 表示按十六进制解析
-    -- local nmu2 = tonumber("FF", 16)
+    local payloadLength = ret:sub(3, 4)
+    local num1 = tonumber(payloadLength, 16)
+    log.info("payloadLength", num1)
 
-    -- if num1 >= nmu2 then
-    --     return 1
-    -- end
-    log.info("payloadLength",num1)
-    --测试读取数据。
-    SX126xReadBuffer("00",8)
-    SX126xReadBuffer("09",8)
+    -- 自动读取完整数据
+    local data = SX126xReadBuffer(0, num1)
+    log.info("data HEX", data)
+    log.info("data ASCII", hex_to_string(data))
 end)
 
+
 -- sys.taskInit(function ()
 --     sys.wait(5000)
 --     SX126xInit()

+ 1 - 1
main.lua

@@ -66,7 +66,7 @@ errDump.request("udp://dev_msg1.openluat.com:12425", nil, true)
 
 -- require "Drv_spi"
 require "radio"
-require "Air530zGPS"
+-- require "Air530zGPS"
 
 
 --启动系统框架