king color

Committer:
LAINO
Date:
Sun May 13 09:43:00 2018 +0000
Revision:
1:6f55e05bb7a0
Parent:
0:d18ffa2b40b3
king

Who changed what in which revision?

UserRevisionLine numberNew contents of line
LAINO 0:d18ffa2b40b3 1 #include <events/mbed_events.h>
LAINO 0:d18ffa2b40b3 2 #include <mbed.h>
LAINO 0:d18ffa2b40b3 3 #include "ble/BLE.h"
LAINO 0:d18ffa2b40b3 4 #include "ble/Gap.h"
LAINO 0:d18ffa2b40b3 5 #include "ble/services/BatteryService.h"
LAINO 1:6f55e05bb7a0 6 #include "LEDService.h"
LAINO 0:d18ffa2b40b3 7
LAINO 1:6f55e05bb7a0 8 DigitalOut led1(LED1, 1); //TODO LED 디바이스
LAINO 1:6f55e05bb7a0 9
LAINO 1:6f55e05bb7a0 10 const static char DEVICE_NAME[] = "Color Device";
LAINO 1:6f55e05bb7a0 11 static const uint16_t uuid16_list[] = {GattService::UUID_BATTERY_SERVICE}; //TODO 헤더 추가 바람!!!
LAINO 0:d18ffa2b40b3 12
LAINO 0:d18ffa2b40b3 13 static uint8_t batteryLevel = 50;
LAINO 0:d18ffa2b40b3 14 static BatteryService* batteryServicePtr;
LAINO 0:d18ffa2b40b3 15
LAINO 0:d18ffa2b40b3 16 static EventQueue eventQueue(/* event count */ 16 * EVENTS_EVENT_SIZE);
LAINO 0:d18ffa2b40b3 17
LAINO 1:6f55e05bb7a0 18 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) {
LAINO 0:d18ffa2b40b3 19 BLE::Instance().gap().startAdvertising();
LAINO 0:d18ffa2b40b3 20 }
LAINO 0:d18ffa2b40b3 21
LAINO 0:d18ffa2b40b3 22 void updateSensorValue() {
LAINO 1:6f55e05bb7a0 23 //TODO 실제 센서벨류 업데이트 해야하는 부분
LAINO 0:d18ffa2b40b3 24 batteryLevel++;
LAINO 0:d18ffa2b40b3 25 if (batteryLevel > 100) {
LAINO 0:d18ffa2b40b3 26 batteryLevel = 20;
LAINO 0:d18ffa2b40b3 27 }
LAINO 1:6f55e05bb7a0 28 thermometerServicePtr->updateTemperature(currentTemperature);
LAINO 0:d18ffa2b40b3 29 batteryServicePtr->updateBatteryLevel(batteryLevel);
LAINO 0:d18ffa2b40b3 30 }
LAINO 0:d18ffa2b40b3 31
LAINO 1:6f55e05bb7a0 32 void periodicCallback(void) {
LAINO 1:6f55e05bb7a0 33 //TODO 연결대기 메소드
LAINO 0:d18ffa2b40b3 34 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
LAINO 0:d18ffa2b40b3 35
LAINO 1:6f55e05bb7a0 36 if (BLE::Instance().gap().getState().connected) {
LAINO 0:d18ffa2b40b3 37 eventQueue.call(updateSensorValue);
LAINO 0:d18ffa2b40b3 38 }
LAINO 0:d18ffa2b40b3 39 }
LAINO 0:d18ffa2b40b3 40
LAINO 0:d18ffa2b40b3 41 /**
LAINO 0:d18ffa2b40b3 42 * This function is called when the ble initialization process has failled
LAINO 0:d18ffa2b40b3 43 */
LAINO 1:6f55e05bb7a0 44 void onBleInitError(BLE &ble, ble_error_t error) {
LAINO 1:6f55e05bb7a0 45 //TODO 초기화 에러
LAINO 0:d18ffa2b40b3 46 /* Initialization error handling should go here */
LAINO 0:d18ffa2b40b3 47 }
LAINO 0:d18ffa2b40b3 48
LAINO 0:d18ffa2b40b3 49 void printMacAddress()
LAINO 0:d18ffa2b40b3 50 {
LAINO 0:d18ffa2b40b3 51 /* Print out device MAC address to the console*/
LAINO 0:d18ffa2b40b3 52 Gap::AddressType_t addr_type;
LAINO 0:d18ffa2b40b3 53 Gap::Address_t address;
LAINO 0:d18ffa2b40b3 54 BLE::Instance().gap().getAddress(&addr_type, address);
LAINO 0:d18ffa2b40b3 55 printf("DEVICE MAC ADDRESS: ");
LAINO 0:d18ffa2b40b3 56 for (int i = 5; i >= 1; i--){
LAINO 0:d18ffa2b40b3 57 printf("%02x:", address[i]);
LAINO 0:d18ffa2b40b3 58 }
LAINO 0:d18ffa2b40b3 59 printf("%02x\r\n", address[0]);
LAINO 0:d18ffa2b40b3 60 }
LAINO 0:d18ffa2b40b3 61
LAINO 0:d18ffa2b40b3 62 /**
LAINO 0:d18ffa2b40b3 63 * Callback triggered when the ble initialization process has finished
LAINO 0:d18ffa2b40b3 64 */
LAINO 0:d18ffa2b40b3 65 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params)
LAINO 0:d18ffa2b40b3 66 {
LAINO 0:d18ffa2b40b3 67 BLE& ble = params->ble;
LAINO 0:d18ffa2b40b3 68 ble_error_t error = params->error;
LAINO 0:d18ffa2b40b3 69
LAINO 0:d18ffa2b40b3 70 if (error != BLE_ERROR_NONE) {
LAINO 0:d18ffa2b40b3 71 /* In case of error, forward the error handling to onBleInitError */
LAINO 0:d18ffa2b40b3 72 onBleInitError(ble, error);
LAINO 0:d18ffa2b40b3 73 return;
LAINO 0:d18ffa2b40b3 74 }
LAINO 0:d18ffa2b40b3 75
LAINO 0:d18ffa2b40b3 76 /* Ensure that it is the default instance of BLE */
LAINO 0:d18ffa2b40b3 77 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) {
LAINO 0:d18ffa2b40b3 78 return;
LAINO 0:d18ffa2b40b3 79 }
LAINO 0:d18ffa2b40b3 80
LAINO 0:d18ffa2b40b3 81 ble.gap().onDisconnection(disconnectionCallback);
LAINO 0:d18ffa2b40b3 82
LAINO 0:d18ffa2b40b3 83 /* Setup primary service */
LAINO 0:d18ffa2b40b3 84 batteryServicePtr = new BatteryService(ble, batteryLevel);
LAINO 0:d18ffa2b40b3 85
LAINO 0:d18ffa2b40b3 86 /* Setup advertising */
LAINO 0:d18ffa2b40b3 87 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
LAINO 0:d18ffa2b40b3 88 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *) uuid16_list, sizeof(uuid16_list));
LAINO 0:d18ffa2b40b3 89 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *) DEVICE_NAME, sizeof(DEVICE_NAME));
LAINO 0:d18ffa2b40b3 90 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
LAINO 0:d18ffa2b40b3 91 ble.gap().setAdvertisingInterval(1000); /* 1000ms */
LAINO 0:d18ffa2b40b3 92 ble.gap().startAdvertising();
LAINO 0:d18ffa2b40b3 93
LAINO 0:d18ffa2b40b3 94 printMacAddress();
LAINO 0:d18ffa2b40b3 95 }
LAINO 0:d18ffa2b40b3 96
LAINO 0:d18ffa2b40b3 97 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) {
LAINO 0:d18ffa2b40b3 98 BLE &ble = BLE::Instance();
LAINO 0:d18ffa2b40b3 99 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents));
LAINO 0:d18ffa2b40b3 100 }
LAINO 0:d18ffa2b40b3 101
LAINO 0:d18ffa2b40b3 102 int main()
LAINO 0:d18ffa2b40b3 103 {
LAINO 1:6f55e05bb7a0 104 eventQueue.call_every(500, periodicCallback);
LAINO 0:d18ffa2b40b3 105
LAINO 0:d18ffa2b40b3 106 BLE &ble = BLE::Instance();
LAINO 0:d18ffa2b40b3 107 ble.onEventsToProcess(scheduleBleEventsProcessing);
LAINO 0:d18ffa2b40b3 108 ble.init(bleInitComplete);
LAINO 0:d18ffa2b40b3 109
LAINO 0:d18ffa2b40b3 110 eventQueue.dispatch_forever();
LAINO 0:d18ffa2b40b3 111
LAINO 0:d18ffa2b40b3 112 return 0;
LAINO 0:d18ffa2b40b3 113 }