You can control from iPhone and put some command. h=show commands help, v=show TY51822r3 VDD data, t=show chip temperature, q=you can make deep sleep condition.

Dependencies:   BLE_API mbed nRF51822 nRF51_Vdd nRF51_WakeUp nRF51_LowPwr

Fork of BLE_LoopbackUART by Bluetooth Low Energy

Please refer follows.
/users/kenjiArai/notebook/ty51822r3-current-consumption-using-nrf51_wakeup-l/#

Committer:
kenjiArai
Date:
Sat Jun 11 00:56:56 2016 +0000
Revision:
15:d7764da3f37c
Parent:
14:f9b4d659d717
Child:
16:c8f4e56fa239
added low-power library (nRF51_LowPwr) for reduce Idle current at opertationg condition

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
kenjiArai 14:f9b4d659d717 17 /*
kenjiArai 14:f9b4d659d717 18 * /////// Tested on Switch Science mbed TY51822r3 ///////
kenjiArai 14:f9b4d659d717 19 * Modified by Kenji Arai
kenjiArai 14:f9b4d659d717 20 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 14:f9b4d659d717 21 * http://mbed.org/users/kenjiArai/
kenjiArai 14:f9b4d659d717 22 *
kenjiArai 15:d7764da3f37c 23 * Started: March 7th, 2016
kenjiArai 15:d7764da3f37c 24 * Revised: June 11th, 2016
kenjiArai 14:f9b4d659d717 25 *
kenjiArai 14:f9b4d659d717 26 * Original program:
kenjiArai 14:f9b4d659d717 27 * BLE_LoopbackUART
kenjiArai 14:f9b4d659d717 28 * https://developer.mbed.org/teams/Bluetooth-Low-Energy/code/BLE_LoopbackUART/
kenjiArai 14:f9b4d659d717 29 * Tested Controller Device:
kenjiArai 14:f9b4d659d717 30 * iPhone6 nRF UART by Nordic
kenjiArai 14:f9b4d659d717 31 * https://itunes.apple.com/us/app/nrf-uart/id614594903?mt=8
kenjiArai 14:f9b4d659d717 32 *
kenjiArai 14:f9b4d659d717 33 */
yihui 0:e910d9bb040f 34
kenjiArai 14:f9b4d659d717 35 // Include ---------------------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 36 #include <string.h>
kenjiArai 14:f9b4d659d717 37 #include "mbed.h"
kenjiArai 14:f9b4d659d717 38 #include "BLE.h"
kenjiArai 14:f9b4d659d717 39 #include "UARTService.h"
kenjiArai 14:f9b4d659d717 40 #include "nRF51_Vdd.h"
kenjiArai 14:f9b4d659d717 41 #include "nRF51_WakeUp.h"
kenjiArai 15:d7764da3f37c 42 #include "nRF51_lowpwr.h"
yihui 0:e910d9bb040f 43
kenjiArai 14:f9b4d659d717 44 // Definition ------------------------------------------------------------------------------------
kenjiArai 15:d7764da3f37c 45 #if USE_DEVICE_STDIO_MESSAGES // See disable_cpu_functions.h
rgrover1 6:e0fc9072e853 46 #define DEBUG(...) { printf(__VA_ARGS__); }
yihui 0:e910d9bb040f 47 #else
kenjiArai 15:d7764da3f37c 48 #define DEBUG(...)
kenjiArai 15:d7764da3f37c 49 #endif
yihui 0:e910d9bb040f 50
kenjiArai 14:f9b4d659d717 51 #define HIGH_PWR 1
kenjiArai 14:f9b4d659d717 52 #define TXRX_BUF_LEN 22 // send & receive number = 20
kenjiArai 14:f9b4d659d717 53 #define PWR_RANG_NO 8
yihui 0:e910d9bb040f 54
kenjiArai 14:f9b4d659d717 55 enum TX_Content {
kenjiArai 14:f9b4d659d717 56 TX_VDD = 1,
kenjiArai 14:f9b4d659d717 57 TX_TEMP,
kenjiArai 14:f9b4d659d717 58 TX_PWR_UP,
kenjiArai 14:f9b4d659d717 59 TX_PWR_DWN,
kenjiArai 14:f9b4d659d717 60 TX_QUIT,
kenjiArai 14:f9b4d659d717 61 TX_HELP
kenjiArai 14:f9b4d659d717 62 };
yihui 0:e910d9bb040f 63
kenjiArai 14:f9b4d659d717 64 // Object ----------------------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 65 BLEDevice ble;
kenjiArai 14:f9b4d659d717 66 DigitalOut myled(LED2);
kenjiArai 14:f9b4d659d717 67 InterruptIn wake_up_sw(P0_1); // If you change P0_1, you also need to change PORT_OUTPUT.
kenjiArai 14:f9b4d659d717 68 nRF51_WakeUp wakeup(LED1, P0_0);
kenjiArai 15:d7764da3f37c 69 nRF51_Vdd vdd(3.0f, 2.2f, ONLY4VDD);
kenjiArai 14:f9b4d659d717 70 UARTService *uartServicePtr;
kenjiArai 14:f9b4d659d717 71 Ticker ticker;
kenjiArai 15:d7764da3f37c 72 #if USE_DEVICE_STDIO_MESSAGES
kenjiArai 14:f9b4d659d717 73 Serial pc(P0_4,P0_0);
kenjiArai 14:f9b4d659d717 74 #endif
kenjiArai 14:f9b4d659d717 75
kenjiArai 14:f9b4d659d717 76 // ROM / Constant data ---------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 77 const char *deviceName = "JH1PJL";
kenjiArai 14:f9b4d659d717 78 const uint8_t pwr_range[PWR_RANG_NO] =
kenjiArai 14:f9b4d659d717 79 {
kenjiArai 14:f9b4d659d717 80 RADIO_TXPOWER_TXPOWER_Neg30dBm,/*!< -30dBm. */
kenjiArai 14:f9b4d659d717 81 RADIO_TXPOWER_TXPOWER_Neg20dBm,/*!< -20dBm. */
kenjiArai 14:f9b4d659d717 82 RADIO_TXPOWER_TXPOWER_Neg16dBm,/*!< -16dBm. */
kenjiArai 14:f9b4d659d717 83 RADIO_TXPOWER_TXPOWER_Neg12dBm,/*!< -12dBm. */
kenjiArai 14:f9b4d659d717 84 RADIO_TXPOWER_TXPOWER_Neg8dBm, /*!< -8dBm. */
kenjiArai 14:f9b4d659d717 85 RADIO_TXPOWER_TXPOWER_Neg4dBm, /*!< -4dBm. */
kenjiArai 14:f9b4d659d717 86 RADIO_TXPOWER_TXPOWER_0dBm, /*!< 0dBm. */
kenjiArai 14:f9b4d659d717 87 RADIO_TXPOWER_TXPOWER_Pos4dBm, /*!< +4dBm. */
kenjiArai 14:f9b4d659d717 88 };
yihui 0:e910d9bb040f 89
kenjiArai 14:f9b4d659d717 90 // RAM -------------------------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 91 uint8_t tx_buf[TXRX_BUF_LEN];
kenjiArai 14:f9b4d659d717 92 uint8_t tx_len=0;
kenjiArai 14:f9b4d659d717 93 uint8_t time_data[TXRX_BUF_LEN];
kenjiArai 14:f9b4d659d717 94 uint8_t pwr_selection;
kenjiArai 14:f9b4d659d717 95 volatile bool trigger_transmit = false;
kenjiArai 14:f9b4d659d717 96 volatile bool trigger_receive = false;
kenjiArai 14:f9b4d659d717 97 volatile uint8_t command_continue = 0;
kenjiArai 14:f9b4d659d717 98 TX_Content transmit_contents;
kenjiArai 15:d7764da3f37c 99 uint8_t time_out_cntr = 30;
kenjiArai 14:f9b4d659d717 100 volatile bool time_out = false;
yihui 0:e910d9bb040f 101
kenjiArai 14:f9b4d659d717 102 // Function prototypes ---------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 103 // BLE
kenjiArai 14:f9b4d659d717 104 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params);
kenjiArai 14:f9b4d659d717 105 void onDataWritten(const GattWriteCallbackParams *params);
kenjiArai 14:f9b4d659d717 106 void periodicCallback(void);
kenjiArai 14:f9b4d659d717 107 // Application related
kenjiArai 14:f9b4d659d717 108 void action_tx_help(void);
kenjiArai 14:f9b4d659d717 109 void action_tx_vdd(void);
kenjiArai 14:f9b4d659d717 110 void action_tx_temperature(void);
kenjiArai 14:f9b4d659d717 111 void action_tx_pwrup(void);
kenjiArai 14:f9b4d659d717 112 void action_tx_pwrdwn(void);
kenjiArai 14:f9b4d659d717 113 void fill_space_n(uint8_t *bf, uint8_t n);
kenjiArai 14:f9b4d659d717 114 void Update_Values(void);
kenjiArai 14:f9b4d659d717 115 // Interrupt related
kenjiArai 14:f9b4d659d717 116 void action_tx_quit(void);
kenjiArai 14:f9b4d659d717 117 void interrupt_by_sw(void);
yihui 0:e910d9bb040f 118
kenjiArai 14:f9b4d659d717 119 //-------------------------------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 120 // Control Program
kenjiArai 14:f9b4d659d717 121 //-------------------------------------------------------------------------------------------------
kenjiArai 14:f9b4d659d717 122 int main(void){
kenjiArai 15:d7764da3f37c 123 // disable_cpu_functions(); // Disable unneeded CPU functions
kenjiArai 14:f9b4d659d717 124 myled = 1;
Rohit Grover 2:e060367b9024 125 ticker.attach(periodicCallback, 1);
kenjiArai 14:f9b4d659d717 126 // Interrupt by switch
kenjiArai 14:f9b4d659d717 127 wake_up_sw.fall(&interrupt_by_sw);
kenjiArai 14:f9b4d659d717 128 DEBUG("Initialising the nRF51822\r\n");
Rohit Grover 2:e060367b9024 129 ble.init();
kenjiArai 14:f9b4d659d717 130 //ble.setDeviceName((const uint8_t *)deviceName);
Rohit Grover 2:e060367b9024 131 ble.onDisconnection(disconnectionCallback);
Rohit Grover 2:e060367b9024 132 ble.onDataWritten(onDataWritten);
Rohit Grover 2:e060367b9024 133 /* setup advertising */
Rohit Grover 2:e060367b9024 134 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Rohit Grover 2:e060367b9024 135 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Rohit Grover 2:e060367b9024 136 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
kenjiArai 14:f9b4d659d717 137 (const uint8_t *)deviceName,
kenjiArai 14:f9b4d659d717 138 strlen(deviceName)
kenjiArai 14:f9b4d659d717 139 );
Rohit Grover 2:e060367b9024 140 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
kenjiArai 14:f9b4d659d717 141 (const uint8_t *)UARTServiceUUID_reversed,
kenjiArai 14:f9b4d659d717 142 sizeof(UARTServiceUUID_reversed)
kenjiArai 14:f9b4d659d717 143 );
kenjiArai 14:f9b4d659d717 144 // Power
kenjiArai 14:f9b4d659d717 145 #if HIGH_PWR
kenjiArai 14:f9b4d659d717 146 pwr_selection = 7;
kenjiArai 14:f9b4d659d717 147 #else
kenjiArai 14:f9b4d659d717 148 pwr_selection = 0;
kenjiArai 14:f9b4d659d717 149 #endif
kenjiArai 14:f9b4d659d717 150 ble.gap().setTxPower(pwr_range[pwr_selection]);
kenjiArai 14:f9b4d659d717 151 // Advertize Interval
rgrover1 12:33153cf38631 152 ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
kenjiArai 14:f9b4d659d717 153 // Start
Rohit Grover 2:e060367b9024 154 ble.startAdvertising();
rgrover1 6:e0fc9072e853 155 UARTService uartService(ble);
rgrover1 6:e0fc9072e853 156 uartServicePtr = &uartService;
kenjiArai 14:f9b4d659d717 157 while(true){
kenjiArai 14:f9b4d659d717 158 if (time_out){
kenjiArai 14:f9b4d659d717 159 myled = 0;
kenjiArai 15:d7764da3f37c 160 wakeup.set_and_wait(30);
kenjiArai 14:f9b4d659d717 161 while(true){ // never come here but just in case
kenjiArai 14:f9b4d659d717 162 deepsleep();
kenjiArai 14:f9b4d659d717 163 }
kenjiArai 14:f9b4d659d717 164 }
kenjiArai 14:f9b4d659d717 165 if (trigger_transmit){
kenjiArai 14:f9b4d659d717 166 trigger_transmit = false;
kenjiArai 14:f9b4d659d717 167 switch(transmit_contents){
kenjiArai 14:f9b4d659d717 168 case TX_VDD:
kenjiArai 14:f9b4d659d717 169 action_tx_vdd();
kenjiArai 14:f9b4d659d717 170 break;
kenjiArai 14:f9b4d659d717 171 case TX_TEMP:
kenjiArai 14:f9b4d659d717 172 action_tx_temperature();
kenjiArai 14:f9b4d659d717 173 break;
kenjiArai 14:f9b4d659d717 174 case TX_QUIT:
kenjiArai 14:f9b4d659d717 175 action_tx_quit();
kenjiArai 14:f9b4d659d717 176 break;
kenjiArai 14:f9b4d659d717 177 case TX_PWR_UP:
kenjiArai 14:f9b4d659d717 178 action_tx_pwrup();
kenjiArai 14:f9b4d659d717 179 break;
kenjiArai 14:f9b4d659d717 180 case TX_PWR_DWN:
kenjiArai 14:f9b4d659d717 181 action_tx_pwrdwn();
kenjiArai 14:f9b4d659d717 182 break;
kenjiArai 14:f9b4d659d717 183 case TX_HELP:
kenjiArai 14:f9b4d659d717 184 action_tx_help();
kenjiArai 14:f9b4d659d717 185 break;
kenjiArai 14:f9b4d659d717 186 default:
kenjiArai 14:f9b4d659d717 187 break;
kenjiArai 14:f9b4d659d717 188 }
kenjiArai 14:f9b4d659d717 189 } else {
kenjiArai 14:f9b4d659d717 190 myled = !myled;
kenjiArai 14:f9b4d659d717 191 ble.waitForEvent();
kenjiArai 14:f9b4d659d717 192 }
kenjiArai 14:f9b4d659d717 193 }
kenjiArai 14:f9b4d659d717 194 }
yihui 0:e910d9bb040f 195
kenjiArai 15:d7764da3f37c 196 void led_control(float t){
kenjiArai 15:d7764da3f37c 197 myled = !myled;
kenjiArai 15:d7764da3f37c 198 wait(t);
kenjiArai 15:d7764da3f37c 199 }
kenjiArai 15:d7764da3f37c 200
kenjiArai 14:f9b4d659d717 201 void onDataWritten(const GattWriteCallbackParams *params){
kenjiArai 14:f9b4d659d717 202 uint8_t buf[TXRX_BUF_LEN];
kenjiArai 14:f9b4d659d717 203 uint16_t bytesRead;
kenjiArai 14:f9b4d659d717 204
kenjiArai 14:f9b4d659d717 205 if ((uartServicePtr != NULL) &&
kenjiArai 14:f9b4d659d717 206 (params->handle == uartServicePtr->getTXCharacteristicHandle()))
kenjiArai 14:f9b4d659d717 207 {
kenjiArai 14:f9b4d659d717 208 strcpy((char *)buf, (const char *)params->data);
kenjiArai 14:f9b4d659d717 209 bytesRead = params->len;
kenjiArai 14:f9b4d659d717 210 switch (buf[0]){
kenjiArai 14:f9b4d659d717 211 case 'v':
kenjiArai 14:f9b4d659d717 212 trigger_transmit = true;
kenjiArai 14:f9b4d659d717 213 transmit_contents = TX_VDD;
kenjiArai 14:f9b4d659d717 214 break;
kenjiArai 14:f9b4d659d717 215 case 't':
kenjiArai 14:f9b4d659d717 216 trigger_transmit = true;
kenjiArai 14:f9b4d659d717 217 transmit_contents = TX_TEMP;
kenjiArai 14:f9b4d659d717 218 break;
kenjiArai 14:f9b4d659d717 219 case 'u':
kenjiArai 14:f9b4d659d717 220 trigger_transmit = true;
kenjiArai 14:f9b4d659d717 221 transmit_contents = TX_PWR_UP;
kenjiArai 14:f9b4d659d717 222 break;
kenjiArai 14:f9b4d659d717 223 case 'd':
kenjiArai 14:f9b4d659d717 224 trigger_transmit = true;
kenjiArai 14:f9b4d659d717 225 transmit_contents = TX_PWR_DWN;
kenjiArai 14:f9b4d659d717 226 break;
kenjiArai 14:f9b4d659d717 227 case 'q':
kenjiArai 14:f9b4d659d717 228 trigger_transmit = true;
kenjiArai 14:f9b4d659d717 229 transmit_contents = TX_QUIT;
kenjiArai 14:f9b4d659d717 230 break;
kenjiArai 14:f9b4d659d717 231 case 'h':
kenjiArai 14:f9b4d659d717 232 case '?':
kenjiArai 14:f9b4d659d717 233 trigger_transmit = true;
kenjiArai 14:f9b4d659d717 234 transmit_contents = TX_HELP;
kenjiArai 14:f9b4d659d717 235 break;
kenjiArai 14:f9b4d659d717 236 default:
kenjiArai 14:f9b4d659d717 237 break;
kenjiArai 14:f9b4d659d717 238 }
kenjiArai 14:f9b4d659d717 239 fill_space_n(buf, bytesRead);
kenjiArai 14:f9b4d659d717 240 DEBUG("RX_data\r\n");
kenjiArai 14:f9b4d659d717 241 DEBUG("Length: %d\r\n", bytesRead);
kenjiArai 14:f9b4d659d717 242 DEBUG("Data: ");
kenjiArai 14:f9b4d659d717 243 DEBUG("%s", buf);
kenjiArai 14:f9b4d659d717 244 DEBUG("\r\n");
yihui 0:e910d9bb040f 245 }
yihui 0:e910d9bb040f 246 }
kenjiArai 14:f9b4d659d717 247
kenjiArai 14:f9b4d659d717 248 void action_tx_help(){
kenjiArai 14:f9b4d659d717 249 // 12345678901234567890
kenjiArai 14:f9b4d659d717 250 sprintf((char *)tx_buf,"?:help by JH1PJL");
kenjiArai 14:f9b4d659d717 251 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 252 Update_Values();
kenjiArai 14:f9b4d659d717 253 wait(0.1);
kenjiArai 14:f9b4d659d717 254 // 12345678901234567890
kenjiArai 14:f9b4d659d717 255 sprintf((char *)tx_buf,"v:vdd");
kenjiArai 14:f9b4d659d717 256 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 257 Update_Values();
kenjiArai 14:f9b4d659d717 258 wait(0.1);
kenjiArai 14:f9b4d659d717 259 // 12345678901234567890
kenjiArai 14:f9b4d659d717 260 sprintf((char *)tx_buf,"t:temperature");
kenjiArai 14:f9b4d659d717 261 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 262 Update_Values();
kenjiArai 14:f9b4d659d717 263 wait(0.1);
kenjiArai 14:f9b4d659d717 264 // 12345678901234567890
kenjiArai 14:f9b4d659d717 265 sprintf((char *)tx_buf,"u:power up");
kenjiArai 14:f9b4d659d717 266 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 267 Update_Values();
kenjiArai 14:f9b4d659d717 268 wait(0.1);
kenjiArai 14:f9b4d659d717 269 // 12345678901234567890
kenjiArai 14:f9b4d659d717 270 sprintf((char *)tx_buf,"d:power down");
kenjiArai 14:f9b4d659d717 271 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 272 Update_Values();
kenjiArai 14:f9b4d659d717 273 wait(0.1);
kenjiArai 14:f9b4d659d717 274 // 12345678901234567890
kenjiArai 14:f9b4d659d717 275 sprintf((char *)tx_buf,"q(0x71):quit/sleep");
kenjiArai 14:f9b4d659d717 276 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 277 Update_Values();
kenjiArai 14:f9b4d659d717 278 }
kenjiArai 14:f9b4d659d717 279
kenjiArai 14:f9b4d659d717 280 void action_tx_pwrup(){
kenjiArai 14:f9b4d659d717 281 if (pwr_selection != 0){
kenjiArai 14:f9b4d659d717 282 --pwr_selection;
kenjiArai 14:f9b4d659d717 283 }
kenjiArai 14:f9b4d659d717 284 ble.gap().setTxPower(pwr_range[pwr_selection]);
kenjiArai 14:f9b4d659d717 285 sprintf((char *)tx_buf,"Pwr:%+ddBm", (4 - (pwr_selection * 4)));
kenjiArai 14:f9b4d659d717 286 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 287 Update_Values();
kenjiArai 14:f9b4d659d717 288 }
kenjiArai 14:f9b4d659d717 289
kenjiArai 14:f9b4d659d717 290 void action_tx_pwrdwn(){
kenjiArai 14:f9b4d659d717 291 if (pwr_selection != (PWR_RANG_NO - 1)){
kenjiArai 14:f9b4d659d717 292 ++pwr_selection;
kenjiArai 14:f9b4d659d717 293 }
kenjiArai 14:f9b4d659d717 294 ble.gap().setTxPower(pwr_range[pwr_selection]);
kenjiArai 14:f9b4d659d717 295 sprintf((char *)tx_buf,"Pwr:%+ddBm", (4 - (pwr_selection * 4)));
kenjiArai 14:f9b4d659d717 296 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 297 Update_Values();
kenjiArai 14:f9b4d659d717 298 }
kenjiArai 14:f9b4d659d717 299
kenjiArai 14:f9b4d659d717 300 void action_tx_vdd(){
kenjiArai 14:f9b4d659d717 301 sprintf((char *)tx_buf,"Vdd:%3.2fV", vdd.read_real_value());
kenjiArai 14:f9b4d659d717 302 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 303 Update_Values();
kenjiArai 14:f9b4d659d717 304 }
kenjiArai 14:f9b4d659d717 305
kenjiArai 14:f9b4d659d717 306 void action_tx_temperature(){
kenjiArai 14:f9b4d659d717 307 int32_t p_temp;
kenjiArai 14:f9b4d659d717 308 float temperature;
kenjiArai 14:f9b4d659d717 309
kenjiArai 14:f9b4d659d717 310 // Update a temperature (inside nRF51822 chip)
kenjiArai 14:f9b4d659d717 311 sd_temp_get(&p_temp);
kenjiArai 14:f9b4d659d717 312 // -16.0f is offset vale for chip die temp to ambient temp (depend on your board)
kenjiArai 14:f9b4d659d717 313 temperature = float(p_temp) / 4; // Original = float(p_temp)/4.0f - 16.0f;
kenjiArai 14:f9b4d659d717 314 sprintf((char *)tx_buf,"T:%+4.1fdC", temperature);
kenjiArai 14:f9b4d659d717 315 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 316 Update_Values();
kenjiArai 14:f9b4d659d717 317 }
kenjiArai 14:f9b4d659d717 318
kenjiArai 14:f9b4d659d717 319 void action_tx_quit(){
kenjiArai 14:f9b4d659d717 320 ticker.detach();
kenjiArai 14:f9b4d659d717 321 // 12345678901234567890
kenjiArai 14:f9b4d659d717 322 sprintf((char *)tx_buf,"Terminated the BLE");
kenjiArai 14:f9b4d659d717 323 tx_len = strlen((const char *)tx_buf);
kenjiArai 14:f9b4d659d717 324 Update_Values();
kenjiArai 14:f9b4d659d717 325 myled = 0;
kenjiArai 14:f9b4d659d717 326 wait(1.0);
kenjiArai 15:d7764da3f37c 327 wakeup.set_and_wait(30);
kenjiArai 14:f9b4d659d717 328 while(true){ // never come here but just in case
kenjiArai 14:f9b4d659d717 329 deepsleep();
kenjiArai 14:f9b4d659d717 330 }
kenjiArai 14:f9b4d659d717 331 }
kenjiArai 14:f9b4d659d717 332
kenjiArai 14:f9b4d659d717 333 void interrupt_by_sw(){ // Go to sleep
kenjiArai 14:f9b4d659d717 334 NVIC_SystemReset();
kenjiArai 14:f9b4d659d717 335 // Not come here (Just in case)
kenjiArai 14:f9b4d659d717 336 deepsleep();
kenjiArai 14:f9b4d659d717 337 }
kenjiArai 14:f9b4d659d717 338
kenjiArai 14:f9b4d659d717 339 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params){
kenjiArai 14:f9b4d659d717 340 DEBUG("Disconnected!\r\n");
kenjiArai 14:f9b4d659d717 341 DEBUG("Restarting the advertising process\r\n");
kenjiArai 14:f9b4d659d717 342 ble.startAdvertising();
kenjiArai 14:f9b4d659d717 343 }
kenjiArai 14:f9b4d659d717 344
kenjiArai 14:f9b4d659d717 345 void periodicCallback(void){
kenjiArai 14:f9b4d659d717 346 if (--time_out_cntr == 0){
kenjiArai 14:f9b4d659d717 347 time_out = true;
kenjiArai 14:f9b4d659d717 348 }
kenjiArai 14:f9b4d659d717 349 }
kenjiArai 14:f9b4d659d717 350
kenjiArai 14:f9b4d659d717 351 void fill_space_n(uint8_t *bf, uint8_t n){
kenjiArai 14:f9b4d659d717 352 bf += n;
kenjiArai 14:f9b4d659d717 353 for (uint8_t i = n; i <= 20; bf++, i++){
kenjiArai 14:f9b4d659d717 354 *bf = ' ';
kenjiArai 14:f9b4d659d717 355 }
kenjiArai 14:f9b4d659d717 356 *bf = '.';
kenjiArai 14:f9b4d659d717 357 *(bf + 1) = 0;
kenjiArai 14:f9b4d659d717 358 }
kenjiArai 14:f9b4d659d717 359
kenjiArai 14:f9b4d659d717 360 void Update_Values(void){
kenjiArai 15:d7764da3f37c 361 ble.updateCharacteristicValue(
kenjiArai 15:d7764da3f37c 362 uartServicePtr->getRXCharacteristicHandle(),
kenjiArai 15:d7764da3f37c 363 tx_buf,
kenjiArai 15:d7764da3f37c 364 tx_len
kenjiArai 15:d7764da3f37c 365 );
kenjiArai 14:f9b4d659d717 366 DEBUG("TX_data: %s\r\n", tx_buf);
kenjiArai 14:f9b4d659d717 367 DEBUG("Length: %d\r\n", tx_len);
kenjiArai 14:f9b4d659d717 368 tx_len = 0;
kenjiArai 14:f9b4d659d717 369 }