Пример #1
0
/*
 ****************************************************************************************
 * @brief Handles create database message.      *//**
 *
 * @param[in] msgid     DISS_CREATE_DB_CFM
 * @param[in] param     Pointer to the struct diss_create_db_cfm
 * @param[in] dest_id   TASK_APP
 * @param[in] src_id    TASK_DISS
 *
 * @return If the message was consumed or not.
 * @description
 * This handler will be called after a database creation. 
 * The status parameter indicates if the DIS has been successfully added or not.
 * Possible values for the status are: ATT_ERR_NO_ERROR and ATT_INSUFF_RESOURCE.
 ****************************************************************************************
 */
int app_diss_create_db_cfm_handler(ke_msg_id_t const msgid,
                                   struct diss_create_db_cfm *param,
                                   ke_task_id_t const dest_id,
                                   ke_task_id_t const src_id)
{
    if (param->status == ATT_ERR_NO_ERROR) 
    {
        app_clear_local_service_flag(BLE_DIS_SERVER_BIT);

#if (QN_WORK_MODE == WORK_MODE_SOC)
        if (app_diss_env->features & DIS_MANUFACTURER_NAME_CHAR_SUP)
            app_set_char_val_req(DIS_MANUFACTURER_NAME_CHAR, sizeof(DIS_MANU_NAME_VAL) - 1, DIS_MANU_NAME_VAL);
        if (app_diss_env->features & DIS_MODEL_NB_STR_CHAR_SUP)
            app_set_char_val_req(DIS_MODEL_NB_STR_CHAR, sizeof(DIS_MODEL_NB_VAL) - 1, DIS_MODEL_NB_VAL);
        if (app_diss_env->features & DIS_SERIAL_NB_STR_CHAR_SUP)
            app_set_char_val_req(DIS_SERIAL_NB_STR_CHAR, sizeof(DIS_SERIAL_NB_VAL) - 1, DIS_SERIAL_NB_VAL);
        if (app_diss_env->features & DIS_HARD_REV_STR_CHAR_SUP)
            app_set_char_val_req(DIS_HARD_REV_STR_CHAR, sizeof(DIS_HW_REV_VAL) - 1, DIS_HW_REV_VAL);
        if (app_diss_env->features & DIS_FIRM_REV_STR_CHAR_SUP)
            app_set_char_val_req(DIS_FIRM_REV_STR_CHAR, sizeof(DIS_FW_REV_VAL) - 1, DIS_FW_REV_VAL);
        if (app_diss_env->features & DIS_SW_REV_STR_CHAR_SUP)
            app_set_char_val_req(DIS_SW_REV_STR_CHAR, sizeof(DIS_SW_REV_VAL) - 1, DIS_SW_REV_VAL);
        if (app_diss_env->features & DIS_SYSTEM_ID_CHAR_SUP)
            app_set_char_val_req(DIS_SYSTEM_ID_CHAR, sizeof(DIS_SYS_ID_VAL) - 1, DIS_SYS_ID_VAL);
        if (app_diss_env->features & DIS_IEEE_CHAR_SUP)
            app_set_char_val_req(DIS_IEEE_CHAR, sizeof(DIS_IEEE_CERTIF_VAL) - 1, DIS_IEEE_CERTIF_VAL);
        if (app_diss_env->features & DIS_PNP_ID_CHAR_SUP)
            app_set_char_val_req(DIS_PNP_ID_CHAR, sizeof(DIS_PNP_ID_VAL) - 1, DIS_PNP_ID_VAL);
#endif
    }

    return (KE_MSG_CONSUMED);
}
Пример #2
0
/*
 ****************************************************************************************
 * @brief Handles create database message.      *//**
 *
 * @param[in] msgid     DISS_CREATE_DB_CFM
 * @param[in] param     Pointer to the struct diss_create_db_cfm
 * @param[in] dest_id   TASK_APP
 * @param[in] src_id    TASK_DISS
 *
 * @return If the message was consumed or not.
 * @description
 * This handler will be called after a database creation. 
 * The status parameter indicates if the DIS has been successfully added or not.
 * Possible values for the status are: ATT_ERR_NO_ERROR and ATT_INSUFF_RESOURCE.
 ****************************************************************************************
 */
int app_diss_create_db_cfm_handler(ke_msg_id_t const msgid,
                                   struct diss_create_db_cfm *param,
                                   ke_task_id_t const dest_id,
                                   ke_task_id_t const src_id)
{
    if (param->status == ATT_ERR_NO_ERROR) 
    {
        app_clear_local_service_flag(BLE_DIS_SERVER_BIT);

#if (QN_WORK_MODE == WORK_MODE_SOC)
        if (app_diss_env->features & DIS_MANUFACTURER_NAME_CHAR_SUP)
            app_set_char_val_req(DIS_MANUFACTURER_NAME_CHAR, sizeof(DIS_MANU_NAME_VAL) - 1, DIS_MANU_NAME_VAL);
        if (app_diss_env->features & DIS_MODEL_NB_STR_CHAR_SUP)
            app_set_char_val_req(DIS_MODEL_NB_STR_CHAR, sizeof(DIS_MODEL_NB_VAL) - 1, DIS_MODEL_NB_VAL);
        if (app_diss_env->features & DIS_SERIAL_NB_STR_CHAR_SUP)
            app_set_char_val_req(DIS_SERIAL_NB_STR_CHAR, sizeof(DIS_SERIAL_NB_VAL) - 1, DIS_SERIAL_NB_VAL);
        if (app_diss_env->features & DIS_HARD_REV_STR_CHAR_SUP)
            app_set_char_val_req(DIS_HARD_REV_STR_CHAR, sizeof(DIS_HW_REV_VAL) - 1, DIS_HW_REV_VAL);
        if (app_diss_env->features & DIS_FIRM_REV_STR_CHAR_SUP)
            app_set_char_val_req(DIS_FIRM_REV_STR_CHAR, sizeof(DIS_FW_REV_VAL) - 1, DIS_FW_REV_VAL);
        if (app_diss_env->features & DIS_SW_REV_STR_CHAR_SUP)
            app_set_char_val_req(DIS_SW_REV_STR_CHAR, sizeof(DIS_SW_REV_VAL) - 1, DIS_SW_REV_VAL);
        if (app_diss_env->features & DIS_SYSTEM_ID_CHAR_SUP)
						app_set_char_val_req(DIS_SYSTEM_ID_CHAR,sizeof(DIS_SYS_ID_VAL) - 1, DIS_SYS_ID_VAL);
        if (app_diss_env->features & DIS_IEEE_CHAR_SUP)
				{
						uint8_t bd_addr[BD_ADDR_LEN];
						nvds_tag_len_t addr_len =  BD_ADDR_LEN;
						if (NVDS_OK != nvds_get(NVDS_TAG_BD_ADDRESS,&addr_len, &bd_addr[0]))
						{
								// NVDS is empty, use default name
								app_set_char_val_req(DIS_IEEE_CHAR, sizeof("NVDS ERR") - 1, (uint8_t *)"NVDS ERR");
						}
            else
						{
//								QPRINTF("\r\nfunc : %s,BD_ADDR : ",__func__);
//								for (uint8_t i = 0;i < BD_ADDR_LEN;i++)
//									QPRINTF("%02X",bd_addr[i]);
//								QPRINTF("\r\n\r\n");
								
								uint8_t dis_bd_addr[sizeof("\x00\x00\x00\xBE\x7C\x08")] = "\x00\x00\x00\xBE\x7C\x08";
								dis_bd_addr[0] = bd_addr[0];
								dis_bd_addr[1] = bd_addr[1];
								dis_bd_addr[2] = bd_addr[2];
								app_set_char_val_req(DIS_IEEE_CHAR,sizeof(dis_bd_addr) - 1, dis_bd_addr);
						}
				}
//            app_set_char_val_req(DIS_IEEE_CHAR, sizeof(DIS_IEEE_CERTIF_VAL) - 1, DIS_IEEE_CERTIF_VAL);
        if (app_diss_env->features & DIS_PNP_ID_CHAR_SUP)
            app_set_char_val_req(DIS_PNP_ID_CHAR, sizeof(DIS_PNP_ID_VAL) - 1, DIS_PNP_ID_VAL);
#endif
    }

    return (KE_MSG_CONSUMED);
}
Пример #3
0
void app_eaci_data_diss_hdl(uint8_t msg_id, uint8_t param_len, uint8_t const *param)
{
    if (app_diss_env->enabled == true)
        return;

    switch (msg_id)
    {
        case EACI_MSG_DATA_REQ_DISS_CHAR_WR:
            {
                uint8_t char_code = 0;
                uint8_t flg = param[0];
                switch(flg)
                {
                    case 0:
                        char_code = DIS_MANUFACTURER_NAME_CHAR;
                        break;
                    case 1:
                        char_code = DIS_MODEL_NB_STR_CHAR;
                        break;
                    case 2:
                        char_code = DIS_SERIAL_NB_STR_CHAR;
                        break;
                    case 3:
                        char_code = DIS_HARD_REV_STR_CHAR;
                        break;
                    case 4:
                        char_code = DIS_FIRM_REV_STR_CHAR;
                        break;
                    case 5:
                        char_code = DIS_SW_REV_STR_CHAR;
                        break;
                    case 6:
                        char_code = DIS_SYSTEM_ID_CHAR;
                        break;
                    case 7:
                        char_code = DIS_IEEE_CHAR;
                        break;
                    case 8:
                        char_code = DIS_PNP_ID_CHAR;
                        break;
                    default:
                        break;
                }

                app_set_char_val_req(char_code, (param_len - 1), (param + 1));
            }
            break;

        default:
            break;
    }
}