GPS to Pulga

Dependencies:   Si1133 BME280

Committer:
brunnobbco
Date:
Fri Dec 11 18:59:00 2020 +0000
Revision:
26:1e1776201716
Parent:
23:7f1c9c1a4c57
Pulga_GPS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pancotinho 23:7f1c9c1a4c57 1
pancotinho 23:7f1c9c1a4c57 2 using mbed::callback;
pancotinho 23:7f1c9c1a4c57 3
pancotinho 23:7f1c9c1a4c57 4
pancotinho 23:7f1c9c1a4c57 5
pancotinho 23:7f1c9c1a4c57 6 // A My service that demonstrate the GattServer features.
pancotinho 23:7f1c9c1a4c57 7
pancotinho 23:7f1c9c1a4c57 8
pancotinho 23:7f1c9c1a4c57 9 class MyService {
pancotinho 23:7f1c9c1a4c57 10 typedef MyService Self;
pancotinho 23:7f1c9c1a4c57 11
pancotinho 23:7f1c9c1a4c57 12 public:
pancotinho 23:7f1c9c1a4c57 13 MyService() :
pancotinho 23:7f1c9c1a4c57 14 _sens00_char("00000000-000a-000a-a000-a0a000aa00aa", 0),
pancotinho 23:7f1c9c1a4c57 15 _sens01_char("11111111-111b-111b-b111-b1b111bb11bb", 0),
pancotinho 23:7f1c9c1a4c57 16 _sens02_char("22222222-222c-222c-c222-c2c222cc22cc", 0),
pancotinho 23:7f1c9c1a4c57 17 _led_char("33333333-333d-333d-d333-d3d333dd33dd", 0),
pancotinho 23:7f1c9c1a4c57 18 _sensors_char("55555555-555f-555f-f555-f5f555ff55ff", 0),
pancotinho 23:7f1c9c1a4c57 19
pancotinho 23:7f1c9c1a4c57 20 _My_service(
pancotinho 23:7f1c9c1a4c57 21 /* uuid */ "51311102-030e-485f-b122-f8f381aa84ed",
pancotinho 23:7f1c9c1a4c57 22 /* characteristics */ _My_characteristics,
pancotinho 23:7f1c9c1a4c57 23 /* numCharacteristics */ sizeof(_My_characteristics) /
pancotinho 23:7f1c9c1a4c57 24 sizeof(_My_characteristics[0])
pancotinho 23:7f1c9c1a4c57 25 ),
pancotinho 23:7f1c9c1a4c57 26 _server(NULL),
pancotinho 23:7f1c9c1a4c57 27 _event_queue(NULL),
pancotinho 23:7f1c9c1a4c57 28 _actuated_led(P1_14,0)
pancotinho 23:7f1c9c1a4c57 29
pancotinho 23:7f1c9c1a4c57 30 {
pancotinho 23:7f1c9c1a4c57 31 // update internal pointers (value, descriptors and characteristics array)
pancotinho 23:7f1c9c1a4c57 32 _My_characteristics[4] = &_sensors_char;
pancotinho 23:7f1c9c1a4c57 33 _My_characteristics[3] = &_led_char;
pancotinho 23:7f1c9c1a4c57 34 _My_characteristics[2] = &_sens02_char;
pancotinho 23:7f1c9c1a4c57 35 _My_characteristics[1] = &_sens01_char;
pancotinho 23:7f1c9c1a4c57 36 _My_characteristics[0] = &_sens00_char;
pancotinho 23:7f1c9c1a4c57 37
pancotinho 23:7f1c9c1a4c57 38 // setup authorization handlers
pancotinho 23:7f1c9c1a4c57 39 _sens00_char.setWriteAuthorizationCallback(this, &Self::authorize_client_write);
pancotinho 23:7f1c9c1a4c57 40 _sens01_char.setWriteAuthorizationCallback(this, &Self::authorize_client_write);
pancotinho 23:7f1c9c1a4c57 41 _sens02_char.setWriteAuthorizationCallback(this, &Self::authorize_client_write);
pancotinho 23:7f1c9c1a4c57 42 _led_char.setWriteAuthorizationCallback(this, &Self::authorize_client_write);
pancotinho 23:7f1c9c1a4c57 43 _sensors_char.setWriteAuthorizationCallback(this, &Self::authorize_client_write);
pancotinho 23:7f1c9c1a4c57 44 }
pancotinho 23:7f1c9c1a4c57 45
pancotinho 23:7f1c9c1a4c57 46
pancotinho 23:7f1c9c1a4c57 47
pancotinho 23:7f1c9c1a4c57 48 void start(BLE &ble_interface, events::EventQueue &event_queue)
pancotinho 23:7f1c9c1a4c57 49 {
pancotinho 23:7f1c9c1a4c57 50 if (_event_queue) {
pancotinho 23:7f1c9c1a4c57 51 return;
pancotinho 23:7f1c9c1a4c57 52 }
pancotinho 23:7f1c9c1a4c57 53
pancotinho 23:7f1c9c1a4c57 54 _server = &ble_interface.gattServer();
pancotinho 23:7f1c9c1a4c57 55 _event_queue = &event_queue;
pancotinho 23:7f1c9c1a4c57 56
pancotinho 23:7f1c9c1a4c57 57
pancotinho 23:7f1c9c1a4c57 58 // register the service
pancotinho 23:7f1c9c1a4c57 59 printf("Adding arquetipo service\r\n");
pancotinho 23:7f1c9c1a4c57 60 ble_error_t err = _server->addService(_My_service);
pancotinho 23:7f1c9c1a4c57 61
pancotinho 23:7f1c9c1a4c57 62 if (err) {
pancotinho 23:7f1c9c1a4c57 63 printf("Error %u during demo service registration.\r\n", err);
pancotinho 23:7f1c9c1a4c57 64 return;
pancotinho 23:7f1c9c1a4c57 65 }
pancotinho 23:7f1c9c1a4c57 66
pancotinho 23:7f1c9c1a4c57 67 // read write handler
pancotinho 23:7f1c9c1a4c57 68 _server->onDataSent(as_cb(&Self::when_data_sent));
pancotinho 23:7f1c9c1a4c57 69 _server->onDataWritten(as_cb(&Self::when_data_written));
pancotinho 23:7f1c9c1a4c57 70 _server->onDataRead(as_cb(&Self::when_data_read));
pancotinho 23:7f1c9c1a4c57 71
pancotinho 23:7f1c9c1a4c57 72 // updates subscribtion handlers
pancotinho 23:7f1c9c1a4c57 73 _server->onUpdatesEnabled(as_cb(&Self::when_update_enabled));
pancotinho 23:7f1c9c1a4c57 74 _server->onUpdatesDisabled(as_cb(&Self::when_update_disabled));
pancotinho 23:7f1c9c1a4c57 75 _server->onConfirmationReceived(as_cb(&Self::when_confirmation_received));
pancotinho 23:7f1c9c1a4c57 76
pancotinho 23:7f1c9c1a4c57 77 // print the handles
pancotinho 23:7f1c9c1a4c57 78 printf("My service registered\r\n");
pancotinho 23:7f1c9c1a4c57 79 printf("service handle: %u\r\n", _My_service.getHandle());
pancotinho 23:7f1c9c1a4c57 80 printf("\tsens00 characteristic value handle %u\r\n", _sens00_char.getValueHandle());
pancotinho 23:7f1c9c1a4c57 81 printf("\tsens01 characteristic value handle %u\r\n", _sens01_char.getValueHandle());
pancotinho 23:7f1c9c1a4c57 82 printf("\tsens02 characteristic value handle %u\r\n", _sens02_char.getValueHandle());
pancotinho 23:7f1c9c1a4c57 83 printf("\tled characteristic value handle %u\r\n", _led_char.getValueHandle());
pancotinho 23:7f1c9c1a4c57 84 printf("\tsensors characteristic value handle %u\r\n", _sensors_char.getValueHandle());
pancotinho 23:7f1c9c1a4c57 85
pancotinho 23:7f1c9c1a4c57 86
pancotinho 23:7f1c9c1a4c57 87 _event_queue->call_every(503 /* ms */, callback(this, &Self::blink));
pancotinho 23:7f1c9c1a4c57 88 // _event_queue->call(Callback<void(bool)>(button1,false), &Self::read_sensors);
pancotinho 23:7f1c9c1a4c57 89 //button1.fall(Callback<void()>(this, &Self::read_sensors) );
pancotinho 23:7f1c9c1a4c57 90 }
pancotinho 23:7f1c9c1a4c57 91
pancotinho 23:7f1c9c1a4c57 92 private:
pancotinho 23:7f1c9c1a4c57 93
pancotinho 23:7f1c9c1a4c57 94 /**
pancotinho 23:7f1c9c1a4c57 95 * Handler called when a notification or an indication has been sent.
pancotinho 23:7f1c9c1a4c57 96 */
pancotinho 23:7f1c9c1a4c57 97 void when_data_sent(unsigned count)
pancotinho 23:7f1c9c1a4c57 98 {
pancotinho 23:7f1c9c1a4c57 99 printf("sent %u updates\r\n", count);
pancotinho 23:7f1c9c1a4c57 100 }
pancotinho 23:7f1c9c1a4c57 101
pancotinho 23:7f1c9c1a4c57 102 /**
pancotinho 23:7f1c9c1a4c57 103 * Handler called after an attribute has been written.
pancotinho 23:7f1c9c1a4c57 104 */
pancotinho 23:7f1c9c1a4c57 105 void when_data_written(const GattWriteCallbackParams *e)
pancotinho 23:7f1c9c1a4c57 106 {
pancotinho 23:7f1c9c1a4c57 107 printf("data written:\r\n");
pancotinho 23:7f1c9c1a4c57 108 printf("\tconnection handle: %u\r\n", e->connHandle);
pancotinho 23:7f1c9c1a4c57 109 printf("\tattribute handle: %u", e->handle);
pancotinho 23:7f1c9c1a4c57 110 if (e->handle == _sensors_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 111 printf(" (sensors characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 112 sensors = *(e->data);
pancotinho 23:7f1c9c1a4c57 113 read_sensors(sensors);
pancotinho 23:7f1c9c1a4c57 114 }else if (e->handle == _led_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 115 printf(" (led characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 116 _actuated_led = *(e->data);
pancotinho 23:7f1c9c1a4c57 117
pancotinho 23:7f1c9c1a4c57 118 } else if (e->handle == _sens00_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 119 printf(" (sens00 characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 120 } else if (e->handle == _sens01_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 121 printf(" (sens01 characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 122 } else if (e->handle == _sens02_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 123 printf(" (sens02 characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 124 } else {
pancotinho 23:7f1c9c1a4c57 125 printf("\r\n");
pancotinho 23:7f1c9c1a4c57 126 }
pancotinho 23:7f1c9c1a4c57 127 printf("\twrite operation: %u\r\n", e->writeOp);
pancotinho 23:7f1c9c1a4c57 128 printf("\toffset: %u\r\n", e->offset);
pancotinho 23:7f1c9c1a4c57 129 printf("\tlength: %u\r\n", e->len);
pancotinho 23:7f1c9c1a4c57 130 printf("\t data: ");
pancotinho 23:7f1c9c1a4c57 131
pancotinho 23:7f1c9c1a4c57 132 for (size_t i = 0; i < e->len; ++i) {
pancotinho 23:7f1c9c1a4c57 133 printf("%02X", e->data[i]);
pancotinho 23:7f1c9c1a4c57 134 }
pancotinho 23:7f1c9c1a4c57 135
pancotinho 23:7f1c9c1a4c57 136 printf("\r\n");
pancotinho 23:7f1c9c1a4c57 137 }
pancotinho 23:7f1c9c1a4c57 138
pancotinho 23:7f1c9c1a4c57 139 /**
pancotinho 23:7f1c9c1a4c57 140 * Handler called after an attribute has been read.
pancotinho 23:7f1c9c1a4c57 141 */
pancotinho 23:7f1c9c1a4c57 142 void when_data_read(const GattReadCallbackParams *e)
pancotinho 23:7f1c9c1a4c57 143 {
pancotinho 23:7f1c9c1a4c57 144 printf("data read:\r\n");
pancotinho 23:7f1c9c1a4c57 145 printf("\tconnection handle: %u\r\n", e->connHandle);
pancotinho 23:7f1c9c1a4c57 146 printf("\tattribute handle: %u", e->handle);
pancotinho 23:7f1c9c1a4c57 147 if (e->handle == _sensors_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 148 printf(" (sensors characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 149 } else if (e->handle == _led_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 150 printf(" (led characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 151 } else if (e->handle == _sens00_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 152 printf(" (sens00 characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 153 } else if (e->handle == _sens01_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 154 printf(" (sens01 characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 155 } else if (e->handle == _sens02_char.getValueHandle()) {
pancotinho 23:7f1c9c1a4c57 156 printf(" (sens02 characteristic)\r\n");
pancotinho 23:7f1c9c1a4c57 157 } else {
pancotinho 23:7f1c9c1a4c57 158 printf("\r\n");
pancotinho 23:7f1c9c1a4c57 159 }
pancotinho 23:7f1c9c1a4c57 160 }
pancotinho 23:7f1c9c1a4c57 161
pancotinho 23:7f1c9c1a4c57 162 /**
pancotinho 23:7f1c9c1a4c57 163 * Handler called after a client has subscribed to notification or indication.
pancotinho 23:7f1c9c1a4c57 164 *
pancotinho 23:7f1c9c1a4c57 165 * @param handle Handle of the characteristic value affected by the change.
pancotinho 23:7f1c9c1a4c57 166 */
pancotinho 23:7f1c9c1a4c57 167 void when_update_enabled(GattAttribute::Handle_t handle)
pancotinho 23:7f1c9c1a4c57 168 {
pancotinho 23:7f1c9c1a4c57 169 printf("update enabled on handle %d\r\n", handle);
pancotinho 23:7f1c9c1a4c57 170 }
pancotinho 23:7f1c9c1a4c57 171
pancotinho 23:7f1c9c1a4c57 172 /**
pancotinho 23:7f1c9c1a4c57 173 * Handler called after a client has cancelled his subscription from
pancotinho 23:7f1c9c1a4c57 174 * notification or indication.
pancotinho 23:7f1c9c1a4c57 175 *
pancotinho 23:7f1c9c1a4c57 176 * @param handle Handle of the characteristic value affected by the change.
pancotinho 23:7f1c9c1a4c57 177 */
pancotinho 23:7f1c9c1a4c57 178 void when_update_disabled(GattAttribute::Handle_t handle)
pancotinho 23:7f1c9c1a4c57 179 {
pancotinho 23:7f1c9c1a4c57 180 printf("update disabled on handle %d\r\n", handle);
pancotinho 23:7f1c9c1a4c57 181 }
pancotinho 23:7f1c9c1a4c57 182
pancotinho 23:7f1c9c1a4c57 183 /**
pancotinho 23:7f1c9c1a4c57 184 * Handler called when an indication confirmation has been received.
pancotinho 23:7f1c9c1a4c57 185 *
pancotinho 23:7f1c9c1a4c57 186 * @param handle Handle of the characteristic value that has emitted the
pancotinho 23:7f1c9c1a4c57 187 * indication.
pancotinho 23:7f1c9c1a4c57 188 */
pancotinho 23:7f1c9c1a4c57 189 void when_confirmation_received(GattAttribute::Handle_t handle)
pancotinho 23:7f1c9c1a4c57 190 {
pancotinho 23:7f1c9c1a4c57 191 printf("confirmation received on handle %d\r\n", handle);
pancotinho 23:7f1c9c1a4c57 192 }
pancotinho 23:7f1c9c1a4c57 193
pancotinho 23:7f1c9c1a4c57 194 /**
pancotinho 23:7f1c9c1a4c57 195 * Handler called when a write request is received.
pancotinho 23:7f1c9c1a4c57 196 *
pancotinho 23:7f1c9c1a4c57 197 * This handler verify that the value submitted by the client is valid before
pancotinho 23:7f1c9c1a4c57 198 * authorizing the operation.
pancotinho 23:7f1c9c1a4c57 199 */
pancotinho 23:7f1c9c1a4c57 200 void authorize_client_write(GattWriteAuthCallbackParams *e)
pancotinho 23:7f1c9c1a4c57 201 {
pancotinho 23:7f1c9c1a4c57 202 printf("characteristic %u write authorization\r\n", e->handle);
pancotinho 23:7f1c9c1a4c57 203
pancotinho 23:7f1c9c1a4c57 204 if (e->offset != 0) {
pancotinho 23:7f1c9c1a4c57 205 printf("Error invalid offset\r\n");
pancotinho 23:7f1c9c1a4c57 206 e->authorizationReply = AUTH_CALLBACK_REPLY_ATTERR_INVALID_OFFSET;
pancotinho 23:7f1c9c1a4c57 207 return;
pancotinho 23:7f1c9c1a4c57 208 }
pancotinho 23:7f1c9c1a4c57 209
pancotinho 23:7f1c9c1a4c57 210 if (e->len != 1) {
pancotinho 23:7f1c9c1a4c57 211 printf("Error invalid len\r\n");
pancotinho 23:7f1c9c1a4c57 212 e->authorizationReply = AUTH_CALLBACK_REPLY_ATTERR_INVALID_ATT_VAL_LENGTH;
pancotinho 23:7f1c9c1a4c57 213 return;
pancotinho 23:7f1c9c1a4c57 214 }
pancotinho 23:7f1c9c1a4c57 215
pancotinho 23:7f1c9c1a4c57 216
pancotinho 23:7f1c9c1a4c57 217 e->authorizationReply = AUTH_CALLBACK_REPLY_SUCCESS;
pancotinho 23:7f1c9c1a4c57 218 }
pancotinho 23:7f1c9c1a4c57 219
pancotinho 23:7f1c9c1a4c57 220 /**
pancotinho 23:7f1c9c1a4c57 221 * Read Sensors
pancotinho 23:7f1c9c1a4c57 222 */
pancotinho 23:7f1c9c1a4c57 223
pancotinho 23:7f1c9c1a4c57 224 void read_sensors_0 (void){
pancotinho 23:7f1c9c1a4c57 225 Sensor_Read(1);
pancotinho 23:7f1c9c1a4c57 226 Update_char(0);
pancotinho 23:7f1c9c1a4c57 227 }
pancotinho 23:7f1c9c1a4c57 228
pancotinho 23:7f1c9c1a4c57 229 void read_sensors_1 (void){
pancotinho 23:7f1c9c1a4c57 230 Sensor_Read(1);
pancotinho 23:7f1c9c1a4c57 231 Update_char(1);
pancotinho 23:7f1c9c1a4c57 232 }
pancotinho 23:7f1c9c1a4c57 233
pancotinho 23:7f1c9c1a4c57 234 void read_sensors_2 (void){
pancotinho 23:7f1c9c1a4c57 235 Sensor_Read(1);
pancotinho 23:7f1c9c1a4c57 236 Update_char(2);
pancotinho 23:7f1c9c1a4c57 237 }
pancotinho 23:7f1c9c1a4c57 238
pancotinho 23:7f1c9c1a4c57 239 void read_sensors_3 (void){
pancotinho 23:7f1c9c1a4c57 240
pancotinho 23:7f1c9c1a4c57 241 Sensor_Read(2);
pancotinho 23:7f1c9c1a4c57 242 Update_char(0);
pancotinho 23:7f1c9c1a4c57 243 }
pancotinho 23:7f1c9c1a4c57 244
pancotinho 23:7f1c9c1a4c57 245 void read_sensors_4 (void){
pancotinho 23:7f1c9c1a4c57 246
pancotinho 23:7f1c9c1a4c57 247 Sensor_Read(3);
pancotinho 23:7f1c9c1a4c57 248 Update_char(1);
pancotinho 23:7f1c9c1a4c57 249 }
pancotinho 23:7f1c9c1a4c57 250
pancotinho 23:7f1c9c1a4c57 251 void read_sensors_5 (void){
pancotinho 23:7f1c9c1a4c57 252 Sensor_Read(4);
pancotinho 23:7f1c9c1a4c57 253 Update_char(0);
pancotinho 23:7f1c9c1a4c57 254 }
pancotinho 23:7f1c9c1a4c57 255
pancotinho 23:7f1c9c1a4c57 256 void read_sensors_6 (void){
pancotinho 23:7f1c9c1a4c57 257 Sensor_Read(4);
pancotinho 23:7f1c9c1a4c57 258 Update_char(1);
pancotinho 23:7f1c9c1a4c57 259 }
pancotinho 23:7f1c9c1a4c57 260
pancotinho 23:7f1c9c1a4c57 261 void read_sensors_7 (void){
pancotinho 23:7f1c9c1a4c57 262 Sensor_Read(4);
pancotinho 23:7f1c9c1a4c57 263 Update_char(2);
pancotinho 23:7f1c9c1a4c57 264 }
pancotinho 23:7f1c9c1a4c57 265
pancotinho 23:7f1c9c1a4c57 266 void read_sensors (int sensors)
pancotinho 23:7f1c9c1a4c57 267 {
pancotinho 23:7f1c9c1a4c57 268
pancotinho 23:7f1c9c1a4c57 269 if(sensors==0){
pancotinho 23:7f1c9c1a4c57 270 read_sensors_0();
pancotinho 23:7f1c9c1a4c57 271 }
pancotinho 23:7f1c9c1a4c57 272
pancotinho 23:7f1c9c1a4c57 273 if(sensors==1){
pancotinho 23:7f1c9c1a4c57 274 read_sensors_1();
pancotinho 23:7f1c9c1a4c57 275 }
pancotinho 23:7f1c9c1a4c57 276
pancotinho 23:7f1c9c1a4c57 277 if(sensors==2){
pancotinho 23:7f1c9c1a4c57 278 read_sensors_2();
pancotinho 23:7f1c9c1a4c57 279 }
pancotinho 23:7f1c9c1a4c57 280
pancotinho 23:7f1c9c1a4c57 281 if(sensors==3){
pancotinho 23:7f1c9c1a4c57 282
pancotinho 23:7f1c9c1a4c57 283 read_sensors_3();
pancotinho 23:7f1c9c1a4c57 284 }
pancotinho 23:7f1c9c1a4c57 285
pancotinho 23:7f1c9c1a4c57 286 if(sensors==4){
pancotinho 23:7f1c9c1a4c57 287
pancotinho 23:7f1c9c1a4c57 288 read_sensors_4();
pancotinho 23:7f1c9c1a4c57 289 }
pancotinho 23:7f1c9c1a4c57 290
pancotinho 23:7f1c9c1a4c57 291 if(sensors==5){
pancotinho 23:7f1c9c1a4c57 292 read_sensors_5();
pancotinho 23:7f1c9c1a4c57 293 }
pancotinho 23:7f1c9c1a4c57 294
pancotinho 23:7f1c9c1a4c57 295 if(sensors==6){
pancotinho 23:7f1c9c1a4c57 296 read_sensors_6();
pancotinho 23:7f1c9c1a4c57 297 }
pancotinho 23:7f1c9c1a4c57 298
pancotinho 23:7f1c9c1a4c57 299 if(sensors==7){
pancotinho 23:7f1c9c1a4c57 300 read_sensors_7();
pancotinho 23:7f1c9c1a4c57 301 }
pancotinho 23:7f1c9c1a4c57 302
pancotinho 23:7f1c9c1a4c57 303 if(sensors==8){
pancotinho 23:7f1c9c1a4c57 304 _event_queue->call_every(1741 /* ms */, callback(this, &Self::read_sensors_0));
pancotinho 23:7f1c9c1a4c57 305 }
pancotinho 23:7f1c9c1a4c57 306
pancotinho 23:7f1c9c1a4c57 307 if(sensors==9){
pancotinho 23:7f1c9c1a4c57 308 _event_queue->call_every(1742 /* ms */, callback(this, &Self::read_sensors_1));
pancotinho 23:7f1c9c1a4c57 309 }
pancotinho 23:7f1c9c1a4c57 310 if(sensors==10){
pancotinho 23:7f1c9c1a4c57 311 _event_queue->call_every(1743 /* ms */, callback(this, &Self::read_sensors_2));
pancotinho 23:7f1c9c1a4c57 312 }
pancotinho 23:7f1c9c1a4c57 313 if(sensors==11){
pancotinho 23:7f1c9c1a4c57 314 _event_queue->call_every(1744 /* ms */, callback(this, &Self::read_sensors_3));
pancotinho 23:7f1c9c1a4c57 315 }
pancotinho 23:7f1c9c1a4c57 316 if(sensors==12){
pancotinho 23:7f1c9c1a4c57 317 _event_queue->call_every(1745 /* ms */, callback(this, &Self::read_sensors_4));
pancotinho 23:7f1c9c1a4c57 318 }
pancotinho 23:7f1c9c1a4c57 319 if(sensors==13){
pancotinho 23:7f1c9c1a4c57 320 _event_queue->call_every(1746 /* ms */, callback(this, &Self::read_sensors_5));
pancotinho 23:7f1c9c1a4c57 321 }
pancotinho 23:7f1c9c1a4c57 322 if(sensors==14){
pancotinho 23:7f1c9c1a4c57 323 _event_queue->call_every(1747 /* ms */, callback(this, &Self::read_sensors_6));
pancotinho 23:7f1c9c1a4c57 324 }
pancotinho 23:7f1c9c1a4c57 325 if(sensors==15){
pancotinho 23:7f1c9c1a4c57 326 _event_queue->call_every(1748 /* ms */, callback(this, &Self::read_sensors_7));
pancotinho 23:7f1c9c1a4c57 327 }
pancotinho 23:7f1c9c1a4c57 328 }
pancotinho 23:7f1c9c1a4c57 329
pancotinho 23:7f1c9c1a4c57 330
pancotinho 23:7f1c9c1a4c57 331 void Update_char(int up)
pancotinho 23:7f1c9c1a4c57 332 {
pancotinho 23:7f1c9c1a4c57 333 if (up==0){
pancotinho 23:7f1c9c1a4c57 334 ble_error_t err = _sens00_char.set(*_server, sens00);
pancotinho 23:7f1c9c1a4c57 335 printf ("sens00 sensor value: %d\n", sens00);
pancotinho 23:7f1c9c1a4c57 336 if (err) {
pancotinho 23:7f1c9c1a4c57 337 printf("write of the sens00 value returned error %u\r\n", err);
pancotinho 23:7f1c9c1a4c57 338 return;
pancotinho 23:7f1c9c1a4c57 339 }
pancotinho 23:7f1c9c1a4c57 340
pancotinho 23:7f1c9c1a4c57 341 }
pancotinho 23:7f1c9c1a4c57 342
pancotinho 23:7f1c9c1a4c57 343 if(up==1){
pancotinho 23:7f1c9c1a4c57 344 ble_error_t err = _sens01_char.set(*_server, sens01);
pancotinho 23:7f1c9c1a4c57 345 printf ("sens01 sensor value: %d\n", sens01);
pancotinho 23:7f1c9c1a4c57 346 if (err) {
pancotinho 23:7f1c9c1a4c57 347 printf("write of the sens01 value returned error %u\r\n", err);
pancotinho 23:7f1c9c1a4c57 348 return;
pancotinho 23:7f1c9c1a4c57 349 }
pancotinho 23:7f1c9c1a4c57 350
pancotinho 23:7f1c9c1a4c57 351
pancotinho 23:7f1c9c1a4c57 352 }
pancotinho 23:7f1c9c1a4c57 353 if (up==2){
pancotinho 23:7f1c9c1a4c57 354
pancotinho 23:7f1c9c1a4c57 355 ble_error_t err = _sens02_char.set(*_server, sens02);
pancotinho 23:7f1c9c1a4c57 356 printf ("sens02 sensor value: %d\n", sens02);
pancotinho 23:7f1c9c1a4c57 357 if (err) {
pancotinho 23:7f1c9c1a4c57 358 printf("write of the sens02 value returned error %u\r\n", err);
pancotinho 23:7f1c9c1a4c57 359 return;
pancotinho 23:7f1c9c1a4c57 360 }
pancotinho 23:7f1c9c1a4c57 361
pancotinho 23:7f1c9c1a4c57 362
pancotinho 23:7f1c9c1a4c57 363 }
pancotinho 23:7f1c9c1a4c57 364
pancotinho 23:7f1c9c1a4c57 365 }
pancotinho 23:7f1c9c1a4c57 366
pancotinho 23:7f1c9c1a4c57 367
pancotinho 23:7f1c9c1a4c57 368 void blink() {
pancotinho 23:7f1c9c1a4c57 369 led1 = !led1;
pancotinho 23:7f1c9c1a4c57 370 }
pancotinho 23:7f1c9c1a4c57 371
pancotinho 23:7f1c9c1a4c57 372 /**
pancotinho 23:7f1c9c1a4c57 373 * Change led status.
pancotinho 23:7f1c9c1a4c57 374 */
pancotinho 23:7f1c9c1a4c57 375 void change_led(void)
pancotinho 23:7f1c9c1a4c57 376 {
pancotinho 23:7f1c9c1a4c57 377 uint8_t led = 0;
pancotinho 23:7f1c9c1a4c57 378 ble_error_t err = _led_char.get(*_server, led);
pancotinho 23:7f1c9c1a4c57 379 if (err) {
pancotinho 23:7f1c9c1a4c57 380 printf("read of the led value returned error %u\r\n", err);
pancotinho 23:7f1c9c1a4c57 381 return;
pancotinho 23:7f1c9c1a4c57 382 }
pancotinho 23:7f1c9c1a4c57 383
pancotinho 23:7f1c9c1a4c57 384 }
pancotinho 23:7f1c9c1a4c57 385
pancotinho 23:7f1c9c1a4c57 386
pancotinho 23:7f1c9c1a4c57 387
pancotinho 23:7f1c9c1a4c57 388 private:
pancotinho 23:7f1c9c1a4c57 389 /**
pancotinho 23:7f1c9c1a4c57 390 * Helper that construct an event handler from a member function of this
pancotinho 23:7f1c9c1a4c57 391 * instance.
pancotinho 23:7f1c9c1a4c57 392 */
pancotinho 23:7f1c9c1a4c57 393 template<typename Arg>
pancotinho 23:7f1c9c1a4c57 394 FunctionPointerWithContext<Arg> as_cb(void (Self::*member)(Arg))
pancotinho 23:7f1c9c1a4c57 395 {
pancotinho 23:7f1c9c1a4c57 396 return makeFunctionPointer(this, member);
pancotinho 23:7f1c9c1a4c57 397 }
pancotinho 23:7f1c9c1a4c57 398
pancotinho 23:7f1c9c1a4c57 399 /**
pancotinho 23:7f1c9c1a4c57 400 * Read, Write, Notify, Indicate Characteristic declaration helper.
pancotinho 23:7f1c9c1a4c57 401 *
pancotinho 23:7f1c9c1a4c57 402 * @tparam T type of data held by the characteristic.
pancotinho 23:7f1c9c1a4c57 403 */
pancotinho 23:7f1c9c1a4c57 404 template<typename T>
pancotinho 23:7f1c9c1a4c57 405 class ReadWriteNotifyIndicateCharacteristic : public GattCharacteristic {
pancotinho 23:7f1c9c1a4c57 406 public:
pancotinho 23:7f1c9c1a4c57 407 /**
pancotinho 23:7f1c9c1a4c57 408 * Construct a characteristic that can be read or written and emit
pancotinho 23:7f1c9c1a4c57 409 * notification or indication.
pancotinho 23:7f1c9c1a4c57 410 *
pancotinho 23:7f1c9c1a4c57 411 * @param[in] uuid The UUID of the characteristic.
pancotinho 23:7f1c9c1a4c57 412 * @param[in] initial_value Initial value contained by the characteristic.
pancotinho 23:7f1c9c1a4c57 413 */
pancotinho 23:7f1c9c1a4c57 414 ReadWriteNotifyIndicateCharacteristic(const UUID & uuid, const T& initial_value) :
pancotinho 23:7f1c9c1a4c57 415 GattCharacteristic(
pancotinho 23:7f1c9c1a4c57 416 /* UUID */ uuid,
pancotinho 23:7f1c9c1a4c57 417 /* Initial value */ (uint8_t *) &_value,
pancotinho 23:7f1c9c1a4c57 418 /* Value size */ sizeof(_value),
pancotinho 23:7f1c9c1a4c57 419 /* Value capacity */ sizeof(_value),
pancotinho 23:7f1c9c1a4c57 420 /* Properties */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
pancotinho 23:7f1c9c1a4c57 421 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
pancotinho 23:7f1c9c1a4c57 422 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY |
pancotinho 23:7f1c9c1a4c57 423 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE,
pancotinho 23:7f1c9c1a4c57 424 /* Descriptors */ NULL,
pancotinho 23:7f1c9c1a4c57 425 /* Num descriptors */ 0,
pancotinho 23:7f1c9c1a4c57 426 /* variable len */ false
pancotinho 23:7f1c9c1a4c57 427 ),
pancotinho 23:7f1c9c1a4c57 428 _value(initial_value) {
pancotinho 23:7f1c9c1a4c57 429 }
pancotinho 23:7f1c9c1a4c57 430
pancotinho 23:7f1c9c1a4c57 431 /**
pancotinho 23:7f1c9c1a4c57 432 * Get the value of this characteristic.
pancotinho 23:7f1c9c1a4c57 433 *
pancotinho 23:7f1c9c1a4c57 434 * @param[in] server GattServer instance that contain the characteristic
pancotinho 23:7f1c9c1a4c57 435 * value.
pancotinho 23:7f1c9c1a4c57 436 * @param[in] dst Variable that will receive the characteristic value.
pancotinho 23:7f1c9c1a4c57 437 *
pancotinho 23:7f1c9c1a4c57 438 * @return BLE_ERROR_NONE in case of success or an appropriate error code.
pancotinho 23:7f1c9c1a4c57 439 */
pancotinho 23:7f1c9c1a4c57 440 ble_error_t get(GattServer &server, T& dst) const
pancotinho 23:7f1c9c1a4c57 441 {
pancotinho 23:7f1c9c1a4c57 442 uint16_t value_length = sizeof(dst);
pancotinho 23:7f1c9c1a4c57 443 return server.read(getValueHandle(), (uint8_t *) &dst, &value_length);
pancotinho 23:7f1c9c1a4c57 444 }
pancotinho 23:7f1c9c1a4c57 445
pancotinho 23:7f1c9c1a4c57 446 /**
pancotinho 23:7f1c9c1a4c57 447 * Assign a new value to this characteristic.
pancotinho 23:7f1c9c1a4c57 448 *
pancotinho 23:7f1c9c1a4c57 449 * @param[in] server GattServer instance that will receive the new value.
pancotinho 23:7f1c9c1a4c57 450 * @param[in] value The new value to set.
pancotinho 23:7f1c9c1a4c57 451 * @param[in] local_only Flag that determine if the change should be kept
pancotinho 23:7f1c9c1a4c57 452 * locally or forwarded to subscribed clients.
pancotinho 23:7f1c9c1a4c57 453 */
pancotinho 23:7f1c9c1a4c57 454 ble_error_t set(
pancotinho 23:7f1c9c1a4c57 455 GattServer &server, const uint8_t &value, bool local_only = false
pancotinho 23:7f1c9c1a4c57 456 ) const {
pancotinho 23:7f1c9c1a4c57 457 return server.write(getValueHandle(), (uint8_t *) &value, sizeof(value), local_only);
pancotinho 23:7f1c9c1a4c57 458 }
pancotinho 23:7f1c9c1a4c57 459
pancotinho 23:7f1c9c1a4c57 460 private:
pancotinho 23:7f1c9c1a4c57 461 uint32_t _value;
pancotinho 23:7f1c9c1a4c57 462 };
pancotinho 23:7f1c9c1a4c57 463
pancotinho 23:7f1c9c1a4c57 464 template<typename T>
pancotinho 23:7f1c9c1a4c57 465 class ReadWriteCharacteristic : public GattCharacteristic {
pancotinho 23:7f1c9c1a4c57 466 public:
pancotinho 23:7f1c9c1a4c57 467 /**
pancotinho 23:7f1c9c1a4c57 468 * Construct a characteristic that can be read or written and emit
pancotinho 23:7f1c9c1a4c57 469 * notification or indication.
pancotinho 23:7f1c9c1a4c57 470 *
pancotinho 23:7f1c9c1a4c57 471 * @param[in] uuid The UUID of the characteristic.
pancotinho 23:7f1c9c1a4c57 472 * @param[in] initial_value Initial value contained by the characteristic.
pancotinho 23:7f1c9c1a4c57 473 */
pancotinho 23:7f1c9c1a4c57 474 ReadWriteCharacteristic(const UUID & uuid, const T& initial_value) :
pancotinho 23:7f1c9c1a4c57 475 GattCharacteristic(
pancotinho 23:7f1c9c1a4c57 476 /* UUID */ uuid,
pancotinho 23:7f1c9c1a4c57 477 /* Initial value */ (uint8_t *) &_value,
pancotinho 23:7f1c9c1a4c57 478 /* Value size */ sizeof(_value),
pancotinho 23:7f1c9c1a4c57 479 /* Value capacity */ sizeof(_value),
pancotinho 23:7f1c9c1a4c57 480 /* Properties */ GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
pancotinho 23:7f1c9c1a4c57 481 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE ,
pancotinho 23:7f1c9c1a4c57 482 /* Descriptors */ NULL,
pancotinho 23:7f1c9c1a4c57 483 /* Num descriptors */ 0,
pancotinho 23:7f1c9c1a4c57 484 /* variable len */ false
pancotinho 23:7f1c9c1a4c57 485 ),
pancotinho 23:7f1c9c1a4c57 486 _value(initial_value) {
pancotinho 23:7f1c9c1a4c57 487 }
pancotinho 23:7f1c9c1a4c57 488
pancotinho 23:7f1c9c1a4c57 489 /**
pancotinho 23:7f1c9c1a4c57 490 * Get the value of this characteristic.
pancotinho 23:7f1c9c1a4c57 491 *
pancotinho 23:7f1c9c1a4c57 492 * @param[in] server GattServer instance that contain the characteristic
pancotinho 23:7f1c9c1a4c57 493 * value.
pancotinho 23:7f1c9c1a4c57 494 * @param[in] dst Variable that will receive the characteristic value.
pancotinho 23:7f1c9c1a4c57 495 *
pancotinho 23:7f1c9c1a4c57 496 * @return BLE_ERROR_NONE in case of success or an appropriate error code.
pancotinho 23:7f1c9c1a4c57 497 */
pancotinho 23:7f1c9c1a4c57 498 ble_error_t get(GattServer &server, T& dst) const
pancotinho 23:7f1c9c1a4c57 499 {
pancotinho 23:7f1c9c1a4c57 500 uint16_t value_length = sizeof(dst);
pancotinho 23:7f1c9c1a4c57 501 return server.read(getValueHandle(), (uint8_t *) &dst, &value_length);
pancotinho 23:7f1c9c1a4c57 502 }
pancotinho 23:7f1c9c1a4c57 503
pancotinho 23:7f1c9c1a4c57 504 /**
pancotinho 23:7f1c9c1a4c57 505 * Assign a new value to this characteristic.
pancotinho 23:7f1c9c1a4c57 506 *
pancotinho 23:7f1c9c1a4c57 507 * @param[in] server GattServer instance that will receive the new value.
pancotinho 23:7f1c9c1a4c57 508 * @param[in] value The new value to set.
pancotinho 23:7f1c9c1a4c57 509 * @param[in] local_only Flag that determine if the change should be kept
pancotinho 23:7f1c9c1a4c57 510 * locally or forwarded to subscribed clients.
pancotinho 23:7f1c9c1a4c57 511 */
pancotinho 23:7f1c9c1a4c57 512 ble_error_t set(
pancotinho 23:7f1c9c1a4c57 513 GattServer &server, const uint8_t &value, bool local_only = false
pancotinho 23:7f1c9c1a4c57 514 ) const {
pancotinho 23:7f1c9c1a4c57 515 return server.write(getValueHandle(), (uint8_t *) &value, sizeof(value), local_only);
pancotinho 23:7f1c9c1a4c57 516 }
pancotinho 23:7f1c9c1a4c57 517
pancotinho 23:7f1c9c1a4c57 518 private:
pancotinho 23:7f1c9c1a4c57 519 uint8_t _value;
pancotinho 23:7f1c9c1a4c57 520 };
pancotinho 23:7f1c9c1a4c57 521 ReadWriteCharacteristic<uint8_t> _sensors_char;
pancotinho 23:7f1c9c1a4c57 522 ReadWriteCharacteristic<uint8_t> _led_char;
pancotinho 23:7f1c9c1a4c57 523 ReadWriteNotifyIndicateCharacteristic<uint32_t> _sens00_char;
pancotinho 23:7f1c9c1a4c57 524 ReadWriteNotifyIndicateCharacteristic<uint32_t> _sens01_char;
pancotinho 23:7f1c9c1a4c57 525 ReadWriteNotifyIndicateCharacteristic<uint32_t> _sens02_char;
pancotinho 23:7f1c9c1a4c57 526
pancotinho 23:7f1c9c1a4c57 527 // list of the characteristics of the My service
pancotinho 23:7f1c9c1a4c57 528 GattCharacteristic* _My_characteristics[5];
pancotinho 23:7f1c9c1a4c57 529
pancotinho 23:7f1c9c1a4c57 530 // demo service
pancotinho 23:7f1c9c1a4c57 531 GattService _My_service;
pancotinho 23:7f1c9c1a4c57 532
pancotinho 23:7f1c9c1a4c57 533 GattServer* _server;
pancotinho 23:7f1c9c1a4c57 534 events::EventQueue *_event_queue;
pancotinho 23:7f1c9c1a4c57 535
pancotinho 23:7f1c9c1a4c57 536
pancotinho 23:7f1c9c1a4c57 537 DigitalOut _actuated_led;
pancotinho 23:7f1c9c1a4c57 538 };