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
00001 /* mbed Microcontroller Library 00002 * Copyright (c) 2006-2013 ARM Limited 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 #include <events/mbed_events.h> 00017 00018 #include <mbed.h> 00019 #include "ble/BLE.h" 00020 #include "ble/Gap.h" 00021 #include "ButtonService.h" 00022 00023 DigitalOut led1(P0_24, 1); 00024 InterruptIn button(P0_18); 00025 00026 static EventQueue eventQueue(/* event count */ 10 * EVENTS_EVENT_SIZE); 00027 00028 const static char DEVICE_NAME[] = "Button"; 00029 static const uint16_t uuid16_list[] = {ButtonService::BUTTON_SERVICE_UUID}; 00030 00031 ButtonService *buttonServicePtr; 00032 00033 void buttonPressedCallback(void) 00034 { 00035 eventQueue.call(Callback<void(bool)>(buttonServicePtr, &ButtonService::updateButtonState), true); 00036 } 00037 00038 void buttonReleasedCallback(void) 00039 { 00040 eventQueue.call(Callback<void(bool)>(buttonServicePtr, &ButtonService::updateButtonState), false); 00041 } 00042 00043 void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) 00044 { 00045 BLE::Instance().gap().startAdvertising(); // restart advertising 00046 led1 = 1; 00047 } 00048 void connectionCallback(const Gap::ConnectionCallbackParams_t *params) 00049 { 00050 led1 = 0; 00051 } 00052 00053 void blinkCallback(void) 00054 { 00055 // led1 = !led1; /* Do blinky on LED1 to indicate system aliveness. */ 00056 } 00057 00058 void onBleInitError(BLE &ble, ble_error_t error) 00059 { 00060 /* Initialization error handling should go here */ 00061 } 00062 00063 void printMacAddress() 00064 { 00065 /* Print out device MAC address to the console*/ 00066 Gap::AddressType_t addr_type; 00067 Gap::Address_t address; 00068 BLE::Instance().gap().getAddress(&addr_type, address); 00069 printf("DEVICE MAC ADDRESS: "); 00070 for (int i = 5; i >= 1; i--){ 00071 printf("%02x:", address[i]); 00072 } 00073 printf("%02x\r\n", address[0]); 00074 } 00075 00076 void bleInitComplete(BLE::InitializationCompleteCallbackContext *params) 00077 { 00078 BLE& ble = params->ble; 00079 ble_error_t error = params->error; 00080 00081 if (error != BLE_ERROR_NONE) { 00082 /* In case of error, forward the error handling to onBleInitError */ 00083 onBleInitError(ble, error); 00084 return; 00085 } 00086 00087 /* Ensure that it is the default instance of BLE */ 00088 if(ble.getInstanceID() != BLE::DEFAULT_INSTANCE) { 00089 return; 00090 } 00091 00092 ble.gap().onDisconnection(disconnectionCallback); 00093 ble.gap().onConnection(connectionCallback); 00094 00095 button.fall(buttonPressedCallback); 00096 button.rise(buttonReleasedCallback); 00097 00098 /* Setup primary service. */ 00099 buttonServicePtr = new ButtonService(ble, false /* initial value for button pressed */); 00100 00101 /* setup advertising */ 00102 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); 00103 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); 00104 ble.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); 00105 ble.gap().setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); 00106 ble.gap().setAdvertisingInterval(1000); /* 1000ms. */ 00107 ble.gap().startAdvertising(); 00108 00109 // printMacAddress(); 00110 } 00111 00112 void scheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { 00113 BLE &ble = BLE::Instance(); 00114 eventQueue.call(Callback<void()>(&ble, &BLE::processEvents)); 00115 } 00116 00117 int main() 00118 { 00119 eventQueue.call_every(500, blinkCallback); 00120 00121 BLE &ble = BLE::Instance(); 00122 ble.onEventsToProcess(scheduleBleEventsProcessing); 00123 ble.init(bleInitComplete); 00124 00125 eventQueue.dispatch_forever(); 00126 00127 return 0; 00128 }
Generated on Sun Jul 17 2022 15:05:58 by
1.7.2