konashi/SBBLEのテスト

Dependencies:   BLE_API mbed

Fork of BLE_LoopbackUART by Bluetooth Low Energy

Committer:
robo8080
Date:
Sat Aug 16 02:10:08 2014 +0000
Revision:
5:61109bce11fe
Parent:
2:e060367b9024
Child:
6:9c9630cb454b
test1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yihui 0:e910d9bb040f 1 /* mbed Microcontroller Library
yihui 0:e910d9bb040f 2 * Copyright (c) 2006-2013 ARM Limited
yihui 0:e910d9bb040f 3 *
yihui 0:e910d9bb040f 4 * Licensed under the Apache License, Version 2.0 (the "License");
yihui 0:e910d9bb040f 5 * you may not use this file except in compliance with the License.
yihui 0:e910d9bb040f 6 * You may obtain a copy of the License at
yihui 0:e910d9bb040f 7 *
yihui 0:e910d9bb040f 8 * http://www.apache.org/licenses/LICENSE-2.0
yihui 0:e910d9bb040f 9 *
yihui 0:e910d9bb040f 10 * Unless required by applicable law or agreed to in writing, software
yihui 0:e910d9bb040f 11 * distributed under the License is distributed on an "AS IS" BASIS,
yihui 0:e910d9bb040f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
yihui 0:e910d9bb040f 13 * See the License for the specific language governing permissions and
yihui 0:e910d9bb040f 14 * limitations under the License.
yihui 0:e910d9bb040f 15 */
yihui 0:e910d9bb040f 16
yihui 0:e910d9bb040f 17 #include "mbed.h"
Rohit Grover 2:e060367b9024 18 #include "BLEDevice.h"
yihui 0:e910d9bb040f 19
robo8080 5:61109bce11fe 20 //const static char DEVICE_NAME[] = "Nordic_HRM";
robo8080 5:61109bce11fe 21
robo8080 5:61109bce11fe 22 static const uint16_t KONASHI_SERVICE_UUID = 0xFF00;
robo8080 5:61109bce11fe 23
robo8080 5:61109bce11fe 24 static const uint16_t KONASHI_PIO_SETTING_UUID = 0x3000;
robo8080 5:61109bce11fe 25 static const uint16_t KONASHI_PIO_PULLUP_UUID = 0x3001;
robo8080 5:61109bce11fe 26 static const uint16_t KONASHI_PIO_OUTPUT_UUID = 0x3002;
robo8080 5:61109bce11fe 27 static const uint16_t KONASHI_PIO_INPUT_NOTIFICATION_UUID = 0x3003;
robo8080 5:61109bce11fe 28
robo8080 5:61109bce11fe 29 static const uint16_t KONASHI_PWM_CONFIG_UUID = 0x3004;
robo8080 5:61109bce11fe 30 static const uint16_t KONASHI_PWM_PARAM_UUID = 0x3005;
robo8080 5:61109bce11fe 31 static const uint16_t KONASHI_PWM_DUTY_UUID = 0x3006;
robo8080 5:61109bce11fe 32
robo8080 5:61109bce11fe 33 static const uint16_t KONASHI_ANALOG_DRIVE_UUID = 0x3007;
robo8080 5:61109bce11fe 34 static const uint16_t KONASHI_ANALOG_READ0_UUID = 0x3008;
robo8080 5:61109bce11fe 35 static const uint16_t KONASHI_ANALOG_READ1_UUID = 0x3009;
robo8080 5:61109bce11fe 36 static const uint16_t KONASHI_ANALOG_READ2_UUID = 0x300A;
yihui 0:e910d9bb040f 37
robo8080 5:61109bce11fe 38 static const uint16_t KONASHI_I2C_CONFIG_UUID = 0x300B;
robo8080 5:61109bce11fe 39 static const uint16_t KONASHI_I2C_START_STOP_UUID = 0x300C;
robo8080 5:61109bce11fe 40 static const uint16_t KONASHI_I2C_WRITE_UUID = 0x300D;
robo8080 5:61109bce11fe 41 static const uint16_t KONASHI_I2C_READ_PARAM_UIUD = 0x300E;
robo8080 5:61109bce11fe 42 static const uint16_t KONASHI_I2C_READ_UUID = 0x300F;
robo8080 5:61109bce11fe 43
robo8080 5:61109bce11fe 44 static const uint16_t KONASHI_UART_CONFIG_UUID = 0x3010;
robo8080 5:61109bce11fe 45 static const uint16_t KONASHI_UART_BAUDRATE_UUID = 0x3011;
robo8080 5:61109bce11fe 46 static const uint16_t KONASHI_UART_TX_UUID = 0x3012;
robo8080 5:61109bce11fe 47 static const uint16_t KONASHI_UART_RX_NOTIFICATION_UUID = 0x3013;
robo8080 5:61109bce11fe 48
robo8080 5:61109bce11fe 49 static const uint16_t KONASHI_HARDWARE_RESET_UUID = 0x3014;
robo8080 5:61109bce11fe 50 static const uint16_t KONASHI_HARDWARE_LOW_BAT_NOTIFICATION_UUID = 0x3015;
robo8080 5:61109bce11fe 51
robo8080 5:61109bce11fe 52 uint16_t uuid16_list[] = { KONASHI_SERVICE_UUID };
robo8080 5:61109bce11fe 53
robo8080 5:61109bce11fe 54 #define NEED_CONSOLE_OUTPUT 1 /* Set this if you need debug messages on the console;
Rohit Grover 2:e060367b9024 55 * it will have an impact on code-size and power consumption. */
yihui 0:e910d9bb040f 56
Rohit Grover 2:e060367b9024 57 #if NEED_CONSOLE_OUTPUT
Rohit Grover 2:e060367b9024 58 Serial pc(USBTX, USBRX);
Rohit Grover 2:e060367b9024 59 #define DEBUG(...) { pc.printf(__VA_ARGS__); }
yihui 0:e910d9bb040f 60 #else
Rohit Grover 2:e060367b9024 61 #define DEBUG(...) /* nothing */
Rohit Grover 2:e060367b9024 62 #endif /* #if NEED_CONSOLE_OUTPUT */
yihui 0:e910d9bb040f 63
robo8080 5:61109bce11fe 64 //Serial pc(USBTX, USBRX);
Rohit Grover 2:e060367b9024 65 BLEDevice ble;
Rohit Grover 2:e060367b9024 66 DigitalOut led1(LED1);
robo8080 5:61109bce11fe 67 BusOut ioOut(P0_0,P0_1,P0_2,P0_3,P0_4,P0_5,P0_6,P0_7);
yihui 0:e910d9bb040f 68
robo8080 5:61109bce11fe 69 uint8_t pioSetting[20] = {0,};
robo8080 5:61109bce11fe 70 uint8_t pioPullup[20] = {0,};
robo8080 5:61109bce11fe 71 uint8_t pioOutput[20] = {0,};
robo8080 5:61109bce11fe 72 uint8_t pioInput[20] = {0,};
robo8080 5:61109bce11fe 73
robo8080 5:61109bce11fe 74 uint8_t pwmConfig[20] = {0,};
robo8080 5:61109bce11fe 75 uint8_t pwmPeriod[20] = {0,};
robo8080 5:61109bce11fe 76 uint8_t pwmDuty[20] = {0,};
robo8080 5:61109bce11fe 77
robo8080 5:61109bce11fe 78 uint8_t analogDrive[20] = {0,};
robo8080 5:61109bce11fe 79 uint8_t analogRead0[20] = {0,};
robo8080 5:61109bce11fe 80 uint8_t analogRead1[20] = {0,};
robo8080 5:61109bce11fe 81 uint8_t analogRead2[20] = {0,};
robo8080 5:61109bce11fe 82
robo8080 5:61109bce11fe 83 uint8_t i2cConfig[20] = {0,};
robo8080 5:61109bce11fe 84 uint8_t i2cStartStop[20] = {0,};
robo8080 5:61109bce11fe 85 uint8_t i2cWrite[20] = {0,};
robo8080 5:61109bce11fe 86 uint8_t i2cReadParam[20] = {0,};
robo8080 5:61109bce11fe 87 uint8_t i2cRead[20] = {0,};
robo8080 5:61109bce11fe 88
robo8080 5:61109bce11fe 89 uint8_t uartConfig[20] = {0,};
robo8080 5:61109bce11fe 90 uint8_t uartBaudrate[20] = {0,};
robo8080 5:61109bce11fe 91 uint8_t uartTx[20] = {0,};
robo8080 5:61109bce11fe 92 uint8_t uartRx[20] = {0,};
robo8080 5:61109bce11fe 93
robo8080 5:61109bce11fe 94 uint8_t hardwareRest[20] = {0,};
robo8080 5:61109bce11fe 95 uint8_t hardwareLowBat[20] = {0,};
robo8080 5:61109bce11fe 96
robo8080 5:61109bce11fe 97 GattCharacteristic pioSettingCharacteristic (KONASHI_PIO_SETTING_UUID, pioSetting, 1, 1,
robo8080 5:61109bce11fe 98 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 99 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 100 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 101 GattCharacteristic pioPullupCharacteristic (KONASHI_PIO_PULLUP_UUID, pioPullup, 1, 1,
robo8080 5:61109bce11fe 102 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 103 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 104 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 105 GattCharacteristic pioOutputCharacteristic (KONASHI_PIO_OUTPUT_UUID, pioOutput, 1, 1,
robo8080 5:61109bce11fe 106 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 107 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 108 GattCharacteristic pioInputCharacteristic (KONASHI_PIO_INPUT_NOTIFICATION_UUID, pioInput, 1, 1,
robo8080 5:61109bce11fe 109 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 110 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
robo8080 5:61109bce11fe 111
robo8080 5:61109bce11fe 112 GattCharacteristic pwmConfigCharacteristic (KONASHI_PWM_CONFIG_UUID, pwmConfig, 1, 1,
robo8080 5:61109bce11fe 113 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 114 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 115 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 116 GattCharacteristic pwmPeriodCharacteristic (KONASHI_PWM_PARAM_UUID, pwmPeriod, 5, 5,
robo8080 5:61109bce11fe 117 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 118 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 119 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 120 GattCharacteristic pwmDutyCharacteristic (KONASHI_PWM_DUTY_UUID, pwmDuty, 5, 5,
robo8080 5:61109bce11fe 121 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 122 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 123 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 124
robo8080 5:61109bce11fe 125 GattCharacteristic analogDriveCharacteristic (KONASHI_ANALOG_DRIVE_UUID, analogDrive, 1, 1,
robo8080 5:61109bce11fe 126 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 127 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 128 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 129 GattCharacteristic analogRead0Characteristic (KONASHI_ANALOG_READ0_UUID, analogRead0, 2, 2,
robo8080 5:61109bce11fe 130 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 131 GattCharacteristic analogRead1Characteristic (KONASHI_ANALOG_READ1_UUID, analogRead1, 2, 2,
robo8080 5:61109bce11fe 132 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 133 GattCharacteristic analogRead2Characteristic (KONASHI_ANALOG_READ2_UUID, analogRead2, 2, 2,
robo8080 5:61109bce11fe 134 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 135
robo8080 5:61109bce11fe 136 GattCharacteristic i2cConfigCharacteristic (KONASHI_I2C_CONFIG_UUID, i2cConfig, 1, 1,
robo8080 5:61109bce11fe 137 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 138 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 139 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 140 GattCharacteristic i2cStartStopCharacteristic (KONASHI_I2C_START_STOP_UUID, i2cStartStop, 1, 1,
robo8080 5:61109bce11fe 141 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 142 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 143 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 144 GattCharacteristic i2cWriteCharacteristic (KONASHI_I2C_WRITE_UUID, i2cWrite, 3, 20,
robo8080 5:61109bce11fe 145 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 146 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 147 GattCharacteristic i2cReadParamCharacteristic (KONASHI_I2C_READ_PARAM_UIUD, i2cReadParam, 2, 2,
robo8080 5:61109bce11fe 148 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 149 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 150 GattCharacteristic i2cReadCharacteristic (KONASHI_I2C_READ_UUID, i2cRead, 0, 20,
robo8080 5:61109bce11fe 151 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 152
robo8080 5:61109bce11fe 153 GattCharacteristic uartConfigCharacteristic (KONASHI_UART_CONFIG_UUID, uartConfig, 1, 1,
robo8080 5:61109bce11fe 154 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 155 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 156 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 157 GattCharacteristic uartBaudrateCharacteristic (KONASHI_UART_BAUDRATE_UUID, uartBaudrate, 1, 1,
robo8080 5:61109bce11fe 158 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 159 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 160 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 161 GattCharacteristic uartTxCharacteristic (KONASHI_UART_TX_UUID, uartTx, 1, 1,
robo8080 5:61109bce11fe 162 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 163 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 164 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 165 GattCharacteristic uartRxCharacteristic (KONASHI_UART_RX_NOTIFICATION_UUID, uartRx, 0, 20,
robo8080 5:61109bce11fe 166 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
Rohit Grover 2:e060367b9024 167 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
robo8080 5:61109bce11fe 168
robo8080 5:61109bce11fe 169 GattCharacteristic hardwareRestCharacteristic (KONASHI_HARDWARE_RESET_UUID, hardwareRest, 1, 1,
robo8080 5:61109bce11fe 170 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE |
robo8080 5:61109bce11fe 171 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE_WITHOUT_RESPONSE);
robo8080 5:61109bce11fe 172 GattCharacteristic hardwareLowBatCharacteristic (KONASHI_HARDWARE_LOW_BAT_NOTIFICATION_UUID, hardwareLowBat, 1, 1,
robo8080 5:61109bce11fe 173 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ |
robo8080 5:61109bce11fe 174 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
robo8080 5:61109bce11fe 175
robo8080 5:61109bce11fe 176 GattCharacteristic *konashiChars[] = { //&pioSettingCharacteristic,
robo8080 5:61109bce11fe 177 //&pioPullupCharacteristic,
robo8080 5:61109bce11fe 178 &pioOutputCharacteristic,
robo8080 5:61109bce11fe 179 /* &pioInputCharacteristic,
robo8080 5:61109bce11fe 180 &pwmConfigCharacteristic,
robo8080 5:61109bce11fe 181 &pwmPeriodCharacteristic,
robo8080 5:61109bce11fe 182 &pwmDutyCharacteristic,
robo8080 5:61109bce11fe 183 &analogDriveCharacteristic,
robo8080 5:61109bce11fe 184 &analogRead0Characteristic,
robo8080 5:61109bce11fe 185 &analogRead1Characteristic,
robo8080 5:61109bce11fe 186 &analogRead2Characteristic,
robo8080 5:61109bce11fe 187 &i2cConfigCharacteristic,
robo8080 5:61109bce11fe 188 &i2cStartStopCharacteristic,
robo8080 5:61109bce11fe 189 &i2cWriteCharacteristic,
robo8080 5:61109bce11fe 190 &i2cReadParamCharacteristic,
robo8080 5:61109bce11fe 191 &i2cReadCharacteristic,
robo8080 5:61109bce11fe 192 &uartConfigCharacteristic,
robo8080 5:61109bce11fe 193 &uartBaudrateCharacteristic,*/
robo8080 5:61109bce11fe 194 &uartTxCharacteristic,
robo8080 5:61109bce11fe 195 &uartRxCharacteristic,
robo8080 5:61109bce11fe 196 /* &hardwareRestCharacteristic,
robo8080 5:61109bce11fe 197 &hardwareLowBatCharacteristic,*/ };
robo8080 5:61109bce11fe 198 GattService konashiService(KONASHI_SERVICE_UUID, konashiChars, sizeof(konashiChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 199
robo8080 5:61109bce11fe 200 GattCharacteristic *konashiChars1[] = {&pioOutputCharacteristic, &uartTxCharacteristic, &uartRxCharacteristic};
robo8080 5:61109bce11fe 201 GattService konashiService1(KONASHI_SERVICE_UUID, konashiChars1, sizeof(konashiChars1) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 202
robo8080 5:61109bce11fe 203
robo8080 5:61109bce11fe 204 // SYSTEM
robo8080 5:61109bce11fe 205 static char systemId = 'A';
robo8080 5:61109bce11fe 206 GattCharacteristic systemID(GattCharacteristic::UUID_SYSTEM_ID_CHAR, (uint8_t *)systemId, sizeof(systemId), sizeof(systemId),
robo8080 5:61109bce11fe 207 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 208 //GattCharacteristic *systemChars[] = {&systemID };
robo8080 5:61109bce11fe 209 //GattService systemService(GattService::UUID_DEVICE_INFORMATION_SERVICE, systemChars, sizeof(systemChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 210
robo8080 5:61109bce11fe 211 // MODEL
robo8080 5:61109bce11fe 212 static char model[31] = "mbed HRM1017";
robo8080 5:61109bce11fe 213 GattCharacteristic modelID(GattCharacteristic::UUID_MODEL_NUMBER_STRING_CHAR, (uint8_t *)model, strlen(model), strlen(model),
robo8080 5:61109bce11fe 214 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 215 //GattCharacteristic *modelChars[] = {&modelID };
robo8080 5:61109bce11fe 216 //GattService modelService(GattService::UUID_DEVICE_INFORMATION_SERVICE, modelChars, sizeof(modelChars) / sizeof(GattCharacteristic *));
yihui 0:e910d9bb040f 217
robo8080 5:61109bce11fe 218 // Firmware
robo8080 5:61109bce11fe 219 static char fwversion[31] = "1.0";
robo8080 5:61109bce11fe 220 GattCharacteristic fwChars(GattCharacteristic::UUID_FIRMWARE_REVISION_STRING_CHAR, (uint8_t *)fwversion, strlen(fwversion), strlen(fwversion),
robo8080 5:61109bce11fe 221 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 222 //GattCharacteristic *firmwareChars[] = {&fwChars };
robo8080 5:61109bce11fe 223 //GattService firmwareService(GattService::UUID_DEVICE_INFORMATION_SERVICE, firmwareChars, sizeof(firmwareChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 224
robo8080 5:61109bce11fe 225 // Software
robo8080 5:61109bce11fe 226 static char swversion[31] = "1.0";
robo8080 5:61109bce11fe 227 GattCharacteristic swChars(GattCharacteristic::UUID_SOFTWARE_REVISION_STRING_CHAR, (uint8_t *)swversion, strlen(swversion), strlen(swversion),
robo8080 5:61109bce11fe 228 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 229 //GattCharacteristic *softwareChars[] = {&swChars };
robo8080 5:61109bce11fe 230 //GattService softwareService(GattService::UUID_DEVICE_INFORMATION_SERVICE, softwareChars, sizeof(softwareChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 231 // Hardware
robo8080 5:61109bce11fe 232 static char hwversion[31] = "1.0";
robo8080 5:61109bce11fe 233 GattCharacteristic hwChars(GattCharacteristic::UUID_HARDWARE_REVISION_STRING_CHAR, (uint8_t *)hwversion, strlen(hwversion), strlen(hwversion),
robo8080 5:61109bce11fe 234 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 235 //GattCharacteristic *hardwareChars[] = {&hwChars };
robo8080 5:61109bce11fe 236 //GattService hardwareService(GattService::UUID_DEVICE_INFORMATION_SERVICE, hardwareChars, sizeof(hardwareChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 237 // Manufacturer
robo8080 5:61109bce11fe 238 static char vendor[31] = "Test Company Inc.";
robo8080 5:61109bce11fe 239 GattCharacteristic vendorChars(GattCharacteristic::UUID_MANUFACTURER_NAME_STRING_CHAR, (uint8_t *)vendor, strlen(vendor), strlen(vendor),
robo8080 5:61109bce11fe 240 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 241 //GattCharacteristic *manufacturerChars[] = {&vendorChars };
robo8080 5:61109bce11fe 242 //GattService manufacturerService(GattService::UUID_DEVICE_INFORMATION_SERVICE, manufacturerChars, sizeof(manufacturerChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 243 // Serial number
robo8080 5:61109bce11fe 244 static char serial[31] = "1234567890";
robo8080 5:61109bce11fe 245 GattCharacteristic serialChars(GattCharacteristic::UUID_SERIAL_NUMBER_STRING_CHAR, (uint8_t *)serial, strlen(serial), strlen(serial),
robo8080 5:61109bce11fe 246 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ);
robo8080 5:61109bce11fe 247 //GattCharacteristic *serialNumberChars[] = {&serialChars };
robo8080 5:61109bce11fe 248 //GattService serialNumberService(GattService::UUID_DEVICE_INFORMATION_SERVICE, serialNumberChars, sizeof(serialNumberChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 249
robo8080 5:61109bce11fe 250
robo8080 5:61109bce11fe 251 //GattCharacteristic *informationChars[] = {&systemID, &modelID, &serialChars, &fwChars, &hwChars, &swChars, &vendorChars, };
robo8080 5:61109bce11fe 252 GattCharacteristic *informationChars[] = {&modelID, &fwChars, &hwChars, &swChars, &vendorChars, };
robo8080 5:61109bce11fe 253 GattService informationService(GattService::UUID_DEVICE_INFORMATION_SERVICE, informationChars, sizeof(informationChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 254
robo8080 5:61109bce11fe 255
robo8080 5:61109bce11fe 256 static uint8_t batteryLevel = 100;
robo8080 5:61109bce11fe 257 GattCharacteristic batteryPercentage(GattCharacteristic::UUID_BATTERY_LEVEL_CHAR, (uint8_t *)batteryLevel, sizeof(batteryLevel), sizeof(batteryLevel),
robo8080 5:61109bce11fe 258 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
robo8080 5:61109bce11fe 259 GattCharacteristic *batteryChars[] = {&batteryPercentage };
robo8080 5:61109bce11fe 260 GattService batteryService(GattService::UUID_BATTERY_SERVICE, batteryChars, sizeof(batteryChars) / sizeof(GattCharacteristic *));
robo8080 5:61109bce11fe 261
robo8080 5:61109bce11fe 262
robo8080 5:61109bce11fe 263
robo8080 5:61109bce11fe 264 void connectionCallback(uint16_t charHandle)
robo8080 5:61109bce11fe 265 //void connectionCallback(void)
robo8080 5:61109bce11fe 266 {
robo8080 5:61109bce11fe 267 DEBUG("Connected!\n\r");
robo8080 5:61109bce11fe 268 }
robo8080 5:61109bce11fe 269 void disconnectionCallback(uint16_t charHandle)
robo8080 5:61109bce11fe 270 //void disconnectionCallback(void)
yihui 0:e910d9bb040f 271 {
Rohit Grover 2:e060367b9024 272 DEBUG("Disconnected!\n\r");
Rohit Grover 2:e060367b9024 273 DEBUG("Restarting the advertising process\n\r");
Rohit Grover 2:e060367b9024 274 ble.startAdvertising();
Rohit Grover 2:e060367b9024 275 }
yihui 0:e910d9bb040f 276
Rohit Grover 2:e060367b9024 277 void onDataWritten(uint16_t charHandle)
yihui 0:e910d9bb040f 278 {
robo8080 5:61109bce11fe 279 DEBUG("onDataWritten\n\r");
robo8080 5:61109bce11fe 280 if (charHandle == pioOutputCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 281 DEBUG("pioOutputCharacteristic!\n\r");
robo8080 5:61109bce11fe 282 uint8_t getPioOut[10];
robo8080 5:61109bce11fe 283 uint16_t bytesRead;
robo8080 5:61109bce11fe 284 ble.readCharacteristicValue(pioOutputCharacteristic.getHandle(), getPioOut, &bytesRead);
robo8080 5:61109bce11fe 285 DEBUG("DATA: %d %d\n\r",getPioOut[0],pioOutput[0]);
robo8080 5:61109bce11fe 286 if(getPioOut[0]!=pioOutput[0]) {
robo8080 5:61109bce11fe 287 pioOutput[0]=getPioOut[0];
robo8080 5:61109bce11fe 288 ioOut = getPioOut[0];
robo8080 5:61109bce11fe 289 }
robo8080 5:61109bce11fe 290 } else if (charHandle == uartTxCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 291 DEBUG("uartTxCharacteristic!\n\r");
Rohit Grover 2:e060367b9024 292 uint16_t bytesRead;
robo8080 5:61109bce11fe 293 ble.readCharacteristicValue(uartTxCharacteristic.getHandle(), uartTx, &bytesRead);
robo8080 5:61109bce11fe 294 DEBUG("ECHO: %s\n\r", (char *)uartTx);
robo8080 5:61109bce11fe 295 // pc.putc(uartTx[0]);
robo8080 5:61109bce11fe 296 ble.updateCharacteristicValue(uartRxCharacteristic.getHandle(), uartTx, bytesRead);
robo8080 5:61109bce11fe 297 } else if (charHandle == pioSettingCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 298 DEBUG("pioSettingCharacteristic!\n\r");
robo8080 5:61109bce11fe 299 } else if (charHandle == pioPullupCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 300 DEBUG("pioPullupCharacteristic!\n\r");
robo8080 5:61109bce11fe 301 } else if (charHandle == pwmConfigCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 302 DEBUG("pwmConfigCharacteristic!\n\r");
robo8080 5:61109bce11fe 303 } else if (charHandle == pwmPeriodCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 304 DEBUG("pwmPeriodCharacteristic!\n\r");
robo8080 5:61109bce11fe 305 } else if (charHandle == pwmDutyCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 306 DEBUG("pwmDutyCharacteristic!\n\r");
robo8080 5:61109bce11fe 307 } else if (charHandle == analogDriveCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 308 DEBUG("analogDriveCharacteristic!\n\r");
robo8080 5:61109bce11fe 309 } else if (charHandle == i2cConfigCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 310 DEBUG("i2cConfigCharacteristic!\n\r");
robo8080 5:61109bce11fe 311 } else if (charHandle == i2cStartStopCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 312 DEBUG("pioSettingCharacteristic!\n\r");
robo8080 5:61109bce11fe 313 } else if (charHandle == i2cWriteCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 314 DEBUG("i2cStartStopCharacteristic!\n\r");
robo8080 5:61109bce11fe 315 } else if (charHandle == i2cReadParamCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 316 DEBUG("i2cReadParamCharacteristic!\n\r");
robo8080 5:61109bce11fe 317 } else if (charHandle == uartConfigCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 318 DEBUG("uartConfigCharacteristic!\n\r");
robo8080 5:61109bce11fe 319 } else if (charHandle == uartBaudrateCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 320 DEBUG("uartBaudrateCharacteristic!\n\r");
robo8080 5:61109bce11fe 321 } else if (charHandle == hardwareRestCharacteristic.getHandle()) {
robo8080 5:61109bce11fe 322 DEBUG("hardwareRestCharacteristic!\n\r");
robo8080 5:61109bce11fe 323 }
Rohit Grover 2:e060367b9024 324 }
yihui 0:e910d9bb040f 325
Rohit Grover 2:e060367b9024 326 void periodicCallback(void)
Rohit Grover 2:e060367b9024 327 {
Rohit Grover 2:e060367b9024 328 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
robo8080 5:61109bce11fe 329 if (ble.getGapState().connected) {
robo8080 5:61109bce11fe 330 /* Update the battery measurement */
robo8080 5:61109bce11fe 331 batteryLevel--;
robo8080 5:61109bce11fe 332 if (batteryLevel == 1) {
robo8080 5:61109bce11fe 333 batteryLevel = 100;
robo8080 5:61109bce11fe 334 }
robo8080 5:61109bce11fe 335 // ble.updateCharacteristicValue(batteryPercentage.getHandle(), &batteryLevel, sizeof(batteryLevel));
robo8080 5:61109bce11fe 336 // ble.updateCharacteristicValue(hardwareLowBatCharacteristic.getHandle(), &batteryLevel, sizeof(batteryLevel));
robo8080 5:61109bce11fe 337 /* if(pc.readable()) {
robo8080 5:61109bce11fe 338 char data;
robo8080 5:61109bce11fe 339 data = pc.getc();
robo8080 5:61109bce11fe 340 ble.updateCharacteristicValue(uartRxCharacteristic.getHandle(), (uint8_t*)&data, 1);
robo8080 5:61109bce11fe 341 }*/
robo8080 5:61109bce11fe 342 }
Rohit Grover 2:e060367b9024 343 }
yihui 0:e910d9bb040f 344
yihui 0:e910d9bb040f 345 int main(void)
yihui 0:e910d9bb040f 346 {
Rohit Grover 2:e060367b9024 347 led1 = 1;
Rohit Grover 2:e060367b9024 348 Ticker ticker;
Rohit Grover 2:e060367b9024 349 ticker.attach(periodicCallback, 1);
yihui 0:e910d9bb040f 350
Rohit Grover 2:e060367b9024 351 DEBUG("Initialising the nRF51822\n\r");
Rohit Grover 2:e060367b9024 352 ble.init();
robo8080 5:61109bce11fe 353 ble.onConnection(connectionCallback);
Rohit Grover 2:e060367b9024 354 ble.onDisconnection(disconnectionCallback);
Rohit Grover 2:e060367b9024 355 ble.onDataWritten(onDataWritten);
yihui 0:e910d9bb040f 356
Rohit Grover 2:e060367b9024 357 /* setup advertising */
Rohit Grover 2:e060367b9024 358 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
robo8080 5:61109bce11fe 359 // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
Rohit Grover 2:e060367b9024 360 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
robo8080 5:61109bce11fe 361 // ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
robo8080 5:61109bce11fe 362 // (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
robo8080 5:61109bce11fe 363 // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
robo8080 5:61109bce11fe 364 // (const uint8_t *)"mbed HRM1017", sizeof("mbed HRM1017") - 1);
robo8080 5:61109bce11fe 365 // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
robo8080 5:61109bce11fe 366 // (const uint8_t *)uart_base_uuid_rev, sizeof(uart_base_uuid));
robo8080 5:61109bce11fe 367 // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS,
robo8080 5:61109bce11fe 368 // (const uint8_t *)uuid16_list, sizeof(uuid16_list));
yihui 0:e910d9bb040f 369
Rohit Grover 2:e060367b9024 370 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
Rohit Grover 2:e060367b9024 371 ble.startAdvertising();
yihui 0:e910d9bb040f 372
robo8080 5:61109bce11fe 373 // ble.addService(batteryService);
robo8080 5:61109bce11fe 374 ble.addService(informationService);
robo8080 5:61109bce11fe 375 // ble.addService(konashiService);
robo8080 5:61109bce11fe 376 ble.addService(konashiService1);
yihui 0:e910d9bb040f 377
Rohit Grover 2:e060367b9024 378 while (true) {
Rohit Grover 2:e060367b9024 379 ble.waitForEvent();
yihui 0:e910d9bb040f 380 }
yihui 0:e910d9bb040f 381 }