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.
Fork of mbed_fota by
dialog_fota/app.cpp@4:60be78a172c2, 2015-06-24 (annotated)
- Committer:
- dudnwjs
- Date:
- Wed Jun 24 08:50:07 2015 +0000
- Revision:
- 4:60be78a172c2
- Parent:
- 3:1e70387e1337
- Child:
- 5:e11b23f9aacc
Add advertising feature;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dudnwjs | 3:1e70387e1337 | 1 | #include "app.h" |
dudnwjs | 3:1e70387e1337 | 2 | #include "gapm_task.h" |
dudnwjs | 3:1e70387e1337 | 3 | #include "dialog_fota_config.h" |
dudnwjs | 4:60be78a172c2 | 4 | #include "diss_task.h" |
dudnwjs | 3:1e70387e1337 | 5 | |
dudnwjs | 3:1e70387e1337 | 6 | |
dudnwjs | 3:1e70387e1337 | 7 | namespace sevencore_fota{ |
dudnwjs | 3:1e70387e1337 | 8 | |
dudnwjs | 3:1e70387e1337 | 9 | void app_rst_gap(BleMsgHandler *BMH) |
dudnwjs | 3:1e70387e1337 | 10 | { |
dudnwjs | 3:1e70387e1337 | 11 | struct gapm_reset_cmd gm_cmd; |
dudnwjs | 3:1e70387e1337 | 12 | gm_cmd.operation = GAPM_RESET; |
dudnwjs | 3:1e70387e1337 | 13 | uint8_t *msg; |
dudnwjs | 3:1e70387e1337 | 14 | unsigned short msg_size = 1+sizeof(ble_hdr) + sizeof(gapm_reset_cmd); |
dudnwjs | 3:1e70387e1337 | 15 | msg = new uint8_t[msg_size]; |
dudnwjs | 3:1e70387e1337 | 16 | BMH->BleMsgAlloc(GAPM_RESET_CMD, TASK_GAPM, TASK_GTL, |
dudnwjs | 3:1e70387e1337 | 17 | sizeof(struct gapm_reset_cmd),&gm_cmd,msg); |
dudnwjs | 3:1e70387e1337 | 18 | |
dudnwjs | 3:1e70387e1337 | 19 | BMH->BleSendMsg(msg,msg_size); |
dudnwjs | 3:1e70387e1337 | 20 | |
dudnwjs | 3:1e70387e1337 | 21 | return; |
dudnwjs | 3:1e70387e1337 | 22 | } |
dudnwjs | 3:1e70387e1337 | 23 | |
dudnwjs | 4:60be78a172c2 | 24 | void app_diss_db_create(BleMsgHandler* BMH) |
dudnwjs | 4:60be78a172c2 | 25 | { |
dudnwjs | 4:60be78a172c2 | 26 | uint8_t *msg; |
dudnwjs | 4:60be78a172c2 | 27 | // Add DIS in the database |
dudnwjs | 4:60be78a172c2 | 28 | struct diss_create_db_req req; |
dudnwjs | 4:60be78a172c2 | 29 | unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(struct diss_create_db_req); |
dudnwjs | 4:60be78a172c2 | 30 | req.features = APP_DIS_FEATURES; |
dudnwjs | 4:60be78a172c2 | 31 | |
dudnwjs | 4:60be78a172c2 | 32 | msg = new uint8_t[msg_size]; |
dudnwjs | 4:60be78a172c2 | 33 | |
dudnwjs | 4:60be78a172c2 | 34 | BMH->BleMsgAlloc(DISS_CREATE_DB_REQ,TASK_DISS, TASK_GTL,sizeof(struct diss_create_db_req),&req,msg); |
dudnwjs | 4:60be78a172c2 | 35 | BMH->BleSendMsg(msg,msg_size); |
dudnwjs | 4:60be78a172c2 | 36 | } |
dudnwjs | 4:60be78a172c2 | 37 | |
dudnwjs | 4:60be78a172c2 | 38 | void app_adv_start(BleMsgHandler* BMH) |
dudnwjs | 4:60be78a172c2 | 39 | { |
dudnwjs | 4:60be78a172c2 | 40 | uint8_t device_name_length; |
dudnwjs | 4:60be78a172c2 | 41 | uint8_t device_name_avail_space; |
dudnwjs | 4:60be78a172c2 | 42 | uint8_t device_name_temp_buf[64]; |
dudnwjs | 4:60be78a172c2 | 43 | uint8_t *msg; |
dudnwjs | 4:60be78a172c2 | 44 | unsigned short msg_size; |
dudnwjs | 4:60be78a172c2 | 45 | msg_size = 1 + sizeof(ble_hdr) + sizeof(struct gapm_start_advertise_cmd); |
dudnwjs | 4:60be78a172c2 | 46 | msg = new uint8_t[msg_size]; |
dudnwjs | 4:60be78a172c2 | 47 | |
dudnwjs | 4:60be78a172c2 | 48 | // Allocate a message for GAP |
dudnwjs | 4:60be78a172c2 | 49 | struct gapm_start_advertise_cmd cmd; |
dudnwjs | 4:60be78a172c2 | 50 | cmd.op.code = GAPM_ADV_UNDIRECT; |
dudnwjs | 4:60be78a172c2 | 51 | cmd.op.addr_src = GAPM_PUBLIC_ADDR; |
dudnwjs | 4:60be78a172c2 | 52 | cmd.intv_min = APP_ADV_INT_MIN; |
dudnwjs | 4:60be78a172c2 | 53 | cmd.intv_max = APP_ADV_INT_MAX; |
dudnwjs | 4:60be78a172c2 | 54 | cmd.channel_map = APP_ADV_CHMAP; |
dudnwjs | 4:60be78a172c2 | 55 | cmd.info.host.mode = GAP_GEN_DISCOVERABLE; |
dudnwjs | 4:60be78a172c2 | 56 | cmd.info.host.adv_data_len = APP_ADV_DATA_MAX_SIZE; |
dudnwjs | 4:60be78a172c2 | 57 | cmd.info.host.scan_rsp_data_len = APP_SCAN_RESP_DATA_MAX_SIZE; |
dudnwjs | 4:60be78a172c2 | 58 | |
dudnwjs | 4:60be78a172c2 | 59 | /*----------------------------------------------------------------------------------- |
dudnwjs | 4:60be78a172c2 | 60 | * Set the Advertising Data and the Scan Response Data |
dudnwjs | 4:60be78a172c2 | 61 | *---------------------------------------------------------------------------------*/ |
dudnwjs | 4:60be78a172c2 | 62 | |
dudnwjs | 4:60be78a172c2 | 63 | |
dudnwjs | 4:60be78a172c2 | 64 | // Advertising Data |
dudnwjs | 4:60be78a172c2 | 65 | #if (NVDS_SUPPORT) |
dudnwjs | 4:60be78a172c2 | 66 | if(nvds_get(NVDS_TAG_APP_BLE_ADV_DATA, &cmd.info.host.adv_data_len, |
dudnwjs | 4:60be78a172c2 | 67 | &cmd.info.host.adv_data[0]) != NVDS_OK) |
dudnwjs | 4:60be78a172c2 | 68 | #endif //(NVDS_SUPPORT) |
dudnwjs | 4:60be78a172c2 | 69 | { |
dudnwjs | 4:60be78a172c2 | 70 | cmd.info.host.adv_data_len = APP_DFLT_ADV_DATA_LEN; |
dudnwjs | 4:60be78a172c2 | 71 | memcpy(&cmd.info.host.adv_data[0], APP_DFLT_ADV_DATA, cmd.info.host.adv_data_len); |
dudnwjs | 4:60be78a172c2 | 72 | |
dudnwjs | 4:60be78a172c2 | 73 | //Add list of UUID |
dudnwjs | 4:60be78a172c2 | 74 | #if (BLE_APP_HT) |
dudnwjs | 4:60be78a172c2 | 75 | cmd.info.host.adv_data_len += APP_HT_ADV_DATA_UUID_LEN; |
dudnwjs | 4:60be78a172c2 | 76 | memcpy(&cmd.info.host.adv_data[APP_DFLT_ADV_DATA_LEN], APP_HT_ADV_DATA_UUID, APP_HT_ADV_DATA_UUID_LEN); |
dudnwjs | 4:60be78a172c2 | 77 | #else |
dudnwjs | 4:60be78a172c2 | 78 | #if (BLE_APP_NEB) |
dudnwjs | 4:60be78a172c2 | 79 | cmd.info.host.adv_data_len += APP_NEB_ADV_DATA_UUID_LEN; |
dudnwjs | 4:60be78a172c2 | 80 | memcpy(&cmd.info.host.adv_data[APP_DFLT_ADV_DATA_LEN], APP_NEB_ADV_DATA_UUID, APP_NEB_ADV_DATA_UUID_LEN); |
dudnwjs | 4:60be78a172c2 | 81 | #endif //(BLE_APP_NEB) |
dudnwjs | 4:60be78a172c2 | 82 | #endif //(BLE_APP_HT) |
dudnwjs | 4:60be78a172c2 | 83 | } |
dudnwjs | 4:60be78a172c2 | 84 | |
dudnwjs | 4:60be78a172c2 | 85 | // Scan Response Data |
dudnwjs | 4:60be78a172c2 | 86 | #if (NVDS_SUPPORT) |
dudnwjs | 4:60be78a172c2 | 87 | if(nvds_get(NVDS_TAG_APP_BLE_SCAN_RESP_DATA, &cmd.info.host.scan_rsp_data_len, |
dudnwjs | 4:60be78a172c2 | 88 | &cmd.info.host.scan_rsp_data[0]) != NVDS_OK) |
dudnwjs | 4:60be78a172c2 | 89 | #endif //(NVDS_SUPPORT) |
dudnwjs | 4:60be78a172c2 | 90 | { |
dudnwjs | 4:60be78a172c2 | 91 | cmd.info.host.scan_rsp_data_len = APP_SCNRSP_DATA_LENGTH; |
dudnwjs | 4:60be78a172c2 | 92 | memcpy(&cmd.info.host.scan_rsp_data[0], APP_SCNRSP_DATA, cmd.info.host.scan_rsp_data_len); |
dudnwjs | 4:60be78a172c2 | 93 | } |
dudnwjs | 4:60be78a172c2 | 94 | |
dudnwjs | 4:60be78a172c2 | 95 | // Get remaining space in the Advertising Data - 2 bytes are used for name length/flag |
dudnwjs | 4:60be78a172c2 | 96 | device_name_avail_space = APP_ADV_DATA_MAX_SIZE - cmd.info.host.adv_data_len - 2; |
dudnwjs | 4:60be78a172c2 | 97 | |
dudnwjs | 4:60be78a172c2 | 98 | // Check if data can be added to the Advertising data |
dudnwjs | 4:60be78a172c2 | 99 | if (device_name_avail_space > 0) |
dudnwjs | 4:60be78a172c2 | 100 | { |
dudnwjs | 4:60be78a172c2 | 101 | // Get the Device Name to add in the Advertising Data (Default one or NVDS one) |
dudnwjs | 4:60be78a172c2 | 102 | #if (NVDS_SUPPORT) |
dudnwjs | 4:60be78a172c2 | 103 | device_name_length = NVDS_LEN_DEVICE_NAME; |
dudnwjs | 4:60be78a172c2 | 104 | if (nvds_get(NVDS_TAG_DEVICE_NAME, &device_name_length, &device_name_temp_buf[0]) != NVDS_OK) |
dudnwjs | 4:60be78a172c2 | 105 | #endif //(NVDS_SUPPORT) |
dudnwjs | 4:60be78a172c2 | 106 | { |
dudnwjs | 4:60be78a172c2 | 107 | // Get default Device Name (No name if not enough space) |
dudnwjs | 4:60be78a172c2 | 108 | device_name_length = strlen(APP_DFLT_DEVICE_NAME); |
dudnwjs | 4:60be78a172c2 | 109 | memcpy(&device_name_temp_buf[0], APP_DFLT_DEVICE_NAME, device_name_length); |
dudnwjs | 4:60be78a172c2 | 110 | } |
dudnwjs | 4:60be78a172c2 | 111 | |
dudnwjs | 4:60be78a172c2 | 112 | if(device_name_length > 0) |
dudnwjs | 4:60be78a172c2 | 113 | { |
dudnwjs | 4:60be78a172c2 | 114 | // Check available space |
dudnwjs | 4:60be78a172c2 | 115 | if( device_name_length > device_name_avail_space) |
dudnwjs | 4:60be78a172c2 | 116 | device_name_length = device_name_avail_space; |
dudnwjs | 4:60be78a172c2 | 117 | |
dudnwjs | 4:60be78a172c2 | 118 | // Fill Length |
dudnwjs | 4:60be78a172c2 | 119 | cmd.info.host.adv_data[cmd.info.host.adv_data_len] = device_name_length + 1; |
dudnwjs | 4:60be78a172c2 | 120 | // Fill Device Name Flag |
dudnwjs | 4:60be78a172c2 | 121 | cmd.info.host.adv_data[cmd.info.host.adv_data_len + 1] = '\x09'; |
dudnwjs | 4:60be78a172c2 | 122 | // Copy device name |
dudnwjs | 4:60be78a172c2 | 123 | memcpy(&cmd.info.host.adv_data[cmd.info.host.adv_data_len + 2], device_name_temp_buf, device_name_length); |
dudnwjs | 4:60be78a172c2 | 124 | |
dudnwjs | 4:60be78a172c2 | 125 | // Update Advertising Data Length |
dudnwjs | 4:60be78a172c2 | 126 | cmd.info.host.adv_data_len += (device_name_length + 2); |
dudnwjs | 4:60be78a172c2 | 127 | } |
dudnwjs | 4:60be78a172c2 | 128 | } |
dudnwjs | 4:60be78a172c2 | 129 | |
dudnwjs | 4:60be78a172c2 | 130 | // Send the message |
dudnwjs | 4:60be78a172c2 | 131 | BMH->BleMsgAlloc(GAPM_START_ADVERTISE_CMD,TASK_GAPM, TASK_GTL,sizeof (struct gapm_start_advertise_cmd),&cmd,msg); |
dudnwjs | 4:60be78a172c2 | 132 | BMH->BleSendMsg(msg, msg_size); |
dudnwjs | 4:60be78a172c2 | 133 | |
dudnwjs | 4:60be78a172c2 | 134 | return; |
dudnwjs | 4:60be78a172c2 | 135 | } |
dudnwjs | 4:60be78a172c2 | 136 | |
dudnwjs | 4:60be78a172c2 | 137 | void app_set_mode(BleMsgHandler* BMH) |
dudnwjs | 4:60be78a172c2 | 138 | { |
dudnwjs | 4:60be78a172c2 | 139 | uint8_t *msg; |
dudnwjs | 4:60be78a172c2 | 140 | struct gapm_set_dev_config_cmd cmd; |
dudnwjs | 4:60be78a172c2 | 141 | unsigned short msg_size = 1 + sizeof(ble_hdr) + sizeof(struct gapm_set_dev_config_cmd); |
dudnwjs | 4:60be78a172c2 | 142 | msg = new uint8_t[msg_size]; |
dudnwjs | 4:60be78a172c2 | 143 | |
dudnwjs | 4:60be78a172c2 | 144 | cmd.operation = GAPM_SET_DEV_CONFIG; |
dudnwjs | 4:60be78a172c2 | 145 | // Device Role |
dudnwjs | 4:60be78a172c2 | 146 | cmd.role = GAP_PERIPHERAL_SLV; |
dudnwjs | 4:60be78a172c2 | 147 | // Device Appearance |
dudnwjs | 4:60be78a172c2 | 148 | cmd.appearance = 0x0000; |
dudnwjs | 4:60be78a172c2 | 149 | // Device Appearance write permission requirements for peer device |
dudnwjs | 4:60be78a172c2 | 150 | cmd.appearance_write_perm = GAPM_WRITE_DISABLE; |
dudnwjs | 4:60be78a172c2 | 151 | // Device Name write permission requirements for peer device |
dudnwjs | 4:60be78a172c2 | 152 | cmd.name_write_perm = GAPM_WRITE_DISABLE; |
dudnwjs | 4:60be78a172c2 | 153 | // Peripheral only: ***************************************************************** |
dudnwjs | 4:60be78a172c2 | 154 | // Slave preferred Minimum of connection interval |
dudnwjs | 4:60be78a172c2 | 155 | cmd.con_intv_min = 8; // 10ms (8*1.25ms) |
dudnwjs | 4:60be78a172c2 | 156 | // Slave preferred Maximum of connection interval |
dudnwjs | 4:60be78a172c2 | 157 | cmd.con_intv_max = 16; // 20ms (16*1.25ms) |
dudnwjs | 4:60be78a172c2 | 158 | // Slave preferred Connection latency |
dudnwjs | 4:60be78a172c2 | 159 | cmd.con_latency = 0; |
dudnwjs | 4:60be78a172c2 | 160 | // Slave preferred Link supervision timeout |
dudnwjs | 4:60be78a172c2 | 161 | cmd.superv_to = 100; |
dudnwjs | 4:60be78a172c2 | 162 | // Privacy settings bit field |
dudnwjs | 4:60be78a172c2 | 163 | cmd.flags = 0; |
dudnwjs | 4:60be78a172c2 | 164 | |
dudnwjs | 4:60be78a172c2 | 165 | BMH->BleMsgAlloc(GAPM_SET_DEV_CONFIG_CMD, TASK_GAPM, TASK_GTL,sizeof(struct gapm_set_dev_config_cmd ),&cmd, msg); |
dudnwjs | 4:60be78a172c2 | 166 | BMH->BleSendMsg(msg,msg_size); |
dudnwjs | 4:60be78a172c2 | 167 | |
dudnwjs | 4:60be78a172c2 | 168 | return; |
dudnwjs | 4:60be78a172c2 | 169 | } |
dudnwjs | 4:60be78a172c2 | 170 | |
dudnwjs | 4:60be78a172c2 | 171 | |
dudnwjs | 3:1e70387e1337 | 172 | }//namespace |