久久精品国产精品国产一区,少妇扒开毛毛自慰喷水,国产精品无码电影在线观看 ,久久天天躁夜夜躁狠狠85麻豆

思澈科技軟件開(kāi)發(fā)工具包  2.20
圖形應(yīng)用框架

名詞解釋

App - 指一個(gè)應(yīng)用程序的GUI部分,即MVC模型中的View部分,它是page的集合。支持內(nèi)置App以及動(dòng)態(tài)安裝App。
Page - 指一個(gè)顯示頁(yè)面,允許用戶在上面創(chuàng)建控件、注冊(cè)輸入設(shè)備處理、鏈接數(shù)據(jù)服務(wù)并顯示,(注意這不是lv_page)。每個(gè)page擁有獨(dú)立的lv_screen,狀態(tài)處理回調(diào)函數(shù),以及轉(zhuǎn)場(chǎng)動(dòng)畫(huà)
lv_screen - littleVGL上的虛擬屏幕,一個(gè)物理LCD上同一時(shí)間只能顯示一個(gè)lv_screen的內(nèi)容,輸入設(shè)備只能操作當(dāng)前顯示的lv_screen

功能

  • 提供App之間、App內(nèi)部的顯示界面的調(diào)度以及轉(zhuǎn)場(chǎng)動(dòng)畫(huà)
  • 提供App打開(kāi)順序、App內(nèi)部Page打開(kāi)順序的記錄
  • 支持后臺(tái)刷新App/page

限制

  • 一個(gè)App至少包含一個(gè)page
  • 一個(gè)page可以從屬任意App
  • 同時(shí)只能有一個(gè)page處于active狀態(tài)
  • 同時(shí)只能有一個(gè)App處于avtive狀態(tài)

Page間的調(diào)度

AppA、AppB各有3個(gè)page,分別表示為A1~A3,B1~B3 下圖顯示了各種調(diào)度情況下各Page的最終狀態(tài)(注意此處忽略了過(guò)渡態(tài))

Figure 1: Page間的調(diào)度

Page狀態(tài)機(jī)和各狀態(tài)的實(shí)現(xiàn)規(guī)范

  • entryfunction() - 啟動(dòng)page函數(shù), 如果不需要參數(shù),此步驟可以并入on_start
    • 分配內(nèi)存
    • 接收處理參數(shù)
  • on_start()
    • 創(chuàng)建/布局當(dāng)前page內(nèi)的lv控件
    • 訂閱service
    • 向service request 數(shù)據(jù)
  • on_resume()
    • 運(yùn)行app內(nèi)部的lv_task/timer
  • on_pause()
    • 停止(或刪除)app內(nèi)部lv_task
  • on_stop()
    • 退訂service
    • 釋放內(nèi)存
    • 創(chuàng)建的lv控件會(huì)自動(dòng)刪除,可以不用主動(dòng)刪除
Figure 2: Page內(nèi)部狀態(tài)機(jī)

圖片示例中其他處理函數(shù)說(shuō)明:

  • xxx_service_callback()
    Page內(nèi)訂閱服務(wù)的處理函數(shù)
    See also
    Data service interface
  • Page’s lv_task()
    Page內(nèi)可選的lv_task處理函數(shù)
  • lv_obj_callback()
    littleVGL object的事件處理函數(shù)

常用API說(shuō)明

GUI Application Framework

Application example

typedef struct
{
lv_obj_t *title_text;
lv_obj_t *img_arrow;
lv_img_dsc_t *p_img_arrow_dsc;
datac_handle_t srv_handle;
uint32_t last_degree;
} app_compass_t;
static app_compass_t *p_compass = NULL;
static void compass_request_data(void)
{
data_service_init_msg(&msg, MSG_SRV_COMPASS_CUR_VAL_GET_REQ, 0);
datac_send_msg(p_compass->srv_handle, &msg);
}
static int compass_data_callback(data_callback_arg_t *arg)
{
switch (arg->msg_id)
{
case MSG_SERVICE_SUBSCRIBE_RSP:
{
data_rsp_t *rsp;
rsp = (data_rsp_t *)arg->data;
RT_ASSERT(rsp);
/* Subscribe data error*/
if (rsp->result < 0)
{
p_compass->srv_handle = DATA_CONN_INVALID_ID;
}
else
{
/* Request compass degree*/
compass_request_data();
}
break;
}
case MSG_SRV_COMPASS_CUR_VAL_GET_RSP:
{
compass_data_t *data = (compass_data_t *)arg->data;
if(data)
{
/* Valid data*/
if(data->accuracy > 0)
{
uint32_t degree = (3600 - data->azimuth * 10);
/* Need update UI*/
if(degree != p_compass->last_degree)
{
char text_buf[20];
/* Update compass arrow angle*/
lv_img_set_angle(p_compass->img_arrow, degree);
/* Update compass angle label text*/
sprintf(text_buf, "%d d", degree);
lv_label_set_text(p_compass->title_text, text_buf);
p_compass->last_degree = degree;
}
}
}
/* Request compass degree again*/
compass_request_data();
}
break;
default:
break;
}
return 0;
}
static void on_start(void)
{
if (NULL != p_compass)
rt_free(p_compass);
/* Alloc app memory*/
p_compass = rt_malloc(sizeof(app_compass_t));
memset(p_compass, 0, sizeof(app_compass_t));
/* Create UI widgets*/
{
lv_obj_t *obj;
obj = lv_img_create(lv_scr_act(), NULL);
lv_img_set_src(obj, LV_EXT_IMG_GET(compass_bg));
lv_obj_align(obj, NULL, LV_ALIGN_CENTER, 0, 0);
obj = lv_img_create(lv_scr_act(), NULL);
p_compass->img_arrow = obj;
obj = lv_label_create(lv_scr_act(), NULL);
lv_label_set_text(obj, "230 d");
lv_obj_align(obj, NULL, LV_ALIGN_IN_TOP_LEFT, 10, 10);
p_compass->title_text = obj;
}
/* Subscribe service data*/
p_compass->srv_handle = ui_datac_subscribe("COMP",
compass_data_callback, 0);
}
static void on_pause(void)
{
/*Free SRAM image to save heap memory*/
lv_img_set_src(p_compass->img_arrow, NULL);
if(NULL != p_compass->p_img_arrow_dsc)
{
lv_img_buf_free(p_compass->p_img_arrow_dsc);
p_compass->p_img_arrow_dsc = NULL;
}
}
static void on_resume(void)
{
const lv_img_dsc_t *org_img;
org_img = LV_EXT_IMG_GET(compass_arrow);
/*Copy image to SRAM to speed up*/
p_compass->p_img_arrow_dsc = lv_img_buf_alloc(org_img->header.w,
org_img->header.h,
org_img->header.cf);
memcpy((void *)p_compass->p_img_arrow_dsc->data, org_img->data, org_img->data_size);
/* Update image's source and coordinates.*/
lv_img_set_src(p_compass->img_arrow, p_compass->p_img_arrow_dsc);
lv_obj_align(p_compass->img_arrow, NULL, LV_ALIGN_CENTER, 0, 0);
}
static void on_stop(void)
{
/*unsubscribe service before exit app*/
if (DATA_CONN_INVALID_ID != p_compass->srv_handle)
{
datac_unsubscribe(p_compass->srv_handle);
p_compass->srv_handle = DATA_CONN_INVALID_ID;
}
if (NULL != p_compass)
{
rt_free(p_compass);
p_compass = NULL;
}
}
static void msg_handler(gui_app_msg_type_t msg, void *param)
{
switch (msg)
{
on_start();
break;
on_resume();
break;
on_pause();
break;
on_stop();
break;
default:
break;
}
}
static int app_main(int argc, char *argv[])
{
/* Regist root page message handler */
gui_app_regist_msg_handler(argv[0], msg_handler);
return 0;
}
/* Regist compass app */
BUILTIN_APP_EXPORT("compass", LV_EXT_IMG_GET(img_compass), "compass", app_main);
ui_datac_subscribe
datac_handle_t ui_datac_subscribe(datac_handle_t handle, char *name, data_callback_t cbk, uint32_t user_data)
Subscribe data service in GUI thread context.
data_service_init_msg
uint8_t * data_service_init_msg(data_msg_t *msg, uint16_t msg_id, uint16_t body_len)
Initialize data service message.
GUI_APP_MSG_ONPAUSE
@ GUI_APP_MSG_ONPAUSE
Definition: gui_app_fwk2.h:44
GUI_APP_MSG_ONRESUME
@ GUI_APP_MSG_ONRESUME
Definition: gui_app_fwk2.h:37
data_msg_t
data service message structure type
Definition: data_service.h:179
data
uint8_t data[]
Definition: bf0_ble_ancs.h:227
data_callback_arg_tag::data
uint8_t * data
Definition: data_service.h:128
BUILTIN_APP_EXPORT
#define BUILTIN_APP_EXPORT(name, icon, id, entry)
Definition: gui_app_fwk.h:129
GUI_APP_MSG_ONSTOP
@ GUI_APP_MSG_ONSTOP
Definition: gui_app_fwk2.h:51
GUI_APP_MSG_ONSTART
@ GUI_APP_MSG_ONSTART
Definition: gui_app_fwk2.h:30
data_rsp_t
Parameter for response messages.
Definition: data_service.h:156
gui_app_msg_type_t
gui_app_msg_type_t
Page state notification messages.
Definition: gui_app_fwk2.h:25
data_callback_arg_tag
Definition: data_service.h:125
datac_send_msg
rt_err_t datac_send_msg(datac_handle_t handle, data_msg_t *msg)
Send message to service provider.
data_callback_arg_tag::msg_id
uint16_t msg_id
Definition: data_service.h:126
datac_unsubscribe
#define datac_unsubscribe(handle)
Unsubscribe to service.
Definition: data_service_subscriber.h:133