![](/media/cache/profiles/profile2.jpg.50x50_q85.jpg)
This software setup a central node of a star topology network
Dependencies: MQTT target_st_bluenrg
Fork of ble-star-mbed by
inc/BleMasterService.h@0:1902469bdd2d, 2018-02-20 (annotated)
- Committer:
- lorevee
- Date:
- Tue Feb 20 11:21:41 2018 +0000
- Revision:
- 0:1902469bdd2d
- Child:
- 1:110b5e896bc9
First commit of Ble Star demo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lorevee | 0:1902469bdd2d | 1 | #ifndef __BLEMASTERSERVICE_H__ |
lorevee | 0:1902469bdd2d | 2 | #define __BLEMASTERSERVICE_H__ |
lorevee | 0:1902469bdd2d | 3 | |
lorevee | 0:1902469bdd2d | 4 | #include <events/mbed_events.h> |
lorevee | 0:1902469bdd2d | 5 | #include <mbed.h> |
lorevee | 0:1902469bdd2d | 6 | #include "ble/BLE.h" |
lorevee | 0:1902469bdd2d | 7 | #include "ble/Gap.h" |
lorevee | 0:1902469bdd2d | 8 | #include "ble/DiscoveredCharacteristic.h" |
lorevee | 0:1902469bdd2d | 9 | #include "ble/DiscoveredService.h" |
lorevee | 0:1902469bdd2d | 10 | #include <UUID.h> |
lorevee | 0:1902469bdd2d | 11 | #include <BleSlaveService.h> |
lorevee | 0:1902469bdd2d | 12 | |
lorevee | 0:1902469bdd2d | 13 | |
lorevee | 0:1902469bdd2d | 14 | |
lorevee | 0:1902469bdd2d | 15 | /* Max number of connectable nodes */ |
lorevee | 0:1902469bdd2d | 16 | #define MAX_NUM_OF_NODES 7 |
lorevee | 0:1902469bdd2d | 17 | |
lorevee | 0:1902469bdd2d | 18 | /* brief Data type length */ |
lorevee | 0:1902469bdd2d | 19 | #define ONE_BYTE_LEN 1 |
lorevee | 0:1902469bdd2d | 20 | #define TWO_BYTES_LEN 2 |
lorevee | 0:1902469bdd2d | 21 | |
lorevee | 0:1902469bdd2d | 22 | #define ENV_DATA_LEN_SHORT 8 |
lorevee | 0:1902469bdd2d | 23 | #define ENV_DATA_LEN_LONG 12 |
lorevee | 0:1902469bdd2d | 24 | #define PRESS_DATA_LEN 4 |
lorevee | 0:1902469bdd2d | 25 | #define HUM_DATA_LEN 2 |
lorevee | 0:1902469bdd2d | 26 | #define TEMP_DATA_LEN 2 |
lorevee | 0:1902469bdd2d | 27 | #define LED_DATA_LEN ONE_BYTE_LEN |
lorevee | 0:1902469bdd2d | 28 | #define MIC_DATA_LEN ONE_BYTE_LEN |
lorevee | 0:1902469bdd2d | 29 | #define LUX_DATA_LEN TWO_BYTES_LEN |
lorevee | 0:1902469bdd2d | 30 | #define PRX_DATA_LEN TWO_BYTES_LEN |
lorevee | 0:1902469bdd2d | 31 | #define ACC_DATA_LEN 6 |
lorevee | 0:1902469bdd2d | 32 | #define GYR_DATA_LEN 6 |
lorevee | 0:1902469bdd2d | 33 | #define MAG_DATA_LEN 6 |
lorevee | 0:1902469bdd2d | 34 | #define SFUSION_DATA_LEN 6 |
lorevee | 0:1902469bdd2d | 35 | #define X_DATA_LEN 2 |
lorevee | 0:1902469bdd2d | 36 | #define Y_DATA_LEN 2 |
lorevee | 0:1902469bdd2d | 37 | #define Z_DATA_LEN 2 |
lorevee | 0:1902469bdd2d | 38 | #define WUP_DATA_LEN 0 |
lorevee | 0:1902469bdd2d | 39 | #define STATUS_DATA_LEN 0 |
lorevee | 0:1902469bdd2d | 40 | |
lorevee | 0:1902469bdd2d | 41 | #define TSTAMP_LEN 2 |
lorevee | 0:1902469bdd2d | 42 | #define NODE_ID_LEN 2 |
lorevee | 0:1902469bdd2d | 43 | #define TYPE_ID_LEN 1 |
lorevee | 0:1902469bdd2d | 44 | |
lorevee | 0:1902469bdd2d | 45 | #define ATTR_HEAD_LEN TSTAMP_LEN+NODE_ID_LEN+TYPE_ID_LEN |
lorevee | 0:1902469bdd2d | 46 | #define ENV_DATA_LEN PRESS_DATA_LEN+HUM_DATA_LEN+TEMP_DATA_LEN+TEMP_DATA_LEN |
lorevee | 0:1902469bdd2d | 47 | #define MEMS_DATA_LEN ACC_DATA_LEN+GYR_DATA_LEN+MAG_DATA_LEN |
lorevee | 0:1902469bdd2d | 48 | |
lorevee | 0:1902469bdd2d | 49 | #define INT_VALUE 1 |
lorevee | 0:1902469bdd2d | 50 | #define FLOAT_VALUE 2 |
lorevee | 0:1902469bdd2d | 51 | |
lorevee | 0:1902469bdd2d | 52 | |
lorevee | 0:1902469bdd2d | 53 | /* Supported peripheral nodes ID */ |
lorevee | 0:1902469bdd2d | 54 | #define NODE_ME1 0x01 /* MOTENV1 */ |
lorevee | 0:1902469bdd2d | 55 | #define NODE_FL1 0x02 /* FLIGHT1 */ |
lorevee | 0:1902469bdd2d | 56 | #define NODE_AM1 0x03 /* ALLMEMS1 */ |
lorevee | 0:1902469bdd2d | 57 | |
lorevee | 0:1902469bdd2d | 58 | #define BDADDR_SIZE 6 |
lorevee | 0:1902469bdd2d | 59 | #define NODE_ID_B1 0 /* byte of the node BLE address used as 1st byte of the node ID */ |
lorevee | 0:1902469bdd2d | 60 | #define NODE_ID_B2 1 /* byte of the node BLE address used as 2nd byte of the node ID */ |
lorevee | 0:1902469bdd2d | 61 | #define NODE_ID_OFFSET NODE_ID_B1 |
lorevee | 0:1902469bdd2d | 62 | |
lorevee | 0:1902469bdd2d | 63 | #define ME1_WUP_EVENT_ENABLED 1 /* To enable/disable Wake Up events from MOTENV1 nodes */ |
lorevee | 0:1902469bdd2d | 64 | #define AM1_WUP_EVENT_ENABLED 0 /* To enable/disable Wake Up events from ALLMEMS1 nodes */ |
lorevee | 0:1902469bdd2d | 65 | /* It is present, without the need of any additional board, on the X-NUCLEO-IKS01A2. */ |
lorevee | 0:1902469bdd2d | 66 | #define MIC_PRESENT (0x20 | 0x04) /* MIC on the X-NUCLEO-CCA02M1 (in this case the fw running on the node is the ALLMEMS1). */ |
lorevee | 0:1902469bdd2d | 67 | #define PLUX_PRESENT (0x03) /* Proximity and Lux sensor on X-NUCLEO-6180XA1 (in this case the fw running on the node */ |
lorevee | 0:1902469bdd2d | 68 | /* is the FLIGHT1). */ |
lorevee | 0:1902469bdd2d | 69 | |
lorevee | 0:1902469bdd2d | 70 | #define BDADDR_SIZE 6 |
lorevee | 0:1902469bdd2d | 71 | #define NODE_ID_B1 0 /* byte of the node BLE address used as 1st byte of the node ID */ |
lorevee | 0:1902469bdd2d | 72 | #define NODE_ID_B2 1 /* byte of the node BLE address used as 2nd byte of the node ID */ |
lorevee | 0:1902469bdd2d | 73 | #define NODE_ID_OFFSET NODE_ID_B1 |
lorevee | 0:1902469bdd2d | 74 | |
lorevee | 0:1902469bdd2d | 75 | #define BUF_LEN 27 |
lorevee | 0:1902469bdd2d | 76 | |
lorevee | 0:1902469bdd2d | 77 | #define ENABLE 1 |
lorevee | 0:1902469bdd2d | 78 | #define DISABLE 0 |
lorevee | 0:1902469bdd2d | 79 | |
lorevee | 0:1902469bdd2d | 80 | #define MANUF_SPECIFIC_TYPE 0xFF |
lorevee | 0:1902469bdd2d | 81 | #define STM32_NUCLEO 0x80 |
lorevee | 0:1902469bdd2d | 82 | #define SENSOR_TILE 0x02 |
lorevee | 0:1902469bdd2d | 83 | #define BLUE_COIN 0x03 |
lorevee | 0:1902469bdd2d | 84 | #define WUP_POS 0x0A |
lorevee | 0:1902469bdd2d | 85 | #define MIC_POS 0x1A |
lorevee | 0:1902469bdd2d | 86 | #define PRX_POS 0x19 |
lorevee | 0:1902469bdd2d | 87 | #define ACC_POS 0x17 |
lorevee | 0:1902469bdd2d | 88 | #define SFUS_POS 0x07 |
lorevee | 0:1902469bdd2d | 89 | |
lorevee | 0:1902469bdd2d | 90 | /* Feature mask for Temperature1 */ |
lorevee | 0:1902469bdd2d | 91 | #define FEATURE_MASK_TEMP1 0x00040000 |
lorevee | 0:1902469bdd2d | 92 | /* Feature mask for Temperature2 */ |
lorevee | 0:1902469bdd2d | 93 | #define FEATURE_MASK_TEMP2 0x00010000 |
lorevee | 0:1902469bdd2d | 94 | /* Feature mask for Pressure */ |
lorevee | 0:1902469bdd2d | 95 | #define FEATURE_MASK_PRESS 0x00100000 |
lorevee | 0:1902469bdd2d | 96 | /* Feature mask for Humidity */ |
lorevee | 0:1902469bdd2d | 97 | #define FEATURE_MASK_HUM 0x00080000 |
lorevee | 0:1902469bdd2d | 98 | /* Feature mask for Accelerometer */ |
lorevee | 0:1902469bdd2d | 99 | #define FEATURE_MASK_ACC 0x00800000 |
lorevee | 0:1902469bdd2d | 100 | /* Feature mask for Gyroscope */ |
lorevee | 0:1902469bdd2d | 101 | #define FEATURE_MASK_GYR 0x00400000 |
lorevee | 0:1902469bdd2d | 102 | /* Feature mask for Magnetometer */ |
lorevee | 0:1902469bdd2d | 103 | #define FEATURE_MASK_MAG 0x00200000 |
lorevee | 0:1902469bdd2d | 104 | /* Feature mask for Sensor fusion */ |
lorevee | 0:1902469bdd2d | 105 | #define FEATURE_MASK_SENSORFUSION 0x00000100 |
lorevee | 0:1902469bdd2d | 106 | /* Feature mask for LED */ |
lorevee | 0:1902469bdd2d | 107 | #define FEATURE_MASK_LED_EVENTS 0x20000000 |
lorevee | 0:1902469bdd2d | 108 | /* Feature mask for WakeUp EVENT (here used as Motion Detector) */ |
lorevee | 0:1902469bdd2d | 109 | #define FEATURE_MASK_WAKEUP_EVENTS 0x00000400 |
lorevee | 0:1902469bdd2d | 110 | /* Feature mask for PROXIMITY EVENT */ |
lorevee | 0:1902469bdd2d | 111 | #define FEATURE_MASK_PROX 0x02000000 |
lorevee | 0:1902469bdd2d | 112 | /* Feature mask for MICROPHONE */ |
lorevee | 0:1902469bdd2d | 113 | #define FEATURE_MASK_MIC 0x04000000 |
lorevee | 0:1902469bdd2d | 114 | /* Command to set the WakeUp notification (here used as Motion Detector) */ |
lorevee | 0:1902469bdd2d | 115 | #define WAKEUP_NOTIFICATION_CMD 'w' |
lorevee | 0:1902469bdd2d | 116 | /* Command to set the notification frequency */ |
lorevee | 0:1902469bdd2d | 117 | #define NOTIFICATION_FREQ_CMD 255 |
lorevee | 0:1902469bdd2d | 118 | /* Notification frequency @50mS (default) */ |
lorevee | 0:1902469bdd2d | 119 | #define NOTIFICATION_FREQ_50 0 |
lorevee | 0:1902469bdd2d | 120 | /* Notification frequency @100mS */ |
lorevee | 0:1902469bdd2d | 121 | #define NOTIFICATION_FREQ_100 1 |
lorevee | 0:1902469bdd2d | 122 | /* Notification frequency @1S */ |
lorevee | 0:1902469bdd2d | 123 | #define NOTIFICATION_FREQ_1000 10 |
lorevee | 0:1902469bdd2d | 124 | /* Notification frequency @5S */ |
lorevee | 0:1902469bdd2d | 125 | #define NOTIFICATION_FREQ_5000 50 |
lorevee | 0:1902469bdd2d | 126 | /* Set the notification frequency to 100ms multiple */ |
lorevee | 0:1902469bdd2d | 127 | #define SENDING_INTERVAL_100MS_MULTIPLE 10 |
lorevee | 0:1902469bdd2d | 128 | /* Notification frequency when wifi is enabled */ |
lorevee | 0:1902469bdd2d | 129 | #define NOTIFICATION_FREQ_WIFI_ON NOTIFICATION_FREQ_1000 /* reduced to 1000 from NOTIFICATION_FREQ_5000 */ |
lorevee | 0:1902469bdd2d | 130 | /* Notification frequency when wifi is disabled */ |
lorevee | 0:1902469bdd2d | 131 | #define NOTIFICATION_FREQ_WIFI_OFF NOTIFICATION_FREQ_1000 |
lorevee | 0:1902469bdd2d | 132 | /* 1 to enable mems noifications */ |
lorevee | 0:1902469bdd2d | 133 | #define ENABLE_MEMS 0 |
lorevee | 0:1902469bdd2d | 134 | /* 1 to enable the scanning after disabling a notification */ |
lorevee | 0:1902469bdd2d | 135 | #define SCAN_AFTER_NOTIFICATION 1 |
lorevee | 0:1902469bdd2d | 136 | |
lorevee | 0:1902469bdd2d | 137 | extern EventQueue eventQ; |
lorevee | 0:1902469bdd2d | 138 | |
lorevee | 0:1902469bdd2d | 139 | |
lorevee | 0:1902469bdd2d | 140 | |
lorevee | 0:1902469bdd2d | 141 | /* This var defines the central role |
lorevee | 0:1902469bdd2d | 142 | * 0 if master |
lorevee | 0:1902469bdd2d | 143 | * 1 if slave */ |
lorevee | 0:1902469bdd2d | 144 | extern uint8_t role; |
lorevee | 0:1902469bdd2d | 145 | |
lorevee | 0:1902469bdd2d | 146 | /* Pointer to var (uint8_t role) */ |
lorevee | 0:1902469bdd2d | 147 | //uint8_t * pRole; |
lorevee | 0:1902469bdd2d | 148 | |
lorevee | 0:1902469bdd2d | 149 | |
lorevee | 0:1902469bdd2d | 150 | |
lorevee | 0:1902469bdd2d | 151 | /* Flag to indicate that the characteristic read is completed successful |
lorevee | 0:1902469bdd2d | 152 | * 1 successful |
lorevee | 0:1902469bdd2d | 153 | * 0 or anything else failed */ |
lorevee | 0:1902469bdd2d | 154 | extern uint8_t readCompleted; |
lorevee | 0:1902469bdd2d | 155 | |
lorevee | 0:1902469bdd2d | 156 | |
lorevee | 0:1902469bdd2d | 157 | |
lorevee | 0:1902469bdd2d | 158 | /* Flag to indicate if the device discovery is completed successful |
lorevee | 0:1902469bdd2d | 159 | * 1 successful |
lorevee | 0:1902469bdd2d | 160 | * 0 or anything else failed */ |
lorevee | 0:1902469bdd2d | 161 | extern uint8_t discoveryCompleted; |
lorevee | 0:1902469bdd2d | 162 | |
lorevee | 0:1902469bdd2d | 163 | |
lorevee | 0:1902469bdd2d | 164 | |
lorevee | 0:1902469bdd2d | 165 | /* Flag to indicate if the ch descriptor write is completed successful |
lorevee | 0:1902469bdd2d | 166 | * 1 successful |
lorevee | 0:1902469bdd2d | 167 | * 0 or anything else failed */ |
lorevee | 0:1902469bdd2d | 168 | extern uint8_t writeDescriptorCompleted; |
lorevee | 0:1902469bdd2d | 169 | |
lorevee | 0:1902469bdd2d | 170 | |
lorevee | 0:1902469bdd2d | 171 | |
lorevee | 0:1902469bdd2d | 172 | /* Flag to indicate if the advertising is completed |
lorevee | 0:1902469bdd2d | 173 | * 1 completed |
lorevee | 0:1902469bdd2d | 174 | * 0 or anything else not completed */ |
lorevee | 0:1902469bdd2d | 175 | extern uint8_t advEnds; |
lorevee | 0:1902469bdd2d | 176 | |
lorevee | 0:1902469bdd2d | 177 | |
lorevee | 0:1902469bdd2d | 178 | /* Flag to indicate if a change of notification is pending |
lorevee | 0:1902469bdd2d | 179 | * 1 pending |
lorevee | 0:1902469bdd2d | 180 | * 0 or anything else not pending */ |
lorevee | 0:1902469bdd2d | 181 | extern uint8_t notificationPending; |
lorevee | 0:1902469bdd2d | 182 | |
lorevee | 0:1902469bdd2d | 183 | |
lorevee | 0:1902469bdd2d | 184 | |
lorevee | 0:1902469bdd2d | 185 | |
lorevee | 0:1902469bdd2d | 186 | /* Supported peripheral nodes name */ |
lorevee | 0:1902469bdd2d | 187 | const char NODE_MOTENV[] = "ME1V310"; |
lorevee | 0:1902469bdd2d | 188 | const char NODE_FLIGHT[] = "FL1V310"; |
lorevee | 0:1902469bdd2d | 189 | const char NODE_ALLMEMS[] = "AM1V320"; |
lorevee | 0:1902469bdd2d | 190 | |
lorevee | 0:1902469bdd2d | 191 | |
lorevee | 0:1902469bdd2d | 192 | /* Properties mask */ |
lorevee | 0:1902469bdd2d | 193 | static uint8_t props_mask[] = { |
lorevee | 0:1902469bdd2d | 194 | 0x01, |
lorevee | 0:1902469bdd2d | 195 | 0x02, |
lorevee | 0:1902469bdd2d | 196 | 0x04, |
lorevee | 0:1902469bdd2d | 197 | 0x08, |
lorevee | 0:1902469bdd2d | 198 | 0x10, |
lorevee | 0:1902469bdd2d | 199 | 0x20, |
lorevee | 0:1902469bdd2d | 200 | 0x40, |
lorevee | 0:1902469bdd2d | 201 | 0x80 |
lorevee | 0:1902469bdd2d | 202 | }; |
lorevee | 0:1902469bdd2d | 203 | |
lorevee | 0:1902469bdd2d | 204 | |
lorevee | 0:1902469bdd2d | 205 | /* Enum of different states */ |
lorevee | 0:1902469bdd2d | 206 | typedef enum { |
lorevee | 0:1902469bdd2d | 207 | CONN_INIT, // 0 |
lorevee | 0:1902469bdd2d | 208 | START_DEVICE_DISCOVERY, // 1 |
lorevee | 0:1902469bdd2d | 209 | DEVICE_FOUND, // 2 |
lorevee | 0:1902469bdd2d | 210 | DEVICE_NOT_FOUND, // 3 |
lorevee | 0:1902469bdd2d | 211 | DEVICE_DISCOVERY_COMPLETE, // 4 |
lorevee | 0:1902469bdd2d | 212 | START_DEVICE_CONNECTION, // 5 |
lorevee | 0:1902469bdd2d | 213 | DEVICE_CONNECTED, // 6 |
lorevee | 0:1902469bdd2d | 214 | DEVICE_CONNECTION_COMPLETE, // 7 |
lorevee | 0:1902469bdd2d | 215 | START_DISCOVERABLE_MODE, // 8 |
lorevee | 0:1902469bdd2d | 216 | DISCOVERABLE_MODE_SET, // 9 |
lorevee | 0:1902469bdd2d | 217 | START_SERVICE_DISCOVERY, //10 |
lorevee | 0:1902469bdd2d | 218 | SERVICE_DISCOVERED, //11 |
lorevee | 0:1902469bdd2d | 219 | SERVICE_DISCOVERY_COMPLETE, //12 |
lorevee | 0:1902469bdd2d | 220 | START_HARDWARE_SERV_CHARS_DISCOVERY, //13 |
lorevee | 0:1902469bdd2d | 221 | HARDWARE_SERV_CHARS_DISCOVERED, //14 |
lorevee | 0:1902469bdd2d | 222 | HARDWARE_SERV_CHARS_DISCOVERY_COMPLETE, //15 |
lorevee | 0:1902469bdd2d | 223 | START_SOFTWARE_SERV_CHARS_DISCOVERY, //16 |
lorevee | 0:1902469bdd2d | 224 | SOFTWARE_SERV_CHARS_DISCOVERED, //17 |
lorevee | 0:1902469bdd2d | 225 | SOFTWARE_SERV_CHARS_DISCOVERY_COMPLETE, //18 |
lorevee | 0:1902469bdd2d | 226 | START_CONFIGURATION_SERV_CHARS_DISCOVERY, //19 |
lorevee | 0:1902469bdd2d | 227 | CONFIGURATION_SERV_CHARS_DISCOVERED, //20 |
lorevee | 0:1902469bdd2d | 228 | CONFIGURATION_SERV_CHARS_DISCOVERY_COMPLETE, //21 |
lorevee | 0:1902469bdd2d | 229 | ENABLE_ME1_LED_NOTIFICATIONS, //22 |
lorevee | 0:1902469bdd2d | 230 | ENABLE_ME1_WUP_NOTIFICATIONS, //23 |
lorevee | 0:1902469bdd2d | 231 | NOTIFICATIONS_ENABLED, //24 |
lorevee | 0:1902469bdd2d | 232 | READ_INIT, //25 |
lorevee | 0:1902469bdd2d | 233 | READING_PRX, //26 |
lorevee | 0:1902469bdd2d | 234 | NOTIFY_PRX_TO_CLIENT, //27 |
lorevee | 0:1902469bdd2d | 235 | READING_ENVIRONMENTAL, //28 |
lorevee | 0:1902469bdd2d | 236 | NOTIFY_ENV_TO_CLIENT, //29 |
lorevee | 0:1902469bdd2d | 237 | READING_LED, //30 |
lorevee | 0:1902469bdd2d | 238 | NOTIFY_LED_TO_CLIENT, //31 |
lorevee | 0:1902469bdd2d | 239 | READING_LUX, //32 |
lorevee | 0:1902469bdd2d | 240 | NOTIFY_LUX_TO_CLIENT, //33 |
lorevee | 0:1902469bdd2d | 241 | READING_MIC, //34 |
lorevee | 0:1902469bdd2d | 242 | NOTIFY_MIC_TO_CLIENT, //35 |
lorevee | 0:1902469bdd2d | 243 | READING_AGM, //36 |
lorevee | 0:1902469bdd2d | 244 | NOTIFY_AGM_TO_CLIENT, //37 |
lorevee | 0:1902469bdd2d | 245 | READING_SFUSION, //38 |
lorevee | 0:1902469bdd2d | 246 | NOTIFY_SFUSION_TO_CLIENT, //39 |
lorevee | 0:1902469bdd2d | 247 | READING_PRESSURE, //40 |
lorevee | 0:1902469bdd2d | 248 | READING_HUMIDITY, //41 |
lorevee | 0:1902469bdd2d | 249 | READING_TEMPERATURE, //42 |
lorevee | 0:1902469bdd2d | 250 | ALL_DATA_READ, //43 |
lorevee | 0:1902469bdd2d | 251 | NOTIFICATIONS_DATA_READ, //44 |
lorevee | 0:1902469bdd2d | 252 | DISABLE_NOTIFICATIONS, //45 |
lorevee | 0:1902469bdd2d | 253 | READING_DISCONNECTION, //46 |
lorevee | 0:1902469bdd2d | 254 | CHANGE_NOTIFICATION_STATUS //47 |
lorevee | 0:1902469bdd2d | 255 | } Status_t; |
lorevee | 0:1902469bdd2d | 256 | |
lorevee | 0:1902469bdd2d | 257 | |
lorevee | 0:1902469bdd2d | 258 | /* (Service) Handle struct */ |
lorevee | 0:1902469bdd2d | 259 | typedef struct { |
lorevee | 0:1902469bdd2d | 260 | uint16_t start_h; |
lorevee | 0:1902469bdd2d | 261 | uint16_t end_h; |
lorevee | 0:1902469bdd2d | 262 | } Handle_t; |
lorevee | 0:1902469bdd2d | 263 | |
lorevee | 0:1902469bdd2d | 264 | typedef DiscoveredCharacteristic::Properties_t Properties_t; |
lorevee | 0:1902469bdd2d | 265 | |
lorevee | 0:1902469bdd2d | 266 | typedef BLEProtocol::AddressBytes_t tBDAddr; |
lorevee | 0:1902469bdd2d | 267 | |
lorevee | 0:1902469bdd2d | 268 | /* Peripheral device info struct */ |
lorevee | 0:1902469bdd2d | 269 | typedef struct { |
lorevee | 0:1902469bdd2d | 270 | uint8_t dev_v; // per device ID |
lorevee | 0:1902469bdd2d | 271 | tBDAddr bdaddr; // per device addr |
lorevee | 0:1902469bdd2d | 272 | } devInfo_t; |
lorevee | 0:1902469bdd2d | 273 | |
lorevee | 0:1902469bdd2d | 274 | |
lorevee | 0:1902469bdd2d | 275 | /* Struct contains the peripheral devices informations */ |
lorevee | 0:1902469bdd2d | 276 | typedef struct { |
lorevee | 0:1902469bdd2d | 277 | devInfo_t devInfo[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 278 | uint8_t discovery_enabled; |
lorevee | 0:1902469bdd2d | 279 | bool device_found; |
lorevee | 0:1902469bdd2d | 280 | uint8_t connDevices; |
lorevee | 0:1902469bdd2d | 281 | uint8_t discDevices; |
lorevee | 0:1902469bdd2d | 282 | uint8_t connDeviceIdx; |
lorevee | 0:1902469bdd2d | 283 | uint8_t readDeviceIdx; |
lorevee | 0:1902469bdd2d | 284 | uint16_t connection_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 285 | bool is_connected[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 286 | bool is_disconnected[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 287 | bool is_unconnectable[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 288 | |
lorevee | 0:1902469bdd2d | 289 | Handle_t gen_access_profile_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 290 | Handle_t gen_attribute_profile_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 291 | Handle_t hardware_service_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 292 | Handle_t configuration_service_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 293 | Handle_t software_service_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 294 | |
lorevee | 0:1902469bdd2d | 295 | // Characteristic handles |
lorevee | 0:1902469bdd2d | 296 | uint16_t environmental_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 297 | uint16_t pressure_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 298 | uint16_t humidity_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 299 | uint16_t temperature_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 300 | uint16_t led_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 301 | uint16_t cfg_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 302 | uint16_t wup_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 303 | uint16_t mic_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 304 | uint16_t prx_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 305 | uint16_t lux_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 306 | uint16_t agm_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 307 | uint16_t sfusion_char_handle[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 308 | |
lorevee | 0:1902469bdd2d | 309 | uint8_t led_char_read[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 310 | uint8_t wup_char_read[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 311 | uint8_t mic_char_read[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 312 | uint8_t prx_char_read[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 313 | uint8_t agm_char_read[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 314 | uint8_t sfusion_char_read[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 315 | uint8_t wup_event[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 316 | uint8_t mic_event[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 317 | uint8_t prx_event[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 318 | uint8_t agm_event[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 319 | uint8_t sfusion_event[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 320 | uint8_t prx_on[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 321 | uint8_t agm_on[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 322 | uint8_t sfusion_on[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 323 | uint8_t mic_event_enabled; |
lorevee | 0:1902469bdd2d | 324 | uint8_t prx_event_enabled; |
lorevee | 0:1902469bdd2d | 325 | uint8_t agm_event_enabled; |
lorevee | 0:1902469bdd2d | 326 | uint8_t sfusion_event_enabled; |
lorevee | 0:1902469bdd2d | 327 | uint8_t wup_event_enabled; |
lorevee | 0:1902469bdd2d | 328 | uint8_t acc_event_enabled; |
lorevee | 0:1902469bdd2d | 329 | uint8_t gyr_event_enabled; |
lorevee | 0:1902469bdd2d | 330 | uint8_t mag_event_enabled; |
lorevee | 0:1902469bdd2d | 331 | Status_t status; |
lorevee | 0:1902469bdd2d | 332 | |
lorevee | 0:1902469bdd2d | 333 | } PeripheralDevices_t; |
lorevee | 0:1902469bdd2d | 334 | |
lorevee | 0:1902469bdd2d | 335 | |
lorevee | 0:1902469bdd2d | 336 | |
lorevee | 0:1902469bdd2d | 337 | |
lorevee | 0:1902469bdd2d | 338 | /* List of type id */ |
lorevee | 0:1902469bdd2d | 339 | typedef enum { |
lorevee | 0:1902469bdd2d | 340 | UNKNOWN_TYPE_ID, //0 |
lorevee | 0:1902469bdd2d | 341 | PRESS_TYPE_ID, //1 (its data value is 4 bytes long) |
lorevee | 0:1902469bdd2d | 342 | HUM_TYPE_ID, //2 (its data value is 2 bytes long) |
lorevee | 0:1902469bdd2d | 343 | TEMP_TYPE_ID, //3 (its data value is 2 bytes long) |
lorevee | 0:1902469bdd2d | 344 | LED_TYPE_ID, //4 (its data value is 1 byte long) |
lorevee | 0:1902469bdd2d | 345 | PRX_TYPE_ID, //5 (its data value is 2 bytes long) |
lorevee | 0:1902469bdd2d | 346 | WUP_TYPE_ID, //6 (no data value) |
lorevee | 0:1902469bdd2d | 347 | MICLEVEL_TYPE_ID, //7 (its data value is 1 byte long) |
lorevee | 0:1902469bdd2d | 348 | LUX_TYPE_ID, //8 (its data value is 2 bytes long) |
lorevee | 0:1902469bdd2d | 349 | ACC_TYPE_ID, //9 (its data value is 6 bytes long) |
lorevee | 0:1902469bdd2d | 350 | GYR_TYPE_ID, //10 (its data value is 6 bytes long) |
lorevee | 0:1902469bdd2d | 351 | MAG_TYPE_ID, //11 (its data value is 6 bytes long) |
lorevee | 0:1902469bdd2d | 352 | STATUS_TYPE_ID, //12 (no data value) |
lorevee | 0:1902469bdd2d | 353 | SFUSION_TYPE_ID //13 (its data value is 8 bytes long) |
lorevee | 0:1902469bdd2d | 354 | // (increase the enum to add new data type IDs) |
lorevee | 0:1902469bdd2d | 355 | } Data_Type_ID_t; |
lorevee | 0:1902469bdd2d | 356 | |
lorevee | 0:1902469bdd2d | 357 | |
lorevee | 0:1902469bdd2d | 358 | |
lorevee | 0:1902469bdd2d | 359 | /* Struct of the generic DiscoveredCharacteristic node */ |
lorevee | 0:1902469bdd2d | 360 | struct DiscoveredCharacteristicNode{ |
lorevee | 0:1902469bdd2d | 361 | //data |
lorevee | 0:1902469bdd2d | 362 | DiscoveredCharacteristic data; |
lorevee | 0:1902469bdd2d | 363 | //pointer to next node |
lorevee | 0:1902469bdd2d | 364 | DiscoveredCharacteristicNode * next; |
lorevee | 0:1902469bdd2d | 365 | }; |
lorevee | 0:1902469bdd2d | 366 | |
lorevee | 0:1902469bdd2d | 367 | |
lorevee | 0:1902469bdd2d | 368 | /* Header pointer of the DiscoveredCharacteristic list */ |
lorevee | 0:1902469bdd2d | 369 | extern DiscoveredCharacteristicNode * headCharacteristic[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 370 | extern DiscoveredCharacteristicNode * tmp[MAX_NUM_OF_NODES]; |
lorevee | 0:1902469bdd2d | 371 | |
lorevee | 0:1902469bdd2d | 372 | |
lorevee | 0:1902469bdd2d | 373 | /* Primary Service UUID expected from Sensor demo peripherals */ |
lorevee | 0:1902469bdd2d | 374 | extern UUID::ShortUUIDBytes_t GENERIC_ACCESS_PROFILE_UUID; |
lorevee | 0:1902469bdd2d | 375 | extern UUID::ShortUUIDBytes_t GENERIC_ATTRIBUTE_PROFILE_UUID; |
lorevee | 0:1902469bdd2d | 376 | |
lorevee | 0:1902469bdd2d | 377 | |
lorevee | 0:1902469bdd2d | 378 | |
lorevee | 0:1902469bdd2d | 379 | |
lorevee | 0:1902469bdd2d | 380 | /* Services UUID */ // 1b:c5:d5:a5:02:00:b4:9a:e1:11:XX:XX:XX:XX:XX:XX |
lorevee | 0:1902469bdd2d | 381 | extern UUID::LongUUIDBytes_t HARDWARE_SERVICE_UUID; |
lorevee | 0:1902469bdd2d | 382 | |
lorevee | 0:1902469bdd2d | 383 | extern UUID::LongUUIDBytes_t CONFIG_SERVICE_UUID; |
lorevee | 0:1902469bdd2d | 384 | |
lorevee | 0:1902469bdd2d | 385 | extern UUID::LongUUIDBytes_t SOFTWARE_SERVICE_UUID; |
lorevee | 0:1902469bdd2d | 386 | |
lorevee | 0:1902469bdd2d | 387 | |
lorevee | 0:1902469bdd2d | 388 | |
lorevee | 0:1902469bdd2d | 389 | |
lorevee | 0:1902469bdd2d | 390 | /* Characteristics UUID */ |
lorevee | 0:1902469bdd2d | 391 | /* ENVIRONMENTAL */ |
lorevee | 0:1902469bdd2d | 392 | extern UUID::LongUUIDBytes_t ENVIRONMENTAL_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 393 | |
lorevee | 0:1902469bdd2d | 394 | /* ENVIRONMENTAL for Sensor Tile */ |
lorevee | 0:1902469bdd2d | 395 | extern UUID::LongUUIDBytes_t ENVIRONMENTAL_ST_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 396 | |
lorevee | 0:1902469bdd2d | 397 | /* ACC + GYRO + MAG */ |
lorevee | 0:1902469bdd2d | 398 | extern UUID::LongUUIDBytes_t ACCGYROMAG_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 399 | |
lorevee | 0:1902469bdd2d | 400 | /* MEMS SENSOR FUSION */ |
lorevee | 0:1902469bdd2d | 401 | extern UUID::LongUUIDBytes_t SFUSION_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 402 | |
lorevee | 0:1902469bdd2d | 403 | /* LED */ |
lorevee | 0:1902469bdd2d | 404 | extern UUID::LongUUIDBytes_t LED_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 405 | |
lorevee | 0:1902469bdd2d | 406 | /* WAKEUP */ |
lorevee | 0:1902469bdd2d | 407 | extern UUID::LongUUIDBytes_t WAKEUP_EVENT_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 408 | |
lorevee | 0:1902469bdd2d | 409 | /* MICROPHONE */ |
lorevee | 0:1902469bdd2d | 410 | extern UUID::LongUUIDBytes_t MIC_EVENT_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 411 | |
lorevee | 0:1902469bdd2d | 412 | /* PROXIMITY */ |
lorevee | 0:1902469bdd2d | 413 | extern UUID::LongUUIDBytes_t PROXIMITY_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 414 | |
lorevee | 0:1902469bdd2d | 415 | /* LUX */ |
lorevee | 0:1902469bdd2d | 416 | extern UUID::LongUUIDBytes_t LUX_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 417 | |
lorevee | 0:1902469bdd2d | 418 | /* CONFIGURATION */ |
lorevee | 0:1902469bdd2d | 419 | extern UUID::LongUUIDBytes_t CONFIG_CHAR_UUID; |
lorevee | 0:1902469bdd2d | 420 | |
lorevee | 0:1902469bdd2d | 421 | |
lorevee | 0:1902469bdd2d | 422 | /*----- -----*/ |
lorevee | 0:1902469bdd2d | 423 | extern uint8_t wifi_data[256]; |
lorevee | 0:1902469bdd2d | 424 | extern uint8_t new_data; |
lorevee | 0:1902469bdd2d | 425 | extern uint8_t *data; |
lorevee | 0:1902469bdd2d | 426 | extern uint8_t wifi_present; |
lorevee | 0:1902469bdd2d | 427 | |
lorevee | 0:1902469bdd2d | 428 | extern char print_msg_buff[512]; |
lorevee | 0:1902469bdd2d | 429 | //extern UART_HandleTypeDef UartMsgHandle; |
lorevee | 0:1902469bdd2d | 430 | |
lorevee | 0:1902469bdd2d | 431 | //extern uint16_t connection_handle = 0; |
lorevee | 0:1902469bdd2d | 432 | |
lorevee | 0:1902469bdd2d | 433 | extern uint8_t attribute_value[20]; |
lorevee | 0:1902469bdd2d | 434 | extern uint8_t star_attr_value[256]; |
lorevee | 0:1902469bdd2d | 435 | //extern uint8_t bnrg_expansion_board_type = IDB04A1; /* at startup, suppose the X-NUCLEO-IDB04A1 is used */ |
lorevee | 0:1902469bdd2d | 436 | extern uint8_t notification_freq; |
lorevee | 0:1902469bdd2d | 437 | |
lorevee | 0:1902469bdd2d | 438 | |
lorevee | 0:1902469bdd2d | 439 | /*---- Main functions declaration ----*/ |
lorevee | 0:1902469bdd2d | 440 | /* Complete the initialization of ble module */ |
lorevee | 0:1902469bdd2d | 441 | void bleInitComplete (BLE::InitializationCompleteCallbackContext *params); |
lorevee | 0:1902469bdd2d | 442 | |
lorevee | 0:1902469bdd2d | 443 | /* scheduleBleEventsProcessing */ |
lorevee | 0:1902469bdd2d | 444 | void scheduleBleEventsProcessing (BLE::OnEventsToProcessCallbackContext* context); |
lorevee | 0:1902469bdd2d | 445 | |
lorevee | 0:1902469bdd2d | 446 | /* Initialization error handling */ |
lorevee | 0:1902469bdd2d | 447 | void onBleInitError (BLE &ble, ble_error_t error); |
lorevee | 0:1902469bdd2d | 448 | |
lorevee | 0:1902469bdd2d | 449 | void checkStatus (void); |
lorevee | 0:1902469bdd2d | 450 | |
lorevee | 0:1902469bdd2d | 451 | |
lorevee | 0:1902469bdd2d | 452 | /*---- Master service functions declarations ----*/ |
lorevee | 0:1902469bdd2d | 453 | /* Scan for new peripheral nodes and establish new connections */ |
lorevee | 0:1902469bdd2d | 454 | void connectionProcess (void); |
lorevee | 0:1902469bdd2d | 455 | |
lorevee | 0:1902469bdd2d | 456 | /* Read data from peripheral nodes */ |
lorevee | 0:1902469bdd2d | 457 | void readingProcess (void); |
lorevee | 0:1902469bdd2d | 458 | |
lorevee | 0:1902469bdd2d | 459 | /* Create a null gatt read pointer */ |
lorevee | 0:1902469bdd2d | 460 | GattReadCallbackParams * nullGattReadCallbackP (uint16_t connection_handle); |
lorevee | 0:1902469bdd2d | 461 | |
lorevee | 0:1902469bdd2d | 462 | |
lorevee | 0:1902469bdd2d | 463 | /* Print the central mac addr */ |
lorevee | 0:1902469bdd2d | 464 | void printMacAddress (void); |
lorevee | 0:1902469bdd2d | 465 | |
lorevee | 0:1902469bdd2d | 466 | /* Complete the initialization of ble module */ |
lorevee | 0:1902469bdd2d | 467 | void bleInitComplete (BLE::InitializationCompleteCallbackContext *params); |
lorevee | 0:1902469bdd2d | 468 | |
lorevee | 0:1902469bdd2d | 469 | /* Callback functions */ |
lorevee | 0:1902469bdd2d | 470 | void disconnectionCallback (const Gap::DisconnectionCallbackParams_t *); |
lorevee | 0:1902469bdd2d | 471 | |
lorevee | 0:1902469bdd2d | 472 | void connectionCallback (const Gap::ConnectionCallbackParams_t *params); |
lorevee | 0:1902469bdd2d | 473 | |
lorevee | 0:1902469bdd2d | 474 | void advertisementCallback (const Gap::AdvertisementCallbackParams_t *params); |
lorevee | 0:1902469bdd2d | 475 | |
lorevee | 0:1902469bdd2d | 476 | void onStopScan (Gap::TimeoutSource_t t); |
lorevee | 0:1902469bdd2d | 477 | |
lorevee | 0:1902469bdd2d | 478 | void serviceDiscoveryCallback (const DiscoveredService *service); |
lorevee | 0:1902469bdd2d | 479 | |
lorevee | 0:1902469bdd2d | 480 | void characteristicDiscoveryCallback (const DiscoveredCharacteristic *characteristicP); |
lorevee | 0:1902469bdd2d | 481 | |
lorevee | 0:1902469bdd2d | 482 | void discoveryTerminationCallback (Gap::Handle_t connectionHandle); |
lorevee | 0:1902469bdd2d | 483 | |
lorevee | 0:1902469bdd2d | 484 | /* Method called after the reading of a characteristic */ |
lorevee | 0:1902469bdd2d | 485 | void readCharacteristicCallback (const GattReadCallbackParams *response); |
lorevee | 0:1902469bdd2d | 486 | |
lorevee | 0:1902469bdd2d | 487 | /* Method called after a periph descriptor is written */ |
lorevee | 0:1902469bdd2d | 488 | void perDescriptorWrittenCallback (const GattWriteCallbackParams* event); |
lorevee | 0:1902469bdd2d | 489 | |
lorevee | 0:1902469bdd2d | 490 | |
lorevee | 0:1902469bdd2d | 491 | |
lorevee | 0:1902469bdd2d | 492 | /* Save the found peripheral device in the struct containing all the |
lorevee | 0:1902469bdd2d | 493 | found peripheral devices. */ |
lorevee | 0:1902469bdd2d | 494 | void saveDeviceFound (uint8_t adv_type, BLEProtocol::AddressBytes_t addr, |
lorevee | 0:1902469bdd2d | 495 | uint8_t data_length, const uint8_t* data_RSSI, uint8_t pos, uint8_t dev_v, |
lorevee | 0:1902469bdd2d | 496 | uint8_t wup_event, uint8_t mic_event, uint8_t prx_event, |
lorevee | 0:1902469bdd2d | 497 | uint8_t agm_event, uint8_t sfusion_event); |
lorevee | 0:1902469bdd2d | 498 | |
lorevee | 0:1902469bdd2d | 499 | /* Connect the device as Master to a peripheral device */ |
lorevee | 0:1902469bdd2d | 500 | void connectPeripheral (void); |
lorevee | 0:1902469bdd2d | 501 | |
lorevee | 0:1902469bdd2d | 502 | /* Service discovery */ |
lorevee | 0:1902469bdd2d | 503 | void discoverServices (void); |
lorevee | 0:1902469bdd2d | 504 | |
lorevee | 0:1902469bdd2d | 505 | /* Initialize the struct where all peripheral devices are stored */ |
lorevee | 0:1902469bdd2d | 506 | void initProcess (void); |
lorevee | 0:1902469bdd2d | 507 | |
lorevee | 0:1902469bdd2d | 508 | /* Start the discovery of new peripheral nodes */ |
lorevee | 0:1902469bdd2d | 509 | void startDiscovery (void); |
lorevee | 0:1902469bdd2d | 510 | |
lorevee | 0:1902469bdd2d | 511 | /* This function retrieves the peripheral device index from the connection handle */ |
lorevee | 0:1902469bdd2d | 512 | void getDeviceFromConnHandle (uint16_t handle, uint8_t *index, tBDAddr devAddr); |
lorevee | 0:1902469bdd2d | 513 | |
lorevee | 0:1902469bdd2d | 514 | /* This method reads the characteristic in input */ |
lorevee | 0:1902469bdd2d | 515 | void readSensorData (const DiscoveredCharacteristic &characteristic, |
lorevee | 0:1902469bdd2d | 516 | uint16_t connection_handle, uint8_t index); |
lorevee | 0:1902469bdd2d | 517 | |
lorevee | 0:1902469bdd2d | 518 | /* Set the new status */ |
lorevee | 0:1902469bdd2d | 519 | void setNewStatus (void); |
lorevee | 0:1902469bdd2d | 520 | |
lorevee | 0:1902469bdd2d | 521 | /* Method that enables characteristic notifications */ |
lorevee | 0:1902469bdd2d | 522 | void enableNotifications (uint16_t conn_handle, uint8_t index, uint8_t dev_v, uint8_t set_mode); |
lorevee | 0:1902469bdd2d | 523 | |
lorevee | 0:1902469bdd2d | 524 | /* Write a characteristic descriptor */ |
lorevee | 0:1902469bdd2d | 525 | void writeCharacDescriptor (uint16_t conn_handle, uint16_t attr_handle, uint8_t attr_len, |
lorevee | 0:1902469bdd2d | 526 | uint8_t* attr_value); |
lorevee | 0:1902469bdd2d | 527 | |
lorevee | 0:1902469bdd2d | 528 | /* Get error */ |
lorevee | 0:1902469bdd2d | 529 | ble_error_t writeCharacDescriptorWithError (uint16_t conn_handle, uint16_t attr_handle, uint8_t attr_len, |
lorevee | 0:1902469bdd2d | 530 | uint8_t* attr_value); |
lorevee | 0:1902469bdd2d | 531 | |
lorevee | 0:1902469bdd2d | 532 | /* Write a characteristic value without waiting for any response */ |
lorevee | 0:1902469bdd2d | 533 | void writeCharacValueWithoutResp (uint16_t conn_handle, uint16_t attr_handle, uint8_t attr_len, |
lorevee | 0:1902469bdd2d | 534 | uint8_t* attr_value); |
lorevee | 0:1902469bdd2d | 535 | |
lorevee | 0:1902469bdd2d | 536 | /* Get error */ |
lorevee | 0:1902469bdd2d | 537 | ble_error_t writeCharacValueWithoutRespWithError (uint16_t conn_handle, uint16_t attr_handle, uint8_t attr_len, |
lorevee | 0:1902469bdd2d | 538 | uint8_t* attr_value); |
lorevee | 0:1902469bdd2d | 539 | |
lorevee | 0:1902469bdd2d | 540 | /* Builds a Jason format string */ |
lorevee | 0:1902469bdd2d | 541 | void Build_MEMS_Packet (uint8_t *attr_value, char *data_type, tBDAddr devAddr, uint8_t num_type); |
lorevee | 0:1902469bdd2d | 542 | |
lorevee | 0:1902469bdd2d | 543 | |
lorevee | 0:1902469bdd2d | 544 | /* Create new attr value for the master */ |
lorevee | 0:1902469bdd2d | 545 | void Create_New_Attr_Value (uint8_t *tstamp, tBDAddr devAddr, uint8_t data_type_id, uint8_t *data, uint8_t data_length); |
lorevee | 0:1902469bdd2d | 546 | |
lorevee | 0:1902469bdd2d | 547 | /* Method called when there is a notification from the sever */ |
lorevee | 0:1902469bdd2d | 548 | void onNotificationCallback (const GattHVXCallbackParams* event); |
lorevee | 0:1902469bdd2d | 549 | |
lorevee | 0:1902469bdd2d | 550 | |
lorevee | 0:1902469bdd2d | 551 | /*----------------------------------------------------------------------------*/ |
lorevee | 0:1902469bdd2d | 552 | |
lorevee | 0:1902469bdd2d | 553 | |
lorevee | 0:1902469bdd2d | 554 | |
lorevee | 0:1902469bdd2d | 555 | |
lorevee | 0:1902469bdd2d | 556 | /* DiscoveredCharacteristic List methods */ |
lorevee | 0:1902469bdd2d | 557 | |
lorevee | 0:1902469bdd2d | 558 | /* Creating a new DiscoveredCharacteristicNode (struct r308)*/ |
lorevee | 0:1902469bdd2d | 559 | DiscoveredCharacteristicNode * createDCNode (const DiscoveredCharacteristic &ch, DiscoveredCharacteristicNode *next); |
lorevee | 0:1902469bdd2d | 560 | |
lorevee | 0:1902469bdd2d | 561 | /* Prepend a DiscoveredCharacteristicNode (struct r308)*/ |
lorevee | 0:1902469bdd2d | 562 | DiscoveredCharacteristicNode * prependDCNode (DiscoveredCharacteristicNode *head, const DiscoveredCharacteristic *characteristic); |
lorevee | 0:1902469bdd2d | 563 | |
lorevee | 0:1902469bdd2d | 564 | /* Append a DiscoveredCharacteristicNode (struct r308)*/ |
lorevee | 0:1902469bdd2d | 565 | DiscoveredCharacteristicNode * appendDCNode (DiscoveredCharacteristicNode *head, const DiscoveredCharacteristic *characteristic); |
lorevee | 0:1902469bdd2d | 566 | |
lorevee | 0:1902469bdd2d | 567 | /* Number of DiscoveredCharacteristic nodes */ |
lorevee | 0:1902469bdd2d | 568 | int countElements (DiscoveredCharacteristicNode *head); |
lorevee | 0:1902469bdd2d | 569 | |
lorevee | 0:1902469bdd2d | 570 | /* Search for a DiscoveredCharacteristic node by declaration handle */ |
lorevee | 0:1902469bdd2d | 571 | DiscoveredCharacteristicNode * searchDCNode (DiscoveredCharacteristicNode *head, uint16_t declHandle); |
lorevee | 0:1902469bdd2d | 572 | |
lorevee | 0:1902469bdd2d | 573 | /* Delete the DCN list */ |
lorevee | 0:1902469bdd2d | 574 | void deleteDCNList (DiscoveredCharacteristicNode *head); |
lorevee | 0:1902469bdd2d | 575 | |
lorevee | 0:1902469bdd2d | 576 | /*----------------------------------------------------------------------------*/ |
lorevee | 0:1902469bdd2d | 577 | |
lorevee | 0:1902469bdd2d | 578 | |
lorevee | 0:1902469bdd2d | 579 | |
lorevee | 0:1902469bdd2d | 580 | |
lorevee | 0:1902469bdd2d | 581 | |
lorevee | 0:1902469bdd2d | 582 | |
lorevee | 0:1902469bdd2d | 583 | |
lorevee | 0:1902469bdd2d | 584 | #endif /*__BLEMASTERSERVICE_H__*/ |