QPPc menu过程

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




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值