Bluetooth Low Energy based Firmware Over The Air with Mbed. Mbed part is a external processor of the IoT devices and communicate with a Bluetooth module. The Bluetooth module have to support BLE and implement BLE FOTA profile designed by ours. BLE FOTA profile specification is available from our GIT hub wiki(https://github.com/sevencore/BLEFOTA).

Dependencies:   mbed

Fork of mbed_fota by KIM HyoengJun

Bluetooth Low Energy based Firmware Over The Air with Mbed. Mbed part is a external processor of the IoT devices and communicate with a Bluetooth module. The Bluetooth module have to support BLE and implement BLE FOTA profile designed by ours. BLE FOTA profile specification is available from our GIT hub wiki.

Committer:
dudnwjs
Date:
Fri Jul 17 14:04:12 2015 +0000
Revision:
6:8dd20294b2aa
Parent:
5:e11b23f9aacc
Child:
8:9eec2c246a85
EXT DEMO FILE OPEN COMPLETE

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudnwjs 4:60be78a172c2 1 #include "app_task.h"
dudnwjs 4:60be78a172c2 2 #include "app.h"
dudnwjs 5:e11b23f9aacc 3 #include "fota_server_task.h"
dudnwjs 4:60be78a172c2 4
dudnwjs 6:8dd20294b2aa 5 #define BLE_FOTA_SERVICE 1
dudnwjs 6:8dd20294b2aa 6
dudnwjs 4:60be78a172c2 7 namespace sevencore_fota{
dudnwjs 4:60be78a172c2 8
dudnwjs 4:60be78a172c2 9 int gapm_adv_report_ind_handler(unsigned short msgid,
dudnwjs 4:60be78a172c2 10 struct gapm_adv_report_ind *param,
dudnwjs 4:60be78a172c2 11 unsigned short dest_id,
dudnwjs 4:60be78a172c2 12 unsigned short src_id)
dudnwjs 4:60be78a172c2 13 {
dudnwjs 4:60be78a172c2 14 //if (app_env.state != APP_SCAN)
dudnwjs 4:60be78a172c2 15 // return -1;
dudnwjs 4:60be78a172c2 16
dudnwjs 4:60be78a172c2 17 return 0;
dudnwjs 4:60be78a172c2 18 }
dudnwjs 4:60be78a172c2 19
dudnwjs 4:60be78a172c2 20 int diss_create_db_cfm_handler(unsigned short msgid,
dudnwjs 4:60be78a172c2 21 struct diss_create_db_cfm *param,
dudnwjs 4:60be78a172c2 22 unsigned short dest_id,
dudnwjs 4:60be78a172c2 23 unsigned short src_id,
dudnwjs 4:60be78a172c2 24 BleMsgHandler* BMH)
dudnwjs 4:60be78a172c2 25 {
dudnwjs 6:8dd20294b2aa 26
dudnwjs 5:e11b23f9aacc 27 uint8_t len = strlen(APP_DIS_SW_REV);
dudnwjs 5:e11b23f9aacc 28
dudnwjs 4:60be78a172c2 29 if (param->status == CO_ERROR_NO_ERROR)
dudnwjs 4:60be78a172c2 30 {
dudnwjs 5:e11b23f9aacc 31 char str[22] = "\nDIS SET DB\n";
dudnwjs 5:e11b23f9aacc 32 BMH->HostPcPrint(str);
dudnwjs 4:60be78a172c2 33 // Set Manufacturer Name value in the DB
dudnwjs 4:60be78a172c2 34 {
dudnwjs 4:60be78a172c2 35 uint8_t *msg;
dudnwjs 4:60be78a172c2 36 struct diss_set_char_val_req req_name;
dudnwjs 5:e11b23f9aacc 37 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(diss_set_char_val_req)-(STR_MAX_LEN-APP_DIS_MANUFACTURER_NAME_STR_LEN);
dudnwjs 5:e11b23f9aacc 38
dudnwjs 4:60be78a172c2 39 // Fill in the parameter structure
dudnwjs 4:60be78a172c2 40 req_name.char_code = DIS_MANUFACTURER_NAME_CHAR;
dudnwjs 5:e11b23f9aacc 41 req_name.val_len = APP_DIS_MANUFACTURER_NAME_STR_LEN;
dudnwjs 5:e11b23f9aacc 42 memcpy(&req_name.val[0], APP_DIS_MANUFACTURER_NAME_STR, APP_DIS_MANUFACTURER_NAME_STR_LEN);
dudnwjs 5:e11b23f9aacc 43
dudnwjs 4:60be78a172c2 44 msg = new uint8_t[msg_size];
dudnwjs 4:60be78a172c2 45
dudnwjs 5:e11b23f9aacc 46 BMH->BleMsgAlloc(DISS_SET_CHAR_VAL_REQ,TASK_DISS,TASK_GTL,
dudnwjs 5:e11b23f9aacc 47 sizeof(struct diss_set_char_val_req)-(STR_MAX_LEN-APP_DIS_MANUFACTURER_NAME_STR_LEN),&req_name,msg);
dudnwjs 4:60be78a172c2 48 BMH->BleSendMsg(msg,msg_size);
dudnwjs 4:60be78a172c2 49 free(msg);
dudnwjs 5:e11b23f9aacc 50
dudnwjs 4:60be78a172c2 51 }
dudnwjs 4:60be78a172c2 52
dudnwjs 4:60be78a172c2 53 // Set Model Number String value in the DB
dudnwjs 4:60be78a172c2 54 {
dudnwjs 4:60be78a172c2 55 uint8_t *msg;
dudnwjs 4:60be78a172c2 56 struct diss_set_char_val_req req_mod;
dudnwjs 5:e11b23f9aacc 57 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(diss_set_char_val_req)-(STR_MAX_LEN-APP_DIS_MODEL_NB_STR_LEN);
dudnwjs 4:60be78a172c2 58
dudnwjs 4:60be78a172c2 59 // Fill in the parameter structure
dudnwjs 4:60be78a172c2 60 req_mod.char_code = DIS_MODEL_NB_STR_CHAR;
dudnwjs 4:60be78a172c2 61 req_mod.val_len = APP_DIS_MODEL_NB_STR_LEN;
dudnwjs 4:60be78a172c2 62 memcpy(&req_mod.val[0], APP_DIS_MODEL_NB_STR, APP_DIS_MODEL_NB_STR_LEN);
dudnwjs 4:60be78a172c2 63
dudnwjs 4:60be78a172c2 64 msg = new uint8_t[msg_size];
dudnwjs 4:60be78a172c2 65
dudnwjs 5:e11b23f9aacc 66 BMH->BleMsgAlloc(DISS_SET_CHAR_VAL_REQ,TASK_DISS, TASK_GTL,
dudnwjs 5:e11b23f9aacc 67 sizeof(struct diss_set_char_val_req)-(STR_MAX_LEN-APP_DIS_MODEL_NB_STR_LEN),&req_mod,msg);
dudnwjs 4:60be78a172c2 68 // Send the message
dudnwjs 4:60be78a172c2 69 BMH->BleSendMsg(msg,msg_size);
dudnwjs 4:60be78a172c2 70 free(msg);
dudnwjs 4:60be78a172c2 71 }
dudnwjs 6:8dd20294b2aa 72 #if (BLE_FOTA_SERVICE)
dudnwjs 5:e11b23f9aacc 73 // Set Serial Number String value in the DB
dudnwjs 5:e11b23f9aacc 74 {
dudnwjs 5:e11b23f9aacc 75 uint8_t *msg;
dudnwjs 5:e11b23f9aacc 76 struct diss_set_char_val_req req_ser;
dudnwjs 5:e11b23f9aacc 77 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(diss_set_char_val_req)-(STR_MAX_LEN-APP_DIS_SERIAL_NB_STR_LEN);
dudnwjs 4:60be78a172c2 78
dudnwjs 5:e11b23f9aacc 79 // Fill in the parameter structure
dudnwjs 5:e11b23f9aacc 80 req_ser.char_code = DIS_SERIAL_NB_STR_CHAR;
dudnwjs 5:e11b23f9aacc 81 req_ser.val_len = APP_DIS_SERIAL_NB_STR_LEN;
dudnwjs 5:e11b23f9aacc 82 memcpy(&req_ser.val[0], APP_DIS_SERIAL_NB_STR, APP_DIS_SERIAL_NB_STR_LEN);
dudnwjs 5:e11b23f9aacc 83
dudnwjs 5:e11b23f9aacc 84 msg = new uint8_t[msg_size];
dudnwjs 5:e11b23f9aacc 85
dudnwjs 5:e11b23f9aacc 86 BMH->BleMsgAlloc(DISS_SET_CHAR_VAL_REQ,TASK_DISS, TASK_GTL,
dudnwjs 5:e11b23f9aacc 87 sizeof(struct diss_set_char_val_req)-(STR_MAX_LEN-APP_DIS_SERIAL_NB_STR_LEN),&req_ser,msg);
dudnwjs 5:e11b23f9aacc 88 // Send the message
dudnwjs 5:e11b23f9aacc 89 BMH->BleSendMsg(msg,msg_size);
dudnwjs 5:e11b23f9aacc 90 free(msg);
dudnwjs 5:e11b23f9aacc 91 }
dudnwjs 6:8dd20294b2aa 92 #endif //(BLE_FOTA_SERVICE)
dudnwjs 6:8dd20294b2aa 93 #if !(BLE_FOTA_SERVICE)
dudnwjs 4:60be78a172c2 94 // Set System ID value in the DB
dudnwjs 4:60be78a172c2 95 {
dudnwjs 4:60be78a172c2 96 uint8_t *msg;
dudnwjs 4:60be78a172c2 97 struct diss_set_char_val_req req_id;
dudnwjs 4:60be78a172c2 98 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(diss_set_char_val_req);
dudnwjs 4:60be78a172c2 99
dudnwjs 4:60be78a172c2 100 // Fill in the parameter structure
dudnwjs 4:60be78a172c2 101 req_id.char_code = DIS_SYSTEM_ID_CHAR;
dudnwjs 4:60be78a172c2 102 req_id.val_len = APP_DIS_SYSTEM_ID_LEN;
dudnwjs 4:60be78a172c2 103 memcpy(&req_id.val[0], APP_DIS_SYSTEM_ID, APP_DIS_SYSTEM_ID_LEN);
dudnwjs 4:60be78a172c2 104
dudnwjs 4:60be78a172c2 105 msg = new uint8_t[msg_size];
dudnwjs 4:60be78a172c2 106
dudnwjs 4:60be78a172c2 107 BMH->BleMsgAlloc(DISS_SET_CHAR_VAL_REQ,TASK_DISS, TASK_GTL,sizeof(struct diss_set_char_val_req),&req_id,msg);
dudnwjs 4:60be78a172c2 108
dudnwjs 4:60be78a172c2 109 // Send the message
dudnwjs 4:60be78a172c2 110 BMH->BleSendMsg(msg, msg_size);
dudnwjs 4:60be78a172c2 111 free(msg);
dudnwjs 4:60be78a172c2 112 }
dudnwjs 4:60be78a172c2 113
dudnwjs 4:60be78a172c2 114
dudnwjs 4:60be78a172c2 115 // Set the software version in the DB
dudnwjs 4:60be78a172c2 116 {
dudnwjs 4:60be78a172c2 117 uint8_t *msg;
dudnwjs 4:60be78a172c2 118 struct diss_set_char_val_req req_id;
dudnwjs 4:60be78a172c2 119 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(diss_set_char_val_req);
dudnwjs 4:60be78a172c2 120
dudnwjs 4:60be78a172c2 121 // Fill in the parameter structure
dudnwjs 4:60be78a172c2 122 req_id.char_code = DIS_SW_REV_STR_CHAR;
dudnwjs 4:60be78a172c2 123 req_id.val_len = len;
dudnwjs 4:60be78a172c2 124 memcpy(&req_id.val[0], APP_DIS_SW_REV, len);
dudnwjs 4:60be78a172c2 125
dudnwjs 4:60be78a172c2 126 msg = new uint8_t[msg_size];
dudnwjs 4:60be78a172c2 127
dudnwjs 4:60be78a172c2 128 BMH->BleMsgAlloc(DISS_SET_CHAR_VAL_REQ,TASK_DISS, TASK_GTL,sizeof(struct diss_set_char_val_req),&req_id,msg);
dudnwjs 4:60be78a172c2 129 // Send the message
dudnwjs 4:60be78a172c2 130 BMH->BleSendMsg(msg,msg_size);
dudnwjs 4:60be78a172c2 131 free(msg);
dudnwjs 4:60be78a172c2 132 }
dudnwjs 4:60be78a172c2 133
dudnwjs 4:60be78a172c2 134 len = strlen(APP_DIS_FIRM_REV);
dudnwjs 4:60be78a172c2 135 // Set the firmware version in the DB. This is the common code sw version
dudnwjs 4:60be78a172c2 136 {
dudnwjs 4:60be78a172c2 137 uint8_t *msg;
dudnwjs 4:60be78a172c2 138 struct diss_set_char_val_req req_id;
dudnwjs 4:60be78a172c2 139 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(diss_set_char_val_req);
dudnwjs 4:60be78a172c2 140
dudnwjs 4:60be78a172c2 141 // Fill in the parameter structure
dudnwjs 4:60be78a172c2 142 req_id.char_code = DIS_FIRM_REV_STR_CHAR;
dudnwjs 4:60be78a172c2 143 req_id.val_len = len;
dudnwjs 4:60be78a172c2 144 memcpy(&req_id.val[0], APP_DIS_FIRM_REV, len);
dudnwjs 4:60be78a172c2 145
dudnwjs 4:60be78a172c2 146 msg = new uint8_t[msg_size];
dudnwjs 4:60be78a172c2 147
dudnwjs 4:60be78a172c2 148 BMH->BleMsgAlloc(DISS_SET_CHAR_VAL_REQ,TASK_DISS, TASK_GTL,sizeof(struct diss_set_char_val_req),&req_id,msg);
dudnwjs 4:60be78a172c2 149 // Send the message
dudnwjs 4:60be78a172c2 150 BMH->BleSendMsg(msg, msg_size);
dudnwjs 4:60be78a172c2 151 free(msg);
dudnwjs 6:8dd20294b2aa 152 }
dudnwjs 6:8dd20294b2aa 153 #endif //!(BLE_FOTA_SERVICE)
dudnwjs 4:60be78a172c2 154 }
dudnwjs 4:60be78a172c2 155
dudnwjs 5:e11b23f9aacc 156 if (app_env.state == APP_IDLE)
dudnwjs 5:e11b23f9aacc 157 {
dudnwjs 5:e11b23f9aacc 158 char str[30] = "\nfota db create req!!\n";
dudnwjs 5:e11b23f9aacc 159 BMH->HostPcPrint(str);
dudnwjs 5:e11b23f9aacc 160 app_fota_server_db_create(BMH);
dudnwjs 5:e11b23f9aacc 161 }
dudnwjs 5:e11b23f9aacc 162
dudnwjs 5:e11b23f9aacc 163 return 0;
dudnwjs 5:e11b23f9aacc 164 }
dudnwjs 5:e11b23f9aacc 165
dudnwjs 5:e11b23f9aacc 166 int fota_server_create_db_cfm_handler(unsigned short msgid,
dudnwjs 5:e11b23f9aacc 167 struct fota_server_create_db_cfm *param,
dudnwjs 5:e11b23f9aacc 168 unsigned short dest_id,
dudnwjs 5:e11b23f9aacc 169 unsigned short src_id,
dudnwjs 5:e11b23f9aacc 170 BleMsgHandler* BMH)
dudnwjs 5:e11b23f9aacc 171 {
dudnwjs 5:e11b23f9aacc 172 uint8_t fota_normal = 0;
dudnwjs 5:e11b23f9aacc 173 uint8_t fota_normal_len = sizeof(fota_normal);
dudnwjs 5:e11b23f9aacc 174 if (param->status == CO_ERROR_NO_ERROR)
dudnwjs 4:60be78a172c2 175 {
dudnwjs 5:e11b23f9aacc 176 // Initialization Firmware new Version Char ("00-00-00")
dudnwjs 5:e11b23f9aacc 177 {
dudnwjs 5:e11b23f9aacc 178 uint8_t *msg;
dudnwjs 5:e11b23f9aacc 179 struct fota_server_set_char_val_req req_nv;
dudnwjs 5:e11b23f9aacc 180 unsigned short msg_size = 1+sizeof(ble_hdr)+ sizeof(fota_server_set_char_val_req)-(18-APP_FOTA_SERVER_FIRMWARE_NEW_VERSION_LEN);
dudnwjs 5:e11b23f9aacc 181 // Fill in the parameter structure
dudnwjs 5:e11b23f9aacc 182 req_nv.char_code = FOTA_SERVER_FIRMWARE_NEW_VERSION_CHAR;
dudnwjs 5:e11b23f9aacc 183 req_nv.val_len = APP_FOTA_SERVER_FIRMWARE_NEW_VERSION_LEN;
dudnwjs 5:e11b23f9aacc 184 memcpy(&req_nv.val[0], APP_FOTA_SERVER_FIRMWARE_NEW_VERSION, APP_FOTA_SERVER_FIRMWARE_NEW_VERSION_LEN);
dudnwjs 5:e11b23f9aacc 185
dudnwjs 5:e11b23f9aacc 186 msg = new uint8_t[msg_size];
dudnwjs 5:e11b23f9aacc 187
dudnwjs 5:e11b23f9aacc 188 BMH->BleMsgAlloc(FOTA_SERVER_SET_CHAR_VAL_REQ,TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_set_char_val_req)-(18-APP_FOTA_SERVER_FIRMWARE_NEW_VERSION_LEN),&req_nv,msg );
dudnwjs 5:e11b23f9aacc 189 // Send the message
dudnwjs 5:e11b23f9aacc 190 BMH->BleSendMsg(msg,msg_size);
dudnwjs 5:e11b23f9aacc 191 free(msg);
dudnwjs 5:e11b23f9aacc 192 }
dudnwjs 5:e11b23f9aacc 193
dudnwjs 5:e11b23f9aacc 194 // Initialization Sequence Number Char ( = '0' )
dudnwjs 5:e11b23f9aacc 195 {
dudnwjs 5:e11b23f9aacc 196 uint8_t *msg;
dudnwjs 5:e11b23f9aacc 197 struct fota_server_set_char_val_req req_sn;
dudnwjs 5:e11b23f9aacc 198 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(fota_server_set_char_val_req)-(18-fota_normal_len);
dudnwjs 5:e11b23f9aacc 199
dudnwjs 5:e11b23f9aacc 200 // Fill in the parameter structure
dudnwjs 5:e11b23f9aacc 201 req_sn.char_code = FOTA_SERVER_SEQUENCE_NUMBER_CHAR;
dudnwjs 5:e11b23f9aacc 202 req_sn.val_len = fota_normal_len;
dudnwjs 5:e11b23f9aacc 203 memcpy(&req_sn.val[0], &fota_normal, fota_normal_len);
dudnwjs 5:e11b23f9aacc 204
dudnwjs 5:e11b23f9aacc 205 msg = new uint8_t[msg_size];
dudnwjs 5:e11b23f9aacc 206
dudnwjs 5:e11b23f9aacc 207 BMH->BleMsgAlloc(FOTA_SERVER_SET_CHAR_VAL_REQ,TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_set_char_val_req)-(18-fota_normal_len),&req_sn,msg );
dudnwjs 5:e11b23f9aacc 208 // Send the message
dudnwjs 5:e11b23f9aacc 209 BMH->BleSendMsg(msg,msg_size);
dudnwjs 5:e11b23f9aacc 210 free(msg);
dudnwjs 5:e11b23f9aacc 211 }
dudnwjs 5:e11b23f9aacc 212
dudnwjs 5:e11b23f9aacc 213 // Initialization Firmware Data Check Char ( = '0' )
dudnwjs 5:e11b23f9aacc 214 {
dudnwjs 5:e11b23f9aacc 215 uint8_t *msg;
dudnwjs 5:e11b23f9aacc 216 struct fota_server_set_char_val_req req_fdc;
dudnwjs 5:e11b23f9aacc 217 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(fota_server_set_char_val_req)-(18-fota_normal_len);
dudnwjs 5:e11b23f9aacc 218
dudnwjs 5:e11b23f9aacc 219 // Fill in the parameter structure
dudnwjs 5:e11b23f9aacc 220 req_fdc.char_code = FOTA_SERVER_FIRMWARE_DATA_CHECK_CHAR;
dudnwjs 5:e11b23f9aacc 221 req_fdc.val_len = fota_normal_len;
dudnwjs 5:e11b23f9aacc 222 memcpy(&req_fdc.val[0], &fota_normal, fota_normal_len);
dudnwjs 5:e11b23f9aacc 223
dudnwjs 5:e11b23f9aacc 224 msg = new uint8_t[msg_size];
dudnwjs 5:e11b23f9aacc 225
dudnwjs 5:e11b23f9aacc 226 BMH->BleMsgAlloc(FOTA_SERVER_SET_CHAR_VAL_REQ,TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_set_char_val_req)-(18-fota_normal_len),&req_fdc,msg );
dudnwjs 5:e11b23f9aacc 227 // Send the message
dudnwjs 5:e11b23f9aacc 228 BMH->BleSendMsg(msg,msg_size);
dudnwjs 5:e11b23f9aacc 229 free(msg);
dudnwjs 5:e11b23f9aacc 230 }
dudnwjs 5:e11b23f9aacc 231
dudnwjs 5:e11b23f9aacc 232 // Initialization Firmware Status Char ( = '0' )
dudnwjs 5:e11b23f9aacc 233 {
dudnwjs 5:e11b23f9aacc 234 uint8_t *msg;
dudnwjs 5:e11b23f9aacc 235 struct fota_server_set_char_val_req req_stat;
dudnwjs 5:e11b23f9aacc 236 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(fota_server_set_char_val_req)-(18-fota_normal_len);
dudnwjs 5:e11b23f9aacc 237
dudnwjs 5:e11b23f9aacc 238 // Fill in the parameter structure
dudnwjs 5:e11b23f9aacc 239 req_stat.char_code = FOTA_SERVER_FIRMWARE_STATUS_CHAR;
dudnwjs 5:e11b23f9aacc 240 req_stat.val_len = fota_normal_len;
dudnwjs 5:e11b23f9aacc 241 memcpy(&req_stat.val[0], &fota_normal, fota_normal_len);
dudnwjs 5:e11b23f9aacc 242
dudnwjs 5:e11b23f9aacc 243 msg = new uint8_t[msg_size];
dudnwjs 5:e11b23f9aacc 244
dudnwjs 5:e11b23f9aacc 245 BMH->BleMsgAlloc(FOTA_SERVER_SET_CHAR_VAL_REQ,TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_set_char_val_req)-(18-fota_normal_len),&req_stat,msg );
dudnwjs 5:e11b23f9aacc 246 // Send the message
dudnwjs 5:e11b23f9aacc 247 BMH->BleSendMsg(msg,msg_size);
dudnwjs 5:e11b23f9aacc 248 free(msg);
dudnwjs 5:e11b23f9aacc 249 }
dudnwjs 5:e11b23f9aacc 250
dudnwjs 5:e11b23f9aacc 251 // Initialization Reset Char ( = '0' )
dudnwjs 5:e11b23f9aacc 252 {
dudnwjs 5:e11b23f9aacc 253 uint8_t *msg;
dudnwjs 5:e11b23f9aacc 254 struct fota_server_set_char_val_req req_reset;
dudnwjs 5:e11b23f9aacc 255 unsigned short msg_size = 1+sizeof(ble_hdr)+sizeof(fota_server_set_char_val_req)-(18-fota_normal_len);
dudnwjs 5:e11b23f9aacc 256
dudnwjs 5:e11b23f9aacc 257 // Fill in the parameter structure
dudnwjs 5:e11b23f9aacc 258 req_reset.char_code = FOTA_SERVER_RESET_CHAR;
dudnwjs 5:e11b23f9aacc 259 req_reset.val_len = fota_normal_len;
dudnwjs 5:e11b23f9aacc 260 memcpy(&req_reset.val[0], &fota_normal, fota_normal_len);
dudnwjs 5:e11b23f9aacc 261
dudnwjs 5:e11b23f9aacc 262 msg = new uint8_t[msg_size];
dudnwjs 5:e11b23f9aacc 263
dudnwjs 5:e11b23f9aacc 264 BMH->BleMsgAlloc(FOTA_SERVER_SET_CHAR_VAL_REQ,TASK_FOTA_SERVER, TASK_GTL,sizeof(struct fota_server_set_char_val_req)-(18-fota_normal_len),&req_reset,msg );
dudnwjs 5:e11b23f9aacc 265 // Send the message
dudnwjs 5:e11b23f9aacc 266 BMH->BleSendMsg(msg,msg_size);
dudnwjs 5:e11b23f9aacc 267 free(msg);
dudnwjs 5:e11b23f9aacc 268 }
dudnwjs 5:e11b23f9aacc 269
dudnwjs 5:e11b23f9aacc 270 }
dudnwjs 5:e11b23f9aacc 271
dudnwjs 5:e11b23f9aacc 272 if (app_env.state == APP_IDLE)
dudnwjs 5:e11b23f9aacc 273 {
dudnwjs 5:e11b23f9aacc 274 app_set_mode(BMH);
dudnwjs 5:e11b23f9aacc 275 }
dudnwjs 4:60be78a172c2 276
dudnwjs 4:60be78a172c2 277 return 0;
dudnwjs 4:60be78a172c2 278 }
dudnwjs 4:60be78a172c2 279
dudnwjs 6:8dd20294b2aa 280 void fota_server_data_flash_ind_handler(unsigned short msgid,
dudnwjs 6:8dd20294b2aa 281 struct fota_server_data_flash_ind *param,
dudnwjs 6:8dd20294b2aa 282 unsigned short dest_id,
dudnwjs 6:8dd20294b2aa 283 unsigned short src_id,
dudnwjs 6:8dd20294b2aa 284 BleMsgHandler* BMH)
dudnwjs 5:e11b23f9aacc 285 {
dudnwjs 6:8dd20294b2aa 286 char version[9];
dudnwjs 6:8dd20294b2aa 287 memcpy(version,param->version,8);
dudnwjs 6:8dd20294b2aa 288 version[8] = '\0';
dudnwjs 6:8dd20294b2aa 289 BMH->FirmwareDataReceive(param->code_size,version);
dudnwjs 5:e11b23f9aacc 290 }
dudnwjs 5:e11b23f9aacc 291
dudnwjs 4:60be78a172c2 292 int gapm_device_ready_ind_handler(unsigned short msgid,
dudnwjs 5:e11b23f9aacc 293 struct gap_ready_evt *param,
dudnwjs 4:60be78a172c2 294 unsigned short dest_id,
dudnwjs 4:60be78a172c2 295 unsigned short src_id,
dudnwjs 4:60be78a172c2 296 BleMsgHandler* BMH)
dudnwjs 4:60be78a172c2 297 {
dudnwjs 4:60be78a172c2 298 // We are now in Connectable State
dudnwjs 4:60be78a172c2 299 if (dest_id == TASK_GTL)
dudnwjs 4:60be78a172c2 300 {
dudnwjs 4:60be78a172c2 301 app_rst_gap(BMH);
dudnwjs 4:60be78a172c2 302 }
dudnwjs 4:60be78a172c2 303
dudnwjs 4:60be78a172c2 304 return 0;
dudnwjs 4:60be78a172c2 305 }
dudnwjs 4:60be78a172c2 306
dudnwjs 4:60be78a172c2 307 int gapm_reset_completion_handler(unsigned short msgid,
dudnwjs 4:60be78a172c2 308 struct gapm_cmp_evt *param,
dudnwjs 4:60be78a172c2 309 unsigned short dest_id,
dudnwjs 4:60be78a172c2 310 unsigned short src_id,
dudnwjs 4:60be78a172c2 311 BleMsgHandler* BMH)
dudnwjs 4:60be78a172c2 312 {
dudnwjs 4:60be78a172c2 313 // We are now in Connectable State
dudnwjs 4:60be78a172c2 314 if (dest_id == TASK_GTL)
dudnwjs 4:60be78a172c2 315 {
dudnwjs 5:e11b23f9aacc 316 app_env.state = APP_IDLE;
dudnwjs 4:60be78a172c2 317 app_diss_db_create(BMH);
dudnwjs 4:60be78a172c2 318 }
dudnwjs 4:60be78a172c2 319
dudnwjs 4:60be78a172c2 320 return 0;
dudnwjs 4:60be78a172c2 321 }
dudnwjs 4:60be78a172c2 322
dudnwjs 4:60be78a172c2 323 int gapm_set_dev_config_completion_handler(unsigned short msgid,
dudnwjs 4:60be78a172c2 324 struct gapm_cmp_evt *param,
dudnwjs 4:60be78a172c2 325 unsigned short dest_id,
dudnwjs 4:60be78a172c2 326 unsigned short src_id,
dudnwjs 4:60be78a172c2 327 BleMsgHandler* BMH)
dudnwjs 4:60be78a172c2 328 {
dudnwjs 5:e11b23f9aacc 329 app_env.state = APP_CONNECTABLE;
dudnwjs 5:e11b23f9aacc 330 wait(1);
dudnwjs 4:60be78a172c2 331 app_adv_start(BMH); // start advertising
dudnwjs 4:60be78a172c2 332
dudnwjs 4:60be78a172c2 333 return 0;
dudnwjs 4:60be78a172c2 334 }
dudnwjs 4:60be78a172c2 335
dudnwjs 5:e11b23f9aacc 336 int gapc_connection_req_ind_handler(uint16_t msgid,
dudnwjs 5:e11b23f9aacc 337 struct gapc_connection_req_ind *param,
dudnwjs 5:e11b23f9aacc 338 uint16_t dest_id,
dudnwjs 5:e11b23f9aacc 339 uint16_t src_id,
dudnwjs 5:e11b23f9aacc 340 BleMsgHandler* BMH)
dudnwjs 5:e11b23f9aacc 341 {
dudnwjs 5:e11b23f9aacc 342 app_env.state = APP_CONNECTED;
dudnwjs 5:e11b23f9aacc 343
dudnwjs 5:e11b23f9aacc 344 ble_dev device;
dudnwjs 5:e11b23f9aacc 345
dudnwjs 5:e11b23f9aacc 346 // Retrieve the connection index from the GAPC task instance for the connection
dudnwjs 5:e11b23f9aacc 347 device.conidx = KE_IDX_GET(src_id);
dudnwjs 5:e11b23f9aacc 348
dudnwjs 5:e11b23f9aacc 349 // Retrieve the connection handle from the parameters
dudnwjs 5:e11b23f9aacc 350 device.conhdl = param->conhdl;
dudnwjs 5:e11b23f9aacc 351
dudnwjs 5:e11b23f9aacc 352 memcpy(device.adv_addr.addr, param->peer_addr.addr, sizeof(struct bd_addr));
dudnwjs 5:e11b23f9aacc 353
dudnwjs 5:e11b23f9aacc 354
dudnwjs 5:e11b23f9aacc 355 char str[30] = "\nDIS&FOTA ENABLE and CONFIRM\n";
dudnwjs 5:e11b23f9aacc 356 BMH->HostPcPrint(str);
dudnwjs 5:e11b23f9aacc 357
dudnwjs 5:e11b23f9aacc 358 app_dis_enable(&device,BMH);
dudnwjs 5:e11b23f9aacc 359 app_fota_server_enable(&device,BMH);
dudnwjs 5:e11b23f9aacc 360 app_connect_confirm(GAP_AUTH_REQ_NO_MITM_NO_BOND,&device,BMH);
dudnwjs 6:8dd20294b2aa 361
dudnwjs 5:e11b23f9aacc 362 return 0;
dudnwjs 5:e11b23f9aacc 363 }
dudnwjs 5:e11b23f9aacc 364
dudnwjs 5:e11b23f9aacc 365 int gapc_disconnect_ind_handler(uint16_t msgid,
dudnwjs 5:e11b23f9aacc 366 struct gapc_disconnect_ind *param,
dudnwjs 5:e11b23f9aacc 367 uint16_t dest_id,
dudnwjs 5:e11b23f9aacc 368 uint16_t src_id,
dudnwjs 5:e11b23f9aacc 369 BleMsgHandler* BMH)
dudnwjs 5:e11b23f9aacc 370 {
dudnwjs 5:e11b23f9aacc 371 char str[22] = "\nDevice Disconnected\n";
dudnwjs 5:e11b23f9aacc 372 BMH->HostPcPrint(str);
dudnwjs 5:e11b23f9aacc 373
dudnwjs 5:e11b23f9aacc 374 app_send_disconnect(TASK_FOTA_SERVER, param->conhdl, param->reason, BMH);
dudnwjs 5:e11b23f9aacc 375 app_env.state = APP_IDLE;
dudnwjs 5:e11b23f9aacc 376
dudnwjs 5:e11b23f9aacc 377 wait(1);
dudnwjs 5:e11b23f9aacc 378 app_set_mode(BMH);
dudnwjs 5:e11b23f9aacc 379
dudnwjs 5:e11b23f9aacc 380 return 0;
dudnwjs 5:e11b23f9aacc 381 }
dudnwjs 5:e11b23f9aacc 382
dudnwjs 5:e11b23f9aacc 383
dudnwjs 4:60be78a172c2 384 }//namespace
dudnwjs 4:60be78a172c2 385