首先menu_id定义:
// menu id
typedef 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_ON
QPRINTF("* 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_ON
case 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;
}