Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
app.cpp
00001 /** 00002 * @file app.cpp 00003 * @brief Application entry point 00004 * Copyright 2015 SEVENCORE Co., Ltd. 00005 * 00006 * @author HyeongJun Kim 00007 * @version 1.0.0 00008 * @date 2015-08-17 00009 */ 00010 #include "app.h" 00011 #include "gapm_task.h" 00012 #include "dialog_fota_config.h" 00013 #include "diss_task.h" 00014 #include "fota_server_task.h" 00015 00016 namespace sevencore_fota{ 00017 /** 00018 **************************************************************************************** 00019 * @addtogroup dialog_fota module 00020 * @brief Application entry point function definition. 00021 * 00022 * @{ 00023 **************************************************************************************** 00024 */ 00025 struct app_env_tag app_env; 00026 /** 00027 **************************************************************************************** 00028 * @brief Send Reset request to GAPM task. 00029 * @param[in] BMH Ble Message Handler class reference 00030 * @return void. 00031 **************************************************************************************** 00032 */ 00033 void app_rst_gap(BleMsgHandler *BMH) 00034 { 00035 struct gapm_reset_cmd gm_cmd; 00036 gm_cmd.operation = GAPM_RESET; 00037 00038 app_env.state = APP_IDLE; 00039 app_env.num_of_devices = 0; 00040 for (int i=0; i < MAX_SCAN_DEVICES; i++) 00041 { 00042 app_env.devices[i].free = true; 00043 app_env.devices[i].adv_addr.addr[0] = '\0'; 00044 app_env.devices[i].data[0] = '\0'; 00045 app_env.devices[i].data_len = 0; 00046 app_env.devices[i].rssi = 0; 00047 } 00048 00049 uint8_t *msg; 00050 unsigned short msg_size = 1+sizeof(ble_hdr) + sizeof(gapm_reset_cmd); 00051 msg = new uint8_t[msg_size]; 00052 BMH->BleMsgAlloc(GAPM_RESET_CMD, TASK_GAPM, TASK_GTL, 00053 sizeof(struct gapm_reset_cmd),&gm_cmd,msg); 00054 00055 BMH->BleSendMsg(msg,msg_size); 00056 00057 return; 00058 } 00059 /** 00060 **************************************************************************************** 00061 * @brief Send enable request to DISS profile task. 00062 * @param[in] BMH Ble Message Handler class reference 00063 * @return void. 00064 **************************************************************************************** 00065 */ 00066 void app_diss_db_create(BleMsgHandler* BMH) 00067 { 00068 uint8_t *msg; 00069 // Add DIS in the database 00070 struct diss_create_db_req req; 00071 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(struct diss_create_db_req); 00072 req.features = (DIS_MANUFACTURER_NAME_CHAR_SUP|DIS_MODEL_NB_STR_CHAR_SUP|DIS_SERIAL_NB_STR_CHAR_SUP); 00073 00074 msg = new uint8_t[msg_size]; 00075 00076 BMH->BleMsgAlloc(DISS_CREATE_DB_REQ,TASK_DISS, TASK_GTL,sizeof(struct diss_create_db_req),&req,msg); 00077 BMH->BleSendMsg(msg,msg_size); 00078 } 00079 /** 00080 **************************************************************************************** 00081 * @brief Send enable request to FOTA profile task. 00082 * @param[in] BMH Ble Message Handler class reference 00083 * @return void. 00084 **************************************************************************************** 00085 */ 00086 void app_fota_server_db_create(BleMsgHandler* BMH) 00087 { 00088 uint8_t *msg; 00089 // Add DIS in the database 00090 struct fota_server_create_db_req req; 00091 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(struct fota_server_create_db_req); 00092 req.features = 0x01FF; 00093 00094 msg = new uint8_t[msg_size]; 00095 00096 BMH->BleMsgAlloc(FOTA_SERVER_CREATE_DB_REQ,TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_create_db_req),&req,msg); 00097 BMH->BleSendMsg(msg,msg_size); 00098 } 00099 /** 00100 **************************************************************************************** 00101 * @brief Send Start Advertising command to GAPM task. 00102 * @param[in] BMH Ble Message Handler class reference 00103 * @return void. 00104 **************************************************************************************** 00105 */ 00106 void app_adv_start(BleMsgHandler* BMH) 00107 { 00108 uint8_t device_name_length; 00109 uint8_t device_name_avail_space; 00110 uint8_t device_name_temp_buf[64]; 00111 uint8_t *msg; 00112 unsigned short msg_size; 00113 msg_size = 1 + sizeof(ble_hdr) + sizeof(struct gapm_start_advertise_cmd); 00114 msg = new uint8_t[msg_size]; 00115 00116 // Allocate a message for GAP 00117 struct gapm_start_advertise_cmd cmd; 00118 cmd.op.code = GAPM_ADV_UNDIRECT; 00119 cmd.op.addr_src = GAPM_PUBLIC_ADDR; 00120 cmd.intv_min = APP_ADV_INT_MIN; 00121 cmd.intv_max = APP_ADV_INT_MAX; 00122 cmd.channel_map = APP_ADV_CHMAP; 00123 cmd.info.host.mode = GAP_GEN_DISCOVERABLE; 00124 cmd.info.host.adv_data_len = APP_ADV_DATA_MAX_SIZE; 00125 cmd.info.host.scan_rsp_data_len = APP_SCAN_RESP_DATA_MAX_SIZE; 00126 00127 /*----------------------------------------------------------------------------------- 00128 * Set the Advertising Data and the Scan Response Data 00129 *---------------------------------------------------------------------------------*/ 00130 00131 00132 // Advertising Data 00133 #if (NVDS_SUPPORT) 00134 if(nvds_get(NVDS_TAG_APP_BLE_ADV_DATA, &cmd.info.host.adv_data_len, 00135 &cmd.info.host.adv_data[0]) != NVDS_OK) 00136 #endif //(NVDS_SUPPORT) 00137 { 00138 cmd.info.host.adv_data_len = APP_DFLT_ADV_DATA_LEN; 00139 memcpy(&cmd.info.host.adv_data[0], APP_DFLT_ADV_DATA, cmd.info.host.adv_data_len); 00140 00141 //Add list of UUID 00142 #if (BLE_APP_HT) 00143 cmd.info.host.adv_data_len += APP_HT_ADV_DATA_UUID_LEN; 00144 memcpy(&cmd.info.host.adv_data[APP_DFLT_ADV_DATA_LEN], APP_HT_ADV_DATA_UUID, APP_HT_ADV_DATA_UUID_LEN); 00145 #else 00146 #if (BLE_APP_NEB) 00147 cmd.info.host.adv_data_len += APP_NEB_ADV_DATA_UUID_LEN; 00148 memcpy(&cmd.info.host.adv_data[APP_DFLT_ADV_DATA_LEN], APP_NEB_ADV_DATA_UUID, APP_NEB_ADV_DATA_UUID_LEN); 00149 #endif //(BLE_APP_NEB) 00150 #endif //(BLE_APP_HT) 00151 } 00152 00153 // Scan Response Data 00154 #if (NVDS_SUPPORT) 00155 if(nvds_get(NVDS_TAG_APP_BLE_SCAN_RESP_DATA, &cmd.info.host.scan_rsp_data_len, 00156 &cmd.info.host.scan_rsp_data[0]) != NVDS_OK) 00157 #endif //(NVDS_SUPPORT) 00158 { 00159 cmd.info.host.scan_rsp_data_len = APP_SCNRSP_DATA_LENGTH; 00160 memcpy(&cmd.info.host.scan_rsp_data[0], APP_SCNRSP_DATA, cmd.info.host.scan_rsp_data_len); 00161 } 00162 00163 // Get remaining space in the Advertising Data - 2 bytes are used for name length/flag 00164 device_name_avail_space = APP_ADV_DATA_MAX_SIZE - cmd.info.host.adv_data_len - 2; 00165 00166 // Check if data can be added to the Advertising data 00167 if (device_name_avail_space > 0) 00168 { 00169 // Get the Device Name to add in the Advertising Data (Default one or NVDS one) 00170 #if (NVDS_SUPPORT) 00171 device_name_length = NVDS_LEN_DEVICE_NAME; 00172 if (nvds_get(NVDS_TAG_DEVICE_NAME, &device_name_length, &device_name_temp_buf[0]) != NVDS_OK) 00173 #endif //(NVDS_SUPPORT) 00174 { 00175 // Get default Device Name (No name if not enough space) 00176 device_name_length = strlen(APP_DFLT_DEVICE_NAME); 00177 memcpy(&device_name_temp_buf[0], APP_DFLT_DEVICE_NAME, device_name_length); 00178 } 00179 00180 if(device_name_length > 0) 00181 { 00182 // Check available space 00183 if( device_name_length > device_name_avail_space) 00184 device_name_length = device_name_avail_space; 00185 00186 // Fill Length 00187 cmd.info.host.adv_data[cmd.info.host.adv_data_len] = device_name_length + 1; 00188 // Fill Device Name Flag 00189 cmd.info.host.adv_data[cmd.info.host.adv_data_len + 1] = '\x09'; 00190 // Copy device name 00191 memcpy(&cmd.info.host.adv_data[cmd.info.host.adv_data_len + 2], device_name_temp_buf, device_name_length); 00192 00193 // Update Advertising Data Length 00194 cmd.info.host.adv_data_len += (device_name_length + 2); 00195 } 00196 } 00197 00198 // Send the message 00199 BMH->BleMsgAlloc(GAPM_START_ADVERTISE_CMD,TASK_GAPM, TASK_GTL,sizeof (struct gapm_start_advertise_cmd),&cmd,msg); 00200 BMH->BleSendMsg(msg, msg_size); 00201 00202 return; 00203 } 00204 /** 00205 **************************************************************************************** 00206 * @brief Set Bondabe mode. 00207 * @param[in] BMH Ble Message Handler class reference 00208 * @return void. 00209 **************************************************************************************** 00210 */ 00211 void app_set_mode(BleMsgHandler* BMH) 00212 { 00213 uint8_t *msg; 00214 struct gapm_set_dev_config_cmd cmd; 00215 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(struct gapm_set_dev_config_cmd); 00216 msg = new uint8_t[msg_size]; 00217 00218 cmd.operation = GAPM_SET_DEV_CONFIG; 00219 // Device Role 00220 cmd.role = GAP_PERIPHERAL_SLV; 00221 // Device Appearance 00222 cmd.appearance = 0x0000; 00223 // Device Appearance write permission requirements for peer device 00224 cmd.appearance_write_perm = GAPM_WRITE_DISABLE; 00225 // Device Name write permission requirements for peer device 00226 cmd.name_write_perm = GAPM_WRITE_DISABLE; 00227 // Peripheral only: ***************************************************************** 00228 // Maximum trasnimt unit size 00229 //cmd.max_mtu = 16; 00230 // Slave preferred Minimum of connection interval 00231 cmd.con_intv_min = 8; // 10ms (8*1.25ms) 00232 // Slave preferred Maximum of connection interval 00233 cmd.con_intv_max = 16; // 20ms (16*1.25ms) 00234 // Slave preferred Connection latency 00235 cmd.con_latency = 0; 00236 // Slave preferred Link supervision timeout 00237 cmd.superv_to = 100; 00238 // Privacy settings bit field 00239 cmd.flags = 0; 00240 00241 BMH->BleMsgAlloc(GAPM_SET_DEV_CONFIG_CMD, TASK_GAPM, TASK_GTL,sizeof(struct gapm_set_dev_config_cmd ),&cmd, msg); 00242 BMH->BleSendMsg(msg,msg_size); 00243 00244 return; 00245 } 00246 /** 00247 **************************************************************************************** 00248 * @brief Send enable request to DISS profile task. 00249 * @param[in] device Ble device info 00250 * @param[in] BMH Ble Message Handler class reference 00251 * @return void. 00252 **************************************************************************************** 00253 */ 00254 void app_dis_enable(ble_dev *device,BleMsgHandler* BMH) 00255 { 00256 uint8_t *msg; 00257 // Allocate the message 00258 struct diss_enable_req req; 00259 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(diss_enable_req); 00260 // Fill in the parameter structure 00261 req.conhdl = device->conhdl; 00262 req.sec_lvl = 1; 00263 req.con_type = PRF_CON_DISCOVERY; 00264 00265 msg = new uint8_t[msg_size]; 00266 00267 // Send the message 00268 BMH->BleMsgAlloc(DISS_ENABLE_REQ,TASK_DISS, TASK_GTL, sizeof(struct diss_enable_req),&req,msg); 00269 BMH->BleSendMsg(msg,msg_size); 00270 } 00271 /** 00272 **************************************************************************************** 00273 * @brief Send enable request to FOTA profile task. 00274 * @param[in] device Ble device info 00275 * @param[in] BMH Ble Message Handler class reference 00276 * @return void. 00277 **************************************************************************************** 00278 */ 00279 void app_fota_server_enable(ble_dev *device,BleMsgHandler* BMH) 00280 { 00281 uint8_t *msg; 00282 struct fota_server_enable_req req; 00283 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(struct fota_server_enable_req); 00284 req.conhdl = device->conhdl; 00285 req.sec_lvl = 1; 00286 00287 msg = new uint8_t[msg_size]; 00288 00289 // Send the message 00290 BMH->BleMsgAlloc(FOTA_SERVER_ENABLE_REQ, TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_enable_req),&req,msg); 00291 BMH->BleSendMsg(msg,msg_size); 00292 } 00293 /** 00294 **************************************************************************************** 00295 * @brief Send connection confirmation. 00296 * param[in] auth Authentication requirements. 00297 * @param[in] device Ble device info 00298 * @param[in] BMH Ble Message Handler class reference 00299 * @return void. 00300 **************************************************************************************** 00301 */ 00302 void app_connect_confirm(uint8_t auth,ble_dev *device,BleMsgHandler* BMH) 00303 { 00304 uint8_t *msg; 00305 // confirm connection 00306 struct gapc_connection_cfm cfm; 00307 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(gapc_connection_cfm); 00308 cfm.auth = auth; 00309 cfm.authorize = GAP_AUTHZ_NOT_SET; 00310 00311 msg = new uint8_t[msg_size]; 00312 00313 // Send the message 00314 BMH->BleMsgAlloc(GAPC_CONNECTION_CFM, KE_BUILD_ID(TASK_GAPC,device->conidx), TASK_GTL,sizeof (struct gapc_connection_cfm),&cfm,msg); 00315 BMH->BleSendMsg(msg,msg_size); 00316 } 00317 /** 00318 **************************************************************************************** 00319 * @brief Send the GAPC_DISCONNECT_IND message to a task. 00320 * @param[in] dst Task id of the destination task. 00321 * @param[in] conhdl The conhdl parameter of the GAPC_DISCONNECT_IND message. 00322 * @param[in] reason The reason parameter of the GAPC_DISCONNECT_IND message. 00323 * @param[in] BMH Ble Message Handler class reference 00324 * @return void. 00325 **************************************************************************************** 00326 */ 00327 void app_send_disconnect(uint16_t dst, uint16_t conhdl, uint8_t reason,BleMsgHandler* BMH) 00328 { 00329 uint8_t *msg; 00330 struct gapc_disconnect_ind disconnect_ind; 00331 unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(gapc_disconnect_ind); 00332 // fill parameters 00333 disconnect_ind.conhdl = conhdl; 00334 disconnect_ind.reason = reason; 00335 00336 msg = new uint8_t[msg_size]; 00337 00338 // send indication 00339 BMH->BleMsgAlloc(GAPC_DISCONNECT_IND,dst, TASK_GTL,sizeof(struct gapc_disconnect_ind),&disconnect_ind,msg); 00340 BMH->BleSendMsg(msg,msg_size); 00341 } 00342 00343 }//namespace 00344 00345 /// @} dialog_fota module
Generated on Tue Jul 12 2022 21:40:44 by
1.7.2
