BLEUART

Fork of 0925BLEonly by LAXAN01

Committer:
Tanakacool
Date:
Fri Sep 29 07:31:44 2017 +0000
Revision:
2:0d84e066f294
Parent:
1:5d6887b45ff6
Child:
3:837f3a27c2f7
V2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Tanakacool 0:f6f2880bef7f 1 /* mbed Microcontroller Library
Tanakacool 0:f6f2880bef7f 2 * Copyright (c) 2006-2013 ARM Limited
Tanakacool 0:f6f2880bef7f 3 *
Tanakacool 0:f6f2880bef7f 4 * Licensed under the Apache License, Version 2.0 (the "License");
Tanakacool 0:f6f2880bef7f 5 * you may not use this file except in compliance with the License.
Tanakacool 0:f6f2880bef7f 6 * You may obtain a copy of the License at
Tanakacool 0:f6f2880bef7f 7 *
Tanakacool 0:f6f2880bef7f 8 * http://www.apache.org/licenses/LICENSE-2.0
Tanakacool 0:f6f2880bef7f 9 *
Tanakacool 0:f6f2880bef7f 10 * Unless required by applicable law or agreed to in writing, software
Tanakacool 0:f6f2880bef7f 11 * distributed under the License is distributed on an "AS IS" BASIS,
Tanakacool 0:f6f2880bef7f 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Tanakacool 0:f6f2880bef7f 13 * See the License for the specific language governing permissions and
Tanakacool 0:f6f2880bef7f 14 * limitations under the License.
Tanakacool 0:f6f2880bef7f 15 */
Tanakacool 0:f6f2880bef7f 16
Tanakacool 0:f6f2880bef7f 17 #include "mbed.h"
Tanakacool 0:f6f2880bef7f 18 #include "ble/BLE.h"
Tanakacool 0:f6f2880bef7f 19
Tanakacool 0:f6f2880bef7f 20 #include "ble/services/UARTService.h"
Tanakacool 0:f6f2880bef7f 21
Tanakacool 0:f6f2880bef7f 22 #define NEED_CONSOLE_OUTPUT 0 /* Set this if you need debug messages on the console;
Tanakacool 0:f6f2880bef7f 23 * it will have an impact on code-size and power consumption. */
Tanakacool 0:f6f2880bef7f 24
Tanakacool 0:f6f2880bef7f 25 #if NEED_CONSOLE_OUTPUT
Tanakacool 0:f6f2880bef7f 26 #define DEBUG(...) { printf(__VA_ARGS__); }
Tanakacool 0:f6f2880bef7f 27 #else
Tanakacool 0:f6f2880bef7f 28 #define DEBUG(...) /* nothing */
Tanakacool 0:f6f2880bef7f 29 #endif /* #if NEED_CONSOLE_OUTPUT */
Tanakacool 0:f6f2880bef7f 30
Tanakacool 0:f6f2880bef7f 31
Tanakacool 0:f6f2880bef7f 32
Tanakacool 0:f6f2880bef7f 33 Serial pc(USBTX, USBRX);
Tanakacool 0:f6f2880bef7f 34 BLEDevice ble;
Tanakacool 0:f6f2880bef7f 35 DigitalOut led1(P0_13);
Tanakacool 0:f6f2880bef7f 36 DigitalOut led2(P0_14);
Tanakacool 0:f6f2880bef7f 37 DigitalOut led3(P0_15);
Tanakacool 0:f6f2880bef7f 38 DigitalOut led4(P0_16);
Tanakacool 0:f6f2880bef7f 39 InterruptIn button1(P0_11);
Tanakacool 0:f6f2880bef7f 40 uint8_t state;
Tanakacool 0:f6f2880bef7f 41 uint8_t open;
Tanakacool 1:5d6887b45ff6 42
Tanakacool 1:5d6887b45ff6 43 uint8_t longble[120];
Tanakacool 1:5d6887b45ff6 44 uint8_t lb=0 ;
Tanakacool 0:f6f2880bef7f 45
Tanakacool 0:f6f2880bef7f 46 UARTService *uartServicePtr;
Tanakacool 0:f6f2880bef7f 47
Tanakacool 0:f6f2880bef7f 48 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
Tanakacool 0:f6f2880bef7f 49 {
Tanakacool 0:f6f2880bef7f 50 DEBUG("Disconnected!\n\r");
Tanakacool 0:f6f2880bef7f 51 DEBUG("Restarting the advertising process\n\r");
Tanakacool 0:f6f2880bef7f 52 ble.startAdvertising();
Tanakacool 0:f6f2880bef7f 53 }
Tanakacool 0:f6f2880bef7f 54 /*
Tanakacool 0:f6f2880bef7f 55 void opendoor()
Tanakacool 0:f6f2880bef7f 56 {
Tanakacool 0:f6f2880bef7f 57 led4=0;
Tanakacool 0:f6f2880bef7f 58 led3=1;
Tanakacool 0:f6f2880bef7f 59 wait(3);
Tanakacool 0:f6f2880bef7f 60 led4=0;
Tanakacool 0:f6f2880bef7f 61 led3=0;
Tanakacool 0:f6f2880bef7f 62 wait(10);
Tanakacool 0:f6f2880bef7f 63 led4=1;
Tanakacool 0:f6f2880bef7f 64 led3=0;
Tanakacool 0:f6f2880bef7f 65 wait(3);
Tanakacool 0:f6f2880bef7f 66 led4=0;
Tanakacool 0:f6f2880bef7f 67 led3=0;
Tanakacool 0:f6f2880bef7f 68
Tanakacool 0:f6f2880bef7f 69 }*/
Tanakacool 0:f6f2880bef7f 70
Tanakacool 0:f6f2880bef7f 71 void onDataWritten(const GattWriteCallbackParams *params)
Tanakacool 0:f6f2880bef7f 72 {
Tanakacool 0:f6f2880bef7f 73 if ((uartServicePtr != NULL) && (params->handle == uartServicePtr->getTXCharacteristicHandle())) {
Tanakacool 0:f6f2880bef7f 74 // uint16_t bytesRead = params->len;
Tanakacool 0:f6f2880bef7f 75 DEBUG("received %u bytes\n\r", bytesRead);
Tanakacool 1:5d6887b45ff6 76 ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, params->len);// uint16_t bytesRead = params->len;
Tanakacool 1:5d6887b45ff6 77 uint8_t x=0;
Tanakacool 1:5d6887b45ff6 78 if(((*(params->data))=='<')&&((*(params->data+1))=='S')&&((*(params->data+2))=='>')){ // <S>
Tanakacool 1:5d6887b45ff6 79 lb=0;
Tanakacool 1:5d6887b45ff6 80 memset(longble,'\0',60);
Tanakacool 2:0d84e066f294 81 // x=3;
Tanakacool 1:5d6887b45ff6 82 }
Tanakacool 1:5d6887b45ff6 83 uint8_t blein[params->len];
Tanakacool 2:0d84e066f294 84 for(uint8_t count=0 ; count<((params->len)+x) ; ++count){ //取得藍芽資料
Tanakacool 0:f6f2880bef7f 85 blein[count]= *((params->data)+count);
Tanakacool 1:5d6887b45ff6 86 longble[count+lb]= *((params->data)+count+x);
Tanakacool 0:f6f2880bef7f 87 }
Tanakacool 2:0d84e066f294 88 //x=0;
Tanakacool 1:5d6887b45ff6 89 lb+=(params->len);
Tanakacool 1:5d6887b45ff6 90 if(lb>110)
Tanakacool 1:5d6887b45ff6 91 lb=0;
Tanakacool 1:5d6887b45ff6 92 // <<|>>
Tanakacool 1:5d6887b45ff6 93 // >>|<<
Tanakacool 1:5d6887b45ff6 94 // uint8_t *a;
Tanakacool 1:5d6887b45ff6 95 // uint8_t test[] = "OPEN";
Tanakacool 1:5d6887b45ff6 96 // a = longble;
Tanakacool 1:5d6887b45ff6 97 //ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), a, 20);
Tanakacool 1:5d6887b45ff6 98 if(((*(params->data))=='<')&&((*(params->data+1))=='E')&&((*(params->data+2))=='>')) // <E>
Tanakacool 1:5d6887b45ff6 99 pc.printf("%S\r\n",longble) ;
Tanakacool 1:5d6887b45ff6 100 //ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), params->data, params->len);// uint16_t bytesRead = params->len;
Tanakacool 1:5d6887b45ff6 101
Tanakacool 0:f6f2880bef7f 102 //uint8_t test[] = "123456789012345678901";
Tanakacool 0:f6f2880bef7f 103 // uint8_t *a;
Tanakacool 0:f6f2880bef7f 104 //a = test;
Tanakacool 1:5d6887b45ff6 105 // ble.updateCharacteristicValue(uartServicePtr->getRXCharacteristicHandle(), a, params->len);
Tanakacool 0:f6f2880bef7f 106 }
Tanakacool 0:f6f2880bef7f 107 }
Tanakacool 0:f6f2880bef7f 108
Tanakacool 0:f6f2880bef7f 109 void button1_pressed()
Tanakacool 1:5d6887b45ff6 110 {
Tanakacool 1:5d6887b45ff6 111
Tanakacool 0:f6f2880bef7f 112 }
Tanakacool 0:f6f2880bef7f 113
Tanakacool 0:f6f2880bef7f 114 void periodicCallback(void)
Tanakacool 0:f6f2880bef7f 115 {
Tanakacool 0:f6f2880bef7f 116 led1 = !led1;
Tanakacool 0:f6f2880bef7f 117 led2= state;
Tanakacool 0:f6f2880bef7f 118 if (open==1){
Tanakacool 0:f6f2880bef7f 119 open=0;
Tanakacool 0:f6f2880bef7f 120 led3=0;
Tanakacool 0:f6f2880bef7f 121 led4=1;
Tanakacool 0:f6f2880bef7f 122 wait(1);
Tanakacool 0:f6f2880bef7f 123 led3=1;
Tanakacool 0:f6f2880bef7f 124 led4=0;
Tanakacool 0:f6f2880bef7f 125 wait(1);
Tanakacool 0:f6f2880bef7f 126 led3=0;
Tanakacool 0:f6f2880bef7f 127 led4=0;
Tanakacool 0:f6f2880bef7f 128 }
Tanakacool 0:f6f2880bef7f 129
Tanakacool 0:f6f2880bef7f 130 }
Tanakacool 0:f6f2880bef7f 131
Tanakacool 0:f6f2880bef7f 132 int main(void)
Tanakacool 0:f6f2880bef7f 133 {
Tanakacool 0:f6f2880bef7f 134 led1 = 1;
Tanakacool 0:f6f2880bef7f 135 led2 = 1;
Tanakacool 0:f6f2880bef7f 136 led3 = 1;
Tanakacool 0:f6f2880bef7f 137 led4 = 1;
Tanakacool 0:f6f2880bef7f 138 Ticker ticker;
Tanakacool 0:f6f2880bef7f 139 ticker.attach(periodicCallback, 1);
Tanakacool 0:f6f2880bef7f 140
Tanakacool 0:f6f2880bef7f 141 DEBUG("Initialising the nRF51822\n\r");
Tanakacool 0:f6f2880bef7f 142 ble.init();
Tanakacool 0:f6f2880bef7f 143 ble.onDisconnection(disconnectionCallback);
Tanakacool 0:f6f2880bef7f 144 ble.onDataWritten(onDataWritten);
Tanakacool 0:f6f2880bef7f 145
Tanakacool 0:f6f2880bef7f 146 /* setup advertising */
Tanakacool 0:f6f2880bef7f 147 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
Tanakacool 0:f6f2880bef7f 148 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
Tanakacool 0:f6f2880bef7f 149 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
Tanakacool 0:f6f2880bef7f 150 (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
Tanakacool 0:f6f2880bef7f 151 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
Tanakacool 0:f6f2880bef7f 152 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
Tanakacool 0:f6f2880bef7f 153
Tanakacool 0:f6f2880bef7f 154 ble.setAdvertisingInterval(1000); /* 1000ms; in multiples of 0.625ms. */
Tanakacool 0:f6f2880bef7f 155 ble.startAdvertising();
Tanakacool 0:f6f2880bef7f 156
Tanakacool 0:f6f2880bef7f 157 UARTService uartService(ble);
Tanakacool 0:f6f2880bef7f 158 uartServicePtr = &uartService;
Tanakacool 0:f6f2880bef7f 159
Tanakacool 0:f6f2880bef7f 160 while (true) {
Tanakacool 0:f6f2880bef7f 161 ble.waitForEvent();
Tanakacool 0:f6f2880bef7f 162 }
Tanakacool 0:f6f2880bef7f 163 }