QPPc menu过程
来源:互联网 发布:新疆移动4g网络什么时候开通 编辑:程序博客网 时间:2024/06/01 20:09
首先menu_id定义:
// menu idtypedef enum{ menu_start, menu_main, menu_gap, menu_gap_create_connection, menu_gap_disconnection, menu_gap_bond, menu_gap_unpair, menu_gatt, menu_gatt_disc_all_svc, menu_gatt_disp_all_svc, menu_smp, menu_smp_sec_lvl_set, menu_smp_io_cap_set, menu_smp_tk_input, menu_htpc, menu_htpc_enable, menu_htpt, menu_blpc, menu_blpc_enable, menu_blps, menu_hrpc, menu_hrpc_enable, menu_qppc, menu_qppc_enable, menu_hrpt, menu_glpc, menu_glpc_enable, menu_glps, menu_findl, menu_findl_enable, menu_findt, menu_proxm, menu_proxm_enable, menu_proxr, menu_tipc, menu_tipc_enable, menu_tips, menu_hogph, menu_hogpbh_enable, menu_hogprh_enable, menu_hogpd, menu_scppc, menu_scppc_enable, menu_scpps, menu_disc, menu_disc_enable, menu_diss, menu_basc, menu_basc_enable, menu_bass, menu_cscpc, menu_cscpc_enable, menu_cscpc_ctnl_pt, menu_rscpc, menu_rscpc_enable, menu_rscpc_ctnl_pt, menu_anpc, menu_anpc_enable, menu_anpc_alert, menu_paspc, menu_paspc_enable, menu_max} MENU_ID;
由menu 主函数 app_menu_cb显示title,然后使用下面的函数调用menu
QPRINTF("*------------------------\r\n");app_env.menu_id = menu_main;app_menu_show();
此时输出:
app_menu_show(),app_env.menu_id=0 // menu_start
*------------------------
* QN BLE Demo Application
*
* Version:
* AP1.3.6HL6.4.1LL6.4.0
* BD Address:
* 087cbe0e4a74
*
* @ Nov 26 2015, 11:16:00
*------------------------
app_menu_show(),app_env.menu_id=1 // menu_main
*------------------------
* QN BLE Main Menu
* 1. GAP Menu
* 2. GATT Menu
* 3. SMP Menu
* h. QPPC Menu
* r. Upper Menu
* s. Show Menu
*------------------------
QN BLE is ready.
void app_menu_show(void){ switch (app_env.menu_id) { case menu_main: app_menu_show_main();
static void app_menu_show_main(void){app_menu_show_line();QPRINTF("* QN BLE Main Menu\r\n"); QPRINTF("* 1. GAP Menu\r\n");#if QN_SVC_DISC_USED QPRINTF("* 2. GATT Menu\r\n");#endif#if QN_SECURITY_ONQPRINTF("* 3. SMP Menu\r\n");#endif#if BLE_HT_COLLECTOR QPRINTF("* 4. HTPC Menu\r\n");#endif#if BLE_BP_COLLECTOR QPRINTF("* 5. BLPC Menu\r\n");#endif#if BLE_HR_COLLECTOR QPRINTF("* 6. HRPC Menu\r\n");#endif#if BLE_GL_COLLECTOR QPRINTF("* 7. GLPC Menu\r\n");#endif#if BLE_FINDME_LOCATOR QPRINTF("* 8. FMPL Menu\r\n");#endif#if BLE_PROX_MONITOR QPRINTF("* 9. PROXM Menu\r\n");#endif#if BLE_TIP_CLIENT QPRINTF("* a. TIPC Menu\r\n");#endif#if (BLE_HID_BOOT_HOST || BLE_HID_REPORT_HOST) QPRINTF("* b. HOGH Menu\r\n");#endif#if BLE_SP_CLIENT QPRINTF("* c. SCPPC Menu\r\n");#endif#if BLE_DIS_CLIENT QPRINTF("* d. DISC Menu\r\n");#endif#if BLE_BATT_CLIENT QPRINTF("* e. BASC Menu\r\n");#endif#if BLE_AN_CLIENT QPRINTF("* f. ANPC Menu\r\n");#endif#if BLE_CSC_COLLECTOR QPRINTF("* h. CSCPC Menu\r\n");#endif#if BLE_RSC_COLLECTOR QPRINTF("* i. RSCPC Menu\r\n");#endif#if BLE_PAS_CLIENT QPRINTF("* g. PASPC Menu\r\n");#endif#if BLE_QPP_CLIENT QPRINTF("* h. QPPC Menu\r\n");#endif QPRINTF("* r. Upper Menu\r\n"); QPRINTF("* s. Show Menu\r\n");app_menu_show_line();}
*************************************************************
以上完成了menu的main显示,下面是有uart输入时的动作:
static int app_uart_data_ind_handler(ke_msg_id_t const msgid, struct app_uart_data_ind const *ind, ke_task_id_t const dest_id, ke_task_id_t const src_id){ switch (ke_state_get(dest_id)) { case APP_INIT: break; case APP_IDLE: default:#if QN_EACI app_eaci_msg_hdl((src_id >> 8) & 0xFF, src_id & 0xFF, ind->len, ind->data);#elif QN_DEMO_MENU if (ind->len != 0) { memcpy(app_env.input, ind->data, ind->len); app_menu_hdl();
执行app_menu_hdl():
void app_menu_hdl(void){ switch (app_env.menu_id) { case menu_start: break; case menu_main: app_menu_handler_main(); break; case menu_gap: app_menu_handler_gap(); break;#if QN_SVC_DISC_USED case menu_gatt: app_menu_handler_gatt(); break;#endif#if QN_SECURITY_ONcase menu_smp: app_menu_handler_smp(); break;#endif#if BLE_QPP_CLIENT case menu_qppc: app_menu_handler_qppc(); break;#endif#if BLE_PAS_CLIENT case menu_paspc: app_menu_handler_paspc(); break;#endif#if BLE_AN_CLIENT case menu_anpc: app_menu_handler_anpc(); break; case menu_anpc_alert: app_menu_handler_anpc_alert(); break;#endif#if BLE_HT_COLLECTOR case menu_htpc: app_menu_handler_htpc(); break;#endif#if BLE_BP_COLLECTOR case menu_blpc: app_menu_handler_blpc(); break;#endif#if BLE_HR_COLLECTOR case menu_hrpc: app_menu_handler_hrpc(); break;#endif#if BLE_GL_COLLECTOR case menu_glpc: app_menu_handler_glpc(); break;#endif#if BLE_FINDME_LOCATOR case menu_findl: app_menu_handler_findl(); break;#endif#if BLE_PROX_MONITOR case menu_proxm: app_menu_handler_proxm(); break;#endif#if BLE_TIP_CLIENT case menu_tipc: app_menu_handler_tipc(); break;#endif#if (BLE_HID_BOOT_HOST || BLE_HID_REPORT_HOST) case menu_hogph: app_menu_handler_hogph(); break;#endif#if BLE_SP_CLIENT case menu_scppc: app_menu_handler_scppc(); break;#endif#if BLE_DIS_CLIENT case menu_disc: app_menu_handler_disc(); break;#endif#if BLE_BATT_CLIENT case menu_basc: app_menu_handler_basc(); break;#endif#if BLE_CSC_COLLECTOR case menu_cscpc: app_menu_handler_cscpc(); break; case menu_cscpc_ctnl_pt: app_menu_handler_cscpc_ctnl_pt(); break;#endif#if BLE_RSC_COLLECTOR case menu_rscpc: app_menu_handler_rscpc(); break; case menu_rscpc_ctnl_pt: app_menu_handler_rscpc_ctnl_pt(); break;#endif case menu_gap_bond: case menu_gap_unpair: case menu_gap_create_connection: case menu_gap_disconnection:#if QN_SVC_DISC_USED case menu_gatt_disc_all_svc:#endif case menu_htpc_enable: case menu_blpc_enable: case menu_hrpc_enable: case menu_glpc_enable: case menu_findl_enable: case menu_proxm_enable: case menu_tipc_enable: case menu_hogpbh_enable: case menu_hogprh_enable: case menu_scppc_enable: case menu_disc_enable: case menu_basc_enable: case menu_cscpc_enable: case menu_rscpc_enable: case menu_anpc_enable: case menu_paspc_enable: case menu_qppc_enable: app_menu_handler_gap_dev_select(); break;#if (QN_SECURITY_ON) case menu_smp_sec_lvl_set: app_menu_handler_smp_sec_lvl_set(); break; case menu_smp_io_cap_set: app_menu_handler_smp_iocap_set(); break; case menu_smp_tk_input: app_menu_handler_smp_tk_input(); break;#endif case menu_htpt: case menu_blps: case menu_hrpt: case menu_glps: case menu_findt: case menu_proxr: case menu_tips: case menu_hogpd: case menu_scpps: case menu_diss: case menu_bass: default: break; }}
此时为menu_main,执行app_menu_handler_main();
static void app_menu_handler_main(void){ switch (app_env.input[0]) { case '1': app_env.menu_id = menu_gap; break;#if QN_SVC_DISC_USED case '2': app_env.menu_id = menu_gatt; break;#endif#if (QN_SECURITY_ON)case '3': app_env.menu_id = menu_smp; break;#endif#if BLE_HT_COLLECTOR case '4': app_env.menu_id = menu_htpc; break;#endif#if BLE_BP_COLLECTOR case '5': app_env.menu_id = menu_blpc; break;#endif#if BLE_HR_COLLECTOR case '6': app_env.menu_id = menu_hrpc; break;#endif#if BLE_GL_COLLECTOR case '7': app_env.menu_id = menu_glpc; break;#endif#if BLE_FINDME_LOCATOR case '8': app_env.menu_id = menu_findl; break;#endif#if BLE_PROX_MONITOR case '9': app_env.menu_id = menu_proxm; break;#endif#if BLE_TIP_CLIENT case 'a': app_env.menu_id = menu_tipc; break;#endif#if (BLE_HID_BOOT_HOST || BLE_HID_REPORT_HOST) case 'b': app_env.menu_id = menu_hogph; break;#endif#if BLE_SP_CLIENT case 'c': app_env.menu_id = menu_scppc; break;#endif#if BLE_DIS_CLIENT case 'd': app_env.menu_id = menu_disc; break;#endif#if BLE_BATT_CLIENT case 'e': app_env.menu_id = menu_basc; break;#endif#if BLE_AN_CLIENT case 'f': app_env.menu_id = menu_anpc; break;#endif#if BLE_CSC_COLLECTOR case 'h': app_env.menu_id = menu_cscpc; break;#endif#if BLE_RSC_COLLECTOR case 'i': app_env.menu_id = menu_rscpc; break;#endif#if BLE_PAS_CLIENT case 'g': app_env.menu_id = menu_paspc; break;#endif#if BLE_QPP_CLIENT case 'h': app_env.menu_id = menu_qppc; break;#endif case 'r': case 's': default: break; } app_menu_show();}
此时输入1进入menu_gap,同以上步骤,执行app_menu_handler_gap(),
输出:
app_menu_show(),app_env.menu_id=2
*------------------------
* QN BLE GAP Menu
* 1. Inquiry Start
* 2. Inquiry Stop
* 5. Create Connection
* 6. Disconnection
* 7. Pair Request
* 8. UnPair
*------------------------
此时输入1,开始扫描,
static void app_menu_handler_gap(void){ switch (app_env.input[0]) { case '1': app_gap_dev_inq_req(GAP_GEN_INQ_TYPE, QN_ADDR_TYPE); break; case '2': app_gap_dev_inq_cancel_req(); break;#if (BLE_PERIPHERAL) case '3': app_gap_adv_start_req(GAP_GEN_DISCOVERABLE|GAP_UND_CONNECTABLE, app_env.adv_data, app_set_adv_data(GAP_GEN_DISCOVERABLE), app_env.scanrsp_data, app_set_scan_rsp_data(app_get_local_service_flag()), GAP_ADV_FAST_INTV1, GAP_ADV_FAST_INTV2); break; case '4': app_gap_adv_stop_req(); break;#endif case '5': app_env.menu_id = menu_gap_create_connection; app_menu_show(); break; case '6': app_env.menu_id = menu_gap_disconnection; app_menu_show(); break;#if (QN_SECURITY_ON) case '7': app_env.menu_id = menu_gap_bond; app_menu_show(); break;#endif case '8': app_env.menu_id = menu_gap_unpair; app_menu_show(); break; case 'r': app_env.menu_id = menu_main; case 's': default: app_menu_show(); break; }}
执行app_gap_dev_inq_req(), 返回扫描结果,执行:
int app_gap_dev_scan_result_handler(ke_msg_id_t const msgid, struct gap_adv_report_evt const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id){ struct app_adv_data adv_data; QPRINTF("%d. %c %02X%02X%02X%02X%02X%02X", app_env.inq_idx, param->evt.adv_rep[0].adv_addr_type ? 'R' : 'P', param->evt.adv_rep[0].adv_addr.addr[5], param->evt.adv_rep[0].adv_addr.addr[4], param->evt.adv_rep[0].adv_addr.addr[3], param->evt.adv_rep[0].adv_addr.addr[2], param->evt.adv_rep[0].adv_addr.addr[1], param->evt.adv_rep[0].adv_addr.addr[0]); app_parser_adv_data((uint8_t *)param->evt.adv_rep[0].data, param->evt.adv_rep[0].data_len, &adv_data); if (adv_data.flag & AD_TYPE_NAME_BIT) { QPRINTF(" %s", adv_data.name); } QPRINTF("\r\n"); app_env.inq_idx++; return(KE_MSG_CONSUMED);}
/* This handler is used to inform the application that the inquiry process has completed. **************************************************************************************** */#if (BLE_CENTRAL || BLE_OBSERVER)int app_gap_dev_inq_cmp_handler(ke_msg_id_t const msgid, struct gap_event_common_cmd_complete const *param, ke_task_id_t const dest_id, ke_task_id_t const src_id){ QPRINTF("Total %d devices found.\r\n", app_env.inq_idx); ke_state_set(TASK_APP, APP_IDLE); app_task_msg_hdl(msgid, param); return(KE_MSG_CONSUMED);}#endif
输出:
0. P 087CBE000001 NXP QPPS
Total 1 devices found.
输入5,app_env.menu_id = menu_gap_create_connection; 执行:app_menu_handler_gap_dev_select
static void app_menu_handler_gap_dev_select(void){ if (app_env.input[0] - '0' < BLE_CONNECTION_MAX) { app_env.select_idx = app_env.input[0] - '0'; switch (app_env.menu_id) {#if (QN_SECURITY_ON) case menu_gap_bond: { struct bd_addr addr; uint8_t auth; if (app_get_bd_addr_by_idx(app_env.select_idx, &addr)) { /// Authentication Requirements switch (app_env.sec_lvl_set) { case GAP_SEC1_AUTH_PAIR_ENC: auth = SMP_AUTH_REQ_MITM_BOND; break; case GAP_SEC1_NOAUTH_PAIR_ENC: auth = SMP_AUTH_REQ_NO_MITM_BOND; break; case GAP_NO_SEC: default: auth = SMP_AUTH_REQ_NO_MITM_BOND; break; } app_gap_bond_req(&addr, SMP_OOB_AUTH_DATA_NOT_PRESENT, auth, app_env.iocap_set); } else QPRINTF("The selected device is not in connected status.\r\n"); } break; case menu_gap_unpair: { struct bd_addr addr; if (app_get_bd_addr_by_idx(app_env.select_idx, &addr)) { app_gap_unpair_req(&addr, app_get_bond_nb()); // TODO: Deleted paired information form NVDS QPRINTF("Updated link bonded info success.\r\n"); } else QPRINTF("The selected device is not in bonded status.\r\n"); } break;#endif case menu_gap_create_connection: if (app_get_link_nb() != BLE_CONNECTION_MAX) { app_gap_le_create_conn_req(&app_env.inq_addr[app_env.select_idx], app_env.addr_type[app_env.select_idx], QN_ADDR_TYPE, GAP_INIT_CONN_MIN_INTV, GAP_INIT_CONN_MAX_INTV, GAP_CONN_SUPERV_TIMEOUT); } else { QPRINTF("Connection Limit Exceeded\r\n"); } break; case menu_gap_disconnection: if (app_env.input[0] == 'a') { for (uint8_t idx = 0; idx < BLE_CONNECTION_MAX; idx++) { uint16_t conhdl = app_get_conhdl_by_idx(idx); if (conhdl != 0xFFFF) { app_gap_discon_req(conhdl); } } } else { uint16_t conhdl = app_get_conhdl_by_idx(app_env.select_idx); if (conhdl != 0xFFFF) app_gap_discon_req(conhdl); else QPRINTF("The selected device is not in connected status.\r\n"); } break; case menu_gatt_disc_all_svc: { uint16_t conhdl = app_get_conhdl_by_idx(app_env.select_idx); if (conhdl != 0xFFFF) {#if QN_SVC_DISC_USED app_env.dev_rec[app_env.select_idx].nb_svc = 0; app_gatt_disc_svc_req(GATT_DISC_ALL_SVC, conhdl);#endif } else QPRINTF("The selected device is not in connected status.\r\n"); } break; case menu_htpc_enable: case menu_blpc_enable: case menu_hrpc_enable: case menu_glpc_enable: case menu_findl_enable: case menu_proxm_enable: case menu_tipc_enable: case menu_hogpbh_enable: case menu_hogprh_enable: case menu_scppc_enable: case menu_disc_enable: case menu_basc_enable: case menu_cscpc_enable: case menu_rscpc_enable: case menu_anpc_enable: case menu_paspc_enable: case menu_qppc_enable: QPRINTF("Select success.\r\n"); break; default: break; } } switch (app_env.input[0]) { case 'r': default: if (app_env.menu_id == menu_htpc_enable) app_env.menu_id = menu_htpc; else if (app_env.menu_id == menu_qppc_enable) app_env.menu_id = menu_qppc; else if (app_env.menu_id == menu_blpc_enable) app_env.menu_id = menu_blpc; else if (app_env.menu_id == menu_hrpc_enable) app_env.menu_id = menu_hrpc; else if (app_env.menu_id == menu_glpc_enable) app_env.menu_id = menu_glpc; else if (app_env.menu_id == menu_findl_enable) app_env.menu_id = menu_findl; else if (app_env.menu_id == menu_proxm_enable) app_env.menu_id = menu_proxm; else if (app_env.menu_id == menu_tipc_enable) app_env.menu_id = menu_tipc; else if (app_env.menu_id == menu_hogpbh_enable) app_env.menu_id = menu_hogph; else if (app_env.menu_id == menu_hogprh_enable) app_env.menu_id = menu_hogph; else if (app_env.menu_id == menu_scppc_enable) app_env.menu_id = menu_scppc; else if (app_env.menu_id == menu_disc_enable) app_env.menu_id = menu_disc; else if (app_env.menu_id == menu_basc_enable) app_env.menu_id = menu_basc; else if (app_env.menu_id == menu_cscpc_enable) app_env.menu_id = menu_cscpc; else if (app_env.menu_id == menu_rscpc_enable) app_env.menu_id = menu_rscpc; else if (app_env.menu_id == menu_anpc_enable) app_env.menu_id = menu_anpc; else if (app_env.menu_id == menu_paspc_enable) app_env.menu_id = menu_paspc; else if (app_env.menu_id == menu_gatt_disc_all_svc) app_env.menu_id = menu_gatt; else app_env.menu_id = menu_gap; break; case 's': app_menu_show(); break; }}
其中就在app_menu_show()里执行app_menu_show_gap_inq_record,输出:
Inquiry device record:
0. 087CBE000001
Please input the device index:
输入数字0后执行:app_menu_handler_gap_dev_select
static void app_menu_handler_gap_dev_select(void){ if (app_env.input[0] - '0' < BLE_CONNECTION_MAX) { app_env.select_idx = app_env.input[0] - '0'; switch (app_env.menu_id) {#if (QN_SECURITY_ON) case menu_gap_bond: { struct bd_addr addr; uint8_t auth; if (app_get_bd_addr_by_idx(app_env.select_idx, &addr)) { /// Authentication Requirements switch (app_env.sec_lvl_set) { case GAP_SEC1_AUTH_PAIR_ENC: auth = SMP_AUTH_REQ_MITM_BOND; break; case GAP_SEC1_NOAUTH_PAIR_ENC: auth = SMP_AUTH_REQ_NO_MITM_BOND; break; case GAP_NO_SEC: default: auth = SMP_AUTH_REQ_NO_MITM_BOND; break; } app_gap_bond_req(&addr, SMP_OOB_AUTH_DATA_NOT_PRESENT, auth, app_env.iocap_set); } else QPRINTF("The selected device is not in connected status.\r\n"); } break; case menu_gap_unpair: { struct bd_addr addr; if (app_get_bd_addr_by_idx(app_env.select_idx, &addr)) { app_gap_unpair_req(&addr, app_get_bond_nb()); // TODO: Deleted paired information form NVDS QPRINTF("Updated link bonded info success.\r\n"); } else QPRINTF("The selected device is not in bonded status.\r\n"); } break;#endif case menu_gap_create_connection: if (app_get_link_nb() != BLE_CONNECTION_MAX) { app_gap_le_create_conn_req(&app_env.inq_addr[app_env.select_idx], app_env.addr_type[app_env.select_idx], QN_ADDR_TYPE, GAP_INIT_CONN_MIN_INTV, GAP_INIT_CONN_MAX_INTV, GAP_CONN_SUPERV_TIMEOUT); } else { QPRINTF("Connection Limit Exceeded\r\n"); } break; case menu_gap_disconnection: if (app_env.input[0] == 'a') { for (uint8_t idx = 0; idx < BLE_CONNECTION_MAX; idx++) { uint16_t conhdl = app_get_conhdl_by_idx(idx); if (conhdl != 0xFFFF) { app_gap_discon_req(conhdl); } } } else { uint16_t conhdl = app_get_conhdl_by_idx(app_env.select_idx); if (conhdl != 0xFFFF) app_gap_discon_req(conhdl); else QPRINTF("The selected device is not in connected status.\r\n"); } break; case menu_gatt_disc_all_svc: { uint16_t conhdl = app_get_conhdl_by_idx(app_env.select_idx); if (conhdl != 0xFFFF) {#if QN_SVC_DISC_USED app_env.dev_rec[app_env.select_idx].nb_svc = 0; app_gatt_disc_svc_req(GATT_DISC_ALL_SVC, conhdl);#endif } else QPRINTF("The selected device is not in connected status.\r\n"); } break; case menu_htpc_enable: case menu_blpc_enable: case menu_hrpc_enable: case menu_glpc_enable: case menu_findl_enable: case menu_proxm_enable: case menu_tipc_enable: case menu_hogpbh_enable: case menu_hogprh_enable: case menu_scppc_enable: case menu_disc_enable: case menu_basc_enable: case menu_cscpc_enable: case menu_rscpc_enable: case menu_anpc_enable: case menu_paspc_enable: case menu_qppc_enable: QPRINTF("Select success.\r\n"); break; default: break; } } switch (app_env.input[0]) { case 'r': default: if (app_env.menu_id == menu_htpc_enable) app_env.menu_id = menu_htpc; else if (app_env.menu_id == menu_qppc_enable) app_env.menu_id = menu_qppc; else if (app_env.menu_id == menu_blpc_enable) app_env.menu_id = menu_blpc; else if (app_env.menu_id == menu_hrpc_enable) app_env.menu_id = menu_hrpc; else if (app_env.menu_id == menu_glpc_enable) app_env.menu_id = menu_glpc; else if (app_env.menu_id == menu_findl_enable) app_env.menu_id = menu_findl; else if (app_env.menu_id == menu_proxm_enable) app_env.menu_id = menu_proxm; else if (app_env.menu_id == menu_tipc_enable) app_env.menu_id = menu_tipc; else if (app_env.menu_id == menu_hogpbh_enable) app_env.menu_id = menu_hogph; else if (app_env.menu_id == menu_hogprh_enable) app_env.menu_id = menu_hogph; else if (app_env.menu_id == menu_scppc_enable) app_env.menu_id = menu_scppc; else if (app_env.menu_id == menu_disc_enable) app_env.menu_id = menu_disc; else if (app_env.menu_id == menu_basc_enable) app_env.menu_id = menu_basc; else if (app_env.menu_id == menu_cscpc_enable) app_env.menu_id = menu_cscpc; else if (app_env.menu_id == menu_rscpc_enable) app_env.menu_id = menu_rscpc; else if (app_env.menu_id == menu_anpc_enable) app_env.menu_id = menu_anpc; else if (app_env.menu_id == menu_paspc_enable) app_env.menu_id = menu_paspc; else if (app_env.menu_id == menu_gatt_disc_all_svc) app_env.menu_id = menu_gatt; else app_env.menu_id = menu_gap; break; case 's': app_menu_show(); break; }}
此时app_env.menu_id = menu_gap_create_connection;执行app_gap_le_create_conn_req,连接上对应的qpps
此时输入r到第一级菜单,输入h到QPPc,输出:
app_menu_show(),app_env.menu_id=22
*------------------------
* QN BLE QPPC Menu
* 0. Select device
* 1. Enable
* 2. Send Data
*------------------------
输入1 enable qppc后,在app_menu_hdl里执行app_menu_handler_qppc,里执行
case '1': { uint16_t conhdl = app_get_conhdl_by_idx(app_env.select_idx); if (0xFFFF != conhdl && idx < BLE_CONNECTION_MAX && false == app_get_qpp_client_service_status(idx)) { app_qppc_enable_req(NULL, conhdl); } else QPRINTF("Enable QPPC disallowed.\r\n"); break; }
- QPPc menu过程
- QPPc 工程更新,与QPPs通信
- Android4.1 Open Menu的过程
- Fragment中Toolbar的Menu创建过程
- Menu
- Menu
- menu
- menu
- menu
- Menu
- MENU
- menu
- menu
- Menu
- Menu
- menu
- menu
- Menu
- iOS App检测版本更新
- 电商之路
- 用CStdioFile写文件
- 跟日期 时间有关的计算与比较
- chrome jsonView插件安装
- QPPc menu过程
- YAML Class ID Reference
- typedef用法详解
- SAT阅读考试考生如何培养阅读兴趣【zhasite】
- SDWebImage 加载图片异常问题
- 从”JAVA“而终 13:java IO流和File类的讲解
- android底层开发进阶(2)--makefile笔记与android的平台编译
- eclipse中maven插件的安装
- 虚拟机分配静态ip