韩国电影《教室爱欲》,国产精品99久久久久久久女警,69国产成人精品午夜福中文,国产熟妇乱xxxxx大屁股网

您的位置:首頁   >  關于我們  >  新聞動態

大彩串口屏4G應用-OTA升級工程

發布人:大彩科技發布日期:2021-08-19



演示視頻


一、適合范圍


本文檔適合大彩PM系列串口屏產品使用。




二、開發環境版本


1. VisualTFT軟件版本:V3.0.1.1112及以上的版本。

版本查看:

1) 打開VisualTFT軟件啟動頁面如圖2-1軟件版本,右上角會顯示的軟件版本號;

圖片

圖2-1軟件版本


2) 打開VisualTFT,在軟件右下角可以查看軟件版本圖2-2軟件版本,最新版本可登錄http://www.bdklxf.com/進行下載。

圖片

圖2-2軟件版本


2. 串口屏硬件版本:M系列固件 >=V6.3.325.00。

版本查看:

1) 查看屏幕背面版本號貼紙;

2) VisualTFT與屏幕聯機成功后,右下角顯示的版本號。





三、概述


本例程,介紹4G的HTTP下載文件、OTA升級工程的方法。





四、參考資料


 1  《LUA 腳本API V1.4》可通過以下鏈接下載物聯型開發包獲取:

http:/www.bdklxf.com/index.php?s=/List/index/cid/19.html

 2  《LUA基礎學習》可通過以下鏈接下載物聯型開發包獲取:

http:/www.bdklxf.com/index.php?s=/List/index/cid/19.html

 3  LUA腳本初學者可以通過下面鏈接進行學習。

http://www.runoob.com/lua/lua-arrays.html





五、教程實現


本文主要將以下2點進行說明:

1. 準備工程素材;

2. 配置串口屏工程;






5.1 準備工程素材

5.1.1 準備工程素材

在實現例程前需要作以下3個準備:

1. 硬件平臺;

2. 軟件平臺;

3. UI素材;

該例程使用大彩M系列7寸串口屏DC80480M070_1111_0T為驗證開發平臺。如圖5-1所示:

圖5-1  M系列7寸串口屏

其他尺寸的串口屏均可借鑒此教程。


5.1.2 軟件平臺

使用大彩自主研發的上位機軟件VisualTFT配置工程,登錄http://www.bdklxf.com/下載。如圖5-2所示;

圖5-2下載軟件






5.2 配置串口屏工程

本文主要介紹以下2點:

(1) 畫面配置

(2) LUA編輯


5.2.1 畫面配置

在畫面ID0中,觸發下載、下載過程、4G信號值及運營商3部分組成。

觸發下載:3個按鈕控件,作為觸發下載條件。

  • 控件ID1為工程下載。
  • 下載過程:控件ID4~8作為下載過程的體現:
  • 文本控件ID4用于顯示下載速度(min/Kb)
  • 文本控件ID5顯示下載信息
  • 進度條控件ID6為顯示下載進度
  • 文本控件ID7用于顯示下載進度百分比
  • 文本控件ID8顯示 ‘當前已下載大小/總下載大小’,單位Kb
  • 4G信號和運營商:圖標控件控件ID11作為信號顯示、文本控件ID10用于顯示運營商。畫面配置如圖5-3所示:
  • 串口屏固件版本:文本控件ID13用于顯示固件版本號。

注意:其他非關鍵控件不在一一介紹,下文不在累述

圖5-3 畫面配置


5.2.2 LUA編輯

本例程中,屏幕上電執行初始化操作,如加載4G AT 指令的庫、初始化4G模塊、定時獲取運營商和信號值等。

當用戶點擊工程、固件升級按鈕時,調用air_http_download()開始下載文件。在下載回調函數on_ota_http_download_file_cb()里進行數據存儲,顯示下載信息等。若該文件單次下載不完,會多次回調on_ota_http_download_file_cb()函數,直至下載完畢,如圖5-4所示。

特別注意:使用OTA時,每次從云端下載數據最大不超過2048字節,每次寫入內存最大不超過512字節。

圖5-4 下載流程


1. 初始化

調用系統函數on_init()執行代碼如程序清單 1所示:


程序清單 1  初始化

--[[*******************************************************************
** Function name:  on_init
** Descriptions :  系統初始化時,執行此回調函數。
*******************************************************************--]]
function on_init()
    ota_destroy()             --清楚ota內容
    dofile('air724at.lua')  --加載 http.lua 文件
    uart_set_baudrate3(115200)  --設置與4G模塊通訊的串口3的波特率為115200

    start_timer( timerId_init, timerout_init, 0, 1 )    --初始化定時器,部分內容延時一段時間在初始化

    air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)     --設置4G庫函數的命令發送函數,命令回調函數、調試信息打印函數

    air_hw_int()   --4G模塊初始化設置
end

-- [[*******************************************************************
** Function name:  on_timer
** Descriptions :  定時器超時回到調函數。
** @ timer_id    :  定時器ID
*******************************************************************--]]
function on_timer(timer_id)
    on_air_timer(timer_id)          --4G庫函數的定時處理

    --延時解壓ota文件
    if timer_id == timerId_ota_check_upgrade
    then
        air_log('timer_id == timerId_ota_check_upgrade')
        ota_check_upgrade(1)        --檢查文件,并解壓,參數 1 表示升級后重啟

    --延時初始化的內容
    elseif timer_id == timerId_init
    then
        set_visiable( screen_updata, 6, 0)
    end
end

--[[*******************************************************************
** Function name : at_cops_csq
** Descriptions  : 獲取運營商信息、信號強度
** @return       : nil,無返回值
*******************************************************************--]]
function at_cops_csq()
    air_cmd_add('AT+COPS?','OK',1000) –獲取運營商
    air_cmd_add('AT+CSQ'  ,'OK',1000) –獲取信號
end

--[[*******************************************************************
** Function name:  on_air_resp_callback
** Descriptions :  4G模塊-數據回調接口
** @key           :  屏幕向4G模塊的發送請求
** @value        :  4G模塊返回的數據
*******************************************************************--]]
function on_air_resp_callback(key, value)

    if value == nil
    then 
        return              --value為空時退出
    end

    --*********************************************************************
    --功能:    判斷 key
    --          如果 key 為空,則退出函數。
    --          因為 key 為空時,下方 string.find( key , ) 是不正確的使用。
    --          以下key的處理必須不為空,
    --*****************************************************************
    if key == nil 
    then
        return
    end

    ......

    --*******************************************************************
    --條件:    4G初始化完成
    --功能:    使用使用AT指令獲取信號強度和運營商。
    --          使用 http get 請求天氣、北京時間。
    --調用函數:at_cops_csq()
    --函數功能:獲取信號強度和運營商
    --調用函數:get_wea_and_time()
    --函數功能:請求天氣、北京時間
    --*******************************************************************
    if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil 
    then
        set_visiable( screen_updata, 16, 0 )      --畫面‘多媒體下載’的提示清空
        at_cops_csq()                                  --獲取信號強度、運營商
    end

    --****************************************************************
    --條件:    設置4G模塊波特率成功
    --功能:    設置串口波特率為 921600 
    --****************************************************************
    if string.find(key,'+IPR=921600') ~= nil and
    string.find(value,'OK') ~= nil 
    then
        uart_set_baudrate3(921600)
    end

    --****************************************************************
    --條件:    設置4G模塊波特率成功
    --功能:    設置串口波特率為 115200 
    --****************************************************************
    if string.find(key,'+IPR=115200') ~= nil and
    string.find(value,'OK') ~= nil 
    then
        uart_set_baudrate3(115200)
    end

    --****************************************************************
    --條件:    4G模塊返回運營商信息
    --功能:    設置顯示運營商
    --****************************************************************
    if string.find(key,'+COPS') ~= nil and string.find(value,'+COPS') ~= nil
    then
        --************************************************************
        --value    : +COPS: 0,2,"46000",7
        --要提取的值:46000
        --正則表達式: '+COPS:.*,.*,"(%d*)"'
        --************************************************************
        local regular_e = '+COPS:.*,.*,"(%d*)"'--正則表達式
        --獲取的值賦給 my_mobile_MCCMNC 
        local my_mobile_MCCMNC = string.match( value, regular_e )
        set_text( screen_main, 2, mobile_MCCMNC[my_mobile_MCCMNC])
    end

    --****************************************************************
    --條件:    4G模塊返回信號強度信息
    --功能:    設置4G模塊的信號等級
    --****************************************************************
    if string.find(key,'+CSQ')~=nil and string.find(value,'+CSQ')~=nil
    then
        --************************************************************
        --value    : +CSQ: 15,99
        --要提取的值:15
        --正則表達式: '+CSQ: (.*),.*' 
        --***********************************************************
        local regular_e = '+CSQ: (.*),.*' --正則表達式
        local my_csq = tonumber(string.match(value,regular_e))
        if my_csq<=11 
        then
            set_value( screen_main, 1, 1) --設置信號圖標顯示第1幀 
        elseif my_csq>=12 and my_csq<=13 
        then
            set_value(screen_main, 1, 2) --設置信號圖標顯示第2幀 
        elseif my_csq>=14 and my_csq<=15 
        then
            set_value( screen_main, 1, 3) --設置信號圖標顯示第3幀 
        elseif my_csq>=16 
        then
            set_value( screen_main, 1, 4) --設置信號圖標顯示第4幀 
        end
    end
end

--[[******************************************************************
** Function name: on_uart_recv_data3
** Descriptions : 接收串口3數據回調函數,連接4G模塊。
******************************************************************--]]
function on_uart_recv_data3(packet)
    --4G AT指令庫API
    on_air_recv_data(packet)
end

核心API函數

1) dofile (filename)

加載文件:本例程中加載4G AT 指令的庫

  • filename  : 文件


2) uart_set_baudrate3(speed)

設置串口3的波特率:串口3為屏幕和4G模塊通訊的串口

  • speed  : 通訊的波特率


3) on_air_recv_data(packet)

串口接收4G模塊的返回數據的回調。

  • packet  : 形參為表,字節數據。


4) air_set_callback (on_air_send_cb,on_air_resp_callback,on_air_log_cb)

設置4G庫里的回調函數。形參類型為函數,參數依次為命令發送函數,命令回調函數、調試信息打印函數,可自定義函數名。

  • on_air_send_cb:屏幕向4G模塊發送回調函數
  • on_air_resp_callback :4G向屏幕返回數據回調函數
  • on_air_log_cb:用戶調試信息回調函數調試


5) air_hw_int()

4G AT 指令的庫函數,初始化4G模塊


6) at_cops_csq()

自定義封裝函數,獲取運行商和信號值


7) air_cmd_add(sendstr,ackstr,timeout,retry,callback)

屏幕向4G模塊發送AT指令

  • sendstr:屏幕向4G模塊發送AT指令
  • ackstr:4G模塊應答屏幕的請求
  • timeou:應答超時
  • retry:超時重發次數,可選
  • callback:應答回調函數,可選

注:如果沒有設置超時重發次數,則超時時直接發送隊列中的下一條指令。


8) on_air_resp_callback(key, value)

4G應答屏幕回調函數:屏幕發送AT指令,4G應答后均會回調該函數,初始化設置:air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)。

  • key:屏幕向4G模塊發送請求的AT指令
  • value:4G模塊返回的數據


9) ota_destroy()

清楚上次寫在內存中的OTA數據。


相關AT指令:

本例程中,涉及到獲取4G模塊初始化、運營商、信號值等AT交互指令回調的判斷,在on_air_resp_callback(key, value)回調函數中,判斷4G收發的相關AT指令,如下所示:

1) 網絡數據是否激活: 

屏幕發送:AT+SAPBR=1,1。在air_hw_int()函數里發送。

屏幕接收:OK。on_air_resp_callback(key, value)函數里執行4G返回數據的判斷


2)  獲取運營商:

屏幕發送:AT+COPS?。在at_cops_csq()函數了發送。

屏幕接收:OK。on_air_resp_callback(key, value)函數里執行4G返回數據的判斷


3)  獲取信號值:

屏幕發送:AT+CSQ。在at_cops_csq()函數了發送。

屏幕接收:OK。on_air_resp_callback(key, value)函數里執行4G返回數據的判斷

 

2. HTTP下載

用戶點擊按鈕控件ID1,HTTP下載對應的OTA文件。文件,每次向服務器讀取2048K大小文件,然后在下載回調函里,每次以512字節的數據寫入存儲地址,代碼如程序清單2所示:

程序清單 2  HTTP下載

--[[******************************************************************
** Function name : on_control_notify
** Descriptions  : 系統回調函數,用戶通過觸摸修改控件后,執行此回調函數。
**                    點擊按鈕控件,修改文本控件、修改滑動條都會觸發此事件。
** @ screen       : 控件觸發所在的頁面
** @return        : 控件觸發的ID
** @return        : 控件值
** @return        : nil,無返回值
******************************************************************--]]
function on_control_notify(screen,control,value)
    --*******************************************************************
    --位置:    ota升級
    --*******************************************************************
    if screen == screen_updata 
    then
        if control == 1 and value == 1
        then

            set_enable( screen_updata, 1, 0)

            set_value( screen_updata, 6, 0)
            set_text( screen_updata, 7, '')
            set_text( screen_updata, 8, '')
            set_text( screen_updata, 4, '')

            set_visiable( screen_updata, 6, 1)           --設置進度條可見
            set_visiable( screen_updata, 7, 1)           --設置進度文本可見
            set_visiable( screen_updata, 8, 1)           --設置文件大小文本可見

            file_len           = 0
            file_curt_dl_perct = 0

            air_set_baudrate(921600)

            --開始下載
            air_http_download(ota_HttpDownFile_URITb, 
                              ota_dlOnceSize,
                              on_ota_http_download_cb)
        end
    end
end

--[[*********************************************************************
** Function name: ota_http_download_process
** Descriptions : 計算當前寫入(下載)進度
** @cur_process : 當前下載進度
** @return       : nil, 無返回值
*********************************************************************--]]
function ota_http_download_process( cur_process )

    local allsize =  string.format('%0.2f', (file_len    / 1024))
    local cursize =  string.format('%0.2f', (cur_process / 1024))
    local file_curt_dl_perct = (cur_process/file_len)*100

    file_curt_dl_perct = string.format('%0.1f',file_curt_dl_perct)

    set_value(screen_updata, 6, file_curt_dl_perct)
    set_text(screen_updata , 7, '下載進度: '..file_curt_dl_perct..' %')
    set_text(screen_updata ,  8, '文件大小: '..cursize..' KB / '..allsize..' KB')
end

--[[*********************************************************************
** Function name: on_ota_http_download_cb
** Descriptions : 下載文件
** @key           : key, HTTP下載返回標識
** @value        : value,4G模塊屏幕  的應答數據 
** @return       : nil, 無返回值
*********************************************************************--]]
function on_ota_http_download_cb(key, value)

    if key=='data_len' 
    then
        local otafile_len = value               --獲取文件長度
        file_len = otafile_len

        ota_destroy()      --清楚ota內容
        ota_init_addr = ota_init('0123456789abcdef',otafile_len,ota_addr)  --初始化OTA內存

        start_timer_download_speed(file_len)  --開始計算下載時間
        set_text( screen_updata, 4, '')        --速度顯示為空

    elseif key=='data'                           --文件數據包
    then
        my_ota_write_filedata('',value,add_write,ota_init_addr)   --分段寫入數據

    elseif key=='finish'                        --下載結束
    then
        air_set_baudrate(115200)     --重新設置4G模塊和串口3波特率為115200
        start_timer(timerId_ota_check_upgrade, timerout_ota_check_upgrade , 0, 1)  --定時執行ota_check_upgrade(1)

        ota_seek_ops = 0                        --寫的位置,計算下載進度
        file_len           = 0                  --本次下載的文件長度

        set_visiable( screen_updata, 6, 0)      --設置進度條不可見
        set_visiable( screen_updata, 7, 0)      --設置進度文本不可見
        set_visiable( screen_updata, 8, 0)      --設置文件大小文本不可見
        set_enable( screen_updata, 1, 1)

        local dl_sec,dl_speed = stop_timer_download_speed()     --停止下載計時,比返回總用時秒數,每秒下載速度
        set_text(screen_updata,4,'下載速度:'.. string.format('%0.2f',dl_speed) ..'KB/s 總用時:'..dl_sec..'s ')

        set_text( screen_updata, 5, '文件等待校驗,請稍等...')
    elseif key=='timeout'             --下載超時
    then
        reset_4G()                    --重啟4G
        dl_reset_flag = 1             --重啟標志位
        air_set_baudrate(115200)      --重新設置4G模塊和串口3波特率為115200
        ota_destroy()                 --清楚ota內容

        set_text( screen_updata, 5, '下載超時,發生網絡錯誤,重新設置中...') --提示
        stop_timer_download_speed()       --停止下載計時
        set_enable( screen_updata, 1, 1)

    elseif key=='dl_file_read_retry'     -- HTTPREAD 重下
    then
        --*************************************************************
        --value:            retry: -1,601
        --要提取的值:       -1
        --                   601
        --正則表達式:       'retry: (%d*),(%d*)'
        --*************************************************************
        local httpread_retry=''
        local status=''
        local regular_e = 'retry: (.*),(%d*)'      --正則表達式
        local httpread_retry,status = string.match(value,regular_e)   --獲取的值賦給 
        if httpread_retry == '-1' and ( status == '408' or status == '601' or status == '603' )
        then
            reset_4G()
            dl_reset_flag = 1

            stop_timer_download_speed()      --停止下載計時
            set_text( screen_updata, 5, '下載超時,發生網絡錯誤,重新設置中...')    --提示
            set_enable( screen_updata, 1, 1)

        end
        ota_destroy()
    elseif key=='dl_file_head_retry'       -- HTTPHEAD 重下
    then
        --**************************************************************
        --value:            retry: -1,601
        --要提取的值:       -1
        --                   601
        --正則表達式:       'retry: (%d*),(%d*)'
        --**************************************************************
        local httphead_retry=''
        local status=''
        local regular_e = 'retry: (.*),(%d*)'      --正則表達式
        local httphead_retry,status = string.match(value,regular_e)            --獲取的值賦給 
        if httphead_retry == '-1' and ( status == '408' or status == '601' or status == '603' )
        then
            reset_4G()
            dl_reset_flag = 1

            stop_timer_download_speed()             --停止下載計時
            set_text( screen_updata, 5, '下載超時,發生網絡錯誤,重新設置中...') --提示
            set_enable( screen_updata, 1, 1)

        end
        ota_destroy()
    end
end

--[[*****************************************************************
** Function name : my_ota_write_filedata
** Descriptions  : ota數據分段寫入ota升級地址
** @file         : 文件路徑
** @data         : 待寫入的數據
** @open_mode    : 打開文件的方式
** @addr         : ota初始化地址
*****************************************************************--]]
function my_ota_write_filedata(file, data, open_mode,addr)

    local count     = 0     --每次寫的字節數
    local write_cnt = 0     --‘data’數據一共需要寫的次數

    --獲取待寫入數據的長度和數據類型
    local wrire_len, data_type = my_getdataLen_Type(data)

    local write_byte_Tb = {}

    if type(addr) == 'number'
    then

        --數據長度大于0
        if wrire_len > 0
        then
            --計算'@data'要寫多少次
            write_cnt =  math.modf(wrire_len / ota_WriteOnceSize)
            -- wrire_len 不是 ota_WriteOnceSize 的整數倍時,wrire_len = wrire_len + 1
            if wrire_len % ota_WriteOnceSize > 0
            then
                write_cnt = write_cnt + 1
            end
            my_uart_log('Lua_debug: need write allcnt -> '..write_cnt..' rn')


            for i = 1, write_cnt
            do
                --復位寫字節數組
                write_byte_Tb = {}

                --計算本次寫的個數
                count = ota_WriteOnceSize
                if i == write_cnt
                then
                    if wrire_len % ota_WriteOnceSize > 0
                    then
                        --最后一次寫入時,count為剩余數據的長度
                        count = wrire_len % ota_WriteOnceSize

                    end
                end

                --計算寫的位置
                ota_seek_ops = ota_seek_ops + count

                --顯示當前寫入(下載)進度
                ota_http_download_process( ota_seek_ops )

                my_uart_log('Lua_debug: cur write  -> '..i..'th / wrire count '..count..' rn')

                --填充寫入flash的字節數組
                for j = 0, count - 1
                do
                    if data_type == 'string'
                    then
                        --字符串類型,將每個字符轉換為字節數組
                        write_byte_Tb[j - 1] = tonumber(string.byte(data, ((i - 1) * ota_WriteOnceSize + j), ((i - 1) * ota_WriteOnceSize + j)))

                    elseif data_type == 'table'
                    then
                        --數組類型,字節賦值
                        write_byte_Tb[j] = data[((i - 1) * ota_WriteOnceSize + j)]
                    end
                end

                if i == write_cnt
                then
                    if wrire_len % ota_WriteOnceSize > 0
                    then
                        for y=count,ota_WriteOnceSize-1 do
                            write_byte_Tb[y] = 0
                        end
                    end
                end

                ota_write(write_byte_Tb)         --寫數據到內存中
            end
        end
    else

    end
end 

核心API函數

1) air_http_download(url,break_size,user_callback)

4G庫函數,HTTP下載文件。

  • url:HTTP下載資源連接。
  • break_size:單次網絡下載的包大小,單位字節(BYTE),本例程中為7K。
  • user_callback:改形參是一個函數變量,HTTP下載應答屏幕的回調函數。名稱可自定義命名,如本例程為on_http_download_file_cb。


2) on_ota_http_download_file_cb(key, value)

用戶自定義函數,HTTP下載回調函數。

  • key:HTTP響應數據類型
  • value:HTTP響應的內容
- 若key = ‘data_len’,表示HTTP下載的文件大??;value 表示為文件大小,單位byte。
- 若key = ‘data’,表示HTTP響應數據內容;value為數據內容,類型為字節數組,大小為air_http_download(url,break_size,user_callback)設置的break_size。
- 若key = ‘finish’,表示HTTP下載完成;value為文件總大小,單位byte
- 若key = ‘timeout’,表示HTTP下載超時。
- 若key = ‘dl_file_head_retry’,表示 HTTPACTION 查詢頭信息超時。若超時,內部已經處理了3次重發數據請求。

- 若key = ‘dl_file_read_retry’,表示 HTTPACTION 查詢讀取數據超時。若超時,內部已經處理了3次重發數據請求。


3) my_ota_write_filedata(file, data, open_mode)

用戶自定義函數,寫文件。本例程,將4G HTTP下載返回的數據寫在內存中。

  • file:存儲路徑,本例程中,為空。
  • data:存儲的數據,類型可以是‘數組’或‘字符串’,本例程中,4G HTTP下載返回的數據類型是數組
  • open_mode:文件打開模式:本例程中,每次寫文件,將數據寫在文件尾。

注意:本文不再闡述文件讀寫的詳細說明,可參考相應的資料,如《Lua應用-文件讀寫V1.0.pdf》


4) ota_destroy ( )

清除OTA數據:對0x800000地址寫入的數據清除。


5) ota_init (md5,filesize, addr)

視頻播放回調函數 

  • md5:字符串,固定為‘0123456789abcdef’
  • filesize:ota.bin文件的大小,單位:byte
  • addr:固定為0x800000(16進制)

如ota.bin文件大小為17542byte,則ota_init(‘0123456789abcdef’, 17542, 0x800000)。


6) ota_write(writeTb)

OTA寫入,用戶調用ota_write(writeTb),將writeTb數據寫入到0x800000地址。

  • writeTb:寫入字節數據,寫入大小為2048 byte,不足2048byte補零。寫入該地址的數據掉電后不清除。


7) ota_check_upgrade(state)

ota.bin文件校驗、解壓。當用戶將ota.bin文件傳輸完畢后,調用ota_check_upgrade(state)對ota.bin進行先校驗在解壓,解壓成功后即已經升級完成,屏幕自動重啟。

  • state:1,進入升級狀態。

 

3. OTA升級

OTA文件下載完成,則調用ota_check_upgrade(1)開始進入校驗解壓過程,代碼如程序清單 3所示:

程序清單 3 文件校驗、解壓

--[[**************************************************************
** Function name:  on_timer
** Descriptions:   定時器超時回調
******************************************************************--]]
function on_timer(timer_id)

    ......
    --延時解壓ota文件
    if timer_id == timerId_ota_check_upgrade
    then
        air_log('timer_id == timerId_ota_check_upgrade')
        ota_check_upgrade(1)       --檢查文件,并解壓,參數 1 表示升級后重啟
    end

end

--[[*******************************************************************
** Function name: on_ota_progress
** Descriptions : 解壓升級
** @status      : 解壓狀態
** @value       : 對于狀態的具體數值
**
** @開始校驗
** @status  =  1
** @value   =  0
**
** @校驗結果
** @status  =  2
** @value   =  0 ,失敗
**             1 ,成功
**
** @開始解壓
** @status  =  3
** @value   =  0~100,解壓進度
**
** @解壓結束
** @status  =  4
** @value   =  0 ,失敗
**             1 ,成功
**
** @return      : nil, 無返回值
******************************************************************--]]
function on_ota_progress(status,value)

    if status == 1
    then
        set_text(screen_updata , 5, '開始校驗')
        set_value(screen_updata, 6, 0)
    elseif status == 2
    then
        if value == 0
        then
            set_text(screen_updata , 5, '校驗失敗,文件錯誤,請檢查下載文件')
        elseif value == 1
        then
            set_text(screen_updata , 5, '校驗成功')
        end
    elseif status == 3
    then
        set_value(screen_updata, 6, value)
        set_text(screen_updata , 5, '文件解壓進度: '..value..' %')
    elseif status == 4
    then
        if value == 0
        then
            set_text(screen_updata , 5, '解壓失敗')

        elseif value == 1
        then
            set_text(screen_updata , 5, '解壓成功')
            set_value(screen_updata, 6, 100)

        end
    end
    refresh_screen()                        --刷新畫面

end

核心API函數

1) ota_check_upgrade(state)

ota.bin文件校驗、解壓。當用戶將ota.bin文件傳輸完畢后,調用ota_check_upgrade(state)對ota.bin進行先校驗在解壓,解壓成功后即已經升級完成,屏幕自動重啟。

  • state:1,進入升級狀態。

 

2) on_ota_progress(status,value)

OTA校驗、解壓回調。當用戶ota_check_upgrade(state)函數后,會自動回到該API。

  • status:狀態。1-校驗過程,2-校驗結果,3-解壓過程,4解壓結果
  • value:處理結果。
當state = 1,value 固定為0;
當state = 2,0-校驗失敗,1-校驗成功;
當state = 3,0-~100,解壓進度;
當state = 4,0-解壓失敗,1-解壓成功。

 

3) refresh_screen()

刷新屏幕。







5.3 下載工程

工程編譯成功后在輸出窗口會提示編譯成功,如圖5-5所示;

圖5-5編譯成功


在菜單欄中,文件→打開工程目錄,在‘dciot_build’目錄的‘private’拷貝到SD卡中,如圖5-6和圖5-7所示;把SD卡接上串口屏后重新上電,等到提示燒錄工程成功后,拔掉SD卡重新上電即可。

圖5-6量產向導


5-7拷貝到SD





主站蜘蛛池模板: 北京市| 武平县| 怀仁县| 鹤庆县| 万源市| 白银市| 穆棱市| 南部县| 墨脱县| 留坝县| 九龙城区| 深泽县| 额济纳旗| 武强县| 海城市| 留坝县| 枣庄市| 平山县| 赞皇县| 长宁县| 闸北区| 运城市| 紫阳县| 高密市| 定襄县| 绿春县| 射洪县| 松溪县| 介休市| 黄石市| 沾化县| 客服| 错那县| 从化市| 庆元县| 三江| 腾冲县| 长宁区| 久治县| 鹤壁市| 云林县|