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;    }




0 0