robo 8080
/
BLE_TEST_konashi
konashi/SBBLEのテスト
Fork of BLE_LoopbackUART by
main.cpp@5:61109bce11fe, 2014-08-16 (annotated)
- 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?
User | Revision | Line number | New 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 | } |