同時公開のFunctionGenerator-DACと同時利用によりファンクション・ジェネレータを実現する。
Dependencies: BLE_API mbed nRF51822
FunctionGenerator-DAC
/users/ohneta/code/FunctionGenerator-DAC/
詳細は上記、FunctionGenerator-DACでおこないます。
main.cpp@0:6e47fe8d8f5c, 2015-06-16 (annotated)
- Committer:
- ohneta
- Date:
- Tue Jun 16 07:20:05 2015 +0000
- Revision:
- 0:6e47fe8d8f5c
1st release commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ohneta | 0:6e47fe8d8f5c | 1 | #include "mbed.h" |
ohneta | 0:6e47fe8d8f5c | 2 | |
ohneta | 0:6e47fe8d8f5c | 3 | #include <I2C.h> |
ohneta | 0:6e47fe8d8f5c | 4 | #include "BLEDevice.h" |
ohneta | 0:6e47fe8d8f5c | 5 | #include "FunctionGenCommands.h" |
ohneta | 0:6e47fe8d8f5c | 6 | |
ohneta | 0:6e47fe8d8f5c | 7 | // prototypes |
ohneta | 0:6e47fe8d8f5c | 8 | void connectionCallback(Gap::Handle_t Handle_t, |
ohneta | 0:6e47fe8d8f5c | 9 | Gap::addr_type_t peerAddrType, const Gap::address_t peerAddr, |
ohneta | 0:6e47fe8d8f5c | 10 | Gap::addr_type_t ownAddrType, const Gap::address_t ownAddr, |
ohneta | 0:6e47fe8d8f5c | 11 | const Gap::ConnectionParams_t *params); |
ohneta | 0:6e47fe8d8f5c | 12 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason); |
ohneta | 0:6e47fe8d8f5c | 13 | void writeCharCallback(const GattCharacteristicWriteCBParams *params); |
ohneta | 0:6e47fe8d8f5c | 14 | void lookme(); |
ohneta | 0:6e47fe8d8f5c | 15 | void tickerCallback(); |
ohneta | 0:6e47fe8d8f5c | 16 | |
ohneta | 0:6e47fe8d8f5c | 17 | //void commandPrint(FGCommand *command); |
ohneta | 0:6e47fe8d8f5c | 18 | |
ohneta | 0:6e47fe8d8f5c | 19 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 20 | |
ohneta | 0:6e47fe8d8f5c | 21 | Ticker ticker; |
ohneta | 0:6e47fe8d8f5c | 22 | Serial pc(P0_9, P0_11); |
ohneta | 0:6e47fe8d8f5c | 23 | DigitalOut led1(P0_18); |
ohneta | 0:6e47fe8d8f5c | 24 | DigitalOut led2(P0_19); |
ohneta | 0:6e47fe8d8f5c | 25 | |
ohneta | 0:6e47fe8d8f5c | 26 | DigitalOut lookmeOut(P0_21); |
ohneta | 0:6e47fe8d8f5c | 27 | I2C i2c(P0_22, P0_20); |
ohneta | 0:6e47fe8d8f5c | 28 | const int i2cSlaveAddr = 0x62; |
ohneta | 0:6e47fe8d8f5c | 29 | |
ohneta | 0:6e47fe8d8f5c | 30 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 31 | |
ohneta | 0:6e47fe8d8f5c | 32 | BLEDevice ble; |
ohneta | 0:6e47fe8d8f5c | 33 | |
ohneta | 0:6e47fe8d8f5c | 34 | const static char DEVICE_NAME[] = "mbedFuncGen 0.01"; |
ohneta | 0:6e47fe8d8f5c | 35 | static const uint16_t uuid16_list[] = {0xFFFF}; // Custom UUID, FFFF is reserved for development |
ohneta | 0:6e47fe8d8f5c | 36 | |
ohneta | 0:6e47fe8d8f5c | 37 | // Set Up custom Characteristics |
ohneta | 0:6e47fe8d8f5c | 38 | static uint8_t deviceValue = 0; |
ohneta | 0:6e47fe8d8f5c | 39 | static uint8_t outputValue = 0; |
ohneta | 0:6e47fe8d8f5c | 40 | static uint32_t frequencyValue = 0; |
ohneta | 0:6e47fe8d8f5c | 41 | static WaveformInfo waveformInfoValue; |
ohneta | 0:6e47fe8d8f5c | 42 | static WaveformBlock waveformBlockValue; |
ohneta | 0:6e47fe8d8f5c | 43 | |
ohneta | 0:6e47fe8d8f5c | 44 | WriteOnlyArrayGattCharacteristic<uint8_t, 0> resetChar(CHARACTERISTICS_UUID_RESET, NULL); |
ohneta | 0:6e47fe8d8f5c | 45 | ReadWriteArrayGattCharacteristic<uint8_t, 1> deviceChar(CHARACTERISTICS_UUID_DEVICE, &deviceValue); |
ohneta | 0:6e47fe8d8f5c | 46 | ReadWriteArrayGattCharacteristic<uint8_t, 1> outputChar(CHARACTERISTICS_UUID_OUTPUT, &outputValue); |
ohneta | 0:6e47fe8d8f5c | 47 | ReadWriteArrayGattCharacteristic<uint32_t, 1> frequencyChar(CHARACTERISTICS_UUID_FREQUENCY, &frequencyValue); |
ohneta | 0:6e47fe8d8f5c | 48 | WriteOnlyArrayGattCharacteristic<WaveformInfo, 1> waveformInfoChar(CHARACTERISTICS_UUID_WAVEFORMINFO, &waveformInfoValue); |
ohneta | 0:6e47fe8d8f5c | 49 | WriteOnlyArrayGattCharacteristic<WaveformBlock, 1> waveformBlockChar(CHARACTERISTICS_UUID_WAVEFORMBLOCK, &waveformBlockValue); |
ohneta | 0:6e47fe8d8f5c | 50 | WriteOnlyArrayGattCharacteristic<uint8_t, 0> waveformToBufferChar(CHARACTERISTICS_UUID_WAVEFORMTOBUFFER, NULL); |
ohneta | 0:6e47fe8d8f5c | 51 | |
ohneta | 0:6e47fe8d8f5c | 52 | // Set up custom service |
ohneta | 0:6e47fe8d8f5c | 53 | GattCharacteristic *characteristics[] = { |
ohneta | 0:6e47fe8d8f5c | 54 | &resetChar, |
ohneta | 0:6e47fe8d8f5c | 55 | &deviceChar, |
ohneta | 0:6e47fe8d8f5c | 56 | &outputChar, |
ohneta | 0:6e47fe8d8f5c | 57 | &frequencyChar, |
ohneta | 0:6e47fe8d8f5c | 58 | &waveformInfoChar, |
ohneta | 0:6e47fe8d8f5c | 59 | &waveformBlockChar, |
ohneta | 0:6e47fe8d8f5c | 60 | &waveformToBufferChar |
ohneta | 0:6e47fe8d8f5c | 61 | }; |
ohneta | 0:6e47fe8d8f5c | 62 | GattService customService( 0xA000, |
ohneta | 0:6e47fe8d8f5c | 63 | characteristics, |
ohneta | 0:6e47fe8d8f5c | 64 | sizeof(characteristics) / sizeof(GattCharacteristic *) ); |
ohneta | 0:6e47fe8d8f5c | 65 | |
ohneta | 0:6e47fe8d8f5c | 66 | |
ohneta | 0:6e47fe8d8f5c | 67 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 68 | /** |
ohneta | 0:6e47fe8d8f5c | 69 | * |
ohneta | 0:6e47fe8d8f5c | 70 | */ |
ohneta | 0:6e47fe8d8f5c | 71 | void connectionCallback(Gap::Handle_t Handle_t, |
ohneta | 0:6e47fe8d8f5c | 72 | Gap::addr_type_t peerAddrType, const Gap::address_t peerAddr, |
ohneta | 0:6e47fe8d8f5c | 73 | Gap::addr_type_t ownAddrType, const Gap::address_t ownAddr, |
ohneta | 0:6e47fe8d8f5c | 74 | const Gap::ConnectionParams_t *params) |
ohneta | 0:6e47fe8d8f5c | 75 | { |
ohneta | 0:6e47fe8d8f5c | 76 | pc.printf("connectionCallback\n"); |
ohneta | 0:6e47fe8d8f5c | 77 | } |
ohneta | 0:6e47fe8d8f5c | 78 | |
ohneta | 0:6e47fe8d8f5c | 79 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 80 | /* |
ohneta | 0:6e47fe8d8f5c | 81 | * Restart advertising when phone app disconnects |
ohneta | 0:6e47fe8d8f5c | 82 | */ |
ohneta | 0:6e47fe8d8f5c | 83 | void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) |
ohneta | 0:6e47fe8d8f5c | 84 | { |
ohneta | 0:6e47fe8d8f5c | 85 | pc.printf("disconnectionCallback\n"); |
ohneta | 0:6e47fe8d8f5c | 86 | ble.startAdvertising(); |
ohneta | 0:6e47fe8d8f5c | 87 | } |
ohneta | 0:6e47fe8d8f5c | 88 | |
ohneta | 0:6e47fe8d8f5c | 89 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 90 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 91 | /* |
ohneta | 0:6e47fe8d8f5c | 92 | * handle writes to writeCharacteristic |
ohneta | 0:6e47fe8d8f5c | 93 | */ |
ohneta | 0:6e47fe8d8f5c | 94 | void writeCharCallback(const GattCharacteristicWriteCBParams *params) |
ohneta | 0:6e47fe8d8f5c | 95 | { |
ohneta | 0:6e47fe8d8f5c | 96 | led2 = !led2; |
ohneta | 0:6e47fe8d8f5c | 97 | |
ohneta | 0:6e47fe8d8f5c | 98 | FGPacket fgPacket; |
ohneta | 0:6e47fe8d8f5c | 99 | |
ohneta | 0:6e47fe8d8f5c | 100 | pc.printf("--------\n"); |
ohneta | 0:6e47fe8d8f5c | 101 | pc.printf("writeCharCallback\n"); |
ohneta | 0:6e47fe8d8f5c | 102 | { |
ohneta | 0:6e47fe8d8f5c | 103 | pc.printf("Data received: length = %d, data = ", params->len); |
ohneta | 0:6e47fe8d8f5c | 104 | for(int x = 0; x < params->len; x++) { |
ohneta | 0:6e47fe8d8f5c | 105 | pc.printf("%02x ", params->data[x]); |
ohneta | 0:6e47fe8d8f5c | 106 | } |
ohneta | 0:6e47fe8d8f5c | 107 | pc.printf("\n"); |
ohneta | 0:6e47fe8d8f5c | 108 | } |
ohneta | 0:6e47fe8d8f5c | 109 | |
ohneta | 0:6e47fe8d8f5c | 110 | if (params->charHandle == resetChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 111 | pc.printf("resetChar\n"); |
ohneta | 0:6e47fe8d8f5c | 112 | |
ohneta | 0:6e47fe8d8f5c | 113 | fgPacket.header.command = FGCommand_Reset; |
ohneta | 0:6e47fe8d8f5c | 114 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommandReset); |
ohneta | 0:6e47fe8d8f5c | 115 | //fgPacket.body.commandReset = NULL; |
ohneta | 0:6e47fe8d8f5c | 116 | |
ohneta | 0:6e47fe8d8f5c | 117 | } else |
ohneta | 0:6e47fe8d8f5c | 118 | if (params->charHandle == deviceChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 119 | memcpy(&deviceValue, params->data, params->len); |
ohneta | 0:6e47fe8d8f5c | 120 | pc.printf("deviceChar : deviceValue: %x\n", deviceValue); |
ohneta | 0:6e47fe8d8f5c | 121 | |
ohneta | 0:6e47fe8d8f5c | 122 | fgPacket.header.command = FGCommand_Device; |
ohneta | 0:6e47fe8d8f5c | 123 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommandDevice); |
ohneta | 0:6e47fe8d8f5c | 124 | fgPacket.body.commandDevice.device = deviceValue; |
ohneta | 0:6e47fe8d8f5c | 125 | |
ohneta | 0:6e47fe8d8f5c | 126 | } else |
ohneta | 0:6e47fe8d8f5c | 127 | if (params->charHandle == outputChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 128 | memcpy(&outputValue, params->data, params->len); |
ohneta | 0:6e47fe8d8f5c | 129 | pc.printf("outputChar : outputValue: %x\n", outputValue); |
ohneta | 0:6e47fe8d8f5c | 130 | |
ohneta | 0:6e47fe8d8f5c | 131 | fgPacket.header.command = FGCommand_Output; |
ohneta | 0:6e47fe8d8f5c | 132 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommandOutput); |
ohneta | 0:6e47fe8d8f5c | 133 | fgPacket.body.commandOutput.on = outputValue; |
ohneta | 0:6e47fe8d8f5c | 134 | |
ohneta | 0:6e47fe8d8f5c | 135 | } else |
ohneta | 0:6e47fe8d8f5c | 136 | if (params->charHandle == frequencyChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 137 | memcpy(&frequencyValue, params->data, params->len); |
ohneta | 0:6e47fe8d8f5c | 138 | pc.printf("frequencyChar\n"); |
ohneta | 0:6e47fe8d8f5c | 139 | pc.printf("frequencyValue: %d (0x%x)\n", frequencyValue, frequencyValue); |
ohneta | 0:6e47fe8d8f5c | 140 | |
ohneta | 0:6e47fe8d8f5c | 141 | fgPacket.header.command = FGCommand_Frequency; |
ohneta | 0:6e47fe8d8f5c | 142 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommandFrequency); |
ohneta | 0:6e47fe8d8f5c | 143 | fgPacket.body.commandFrequency.frequency = frequencyValue; |
ohneta | 0:6e47fe8d8f5c | 144 | |
ohneta | 0:6e47fe8d8f5c | 145 | } else |
ohneta | 0:6e47fe8d8f5c | 146 | if (params->charHandle == waveformInfoChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 147 | memcpy(&waveformInfoValue, params->data, params->len); |
ohneta | 0:6e47fe8d8f5c | 148 | pc.printf("waveformInfoChar\n"); |
ohneta | 0:6e47fe8d8f5c | 149 | pc.printf("FGCommandWaveformInfo.waveSize: %d\n", waveformInfoValue.waveSize); |
ohneta | 0:6e47fe8d8f5c | 150 | pc.printf(" bitPerData: %d\n", waveformInfoValue.bitPerData); |
ohneta | 0:6e47fe8d8f5c | 151 | pc.printf(" blockSize: %d\n", waveformInfoValue.blockSize); |
ohneta | 0:6e47fe8d8f5c | 152 | pc.printf(" blockMaxNum: %d\n", waveformInfoValue.blockMaxNum); |
ohneta | 0:6e47fe8d8f5c | 153 | |
ohneta | 0:6e47fe8d8f5c | 154 | fgPacket.header.command = FGCommand_WaveformInfo; |
ohneta | 0:6e47fe8d8f5c | 155 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommandWaveformInfo); |
ohneta | 0:6e47fe8d8f5c | 156 | fgPacket.body.commandWaveformInfo = waveformInfoValue; |
ohneta | 0:6e47fe8d8f5c | 157 | |
ohneta | 0:6e47fe8d8f5c | 158 | } else |
ohneta | 0:6e47fe8d8f5c | 159 | if (params->charHandle == waveformBlockChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 160 | memcpy(&waveformBlockValue, params->data, params->len); |
ohneta | 0:6e47fe8d8f5c | 161 | pc.printf("waveformBlockChar\n"); |
ohneta | 0:6e47fe8d8f5c | 162 | pc.printf("waveformBlockChar.blockNo: %d\n", waveformBlockValue.blockNo); |
ohneta | 0:6e47fe8d8f5c | 163 | pc.printf(" length: %d\n", waveformBlockValue.length); |
ohneta | 0:6e47fe8d8f5c | 164 | pc.printf(" buffer: "); |
ohneta | 0:6e47fe8d8f5c | 165 | for (int i = 0; i < waveformBlockValue.length; i++) { |
ohneta | 0:6e47fe8d8f5c | 166 | pc.printf("%02x ", waveformBlockValue.buffer[i]); |
ohneta | 0:6e47fe8d8f5c | 167 | } |
ohneta | 0:6e47fe8d8f5c | 168 | pc.printf("\n"); |
ohneta | 0:6e47fe8d8f5c | 169 | |
ohneta | 0:6e47fe8d8f5c | 170 | fgPacket.header.command = FGCommand_WaveformBlock; |
ohneta | 0:6e47fe8d8f5c | 171 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommandWaveformBlock); |
ohneta | 0:6e47fe8d8f5c | 172 | fgPacket.body.commandWaveformBlock = waveformBlockValue; |
ohneta | 0:6e47fe8d8f5c | 173 | |
ohneta | 0:6e47fe8d8f5c | 174 | } else |
ohneta | 0:6e47fe8d8f5c | 175 | if (params->charHandle == waveformToBufferChar.getValueHandle()) { |
ohneta | 0:6e47fe8d8f5c | 176 | pc.printf("waveformToBufferChar : non\n"); |
ohneta | 0:6e47fe8d8f5c | 177 | |
ohneta | 0:6e47fe8d8f5c | 178 | fgPacket.header.command = FGCommand_WaveformToBuffer; |
ohneta | 0:6e47fe8d8f5c | 179 | fgPacket.header.length = sizeof(FGHeader) + sizeof(FGCommand_WaveformToBuffer); |
ohneta | 0:6e47fe8d8f5c | 180 | //fgPacket.body.commandWaveformToBuffer = NULL; |
ohneta | 0:6e47fe8d8f5c | 181 | } |
ohneta | 0:6e47fe8d8f5c | 182 | |
ohneta | 0:6e47fe8d8f5c | 183 | |
ohneta | 0:6e47fe8d8f5c | 184 | // I2C送信 |
ohneta | 0:6e47fe8d8f5c | 185 | { |
ohneta | 0:6e47fe8d8f5c | 186 | lookme(); |
ohneta | 0:6e47fe8d8f5c | 187 | int ret = i2c.write(i2cSlaveAddr, (const char *)&fgPacket, fgPacket.header.length); |
ohneta | 0:6e47fe8d8f5c | 188 | pc.printf("I2C ret: %d \n", ret); |
ohneta | 0:6e47fe8d8f5c | 189 | |
ohneta | 0:6e47fe8d8f5c | 190 | //ble.updateCharacteristicValue(readChar.getValueHandle(),params->data,params->len); |
ohneta | 0:6e47fe8d8f5c | 191 | } |
ohneta | 0:6e47fe8d8f5c | 192 | } |
ohneta | 0:6e47fe8d8f5c | 193 | |
ohneta | 0:6e47fe8d8f5c | 194 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 195 | // 要調整 |
ohneta | 0:6e47fe8d8f5c | 196 | void lookme() |
ohneta | 0:6e47fe8d8f5c | 197 | { |
ohneta | 0:6e47fe8d8f5c | 198 | lookmeOut = 0; |
ohneta | 0:6e47fe8d8f5c | 199 | wait_ms(5); |
ohneta | 0:6e47fe8d8f5c | 200 | lookmeOut = 1; |
ohneta | 0:6e47fe8d8f5c | 201 | wait_ms(5); |
ohneta | 0:6e47fe8d8f5c | 202 | lookmeOut = 0; |
ohneta | 0:6e47fe8d8f5c | 203 | } |
ohneta | 0:6e47fe8d8f5c | 204 | |
ohneta | 0:6e47fe8d8f5c | 205 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 206 | unsigned long gTickerCount = 0; |
ohneta | 0:6e47fe8d8f5c | 207 | |
ohneta | 0:6e47fe8d8f5c | 208 | void tickerCallback() |
ohneta | 0:6e47fe8d8f5c | 209 | { |
ohneta | 0:6e47fe8d8f5c | 210 | led1 = !led1; |
ohneta | 0:6e47fe8d8f5c | 211 | gTickerCount++; |
ohneta | 0:6e47fe8d8f5c | 212 | } |
ohneta | 0:6e47fe8d8f5c | 213 | |
ohneta | 0:6e47fe8d8f5c | 214 | //--------------------------------------------------------- |
ohneta | 0:6e47fe8d8f5c | 215 | /* |
ohneta | 0:6e47fe8d8f5c | 216 | * main loop |
ohneta | 0:6e47fe8d8f5c | 217 | */ |
ohneta | 0:6e47fe8d8f5c | 218 | int main(void) |
ohneta | 0:6e47fe8d8f5c | 219 | { |
ohneta | 0:6e47fe8d8f5c | 220 | ticker.attach(&tickerCallback, 0.5); |
ohneta | 0:6e47fe8d8f5c | 221 | i2c.frequency(100000); |
ohneta | 0:6e47fe8d8f5c | 222 | |
ohneta | 0:6e47fe8d8f5c | 223 | pc.baud(115200); |
ohneta | 0:6e47fe8d8f5c | 224 | pc.printf("\n"); |
ohneta | 0:6e47fe8d8f5c | 225 | pc.printf("mbed function generator BLE translator\n"); |
ohneta | 0:6e47fe8d8f5c | 226 | pc.printf("--\n"); |
ohneta | 0:6e47fe8d8f5c | 227 | |
ohneta | 0:6e47fe8d8f5c | 228 | |
ohneta | 0:6e47fe8d8f5c | 229 | ble.init(); |
ohneta | 0:6e47fe8d8f5c | 230 | ble.onConnection(connectionCallback); |
ohneta | 0:6e47fe8d8f5c | 231 | ble.onDisconnection(disconnectionCallback); |
ohneta | 0:6e47fe8d8f5c | 232 | |
ohneta | 0:6e47fe8d8f5c | 233 | ble.onDataWritten(writeCharCallback); // 書き込まれたときのコールバック |
ohneta | 0:6e47fe8d8f5c | 234 | //ble_error_t err = ble.onDataRead(readCharCallback); // 読み込まれたときのコールバック |
ohneta | 0:6e47fe8d8f5c | 235 | |
ohneta | 0:6e47fe8d8f5c | 236 | /* |
ohneta | 0:6e47fe8d8f5c | 237 | void onDataSent (void(*callback)(unsigned count)) |
ohneta | 0:6e47fe8d8f5c | 238 | void onDataWritten (void(*callback)(const GattCharacteristicWriteCBParams *eventDataP)) |
ohneta | 0:6e47fe8d8f5c | 239 | ble_error_t onDataRead (void(*callback)(const GattCharacteristicReadCBParams *eventDataP)) |
ohneta | 0:6e47fe8d8f5c | 240 | void onRadioNotification (Gap::RadioNotificationEventCallback_t callback) |
ohneta | 0:6e47fe8d8f5c | 241 | |
ohneta | 0:6e47fe8d8f5c | 242 | */ |
ohneta | 0:6e47fe8d8f5c | 243 | |
ohneta | 0:6e47fe8d8f5c | 244 | // setup advertising |
ohneta | 0:6e47fe8d8f5c | 245 | { |
ohneta | 0:6e47fe8d8f5c | 246 | // BLE only, no classic BT |
ohneta | 0:6e47fe8d8f5c | 247 | ble.accumulateAdvertisingPayload( GapAdvertisingData::BREDR_NOT_SUPPORTED | |
ohneta | 0:6e47fe8d8f5c | 248 | GapAdvertisingData::LE_GENERAL_DISCOVERABLE ); |
ohneta | 0:6e47fe8d8f5c | 249 | // advertising type |
ohneta | 0:6e47fe8d8f5c | 250 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); |
ohneta | 0:6e47fe8d8f5c | 251 | // add name |
ohneta | 0:6e47fe8d8f5c | 252 | ble.accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LOCAL_NAME, |
ohneta | 0:6e47fe8d8f5c | 253 | (uint8_t *)DEVICE_NAME, |
ohneta | 0:6e47fe8d8f5c | 254 | sizeof(DEVICE_NAME) ); |
ohneta | 0:6e47fe8d8f5c | 255 | // UUID's broadcast in advertising packet |
ohneta | 0:6e47fe8d8f5c | 256 | ble.accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, |
ohneta | 0:6e47fe8d8f5c | 257 | (uint8_t *)uuid16_list, |
ohneta | 0:6e47fe8d8f5c | 258 | sizeof(uuid16_list) ); |
ohneta | 0:6e47fe8d8f5c | 259 | ble.setAdvertisingInterval(100); // interval is 100ms. |
ohneta | 0:6e47fe8d8f5c | 260 | // add my service |
ohneta | 0:6e47fe8d8f5c | 261 | ble.addService(customService); |
ohneta | 0:6e47fe8d8f5c | 262 | |
ohneta | 0:6e47fe8d8f5c | 263 | // start advertising |
ohneta | 0:6e47fe8d8f5c | 264 | ble.startAdvertising(); |
ohneta | 0:6e47fe8d8f5c | 265 | } |
ohneta | 0:6e47fe8d8f5c | 266 | |
ohneta | 0:6e47fe8d8f5c | 267 | |
ohneta | 0:6e47fe8d8f5c | 268 | |
ohneta | 0:6e47fe8d8f5c | 269 | while (true) { |
ohneta | 0:6e47fe8d8f5c | 270 | ble.waitForEvent(); |
ohneta | 0:6e47fe8d8f5c | 271 | #if 0 |
ohneta | 0:6e47fe8d8f5c | 272 | { |
ohneta | 0:6e47fe8d8f5c | 273 | led2 = 0; wait(0.1); |
ohneta | 0:6e47fe8d8f5c | 274 | led2 = 1; wait(0.2); |
ohneta | 0:6e47fe8d8f5c | 275 | led2 = 0; wait(0.1); |
ohneta | 0:6e47fe8d8f5c | 276 | led2 = 1; wait(0.2); |
ohneta | 0:6e47fe8d8f5c | 277 | led2 = 0; wait(0.1); |
ohneta | 0:6e47fe8d8f5c | 278 | led2 = 1; wait(0.2); |
ohneta | 0:6e47fe8d8f5c | 279 | led2 = 0; wait(0.1); |
ohneta | 0:6e47fe8d8f5c | 280 | led2 = 1; wait(0.2); |
ohneta | 0:6e47fe8d8f5c | 281 | led2 = 0; |
ohneta | 0:6e47fe8d8f5c | 282 | } |
ohneta | 0:6e47fe8d8f5c | 283 | #endif |
ohneta | 0:6e47fe8d8f5c | 284 | led2 = !led2; |
ohneta | 0:6e47fe8d8f5c | 285 | } |
ohneta | 0:6e47fe8d8f5c | 286 | } |