Heart Rate program only for TYBLE16
Please refer flowing link.
/users/kenjiArai/notebook/tyble16-module-will-become-a-mbed-family--mbedliza/
main.cpp
- Committer:
- kenjiArai
- Date:
- 2018-02-25
- Revision:
- 1:ba83bf091a45
- Parent:
- 0:81403b36fabe
File content as of revision 1:ba83bf091a45:
/* mbed Microcontroller Library * Copyright (c) 2006-2015 ARM Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* Modified by Kenji Arai, Feburary 25th, 2018 */ #include "mbed.h" #include "TYBLE16_BASE.h" #include "ble/BLE.h" #include "ble/services/HeartRateService.h" #include "ble/services/BatteryService.h" #include "ble/services/DeviceInformationService.h" DigitalOut led1(P0_5); Serial pc(P0_1, P0_3); const static char DEVICE_NAME[] = "TYBLE16"; static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE, GattService::UUID_DEVICE_INFORMATION_SERVICE}; static volatile bool triggerSensorPolling = false; uint8_t hrmCounter = 100; // init HRM to 100bps HeartRateService *hrService; DeviceInformationService *deviceInfo; void disconnectionCallback( const Gap::DisconnectionCallbackParams_t *params ) { // restart advertising BLE::Instance(BLE::DEFAULT_INSTANCE).gap().startAdvertising(); } void periodicCallback(void) { led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ /* Note that the periodicCallback() executes in interrupt context, * so it is safer to do * heavy-weight sensor polling from the main thread. */ triggerSensorPolling = true; } void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) { BLE &ble = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { return; } ble.gap().onDisconnection(disconnectionCallback); /* Setup primary service. */ hrService = new HeartRateService( ble, hrmCounter, HeartRateService::LOCATION_FINGER ); /* Setup auxiliary service. */ deviceInfo = new DeviceInformationService( ble, "ARM", "Model1", "SN1", "hw-rev1", "fw-rev1", "soft-rev1" ); /* Setup advertising. */ ble.gap().accumulateAdvertisingPayload( GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE ); ble.gap().accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list) ); ble.gap().accumulateAdvertisingPayload( GapAdvertisingData::GENERIC_HEART_RATE_SENSOR ); ble.gap().accumulateAdvertisingPayload( GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME) ); ble.gap().setAdvertisingType( GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED ); ble.gap().setAdvertisingInterval(1000); /* 1000ms */ ble.gap().startAdvertising(); } int main(void) { led1 = 1; Ticker ticker; ticker.attach(periodicCallback, 1); // blink LED every second BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE); ble.init(bleInitComplete); /* SpinWait for initialization to complete. This is necessary * because the BLE object is used in the main loop below. */ while (ble.hasInitialized() == false) { /* spin loop */ } // Check TYBLE-16 configuration cpu_sys(); if (compile_condition() == false) { pc.printf("This is wrong configuration!!\r\n"); while(true) { led1 = !led1; wait(0.2); } } // // infinite loop while (true) { // check for trigger from periodicCallback() if (triggerSensorPolling && ble.getGapState().connected) { triggerSensorPolling = false; // Do blocking calls or whatever is necessary for sensor polling. // In our case, we simply update the HRM measurement. hrmCounter++; if (hrmCounter == 175) { // 100 <= HRM bps <=175 hrmCounter = 100; } hrService->updateHeartRate(hrmCounter); } else { ble.waitForEvent(); // low power wait for event } } }