|
|
@@ -36,17 +36,15 @@ local DATA_SIZE_SOH = 128
|
|
|
local DATA_SIZE_STX = 1024
|
|
|
|
|
|
local function uart_cb(id, len)
|
|
|
- local data = uart.read(id, 1)
|
|
|
- -- log.info("uart读取到数据:", data:toHex())
|
|
|
+ local data = uart.read(id, 1024)
|
|
|
+ if #data == 0 then
|
|
|
+ return
|
|
|
+ end
|
|
|
+ log.info("xmodem", "uart读取到数据:", data:toHex())
|
|
|
data = data:byte(1)
|
|
|
sys.publish("xmodem", data)
|
|
|
end
|
|
|
|
|
|
-function xmodem.close(uart_id)
|
|
|
- uart.on(uart_id, "receive")
|
|
|
- uart.close(uart_id)
|
|
|
-end
|
|
|
-
|
|
|
--[[
|
|
|
xmodem 发送文件
|
|
|
@api xmodem.send(uart_id, uart_br, file_path,type)
|
|
|
@@ -59,7 +57,7 @@ xmodem 发送文件
|
|
|
xmodem.send(2,115200,"/luadb/test.bin")
|
|
|
]]
|
|
|
|
|
|
-function xmodem.send(uart_id, uart_br, file_path,type)
|
|
|
+function xmodem.send(uart_id, uart_br, file_path, type)
|
|
|
local ret, flen, cnt, crc
|
|
|
|
|
|
if type then
|
|
|
@@ -77,13 +75,13 @@ function xmodem.send(uart_id, uart_br, file_path,type)
|
|
|
if fd then
|
|
|
uart.setup(uart_id,uart_br)
|
|
|
uart.on(uart_id, "receive", uart_cb)
|
|
|
- local result, data = sys.waitUntil("xmodem", 120000)
|
|
|
- if result and data == CRC_CHR then
|
|
|
+ local result, data = sys.waitUntil("xmodem", 12000)
|
|
|
+ if result and (data == CRC_CHR or data == NAK) then
|
|
|
cnt = 1
|
|
|
while true do
|
|
|
data_buff:set(0, CTRLZ)
|
|
|
ret, flen = fd:fill(data_buff,0,DATA_SIZE)
|
|
|
- log.info("发送第", cnt, "包")
|
|
|
+ log.info("xmodem", "发送第", cnt, "包")
|
|
|
if flen > 0 then
|
|
|
data_buff:seek(0)
|
|
|
crc = crypto.crc16("XMODEM",data_buff)
|
|
|
@@ -96,7 +94,7 @@ function xmodem.send(uart_id, uart_br, file_path,type)
|
|
|
xmodem_buff[1027] = crc>>8
|
|
|
xmodem_buff[1028] = crc&0xff
|
|
|
xmodem_buff:seek(XMODEM_SIZE)
|
|
|
- log.info(xmodem_buff:used())
|
|
|
+ -- log.info(xmodem_buff:used())
|
|
|
:: RESEND ::
|
|
|
uart.tx(uart_id, xmodem_buff)
|
|
|
result, data = sys.waitUntil("xmodem", 10000)
|
|
|
@@ -105,15 +103,15 @@ function xmodem.send(uart_id, uart_br, file_path,type)
|
|
|
elseif result and data == NAK then
|
|
|
goto RESEND
|
|
|
else
|
|
|
- log.info("发送失败")
|
|
|
+ log.info("xmodem", "发送失败")
|
|
|
return false
|
|
|
end
|
|
|
if flen ~= DATA_SIZE then
|
|
|
- log.info("文件到头了")
|
|
|
+ log.info("xmodem", "文件到头了")
|
|
|
break
|
|
|
end
|
|
|
else
|
|
|
- log.info("文件到头了")
|
|
|
+ log.info("xmodem", "文件到头了")
|
|
|
break
|
|
|
end
|
|
|
end
|
|
|
@@ -121,13 +119,26 @@ function xmodem.send(uart_id, uart_br, file_path,type)
|
|
|
fd:close()
|
|
|
return true
|
|
|
else
|
|
|
- log.info("不支持",data)
|
|
|
+ log.info("xmodem", "不支持的起始数据包",data)
|
|
|
return false
|
|
|
end
|
|
|
else
|
|
|
- log.info("no file")
|
|
|
+ log.info("xmodem", "待传输的文件不存在")
|
|
|
return false
|
|
|
end
|
|
|
end
|
|
|
|
|
|
+--[[
|
|
|
+关闭xmodem
|
|
|
+@api xmodem.close(uart_id)
|
|
|
+@number uart_id uart端口号
|
|
|
+@usage
|
|
|
+-- 执行xmodem传输后, 无论是否传输成功, 都建议关闭xmodem上下文, 也会关闭uart
|
|
|
+xmodem.close(2)
|
|
|
+]]
|
|
|
+function xmodem.close(uart_id)
|
|
|
+ uart.on(uart_id, "receive")
|
|
|
+ uart.close(uart_id)
|
|
|
+end
|
|
|
+
|
|
|
return xmodem
|