Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:47dfd44d8b78, 2018-04-10 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |