Default_Castum_AppFOTA4_Working
Dependencies: mbed BLE_API nRF51822
main.cpp@6:85f68f27170c, 2015-02-20 (annotated)
- Committer:
- prussell
- Date:
- Fri Feb 20 00:41:18 2015 +0000
- Revision:
- 6:85f68f27170c
- Parent:
- 5:ac98ff227ad7
- Child:
- 7:8459cadf45fc
Added option to generate up to 3 PWM signals at a time on Atomwear debug header to confirm pinout (Schematic vs user guide)
; Atomwear Debug Header has: p13,p14,p15 p0,p2,p3, p12,p11,Batt, SWIO,SWCK,Gnd.
; All pX work with PwmOut (Max 3 at a time)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
prussell | 3:3651f1a58d9e | 1 | //To load over FOTA set platform to "Nordic nRF51822 FOTA" and use DFU feature of App "nRF Master Control Panel" (Hex file <100K) |
prussell | 4:3a065a4e3ca6 | 2 | //To use normal mbed loading set platform to "Nordic nRF51822" and copy to mbed drive (Hex File >250KB) |
prussell | 3:3651f1a58d9e | 3 | |
prussell | 0:aa7314f3fa84 | 4 | /* mbed Microcontroller Library |
prussell | 4:3a065a4e3ca6 | 5 | * Copyright (c) 2006-2015 Paul Russell |
prussell | 0:aa7314f3fa84 | 6 | * |
prussell | 0:aa7314f3fa84 | 7 | * Licensed under the Apache License, Version 2.0 (the "License"); |
prussell | 0:aa7314f3fa84 | 8 | * you may not use this file except in compliance with the License. |
prussell | 0:aa7314f3fa84 | 9 | * You may obtain a copy of the License at |
prussell | 0:aa7314f3fa84 | 10 | * |
prussell | 0:aa7314f3fa84 | 11 | * http://www.apache.org/licenses/LICENSE-2.0 |
prussell | 0:aa7314f3fa84 | 12 | * |
prussell | 0:aa7314f3fa84 | 13 | * Unless required by applicable law or agreed to in writing, software |
prussell | 0:aa7314f3fa84 | 14 | * distributed under the License is distributed on an "AS IS" BASIS, |
prussell | 0:aa7314f3fa84 | 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
prussell | 0:aa7314f3fa84 | 16 | * See the License for the specific language governing permissions and |
prussell | 0:aa7314f3fa84 | 17 | * limitations under the License. |
prussell | 0:aa7314f3fa84 | 18 | */ |
prussell | 0:aa7314f3fa84 | 19 | |
prussell | 3:3651f1a58d9e | 20 | //============================== |
prussell | 3:3651f1a58d9e | 21 | // Build Options for D_PCB |
prussell | 4:3a065a4e3ca6 | 22 | #define D_MKIT 1 // nRF51822-mkit |
prussell | 4:3a065a4e3ca6 | 23 | #define D_EK 2 // nRF51822-EK |
prussell | 4:3a065a4e3ca6 | 24 | #define D_BEACON 3 // nRF51822-Beacon |
prussell | 4:3a065a4e3ca6 | 25 | #define D_ATOMWEAR 4 // Atomwear |
prussell | 6:85f68f27170c | 26 | |
prussell | 3:3651f1a58d9e | 27 | //============================== |
prussell | 3:3651f1a58d9e | 28 | // Compile Options: |
prussell | 6:85f68f27170c | 29 | #define D_BLE_UART 1 // Include BLE UART functionality? |
prussell | 6:85f68f27170c | 30 | #define D_PING_SEC 1 // Ping Rate in Seconds |
prussell | 4:3a065a4e3ca6 | 31 | |
prussell | 4:3a065a4e3ca6 | 32 | #define D_PCB D_MKIT // Select target PCB |
prussell | 6:85f68f27170c | 33 | //#define D_MkitPROBING 1 // Option: Drive pwm on select header signals to aid probing with scope, comment out this line to disable |
prussell | 4:3a065a4e3ca6 | 34 | //#define D_PCB D_EK // Select target PCB |
prussell | 4:3a065a4e3ca6 | 35 | //#define D_PCB D_BEACON // Select target PCB |
prussell | 4:3a065a4e3ca6 | 36 | //#define D_PCB D_ATOMWEAR // Select target PCB |
prussell | 6:85f68f27170c | 37 | //#define D_AtomPROBING 1 // Option: Drive pwm on select Debug Header signals to support probing with scope (PWM 10%~80%), comment out this line to disable **Disconnect all modules except Main/Debug/Battery** |
prussell | 3:3651f1a58d9e | 38 | |
prussell | 3:3651f1a58d9e | 39 | //============================== |
prussell | 0:aa7314f3fa84 | 40 | #include "mbed.h" |
prussell | 0:aa7314f3fa84 | 41 | #include "BLEDevice.h" |
prussell | 0:aa7314f3fa84 | 42 | |
prussell | 3:3651f1a58d9e | 43 | //============================== Process PCB Options: |
prussell | 3:3651f1a58d9e | 44 | #if D_PCB==D_MKIT |
prussell | 6:85f68f27170c | 45 | const char *pcDeviceName = "FOTA4r6m"; |
prussell | 6:85f68f27170c | 46 | const char *pcPingBLE = "m4\n"; // May need "\n" to push BLE Tx |
prussell | 6:85f68f27170c | 47 | const char *pcPingUART = "u4\n"; |
prussell | 4:3a065a4e3ca6 | 48 | |
prussell | 4:3a065a4e3ca6 | 49 | #define DEBUG(...) { printf(__VA_ARGS__); } //UART: p0.08~p0.11, Debug OK over USB Serial |
prussell | 4:3a065a4e3ca6 | 50 | DigitalIn bB1in(BUTTON1); //p0.16 =Button1 |
prussell | 4:3a065a4e3ca6 | 51 | DigitalIn bB2in(BUTTON2); //p0.17 =Button2 |
prussell | 4:3a065a4e3ca6 | 52 | InterruptIn B1int(BUTTON1); //p0.16 =Button1 |
prussell | 4:3a065a4e3ca6 | 53 | InterruptIn B2int(BUTTON2); //p0.17 =Button2 |
prussell | 4:3a065a4e3ca6 | 54 | DigitalOut bL1out(LED1); //p0.18 =LED1 |
prussell | 4:3a065a4e3ca6 | 55 | DigitalOut bL2out(LED2); //p0.19 =LED2 |
prussell | 4:3a065a4e3ca6 | 56 | //PwmOut fL1pwm(LED1); float fL1level = 0.1;//p0.18 =LED1, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 57 | //PwmOut fL2pwm(LED2); float fL2level = 0.1;//p0.19 =LED2, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 58 | //AnalogIn adcA(p1); //p0.01 =AIN2 |
prussell | 4:3a065a4e3ca6 | 59 | //AnalogIn adcB(p2); //p0.02 =AIN3 |
prussell | 4:3a065a4e3ca6 | 60 | |
prussell | 4:3a065a4e3ca6 | 61 | #define D_0_LED_TICKER { bL1out=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button) |
prussell | 4:3a065a4e3ca6 | 62 | #define D_1_LED_BUTTON { bL1out = !bB1in;} // LED Follows !Button |
prussell | 4:3a065a4e3ca6 | 63 | #define D_2_LED_BUTTON { bL2out = !bB2in;} // LED Follows !Button |
prussell | 4:3a065a4e3ca6 | 64 | #define D_OPERATION_LED "mkit: LED1=Ticker+Button1, LED2=Button2" |
prussell | 4:3a065a4e3ca6 | 65 | |
prussell | 3:3651f1a58d9e | 66 | #elif D_PCB==D_EK |
prussell | 6:85f68f27170c | 67 | const char *pcDeviceName = "FOTA4r6e"; |
prussell | 4:3a065a4e3ca6 | 68 | const char *pcPingBLE = "e4\n"; // May need "\n" to push BLE Tx |
prussell | 4:3a065a4e3ca6 | 69 | |
prussell | 4:3a065a4e3ca6 | 70 | #define DEBUG(...) {} //Serial Debug not connected |
prussell | 4:3a065a4e3ca6 | 71 | DigitalIn bB1in(BUTTON1); //p0.16 =Button0 |
prussell | 4:3a065a4e3ca6 | 72 | DigitalIn bB2in(BUTTON2); //p0.17 =Button1 |
prussell | 4:3a065a4e3ca6 | 73 | InterruptIn B1int(BUTTON1); //p0.16 =Button0 |
prussell | 4:3a065a4e3ca6 | 74 | InterruptIn B2int(BUTTON2); //p0.17 =Button1 |
prussell | 4:3a065a4e3ca6 | 75 | DigitalOut bL1out(LED1); //p0.18 =LED0 |
prussell | 4:3a065a4e3ca6 | 76 | DigitalOut bL2out(LED2); //p0.19 =LED1 |
prussell | 4:3a065a4e3ca6 | 77 | //PwmOut fL1pwm(LED1); float fL1level = 0.1;//p0.18 =LED0, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 78 | //PwmOut fL2pwm(LED2); float fL2level = 0.1;//p0.19 =LED1, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 79 | //AnalogIn adcA(p1); //p0.01 =AIN2 |
prussell | 4:3a065a4e3ca6 | 80 | //AnalogIn adcB(p2); //p0.02 =AIN3 |
prussell | 4:3a065a4e3ca6 | 81 | |
prussell | 4:3a065a4e3ca6 | 82 | #define D_0_LED_TICKER { bL1out=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button) |
prussell | 4:3a065a4e3ca6 | 83 | #define D_1_LED_BUTTON { bL1out = !bB1in;} // LED Follows !Button |
prussell | 4:3a065a4e3ca6 | 84 | #define D_2_LED_BUTTON { bL2out = !bB2in;} // LED Follows !Button |
prussell | 4:3a065a4e3ca6 | 85 | #define D_OPERATION_LED "EK: LED0=Ticker+Button0, LED1=Button1" |
prussell | 4:3a065a4e3ca6 | 86 | |
prussell | 4:3a065a4e3ca6 | 87 | #elif D_PCB==D_BEACON |
prussell | 6:85f68f27170c | 88 | const char *pcDeviceName = "FOTA4r6b"; |
prussell | 4:3a065a4e3ca6 | 89 | const char *pcPingBLE = "b4\n"; // May need "\n" to push BLE Tx |
prussell | 4:3a065a4e3ca6 | 90 | |
prussell | 4:3a065a4e3ca6 | 91 | #define DEBUG(...) {} //Serial Debug not connected |
prussell | 4:3a065a4e3ca6 | 92 | DigitalIn bB1in(p8); //p0.08 =SW1 |
prussell | 4:3a065a4e3ca6 | 93 | DigitalIn bB2in(p18); //p0.18 =SW2 |
prussell | 4:3a065a4e3ca6 | 94 | InterruptIn B1int(p8); //p0.08 =SW1 |
prussell | 4:3a065a4e3ca6 | 95 | InterruptIn B2int(p18); //p0.18 =SW2 |
prussell | 4:3a065a4e3ca6 | 96 | DigitalOut bLRout(p16); //p0.16 =LEDR |
prussell | 4:3a065a4e3ca6 | 97 | DigitalOut bLGout(p12); //p0.12 =LEDG |
prussell | 4:3a065a4e3ca6 | 98 | DigitalOut bLBout(p15); //p0.15 =LEDB |
prussell | 4:3a065a4e3ca6 | 99 | //PwmOut fLRpwm(p16); float fLRlevel = 0.1; //p0.16 =LEDR, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 100 | //PwmOut fLGpwm(p12); float fLGlevel = 0.1; //p0.12 =LEDG, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 101 | //PwmOut fLBpwm(p15); float fLBlevel = 0.1; //p0.15 =LEDB, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 102 | //AnalogIn adcA(p1); //p0.01 =AIN2 |
prussell | 4:3a065a4e3ca6 | 103 | //AnalogIn adcB(p2); //p0.02 =AIN3 |
prussell | 4:3a065a4e3ca6 | 104 | |
prussell | 4:3a065a4e3ca6 | 105 | #define D_0_LED_TICKER { bLRout=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button) |
prussell | 4:3a065a4e3ca6 | 106 | #define D_1_LED_BUTTON { bLGout = bB1in;} // LED Follows Button |
prussell | 4:3a065a4e3ca6 | 107 | #define D_2_LED_BUTTON { bLBout = bB2in;} // LED Follows Button |
prussell | 5:ac98ff227ad7 | 108 | #define D_OPERATION_LED "Beacon: Red=Ticker, Green=SW1, Blue=SW2" |
prussell | 4:3a065a4e3ca6 | 109 | |
prussell | 4:3a065a4e3ca6 | 110 | #elif D_PCB==D_ATOMWEAR // USBSerial=None, ButtonLED=atomwear, LEDx=Buttonx, LEDw=Buttony|Ticker |
prussell | 6:85f68f27170c | 111 | const char *pcDeviceName = "FOTA4r6a"; |
prussell | 4:3a065a4e3ca6 | 112 | const char *pcPingBLE = "a\n"; // May need "\n" to push BLE Tx |
prussell | 4:3a065a4e3ca6 | 113 | |
prussell | 4:3a065a4e3ca6 | 114 | #define DEBUG(...) {} //Serial Debug not connected |
prussell | 4:3a065a4e3ca6 | 115 | DigitalIn bB1in(p29); //p0.29 =S1 |
prussell | 4:3a065a4e3ca6 | 116 | InterruptIn B1int(p29); //p0.29 =S1 |
prussell | 4:3a065a4e3ca6 | 117 | DigitalOut bLBout(p17); //p0.17 =LEDB |
prussell | 4:3a065a4e3ca6 | 118 | DigitalOut bLWout(p18); //p0.18 =LEDW |
prussell | 4:3a065a4e3ca6 | 119 | //PwmOut fLBpwm(p17); float fLBlevel = 0.1; //p0.17 =LEDB, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 120 | //PwmOut fLWpwm(p18); float fLWlevel = 0.1; //p0.18 =LEDW, BrightnessFloat(0.0~1.0) |
prussell | 4:3a065a4e3ca6 | 121 | //AnalogIn adcA(p1); //p0.01 =AIN2 |
prussell | 4:3a065a4e3ca6 | 122 | //AnalogIn adcB(p2); //p0.02 =AIN3 |
prussell | 6:85f68f27170c | 123 | |
prussell | 4:3a065a4e3ca6 | 124 | #define D_0_LED_TICKER { bLBout=((uTicker1++)&0x01);} // LED Follows Ticker (May also follow a button) |
prussell | 4:3a065a4e3ca6 | 125 | #define D_1_LED_BUTTON { bLWout = bB1in;} // LED Follows Button |
prussell | 4:3a065a4e3ca6 | 126 | #define D_OPERATION_LED "Atomwear: Blue=Ticker, White=S1" |
prussell | 4:3a065a4e3ca6 | 127 | |
prussell | 3:3651f1a58d9e | 128 | #else |
prussell | 3:3651f1a58d9e | 129 | #error Unknown PCB |
prussell | 3:3651f1a58d9e | 130 | #endif |
prussell | 0:aa7314f3fa84 | 131 | |
prussell | 4:3a065a4e3ca6 | 132 | //============================== BLE |
prussell | 0:aa7314f3fa84 | 133 | BLEDevice ble; |
prussell | 4:3a065a4e3ca6 | 134 | #if D_BLE_UART==1 |
prussell | 4:3a065a4e3ca6 | 135 | #include "UARTService.h" |
prussell | 4:3a065a4e3ca6 | 136 | UARTService *uartServicePtr; |
prussell | 4:3a065a4e3ca6 | 137 | #define D_OPERATION_BLE ", BLE-UART=[Echo typing, and ping on Ticker]\n" |
prussell | 4:3a065a4e3ca6 | 138 | #else |
prussell | 4:3a065a4e3ca6 | 139 | #define D_OPERATION_BLE ", BLE-UART not enabled\n" |
prussell | 4:3a065a4e3ca6 | 140 | #endif |
prussell | 0:aa7314f3fa84 | 141 | |
prussell | 4:3a065a4e3ca6 | 142 | #include "DeviceInformationService.h" |
prussell | 4:3a065a4e3ca6 | 143 | //? #include "DFUService.h" //Required if "DFUService dfu(ble)" is explicitely declared |
prussell | 0:aa7314f3fa84 | 144 | |
prussell | 3:3651f1a58d9e | 145 | //============================== Handle Button Activity |
prussell | 3:3651f1a58d9e | 146 | void onButton(void) |
prussell | 3:3651f1a58d9e | 147 | { // Handle any button changes |
prussell | 3:3651f1a58d9e | 148 | DEBUG("B\n"); |
prussell | 4:3a065a4e3ca6 | 149 | |
prussell | 4:3a065a4e3ca6 | 150 | D_1_LED_BUTTON; // Update LED from Button |
prussell | 4:3a065a4e3ca6 | 151 | #ifdef D_2_LED_BUTTON |
prussell | 4:3a065a4e3ca6 | 152 | D_2_LED_BUTTON; // Update LED from Button |
prussell | 3:3651f1a58d9e | 153 | #endif |
prussell | 3:3651f1a58d9e | 154 | }; |
prussell | 3:3651f1a58d9e | 155 | |
prussell | 3:3651f1a58d9e | 156 | //============================== Handle Ticker1 |
prussell | 3:3651f1a58d9e | 157 | uint8_t uTicker1; |
prussell | 3:3651f1a58d9e | 158 | void onTicker1(void) |
prussell | 0:aa7314f3fa84 | 159 | { |
prussell | 3:3651f1a58d9e | 160 | DEBUG(pcPingUART); |
prussell | 4:3a065a4e3ca6 | 161 | D_0_LED_TICKER; // Update LED from Ticker |
prussell | 0:aa7314f3fa84 | 162 | |
prussell | 4:3a065a4e3ca6 | 163 | #if D_BLE_UART==1 |
prussell | 3:3651f1a58d9e | 164 | if (uartServicePtr != NULL) { |
prussell | 3:3651f1a58d9e | 165 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), (const uint8_t *)pcPingBLE, strlen(pcPingBLE)); // BLE UART = Ping Message (Max 20char) |
prussell | 3:3651f1a58d9e | 166 | } |
prussell | 4:3a065a4e3ca6 | 167 | #endif |
prussell | 0:aa7314f3fa84 | 168 | } |
prussell | 0:aa7314f3fa84 | 169 | |
prussell | 3:3651f1a58d9e | 170 | //============================== Handle BLE: Disconnect, Written... |
prussell | 3:3651f1a58d9e | 171 | void onDisconnect(Gap::Handle_t tHandle, Gap::DisconnectionReason_t eReason) |
prussell | 0:aa7314f3fa84 | 172 | { |
prussell | 3:3651f1a58d9e | 173 | // When BLE Disconnected mkit may output over long DEBUG over USB Serial (Careful of IO clash on other PCBs) |
prussell | 3:3651f1a58d9e | 174 | DEBUG("\nBLEi: Callback_BLE_Disconnect(Handle:%d, eReason:0x%02x=", tHandle, eReason );//PR: Occurs properly when click disconnect in App nRFToolbox:HRM |
prussell | 3:3651f1a58d9e | 175 | switch(eReason) { |
prussell | 3:3651f1a58d9e | 176 | case Gap::REMOTE_USER_TERMINATED_CONNECTION: DEBUG("REMOTE_USER_TERMINATED_CONNECTION"); break; |
prussell | 3:3651f1a58d9e | 177 | case Gap::CONN_INTERVAL_UNACCEPTABLE: DEBUG("CONN_INTERVAL_UNACCEPTABLE"); break; |
prussell | 3:3651f1a58d9e | 178 | case Gap::LOCAL_HOST_TERMINATED_CONNECTION: DEBUG("LOCAL_HOST_TERMINATED_CONNECTION"); break; |
prussell | 3:3651f1a58d9e | 179 | default: DEBUG("UNKNOWN"); break; |
prussell | 3:3651f1a58d9e | 180 | } |
prussell | 3:3651f1a58d9e | 181 | DEBUG("), Restarting Advertising\n", tHandle, eReason );//PR: Occurs properly when click disconnect in App nRFToolbox:HRM |
prussell | 5:ac98ff227ad7 | 182 | ble.startAdvertising(); // restart advertising //20150130: Thanks to Wayne Keenan (waynek) for spotting this missing line!! |
prussell | 0:aa7314f3fa84 | 183 | } |
prussell | 0:aa7314f3fa84 | 184 | |
prussell | 0:aa7314f3fa84 | 185 | void onDataWritten(const GattCharacteristicWriteCBParams *params) |
prussell | 0:aa7314f3fa84 | 186 | { |
prussell | 4:3a065a4e3ca6 | 187 | #if D_BLE_UART==1 |
prussell | 0:aa7314f3fa84 | 188 | if ((uartServicePtr != NULL) && (params->charHandle == uartServicePtr->getTXCharacteristicHandle())) { |
prussell | 0:aa7314f3fa84 | 189 | uint16_t bytesRead = params->len; |
prussell | 0:aa7314f3fa84 | 190 | DEBUG("BLE-UART Echo Rx[%u]=[%*s]\n", bytesRead, params->len, params->data); |
prussell | 0:aa7314f3fa84 | 191 | ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, bytesRead); |
prussell | 0:aa7314f3fa84 | 192 | } else { |
prussell | 3:3651f1a58d9e | 193 | DEBUG("Unexpected Characteristic Write, Handle:%d\n", params->charHandle); |
prussell | 0:aa7314f3fa84 | 194 | } |
prussell | 4:3a065a4e3ca6 | 195 | #else |
prussell | 4:3a065a4e3ca6 | 196 | DEBUG("Unexpected Characteristic Write, Handle:%d\n", params->charHandle); |
prussell | 4:3a065a4e3ca6 | 197 | #endif |
prussell | 0:aa7314f3fa84 | 198 | } |
prussell | 0:aa7314f3fa84 | 199 | |
prussell | 3:3651f1a58d9e | 200 | //============================== |
prussell | 0:aa7314f3fa84 | 201 | int main(void) |
prussell | 0:aa7314f3fa84 | 202 | { |
prussell | 3:3651f1a58d9e | 203 | Ticker ticker1; |
prussell | 3:3651f1a58d9e | 204 | ticker1.attach(onTicker1, D_PING_SEC); //Ping Rate |
prussell | 0:aa7314f3fa84 | 205 | |
prussell | 2:0931d94f42a2 | 206 | DEBUG("BLE Init %s\n", pcDeviceName); |
prussell | 5:ac98ff227ad7 | 207 | DEBUG("After FOTA loading any unused IO pins may hold previous state, initialize all pins or reset to clear\n"); |
prussell | 0:aa7314f3fa84 | 208 | ble.init(); |
prussell | 3:3651f1a58d9e | 209 | ble.onDisconnection(onDisconnect); |
prussell | 2:0931d94f42a2 | 210 | ble.onDataWritten(onDataWritten); |
prussell | 0:aa7314f3fa84 | 211 | |
prussell | 0:aa7314f3fa84 | 212 | ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); |
prussell | 0:aa7314f3fa84 | 213 | ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME, (const uint8_t *)pcDeviceName, strlen(pcDeviceName)); |
prussell | 0:aa7314f3fa84 | 214 | |
prussell | 0:aa7314f3fa84 | 215 | ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); /* needs to be connectable to allow use of DFUService */ |
prussell | 3:3651f1a58d9e | 216 | //ble.setAdvertisingInterval(1600); /* 1s; in multiples of 0.625ms. */ |
prussell | 3:3651f1a58d9e | 217 | ble.setAdvertisingInterval(Gap::MSEC_TO_ADVERTISEMENT_DURATION_UNITS(1000)); //PR: Advertise 1sec (1Hz) |
prussell | 0:aa7314f3fa84 | 218 | ble.startAdvertising(); |
prussell | 0:aa7314f3fa84 | 219 | |
prussell | 4:3a065a4e3ca6 | 220 | //DeviceInformationService deviceInfo(ble, "ARM", "Model1", "SN1000", "hw-rev1", "fw-rev1"); |
prussell | 4:3a065a4e3ca6 | 221 | DeviceInformationService deviceInfo(ble, "ARM", pcDeviceName, "SN1000", "hw-rev1", "fw-rev1"); |
prussell | 0:aa7314f3fa84 | 222 | |
prussell | 4:3a065a4e3ca6 | 223 | //Enable FOTA DFU |
prussell | 4:3a065a4e3ca6 | 224 | //? DFUService dfu(ble); // Included implicitely by ble.init() for FOTA platforms, but doing explicitly may be desired for some cases |
prussell | 0:aa7314f3fa84 | 225 | |
prussell | 4:3a065a4e3ca6 | 226 | #if D_BLE_UART==1 |
prussell | 4:3a065a4e3ca6 | 227 | UARTService uartService(ble); //Setup BLE UART |
prussell | 0:aa7314f3fa84 | 228 | uartServicePtr = &uartService; |
prussell | 4:3a065a4e3ca6 | 229 | #endif |
prussell | 3:3651f1a58d9e | 230 | |
prussell | 4:3a065a4e3ca6 | 231 | DEBUG(D_OPERATION_LED D_OPERATION_BLE); |
prussell | 4:3a065a4e3ca6 | 232 | B1int.fall(&onButton); B1int.rise(&onButton); // Button1 |
prussell | 4:3a065a4e3ca6 | 233 | #ifdef D_2_LED_BUTTON |
prussell | 4:3a065a4e3ca6 | 234 | B2int.fall(&onButton); B2int.rise(&onButton); // Button2 |
prussell | 4:3a065a4e3ca6 | 235 | #endif |
prussell | 6:85f68f27170c | 236 | |
prussell | 6:85f68f27170c | 237 | #if D_PCB==D_MKIT |
prussell | 6:85f68f27170c | 238 | #ifdef D_MkitPROBING |
prussell | 6:85f68f27170c | 239 | //**Warning:As of 20150219 nRF appears to have max 3 PwmOut channels, others don't output but compile OK. (Maybe see SoftPWM or FastPWM for more channels) |
prussell | 6:85f68f27170c | 240 | |
prussell | 6:85f68f27170c | 241 | //For IO Pinout check: PWM 10%~80% on Debug Header pins to allow probing verification: |
prussell | 6:85f68f27170c | 242 | // Signals by schematic (User guide has typos), arranged by header rows from PCB edge |
prussell | 6:85f68f27170c | 243 | // nRF51 PWM //mkit |
prussell | 6:85f68f27170c | 244 | PwmOut pwm_p30(p30); pwm_p30=0.1; //P6.7 |
prussell | 6:85f68f27170c | 245 | #endif |
prussell | 6:85f68f27170c | 246 | #endif |
prussell | 6:85f68f27170c | 247 | |
prussell | 6:85f68f27170c | 248 | #if D_PCB==D_ATOMWEAR |
prussell | 6:85f68f27170c | 249 | #ifdef D_AtomPROBING |
prussell | 6:85f68f27170c | 250 | //**Disconnect all modules except Main/Debug/Battery** |
prussell | 6:85f68f27170c | 251 | |
prussell | 6:85f68f27170c | 252 | //**Warning:As of 20150219 nRF appears to have max 3 PwmOut channels, others don't output but compile OK. (Maybe see SoftPWM or FastPWM for more channels) |
prussell | 6:85f68f27170c | 253 | |
prussell | 6:85f68f27170c | 254 | //For IO Pinout check: PWM 10%~80% on Debug Header pins to allow probing verification: |
prussell | 6:85f68f27170c | 255 | // Signals by schematic (User guide has typos), arranged by header rows from PCB edge |
prussell | 6:85f68f27170c | 256 | // nRF51 PWM // Schematic //Header Bus //Silkscreen |
prussell | 6:85f68f27170c | 257 | PwmOut pwm_p13(p13); pwm_p13=0.1;// SPI_SCK1 //P17.2 22 //8 |
prussell | 6:85f68f27170c | 258 | PwmOut pwm_p14(p14); pwm_p14=0.2;// SPI_MOSI1 //P17.4 23 //10 |
prussell | 6:85f68f27170c | 259 | PwmOut pwm_p15(p15); pwm_p15=0.3;// SPI_MISO1 //P17.6 24 //12 |
prussell | 6:85f68f27170c | 260 | |
prussell | 6:85f68f27170c | 261 | // PwmOut pwm_p0(p0); pwm_p0=0.4;// GPIO1 //P17.1 11 //7 |
prussell | 6:85f68f27170c | 262 | // PwmOut pwm_p2(p2); pwm_p2=0.5;// GPIO2 //P17.3 10 //9 |
prussell | 6:85f68f27170c | 263 | // PwmOut pwm_p3(p3); pwm_p3=0.6;// GPIO3 //P17.5 9 //11 |
prussell | 6:85f68f27170c | 264 | |
prussell | 6:85f68f27170c | 265 | // PwmOut pwm_p12(p12); pwm_p12=0.7;// UART_RX //P15.2 21 //2 |
prussell | 6:85f68f27170c | 266 | // PwmOut pwm_p11(p11); pwm_p11=0.8;// UART_TX //P15.4 20 //4 |
prussell | 6:85f68f27170c | 267 | // ---- // VCC Unreg //P15.6 13 //6 ==Unregulated Power from Battery (Regulator on nRF PCB) |
prussell | 6:85f68f27170c | 268 | |
prussell | 6:85f68f27170c | 269 | // SWDIO // SWDIO //P15.1 19 //1 |
prussell | 6:85f68f27170c | 270 | // SWCLK // SWDCLK //P15.3 18 //3 |
prussell | 6:85f68f27170c | 271 | // GND // GND //P15.5 15 //5 |
prussell | 6:85f68f27170c | 272 | #endif |
prussell | 6:85f68f27170c | 273 | #endif |
prussell | 6:85f68f27170c | 274 | |
prussell | 6:85f68f27170c | 275 | |
prussell | 6:85f68f27170c | 276 | for (;;) { |
prussell | 0:aa7314f3fa84 | 277 | ble.waitForEvent(); |
prussell | 3:3651f1a58d9e | 278 | } |
prussell | 0:aa7314f3fa84 | 279 | } |
prussell | 3:3651f1a58d9e | 280 | //========== end: main.cpp ========== |
prussell | 3:3651f1a58d9e | 281 |