nRF51822_OBS + mocro:bit_ADV

Dependencies:   mbed BLE_API Adafruit_GFX nRF51822

Тесты по созданию связи между micro:bit и nRF51822 & BLE400 эта часть под nRF51822

Committer:
mamont090671
Date:
Sun Dec 15 06:28:38 2019 +0000
Revision:
11:f6274e2a0b07
Parent:
10:b7d532c63124
Child:
12:0f6e700ca698
+1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rgrover1 0:332983584a9c 1 /* mbed Microcontroller Library
rgrover1 0:332983584a9c 2 * Copyright (c) 2006-2015 ARM Limited
rgrover1 0:332983584a9c 3 *
rgrover1 0:332983584a9c 4 * Licensed under the Apache License, Version 2.0 (the "License");
rgrover1 0:332983584a9c 5 * you may not use this file except in compliance with the License.
rgrover1 0:332983584a9c 6 * You may obtain a copy of the License at
rgrover1 0:332983584a9c 7 *
rgrover1 0:332983584a9c 8 * http://www.apache.org/licenses/LICENSE-2.0
rgrover1 0:332983584a9c 9 *
rgrover1 0:332983584a9c 10 * Unless required by applicable law or agreed to in writing, software
rgrover1 0:332983584a9c 11 * distributed under the License is distributed on an "AS IS" BASIS,
rgrover1 0:332983584a9c 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rgrover1 0:332983584a9c 13 * See the License for the specific language governing permissions and
rgrover1 0:332983584a9c 14 * limitations under the License.
rgrover1 0:332983584a9c 15 */
rgrover1 0:332983584a9c 16
rgrover1 0:332983584a9c 17 #include "mbed.h"
rgrover1 4:dd8231564124 18 #include "BLE.h"
mamont090671 9:56bb343c76ae 19 //#include "TMP_nrf51/TMP_nrf51.h"
sunsmile2015 7:91324daa3bfa 20
mamont090671 10:b7d532c63124 21 #define APP_SPECIFIC_ID_TEST 0x0059 //0xFEFE
sunsmile2015 7:91324daa3bfa 22
sunsmile2015 7:91324daa3bfa 23 #pragma pack(1)
sunsmile2015 7:91324daa3bfa 24 /* Advertising data */
sunsmile2015 8:649bd171929e 25 struct AdvertisingData_t {
sunsmile2015 8:649bd171929e 26 uint8_t length; /* doesn't include itself */
sunsmile2015 7:91324daa3bfa 27 GapAdvertisingData::DataType dataType;
sunsmile2015 7:91324daa3bfa 28 uint8_t data[1];
sunsmile2015 8:649bd171929e 29 };
sunsmile2015 7:91324daa3bfa 30
sunsmile2015 8:649bd171929e 31 struct ApplicationData_t {
sunsmile2015 8:649bd171929e 32 uint16_t applicationSpecificId; /* An ID used to identify temperature value
sunsmile2015 8:649bd171929e 33 in the manufacture specific AD data field */
mamont090671 9:56bb343c76ae 34 uint8_t tmpSensorValue; /* User defined application data */
mamont090671 11:f6274e2a0b07 35 // uint8_t btnA_Value;
mamont090671 11:f6274e2a0b07 36 // uint8_t btnB_Value;
sunsmile2015 8:649bd171929e 37 };
sunsmile2015 7:91324daa3bfa 38 #pragma pack()
rgrover1 0:332983584a9c 39
rgrover1 5:103717ce54e5 40 BLE ble;
rgrover1 0:332983584a9c 41 DigitalOut led1(LED1);
rgrover1 0:332983584a9c 42
mamont090671 9:56bb343c76ae 43 Serial pc(USBTX, USBRX);
mamont090671 9:56bb343c76ae 44
rgrover1 0:332983584a9c 45 void periodicCallback(void)
rgrover1 0:332983584a9c 46 {
rgrover1 0:332983584a9c 47 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
rgrover1 0:332983584a9c 48 }
rgrover1 0:332983584a9c 49
sunsmile2015 6:850f44146c9f 50 void advertisementCallback(const Gap::AdvertisementCallbackParams_t *params)
sunsmile2015 6:850f44146c9f 51 {
sunsmile2015 8:649bd171929e 52 AdvertisingData_t *pAdvData = NULL;
sunsmile2015 7:91324daa3bfa 53 uint8_t len = 0;
mamont090671 11:f6274e2a0b07 54
sunsmile2015 7:91324daa3bfa 55 /* Search for the manufacturer data */
sunsmile2015 7:91324daa3bfa 56 while(len < params->advertisingDataLen) {
sunsmile2015 8:649bd171929e 57 pAdvData = (AdvertisingData_t *)&params->advertisingData[len];
sunsmile2015 7:91324daa3bfa 58 if(pAdvData->dataType == GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA) {
sunsmile2015 8:649bd171929e 59 ApplicationData_t *pAppData = (ApplicationData_t *)pAdvData->data;
sunsmile2015 8:649bd171929e 60 if(pAppData->applicationSpecificId == APP_SPECIFIC_ID_TEST) {
mamont090671 9:56bb343c76ae 61 pc.printf("From [%02x %02x %02x %02x %02x %02x], ", params->peerAddr[5], params->peerAddr[4], params->peerAddr[3], params->peerAddr[2], params->peerAddr[1], params->peerAddr[0]);
mamont090671 11:f6274e2a0b07 62 if(params->peerAddr[0] == 0x38) {
mamont090671 11:f6274e2a0b07 63 pc.printf("Temp is %.02f\r", (float)pAppData->tmpSensorValue);
mamont090671 11:f6274e2a0b07 64 } else {
mamont090671 11:f6274e2a0b07 65 pc.printf("XZ is %.02f\r", (float)pAppData->tmpSensorValue);
mamont090671 11:f6274e2a0b07 66 }
mamont090671 11:f6274e2a0b07 67 // pc.printf(" ButtonAB is %02x", pAppData->btnA_Value);
mamont090671 11:f6274e2a0b07 68 // pc.printf("%02x\r", pAppData->btnB_Value);
sunsmile2015 7:91324daa3bfa 69 break;
sunsmile2015 7:91324daa3bfa 70 }
sunsmile2015 6:850f44146c9f 71 }
sunsmile2015 7:91324daa3bfa 72 len += (pAdvData->length + 1);
rgrover1 0:332983584a9c 73 }
rgrover1 0:332983584a9c 74 }
rgrover1 0:332983584a9c 75
rgrover1 0:332983584a9c 76 int main(void)
rgrover1 0:332983584a9c 77 {
rgrover1 0:332983584a9c 78 led1 = 1;
rgrover1 0:332983584a9c 79 Ticker ticker;
rgrover1 0:332983584a9c 80 ticker.attach(periodicCallback, 1);
rgrover1 0:332983584a9c 81
rgrover1 0:332983584a9c 82 ble.init();
sunsmile2015 6:850f44146c9f 83 ble.gap().setScanParams(1800 /* scan interval */, 1500 /* scan window */);
rgrover1 5:103717ce54e5 84 ble.gap().startScan(advertisementCallback);
rgrover1 0:332983584a9c 85
mamont090671 9:56bb343c76ae 86 pc.baud(9600);
mamont090671 9:56bb343c76ae 87 pc.printf("Observer Init \r\n");
mamont090671 9:56bb343c76ae 88
rgrover1 0:332983584a9c 89 while (true) {
rgrover1 0:332983584a9c 90 ble.waitForEvent();
rgrover1 0:332983584a9c 91 }
rgrover1 0:332983584a9c 92 }