| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- -- LuaTools需要PROJECT和VERSION这两个信息
- PROJECT = "uart_ymodem"
- VERSION = "1.0.0"
- log.style(1)
- log.info("main", PROJECT, VERSION)
- -- 引入必要的库文件(lua编写), 内部库不需要require
- sys = require("sys")
- if wdt then
- --添加硬狗防止程序卡死,在支持的设备上启用这个功能
- wdt.init(9000)--初始化watchdog设置为9s
- sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
- end
- local uartid = 1 -- 根据实际设备选取不同的uartid
- --初始化
- local result = uart.setup(
- uartid,--串口id
- 115200,--波特率
- 8,--数据位
- 1--停止位
- )
- local ymodem_running = false
- local rxbuff = zbuff.create(1024 + 32)
- local ymodem_handler = ymodem.create("/","save.bin")
- local function ymodem_to()
- if not ymodem_running then
- uart.write(uartid, "C")
- ymodem.reset(ymodem_handler)
- end
- end
- sys.timerLoopStart(ymodem_to,500)
- local function ymodem_rx(id,len)
- uart.rx(id,rxbuff)
- log.info(rxbuff:used())
- local result,ack,flag,file_done,all_done = ymodem.receive(ymodem_handler,rxbuff)
- ymodem_running = result
- log.info(ymodem_running,ack,flag,file_done,all_done)
- rxbuff:del()
- if result then
- rxbuff:copy(0, ack,flag)
- uart.tx(id, rxbuff)
- end
- if all_done then
- ymodem_running = false --再次开始接收
- end
- rxbuff:del()
- end
- uart.on(uartid, "receive", ymodem_rx)
- uart.on(uartid, "sent", function(id)
- log.info("uart", "sent", id)
- end)
- -- 用户代码已结束---------------------------------------------
- -- 结尾总是这一句
- sys.run()
- -- sys.run()之后后面不要加任何语句!!!!!
|