Kenji Arai / TYBLE16_mbedlized_os5_EddystoneBeacon

Dependencies:  

Committer:
kenjiArai
Date:
Tue Apr 10 12:50:20 2018 +0000
Revision:
0:47dfd44d8b78
Eddystone Beacon only for TYBLE16 Module

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:47dfd44d8b78 1 /* mbed Microcontroller Library
kenjiArai 0:47dfd44d8b78 2 * Copyright (c) 2006-2013 ARM Limited
kenjiArai 0:47dfd44d8b78 3 *
kenjiArai 0:47dfd44d8b78 4 * Licensed under the Apache License, Version 2.0 (the "License");
kenjiArai 0:47dfd44d8b78 5 * you may not use this file except in compliance with the License.
kenjiArai 0:47dfd44d8b78 6 * You may obtain a copy of the License at
kenjiArai 0:47dfd44d8b78 7 *
kenjiArai 0:47dfd44d8b78 8 * http://www.apache.org/licenses/LICENSE-2.0
kenjiArai 0:47dfd44d8b78 9 *
kenjiArai 0:47dfd44d8b78 10 * Unless required by applicable law or agreed to in writing, software
kenjiArai 0:47dfd44d8b78 11 * distributed under the License is distributed on an "AS IS" BASIS,
kenjiArai 0:47dfd44d8b78 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
kenjiArai 0:47dfd44d8b78 13 * See the License for the specific language governing permissions and
kenjiArai 0:47dfd44d8b78 14 * limitations under the License.
kenjiArai 0:47dfd44d8b78 15 */
kenjiArai 0:47dfd44d8b78 16
kenjiArai 0:47dfd44d8b78 17 /*
kenjiArai 0:47dfd44d8b78 18 * /////// Works well on TYBLE16 Module ///////
kenjiArai 0:47dfd44d8b78 19 * Modified by Kenji Arai
kenjiArai 0:47dfd44d8b78 20 * http://www.page.sannet.ne.jp/kenjia/index.html
kenjiArai 0:47dfd44d8b78 21 * http://mbed.org/users/kenjiArai/
kenjiArai 0:47dfd44d8b78 22 *
kenjiArai 0:47dfd44d8b78 23 * Started: Feburary 18th, 2018
kenjiArai 0:47dfd44d8b78 24 * Revised: April 10th, 2018
kenjiArai 0:47dfd44d8b78 25 *
kenjiArai 0:47dfd44d8b78 26 * Original:
kenjiArai 0:47dfd44d8b78 27 * nRF51822_SimpleControls
kenjiArai 0:47dfd44d8b78 28 * https://developer.mbed.org/teams
kenjiArai 0:47dfd44d8b78 29 * /Bluetooth-Low-Energy/code/BLE_EddystoneBeacon_Service/
kenjiArai 0:47dfd44d8b78 30 * Tested Controller Device:
kenjiArai 0:47dfd44d8b78 31 * iPhone6 Physical Web (PhyWeb) By Viet Hoa Dinh
kenjiArai 0:47dfd44d8b78 32 * https://itunes.apple.com/us/app/physical-web/id927653608?mt=8
kenjiArai 0:47dfd44d8b78 33 */
kenjiArai 0:47dfd44d8b78 34
kenjiArai 0:47dfd44d8b78 35 // Include --------------------------------------------------------------------
kenjiArai 0:47dfd44d8b78 36 #include "mbed.h"
kenjiArai 0:47dfd44d8b78 37 #include "TYBLE16_BASE.h"
kenjiArai 0:47dfd44d8b78 38 #include "BLE.h"
kenjiArai 0:47dfd44d8b78 39 //#include "EddystoneService.h"
kenjiArai 0:47dfd44d8b78 40 #include "../Eddystone/EddystoneService.h"
kenjiArai 0:47dfd44d8b78 41
kenjiArai 0:47dfd44d8b78 42 // Object ---------------------------------------------------------------------
kenjiArai 0:47dfd44d8b78 43 DigitalOut led(P0_5);
kenjiArai 0:47dfd44d8b78 44 Serial pc(USBTX, USBRX);
kenjiArai 0:47dfd44d8b78 45
kenjiArai 0:47dfd44d8b78 46 // Definition -----------------------------------------------------------------
kenjiArai 0:47dfd44d8b78 47
kenjiArai 0:47dfd44d8b78 48 // RAM ------------------------------------------------------------------------
kenjiArai 0:47dfd44d8b78 49 EddystoneService *eddyServicePtr;
kenjiArai 0:47dfd44d8b78 50 Gap::Address_t my_mac;
kenjiArai 0:47dfd44d8b78 51
kenjiArai 0:47dfd44d8b78 52 // ROM / Constant data --------------------------------------------------------
kenjiArai 0:47dfd44d8b78 53 char *const opngmsg =
kenjiArai 0:47dfd44d8b78 54 "\x1b[2J\x1b[H"__FILE__ "\r\n"__DATE__ " " __TIME__ " (UTC)\r\n""\r\n";
kenjiArai 0:47dfd44d8b78 55
kenjiArai 0:47dfd44d8b78 56 // Function prototypes --------------------------------------------------------
kenjiArai 0:47dfd44d8b78 57 int8_t check_dice(void);
kenjiArai 0:47dfd44d8b78 58 uint16_t update_vdd(uint16_t x);
kenjiArai 0:47dfd44d8b78 59 uint16_t update_temp(uint16_t x);
kenjiArai 0:47dfd44d8b78 60 void onBleInitError(BLE::InitializationCompleteCallbackContext* initContext);
kenjiArai 0:47dfd44d8b78 61 void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext);
kenjiArai 0:47dfd44d8b78 62
kenjiArai 0:47dfd44d8b78 63 //------------------------------------------------------------------------------
kenjiArai 0:47dfd44d8b78 64 // Control Program
kenjiArai 0:47dfd44d8b78 65 //------------------------------------------------------------------------------
kenjiArai 0:47dfd44d8b78 66 // !!!!!!!! Please select number of 0 to 6 !!!!!!!!!!!!!!!!!
kenjiArai 0:47dfd44d8b78 67 int8_t check_dice(void)
kenjiArai 0:47dfd44d8b78 68 {
kenjiArai 0:47dfd44d8b78 69 return 5;
kenjiArai 0:47dfd44d8b78 70 }
kenjiArai 0:47dfd44d8b78 71
kenjiArai 0:47dfd44d8b78 72 void bleInitComplete(BLE::InitializationCompleteCallbackContext* initContext)
kenjiArai 0:47dfd44d8b78 73 {
kenjiArai 0:47dfd44d8b78 74 BLE &ble = initContext->ble;
kenjiArai 0:47dfd44d8b78 75 ble_error_t error = initContext->error;
kenjiArai 0:47dfd44d8b78 76
kenjiArai 0:47dfd44d8b78 77 if (error != BLE_ERROR_NONE) {
kenjiArai 0:47dfd44d8b78 78 onBleInitError(initContext);
kenjiArai 0:47dfd44d8b78 79 return;
kenjiArai 0:47dfd44d8b78 80 }
kenjiArai 0:47dfd44d8b78 81 // Set UID and TLM frame data
kenjiArai 0:47dfd44d8b78 82 const UIDNamespaceID_t uidNamespaceID =
kenjiArai 0:47dfd44d8b78 83 {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
kenjiArai 0:47dfd44d8b78 84 const UIDInstanceID_t uidInstanceID =
kenjiArai 0:47dfd44d8b78 85 {0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF};
kenjiArai 0:47dfd44d8b78 86 uint8_t tlmVersion = 0x00;
kenjiArai 0:47dfd44d8b78 87
kenjiArai 0:47dfd44d8b78 88 Gap::AddressType_t my_mac_type;
kenjiArai 0:47dfd44d8b78 89 ble.gap().getAddress(&my_mac_type, my_mac);
kenjiArai 0:47dfd44d8b78 90 // Initialize a EddystoneBeaconConfig service
kenjiArai 0:47dfd44d8b78 91 // Values for ADV packets related to firmware levels,
kenjiArai 0:47dfd44d8b78 92 // calibrated based on measured values at 1m
kenjiArai 0:47dfd44d8b78 93 static const PowerLevels_t defaultAdvPowerLevels = {-47, -33, -21, -13};
kenjiArai 0:47dfd44d8b78 94 // Values for radio power levels, provided by manufacturer.
kenjiArai 0:47dfd44d8b78 95 static const PowerLevels_t radioPowerLevels = {-30, -16, -4, 4};
kenjiArai 0:47dfd44d8b78 96 eddyServicePtr = new EddystoneService(ble,
kenjiArai 0:47dfd44d8b78 97 defaultAdvPowerLevels,
kenjiArai 0:47dfd44d8b78 98 radioPowerLevels);
kenjiArai 0:47dfd44d8b78 99 // created short cut web addres by http://bitly.oshiire.org/
kenjiArai 0:47dfd44d8b78 100 switch (check_dice()) {
kenjiArai 0:47dfd44d8b78 101 case 1: // Switch sience(mbed)
kenjiArai 0:47dfd44d8b78 102 eddyServicePtr->setURLData("http://bit.ly/1oJh91B");
kenjiArai 0:47dfd44d8b78 103 break;
kenjiArai 0:47dfd44d8b78 104 case 2: // switch sience(HP)
kenjiArai 0:47dfd44d8b78 105 eddyServicePtr->setURLData("http://bit.ly/1oJhP7g");
kenjiArai 0:47dfd44d8b78 106 break;
kenjiArai 0:47dfd44d8b78 107 case 3: // Taiyo Yuden BLE
kenjiArai 0:47dfd44d8b78 108 eddyServicePtr->setURLData("http://bit.ly/1VvuCVr");
kenjiArai 0:47dfd44d8b78 109 break;
kenjiArai 0:47dfd44d8b78 110 case 4: // Taiyo Yuden
kenjiArai 0:47dfd44d8b78 111 eddyServicePtr->setURLData("http://bit.ly/1Vvtp0l");
kenjiArai 0:47dfd44d8b78 112 break;
kenjiArai 0:47dfd44d8b78 113 case 5: // JH1PJL(mbed)
kenjiArai 0:47dfd44d8b78 114 eddyServicePtr->setURLData("http://bit.ly/1Vvt51J");
kenjiArai 0:47dfd44d8b78 115 break;
kenjiArai 0:47dfd44d8b78 116 case 6: // JH1PJL(HP)
kenjiArai 0:47dfd44d8b78 117 eddyServicePtr->setURLData("http://bit.ly/1VvteT0");
kenjiArai 0:47dfd44d8b78 118 break;
kenjiArai 0:47dfd44d8b78 119 case 0:
kenjiArai 0:47dfd44d8b78 120 default: // Mbed
kenjiArai 0:47dfd44d8b78 121 eddyServicePtr->setURLData("http://mbed.org");
kenjiArai 0:47dfd44d8b78 122 break;
kenjiArai 0:47dfd44d8b78 123 }
kenjiArai 0:47dfd44d8b78 124 eddyServicePtr->setUIDData(&uidNamespaceID, &uidInstanceID);
kenjiArai 0:47dfd44d8b78 125 eddyServicePtr->setTLMData(tlmVersion);
kenjiArai 0:47dfd44d8b78 126 // Start Eddystone in config mode
kenjiArai 0:47dfd44d8b78 127 eddyServicePtr->startBeaconService(5, 5, 5);
kenjiArai 0:47dfd44d8b78 128 }
kenjiArai 0:47dfd44d8b78 129
kenjiArai 0:47dfd44d8b78 130 int main(void)
kenjiArai 0:47dfd44d8b78 131 {
kenjiArai 0:47dfd44d8b78 132 pc.puts(opngmsg);
kenjiArai 0:47dfd44d8b78 133 led = 1;
kenjiArai 0:47dfd44d8b78 134 // Check TYBLE-16 configuration
kenjiArai 0:47dfd44d8b78 135 cpu_sys();
kenjiArai 0:47dfd44d8b78 136 if (compile_condition() == false) {
kenjiArai 0:47dfd44d8b78 137 pc.printf("This is wrong configuration!!\r\n");
kenjiArai 0:47dfd44d8b78 138 while(true) {
kenjiArai 0:47dfd44d8b78 139 led = !led;
kenjiArai 0:47dfd44d8b78 140 wait(0.2);
kenjiArai 0:47dfd44d8b78 141 }
kenjiArai 0:47dfd44d8b78 142 }
kenjiArai 0:47dfd44d8b78 143 BLE& ble = BLE::Instance(BLE::DEFAULT_INSTANCE);
kenjiArai 0:47dfd44d8b78 144 ble.init(bleInitComplete);
kenjiArai 0:47dfd44d8b78 145 while (ble.hasInitialized() == false) {
kenjiArai 0:47dfd44d8b78 146 ;
kenjiArai 0:47dfd44d8b78 147 }
kenjiArai 0:47dfd44d8b78 148 //
kenjiArai 0:47dfd44d8b78 149 led = 0;
kenjiArai 0:47dfd44d8b78 150 //pc.printf("line:%d\r\n", __LINE__);
kenjiArai 0:47dfd44d8b78 151 while (true) {
kenjiArai 0:47dfd44d8b78 152 ble.waitForEvent();
kenjiArai 0:47dfd44d8b78 153 }
kenjiArai 0:47dfd44d8b78 154 }
kenjiArai 0:47dfd44d8b78 155
kenjiArai 0:47dfd44d8b78 156 void onBleInitError(BLE::InitializationCompleteCallbackContext* initContext)
kenjiArai 0:47dfd44d8b78 157 {
kenjiArai 0:47dfd44d8b78 158 // Initialization error handling goes here...
kenjiArai 0:47dfd44d8b78 159 (void) initContext;
kenjiArai 0:47dfd44d8b78 160 }