本文主要介紹以下2點(diǎn):
(1) 畫(huà)面配置
(2) LUA編輯
5.2.1 畫(huà)面配置
在畫(huà)面ID0中,觸發(fā)下載、下載過(guò)程、4G信號(hào)值及運(yùn)營(yíng)商3部分組成。
觸發(fā)下載:3個(gè)按鈕控件,作為觸發(fā)下載條件。
-
控件ID1~3依次為圖片下載、視頻下載以及音頻下載。
下載過(guò)程:控件ID4~8作為下載過(guò)程的體現(xiàn):
-
文本控件ID4用于顯示下載速度(min/Kb)
-
文本控件ID5顯示下載信息
-
進(jìn)度條控件ID6為顯示下載進(jìn)度
-
文本控件ID7用于顯示下載進(jìn)度百分比
-
文本控件ID8顯示 ‘當(dāng)前已下載大小/總下載大小’,單位Kb
4G信號(hào)和運(yùn)營(yíng)商:圖標(biāo)控件控件ID10作為信號(hào)顯示、文本控件ID11用于顯示運(yùn)營(yíng)商。畫(huà)面配置如圖5-3所示:
注意:其他非關(guān)鍵控件不在一一介紹,下文不在累述
圖5-3 畫(huà)面配置
5.2.2 LUA編輯
本例程中,屏幕上電執(zhí)行初始化操作,如加載4G AT 指令的庫(kù)、初始化4G模塊、定時(shí)獲取運(yùn)營(yíng)商和信號(hào)值等。
當(dāng)用戶點(diǎn)擊圖片下載的時(shí),調(diào)用air_http_download()開(kāi)始下載文件。在下載回調(diào)函數(shù)on_http_download_file_cb()里進(jìn)行數(shù)據(jù)存儲(chǔ),顯示下載信息等。若該文件單次下載不完,會(huì)多次回調(diào)on_http_download_file_cb()函數(shù),直至下載完畢,如圖5-4所示。
圖5-4 下載流程
1 初始化
調(diào)用系統(tǒng)函數(shù)on_init()執(zhí)行代碼如程序清單 1所示:
程序清單 1 初始化
--[[*******************************************************************
** Function name: on_init
** Descriptions : 系統(tǒng)初始化時(shí),執(zhí)行此回調(diào)函數(shù)。
*******************************************************************--]]
function on_init()
dofile('Air724at.lua') --加載 http.lua 文件
uart_set_baudrate3(115200) --設(shè)置與4G模塊通訊的串口3的波特率為115200
--設(shè)置4G庫(kù)函數(shù)的命令發(fā)送函數(shù),命令回調(diào)函數(shù)、調(diào)試信息打印函數(shù)
air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)
air_hw_int() --4G模塊初始化設(shè)置
--開(kāi)啟自動(dòng)獲取型號(hào)強(qiáng)度、時(shí)間、天氣功能
start_timer(timerId_Sig_Weather, 1000 , 0, 0)
set_visiable(screen_mmedia_dl,6,0) --設(shè)置進(jìn)度條不可見(jiàn)
set_visiable(screen_mmedia_dl,7,0) --設(shè)置進(jìn)度文本不可見(jiàn)
end
--[[*******************************************************************
** Function name: on_timer
** Descriptions : 定時(shí)器超時(shí)回到調(diào)函數(shù)。
** @ timer_id : 定時(shí)器ID
*******************************************************************--]]
function on_timer(timer_id)
on_air_timer(timer_id) --4G庫(kù)函數(shù)的定時(shí)處理
--定時(shí)獲取信號(hào)強(qiáng)度
if timer_id == timerId_Sig_Weather
then
--定時(shí)器計(jì)數(shù),timer0_notify_cnt 每秒+1。
timer0_notify_cnt = timer0_notify_cnt + 1
if timer0_notify_cnt%15 == 0
then
--每15s調(diào)用一次,更新信號(hào)值
at_cops_csq()
timer0_notify_cnt = 0 --標(biāo)志位清空
end
end
end
--[[*******************************************************************
** Function name : at_cops_csq
** Descriptions : 獲取運(yùn)營(yíng)商信息、信號(hào)強(qiáng)度
** @return : nil,無(wú)返回值
*******************************************************************--]]
function at_cops_csq()
air_cmd_add('AT+COPS?','OK',1000) –獲取運(yùn)營(yíng)商
air_cmd_add('AT+CSQ' ,'OK',1000) –獲取信號(hào)
end
--[[*******************************************************************
** Function name: on_air_resp_callback
** Descriptions : 4G模塊-數(shù)據(jù)回調(diào)接口
** @key : 屏幕向4G模塊的發(fā)送請(qǐng)求
** @value : 4G模塊返回的數(shù)據(jù)
*******************************************************************--]]
function on_air_resp_callback(key, value)
if value == nil
then
return --value為空時(shí)退出
end
--*********************************************************************
--功能: 判斷 key
-- 如果 key 為空,則退出函數(shù)。
-- 因?yàn)?key 為空時(shí),下方 string.find( key , ) 是不正確的使用。
-- 以下key的處理必須不為空,
--*****************************************************************
if key == nil
then
return
end
......
--****************************************************************
--條件: 設(shè)置4G模塊波特率成功
--功能: 設(shè)置串口波特率為 921600
--****************************************************************
if string.find(key,'+IPR=921600') ~= nil and
string.find(value,'OK') ~= nil
then
uart_set_baudrate3(921600)
end
--****************************************************************
--條件: 設(shè)置4G模塊波特率成功
--功能: 設(shè)置串口波特率為 115200
--****************************************************************
if string.find(key,'+IPR=115200') ~= nil and
string.find(value,'OK') ~= nil
then
uart_set_baudrate3(115200)
end
--****************************************************************
--條件: 4G模塊返回運(yùn)營(yíng)商信息
--功能: 設(shè)置顯示運(yùn)營(yíng)商
--****************************************************************
if string.find(key,'+COPS') ~= nil and string.find(value,'+COPS') ~= nil
then
--************************************************************
--value : +COPS: 0,2,"46000",7
--要提取的值:46000
--正則表達(dá)式: '+COPS:.*,.*,"(%d*)"'
--************************************************************
local regular_e = '+COPS:.*,.*,"(%d*)"'--正則表達(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模塊返回信號(hào)強(qiáng)度信息
--功能: 設(shè)置4G模塊的信號(hào)等級(jí)
--****************************************************************
if string.find(key,'+CSQ')~=nil and string.find(value,'+CSQ')~=nil
then
--************************************************************
--value : +CSQ: 15,99
--要提取的值:15
--正則表達(dá)式: '+CSQ: (.*),.*'
--***********************************************************
local regular_e = '+CSQ: (.*),.*' --正則表達(dá)式
local my_csq = tonumber(string.match(value,regular_e))
if my_csq<=11
then
set_value( screen_main, 1, 1) --設(shè)置信號(hào)圖標(biāo)顯示第1幀
elseif my_csq>=12 and my_csq<=13
then
set_value(screen_main, 1, 2) --設(shè)置信號(hào)圖標(biāo)顯示第2幀
elseif my_csq>=14 and my_csq<=15
then
set_value( screen_main, 1, 3) --設(shè)置信號(hào)圖標(biāo)顯示第3幀
elseif my_csq>=16
then
set_value( screen_main, 1, 4) --設(shè)置信號(hào)圖標(biāo)顯示第4幀
end
end
end
--[[******************************************************************
** Function name: on_uart_recv_data3
** Descriptions : 接收串口3數(shù)據(jù)回調(diào)函數(shù),連接4G模塊。
******************************************************************--]]
function on_uart_recv_data3(packet)
--4G AT指令庫(kù)API
on_air_recv_data(packet)
end
核心API函數(shù)
1) dofile (filename)
加載文件:本例程中加載4G AT 指令的庫(kù)
2) uart_set_baudrate3(speed)
設(shè)置串口3的波特率:串口3為屏幕和4G模塊通訊的串口
3) on_air_recv_data(packet)
串口接收4G模塊的返回?cái)?shù)據(jù)的回調(diào)。
-
packet: 形參為表,字節(jié)數(shù)據(jù)。
4) air_set_callback (on_air_send_cb,on_air_resp_callback,on_air_log_cb)
設(shè)置4G庫(kù)里的回調(diào)函數(shù)。形參類型為函數(shù),參數(shù)依次為命令發(fā)送函數(shù),命令回調(diào)函數(shù)、調(diào)試信息打印函數(shù),可自定義函數(shù)名。
-
on_air_send_cb:屏幕向4G模塊發(fā)送回調(diào)函數(shù)
-
on_air_resp_callback:4G向屏幕返回?cái)?shù)據(jù)回調(diào)函數(shù)
-
on_air_log_cb:用戶調(diào)試信息回調(diào)函數(shù)調(diào)試
5) air_hw_int()
4G AT 指令的庫(kù)函數(shù),初始化4G模塊
6) at_cops_csq()
自定義封裝函數(shù),獲取運(yùn)行商和信號(hào)值
7) air_cmd_add(sendstr,ackstr,timeout,retry,callback)
-
sendstr:屏幕向4G模塊發(fā)送AT指令
-
ackstr:4G模塊應(yīng)答屏幕的請(qǐng)求
-
timeou:應(yīng)答超時(shí)
-
retry:超時(shí)重發(fā)次數(shù),可選
-
callback:應(yīng)答回調(diào)函數(shù),可選
注:如果沒(méi)有設(shè)置超時(shí)重發(fā)次數(shù),則超時(shí)時(shí)直接發(fā)送隊(duì)列中的下一條指令。
8) on_air_resp_callback(key, value)
4G應(yīng)答屏幕回調(diào)函數(shù):屏幕發(fā)送AT指令,4G應(yīng)答后均會(huì)回調(diào)該函數(shù),初始化設(shè)置:air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)。
-
key:屏幕向4G模塊發(fā)送請(qǐng)求的AT指令
-
value:4G模塊返回的數(shù)據(jù)
相關(guān)AT指令:
本例程中,涉及到獲取4G模塊初始化、運(yùn)營(yíng)商、信號(hào)值等AT交互指令回調(diào)的判斷,在on_air_resp_callback(key, value)回調(diào)函數(shù)中,判斷4G收發(fā)的相關(guān)AT指令,如下所示:
1) 網(wǎng)絡(luò)數(shù)據(jù)是否激活:
屏幕發(fā)送:AT+SAPBR=1,1。在air_hw_int()函數(shù)里發(fā)送。
屏幕接收:OK。on_air_resp_callback(key, value)函數(shù)里執(zhí)行4G返回?cái)?shù)據(jù)的判斷
2) 獲取運(yùn)營(yíng)商:
屏幕發(fā)送:AT+COPS?。在at_cops_csq()函數(shù)了發(fā)送。
屏幕接收:OK。on_air_resp_callback(key, value)函數(shù)里執(zhí)行4G返回?cái)?shù)據(jù)的判斷
3) 獲取信號(hào)值:
屏幕發(fā)送:AT+CSQ。在at_cops_csq()函數(shù)了發(fā)送。
屏幕接收:OK。on_air_resp_callback(key, value)函數(shù)里執(zhí)行4G返回?cái)?shù)據(jù)的判斷
2 HTTP下載
用戶點(diǎn)擊按鈕控件ID1~3,HTTP協(xié)議下載對(duì)應(yīng)的圖片、視頻、音頻文件。文件,每次向服務(wù)器讀取7K大小文件,然后在下載回調(diào)函里,每次以2K字節(jié)的數(shù)據(jù)寫(xiě)入文件,代碼如程序清單2所示:
程序清單 2 HTTP下載
--[[******************************************************************
** Function name : on_control_notify
** Descriptions : 系統(tǒng)回調(diào)函數(shù),用戶通過(guò)觸摸修改控件后,執(zhí)行此回調(diào)函數(shù)。
** 點(diǎn)擊按鈕控件,修改文本控件、修改滑動(dòng)條都會(huì)觸發(fā)此事件。
** @ screen : 控件觸發(fā)所在的頁(yè)面
** @return : 控件觸發(fā)的ID
** @return : 控件值
** @return : nil,無(wú)返回值
******************************************************************--]]
function on_control_notify(screen,control,value)
if screen == screen_mmedia_dl
then
if (control >= 1 and control <= 3) and value == 1
then
--停止音樂(lè)、視頻的播放、下載的圖片不顯示
picture_en = 0
stop_sound()
stop_video()
--下載過(guò)程失能下載按鈕,不允許點(diǎn)擊
set_enable(screen_mmedia_dl, 1, 0)
set_enable(screen_mmedia_dl, 2, 0)
set_enable(screen_mmedia_dl, 3, 0)
set_visiable(screen_mmedia_dl,6,1) --設(shè)置進(jìn)度條可見(jiàn)
set_visiable(screen_mmedia_dl,7,1) --設(shè)置進(jìn)度文本可見(jiàn)
set_visiable(screen_mmedia_dl, 9, 0) --設(shè)置音樂(lè)圖標(biāo)隱藏
--復(fù)位下載相關(guān)變量
file_len = 0
file_current_dl = 0
file_curt_dl_perct = 0
臨時(shí)提升波特率,提高4G和屏幕串口傳速度
air_set_baudrate(921600)
down_mode = control
set_text(screen_mmedia_dl,5,httpDown_dl_process[down_mode])
--開(kāi)始下載
air_http_download(HttpDownFile_URITb[down_mode],
7168,
on_http_download_file_cb)
end
end
end
--[[*********************************************************************
** Function name: http_download_process
** Descriptions : 計(jì)算當(dāng)前寫(xiě)入(下載)進(jìn)度
** @cur_process : 當(dāng)前下載進(jìn)度
** @return : nil, 無(wú)返回值
*********************************************************************--]]
function 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_mmedia_dl, 6, file_curt_dl_perct)
set_text(screen_mmedia_dl, 7, '下載進(jìn)度: '..file_curt_dl_perct..' %')
set_text(screen_mmedia_dl, 8, '文件大小:'..cursize..' K/'..allsize..' K')
end
--[[*********************************************************************
** Function name: on_http_download_file_cb
** Descriptions : 下載文件
** @key : key, HTTP下載返回標(biāo)識(shí)
** @value : value,4G模塊屏幕 的應(yīng)答數(shù)據(jù)
** @return : nil, 無(wú)返回值
*********************************************************************--]]
function on_http_download_file_cb(key, value)
if key=='data_len' then
file_len = value --獲取文件長(zhǎng)度
--創(chuàng)建文件
open_state = file_open( HttpDownSave_FileTb[down_mode], over_write)
start_timer_download_speed(file_len) --開(kāi)始計(jì)算下載時(shí)間
set_text( screen_mmedia_dl, 4, '') --速度顯示為空
elseif key=='data' --文件數(shù)據(jù)包
then
--分段寫(xiě)入數(shù)據(jù)
my_write_filedata(HttpDownSave_FileTb[down_mode],value,add_write)
elseif key=='finish' --下載結(jié)束
then
--重新開(kāi)啟自動(dòng)獲取信號(hào)
start_timer(timerId_Sig_Weather, 5*1000 , 0, 0)
file_close() --關(guān)閉文件
--復(fù)位相關(guān)下載變量
file_len = 0
file_current_dl = 0
file_curt_dl_perct = 0
set_value( screen_mmedia_dl, 6, 0) --初始化進(jìn)度條數(shù)值
set_text( screen_mmedia_dl, 7, '下載進(jìn)度:0%') --初始化進(jìn)度文本數(shù)值
set_text( screen_mmedia_dl , 8, '')
set_visiable( screen_mmedia_dl, 6, 0) --設(shè)置進(jìn)度條不可見(jiàn)
set_visiable( screen_mmedia_dl, 7, 0) --設(shè)置進(jìn)度文本不可見(jiàn)
--停止下載計(jì)時(shí),比返回總用時(shí)秒數(shù),每秒下載速度
local dl_sec,dl_speed = stop_timer_download_speed()
set_text(screen_mmedia_dl,4,
'下載速度:'..string.format('%0.2f',(dl_speed*60))..'KB/min')
--重新設(shè)置4G模塊和串口3波特率為115200
air_set_baudrate(115200)
--下載模式為1時(shí)顯示圖片
if down_mode == 1
then
set_text(screen_mmedia_dl,5,httpDown_dl_process_end[down_mode])
if surface ~= 0
then
destroy_surface(surface)
surface = 0
end
picture_en=1
surface = load_surface(HttpDownSave_FileTb[down_mode])
redraw()
--下載模式為2時(shí)播放視頻
elseif down_mode == 2
then
set_text(screen_mmedia_dl,5,httpDown_dl_process_end[down_mode])
picture_en = 0
stop_video()
play_video(HttpDownSave_FileTb[down_mode], 40, 75, 480, 320)
--下載模式為3時(shí)播放音樂(lè)
elseif down_mode == 3
then
set_text(screen_mmedia_dl,5,httpDown_dl_process_end[down_mode])
set_visiable(screen_mmedia_dl, 9, 1) --設(shè)置音樂(lè)圖標(biāo)顯示
picture_en = 0
stop_video()
stop_sound()
play_sound(HttpDownSave_FileTb[down_mode])
end
set_value(screen_mmedia_dl , 1, 0)
set_value(screen_mmedia_dl , 2, 0)
set_value(screen_mmedia_dl , 3, 0)
set_enable(screen_mmedia_dl , 1, 1)
set_enable(screen_mmedia_dl , 2, 1)
set_enable(screen_mmedia_dl , 3, 1)
elseif key=='timeout' --下載超時(shí)
then
start_timer(timerId_Sig_Weather, 5*1000 , 0, 0)
set_text(screen_mmedia_dl , 5, '下載超時(shí),請(qǐng)重新下載!')
dl_reset_flag = 1
set_value(screen_mmedia_dl , 1, 0)
set_value(screen_mmedia_dl , 2, 0)
set_value(screen_mmedia_dl , 3, 0)
set_enable(screen_mmedia_dl, 1, 1)
set_enable(screen_mmedia_dl, 2, 1)
set_enable(screen_mmedia_dl, 3, 1)
air_set_baudrate(115200) --重新設(shè)置4G模塊和串口3波特率為115200
stop_timer_download_speed() --停止下載計(jì)時(shí)
elseif key=='dl_file_read_retry' -- HTTPREAD 重下
then
--****************************************************************
--value :retry: -1,601
--要提取的值: -1
-- 601
--正則表達(dá)式: 'retry: (%d*),(%d*)'
--****************************************************************
local httpread_retry=''
local status=''
local regular_e = 'retry: (.*),(%d*)' --正則表達(dá)式
--獲取的值賦給
local httpread_retry,status = string.match(value,regular_e)
air_log('user r retry: '..httpread_retry..','..status)
if httpread_retry == '-1' and ( status == '408' or
status == '601' or
status == '603' )
then
reset_4G()
--提示
set_text( screen_mmedia_dl, 5, '下載超時(shí),發(fā)送網(wǎng)絡(luò)錯(cuò)誤,重新設(shè)置中...')
dl_reset_flag = 1
end
elseif key=='dl_file_head_retry' -- HTTPHEAD 重下
then
--****************************************************************
--value : retry: -1,601
--要提取的值: -1
-- 601
--正則表達(dá)式: 'retry: (%d*),(%d*)'
--****************************************************************
local httphead_retry=''
local status=''
local regular_e = 'retry: (.*),(%d*)' --正則表達(dá)式
local httphead_retry,status = string.match(value,regular_e)
air_log('user h retry: '..httpread_retry..','..status)
if httphead_retry == '-1' and ( status == '408' or
status == '601' or
status == '603' )
then
reset_4G()
set_text( screen_mmedia_dl, 5, '下載超時(shí),發(fā)送網(wǎng)絡(luò)錯(cuò)誤,重新設(shè)置中...')
dl_reset_flag = 1
end
end
end
核心API函數(shù)
1) air_http_download(url,break_size,user_callback)
-
url:HTTP下載資源連接,本例程中,將圖片、視頻以及音頻的資源路徑放在數(shù)組緩沖區(qū)中,如下所示:
local HttpDownFile_URITb =
{'http://video.gz-dc.com/logo_480320_165kV2.jpg',
'http://video.gz-dc.com/video2_62M9s.mp4',
'http://video.gz-dc.com/music503k32s.mp3'}
-
break_size:?jiǎn)未尉W(wǎng)絡(luò)下載的包大小,單位字節(jié)(BYTE),本例程中為7K
-
user_callback:改形參是一個(gè)函數(shù)變量,HTTP下載應(yīng)答屏幕的回調(diào)函數(shù)。名稱可自定義命名,如本例程為on_http_download_file_cb。
2) on_http_download_file_cb(key, value)
用戶自定義函數(shù),HTTP下載回調(diào)函數(shù)。
-
key:HTTP響應(yīng)數(shù)據(jù)類型
-
value:HTTP響應(yīng)的內(nèi)容
若key = ‘data_len’,表示HTTP下載的文件大小;value 表示為文件大小,單位byte。
若key = ‘data’,表示HTTP響應(yīng)數(shù)據(jù)內(nèi)容;value為數(shù)據(jù)內(nèi)容,類型為字節(jié)數(shù)組,大小為air_http_download(url,break_size,user_callback)設(shè)置的break_size。
若key = ‘finish’,表示HTTP下載完成;value為文件總大小,單位byte
若key = ‘timeout’,表示HTTP下載超時(shí)。
若key = ‘dl_file_head_retry’,表示 HTTPACTION 查詢頭信息超時(shí)。若超時(shí),內(nèi)部已經(jīng)處理了3次重發(fā)數(shù)據(jù)請(qǐng)求。
若key = ‘dl_file_read_retry’,表示 HTTPACTION 查詢讀取數(shù)據(jù)超時(shí)。若超時(shí),內(nèi)部已經(jīng)處理了3次重發(fā)數(shù)據(jù)請(qǐng)求。
3) my_write_filedata(file, data, open_mode)
用戶自定義函數(shù),寫(xiě)文件。本例程,將4G HTTP下載返回的數(shù)據(jù)寫(xiě)在文件中。
-
file:存儲(chǔ)路徑,本例程中,將圖片、視頻以及音頻下載后的文件指定存儲(chǔ)在屏內(nèi)(3為屏內(nèi)盤(pán)符),路徑定義如下所示:
local HttpDownSave_FileTb = {'3:/image.jpg','3:/bench.mp4', '3:/my dream.mp
3'}
-
data:存儲(chǔ)的數(shù)據(jù),類型可以是‘?dāng)?shù)組’或‘字符串’,本例程中,4G HTTP下載返回的數(shù)據(jù)類型是數(shù)組
-
open_mode:文件打開(kāi)模式:本例程中,每次寫(xiě)文件,將數(shù)據(jù)寫(xiě)在文件尾。
注意:本文不再闡述文件讀寫(xiě)的詳細(xì)說(shuō)明,可參考相應(yīng)的資料,如《Lua應(yīng)用-文件讀寫(xiě)V1.0.pdf》
4) load_surface(filename)
-
filename圖片文件路徑,支持JPEG/PNG
本例程中,當(dāng)下載完成key=‘finish’時(shí),且當(dāng)前下載的是圖片文件(down_mode = 1),調(diào)用此API申請(qǐng)圖層繪圖,并調(diào)用redraw()刷新觸發(fā)on_draw()顯示。
注意:本文不再闡述繪圖的詳細(xì)說(shuō)明,可參考相應(yīng)的資料,如《LUA教程7-繪圖API使用說(shuō)明.pdf》
5) destroy_surface (surface)
銷毀圖層,W系列支持、M系列 >= V6.1.241.00、F系列不支持
6) play_sound(filename)
本例程中,當(dāng)下載完成key=‘finish’時(shí),且當(dāng)前下載的是音頻文件(down_mode = 3),調(diào)用此API播放音頻。若播放完畢,觸發(fā)音頻播放結(jié)束通知on_audio_callback(),在重復(fù)播放該音頻文件。
注意:本文不再闡述音頻的詳細(xì)說(shuō)明,,可參考相應(yīng)的資料,如 《M系列-播放SD卡里視頻、音頻文件 V1.0.pdf》
7) play_video(file,left,top,width,height)
-
file:文件路徑,支持MP4
-
left:起始坐標(biāo)x
-
top:起始坐標(biāo)y
-
width:視頻顯示的寬度
-
height:視頻顯示的高度
本例程中,當(dāng)下載完成key=‘finish’時(shí),且當(dāng)前下載的是視頻文件(down_mode = 2),調(diào)用此API播放視頻,播放過(guò)程觸發(fā)on_video_notify(msg,v1, v2)。若msg=0,表示播放完畢,在重復(fù)播放該視頻文件。
注意:本文不再闡述視頻的詳細(xì)說(shuō)明,,可參考相應(yīng)的資料,如 《M系列-播放SD卡里視頻、音頻文件 V1.0.pdf》
8) on_video_notify(msg,v1, v2)
視頻播放回調(diào)函數(shù)
-
msg:1-播放中,0-播放完畢
-
v1:當(dāng)前播放進(jìn)度,當(dāng)前已播時(shí)長(zhǎng),單位s
-
v2:播放總進(jìn)度, 當(dāng)前視頻總時(shí)長(zhǎng),單位s
9) on_audio_callback (state)
聲音播放結(jié)束回調(diào)通知,state保留未使用。
10) on_draw(screen)
當(dāng)界面的顯示內(nèi)容需要更新時(shí),系統(tǒng)自動(dòng)調(diào)用此函數(shù),用戶在此函數(shù)中添加自定義的繪圖操作。用戶繪制的內(nèi)容疊加在畫(huà)面內(nèi)容之上。此函數(shù)為系統(tǒng)回調(diào)函數(shù),用戶不要直接調(diào)用。下面幾種情況會(huì)觸發(fā)此函數(shù):
-
界面有動(dòng)畫(huà)播放、視頻播放、RTC時(shí)間顯示的動(dòng)態(tài)刷新;
-
用戶操作屏幕控件控件;
-
通過(guò)LUA腳本或串口指令更新控件;
-
通過(guò)執(zhí)行redraw;
界面上有任何變化,都會(huì)觸發(fā)此函數(shù)
11) draw_surface (surface,dstx,dsty,width,height,srcx,srcy)
繪制圖層,相比于draw_image_file,此方法效率較高,W系列支持、M系列 >= V6.1.241.00支持(裁剪顯示)、F系列不支持
-
surface圖層資源指針
-
dstx圖片顯示X坐標(biāo)
-
dsty圖片顯示Y坐標(biāo)
-
width圖片顯示寬度[可選]
-
height圖片顯示高度[可選]
-
srcx圖片裁剪X坐標(biāo)[可選]
-
srcy圖片裁剪Y坐標(biāo)[可選]
例如:
平鋪顯示:draw_surface(surface, dstx, dsty)
縮放顯示:draw_surface(surface, dstx, dsty, width, height),此方法M型不支持
裁剪顯示:draw_surface(surface, dstx, dsty, width, height ,srcx, srcy)