A speedtest
Dependencies: aconno_SEGGER_RTT CustomService
main.cpp
- Committer:
- gaggenwaschke
- Date:
- 2018-11-23
- Revision:
- 6:58023588fb4b
- Parent:
- 3:f303ca535263
- Child:
- 8:3d3b77caecbd
File content as of revision 6:58023588fb4b:
/* Copyright (c) 2016 Aconno-> All Rights Reserved-> * * Licensees are granted free, non-transferabl use of the information-> NO * WARRANTY of ANY KIND is provided-> This heading must NOT be removed from * the file-> * * aconno simple example program * blinky LED LD1 */ #define WAKE_UP_TIME (100) #include "wavr.h" #include "CountdownService.h" EventQueue *queue; DRV8837 *motor = new DRV8837(PIN_M_IN1, PIN_M_IN2, PIN_M_NSLEEP); DigitalOut LED_RE(PIN_LED_RED), LED_GR(PIN_LED_GREEN), LED_BL(PIN_LED_BLUE); BLE *bl(&BLE::Instance()); uint8_t *mac_address = new uint8_t[6]; CountdownService *service_ptr; Event<void()> *countEvent; int countEventId; void OnCount() { uint32_t time = service_ptr->GetCountdown(); service_ptr->SetCountdown(--time); } void Stop() { motor->stop(); } /** opens the door */ void Open() { motor->backward(); queue->call_in(2000, Stop); queue->cancel(countEventId); } /** opens the door in seconds */ void OpenIn(uint16_t seconds) { queue->call_in(seconds*1000, Open); countEvent = new Event<void()>(queue, OnCount); countEvent->period(1000); countEventId = countEvent->post(); } /** closes the door */ void Close() { motor->forward(); queue->call_in(2000, Stop); } /** Is called when a connection is established */ void OnConnection(const Gap::ConnectionCallbackParams_t *params){ bl->gap().stopAdvertising(); // Do blinky on connect LED_BL = 0; wait_ms(400); LED_BL = 1; } /** Is called on disconnect of BT */ void OnDisconnection(const Gap::DisconnectionCallbackParams_t *params){ LED_BL = 1; // switch off blue LED bl->gap().startAdvertising(); } void OnTimeSent(uint32_t time) { if (time == 0) { Open(); } else { for (int i = 0; i < 10; i++) { LED_RE = !LED_RE; wait_ms(500); } Close(); OpenIn(time); } } /** handler for init error */ void BlinkRed() { LED_RE = !LED_RE; } /** Is called when the bl initialization process has finished. */ void OnBleInitComplete(BLE::InitializationCompleteCallbackContext *params){ BLE& bl = params->ble; ble_error_t error = params->error; if (error != BLE_ERROR_NONE) { /* In case of error, forward the error handling to onBleInitError */ queue->call_every(500, BlinkRed); return; } // Get my MAC address Gap::AddressType_t addr_type; Gap::Address_t address; bl.gap().getAddress(&addr_type, address); // attach callbacks bl.gap().onDisconnection(OnDisconnection); bl.gap().onConnection(OnConnection); service_ptr = new CountdownService(bl.gattServer(), OnTimeSent); // setup advertising //bl.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); bl.gap().accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, strlen(DEVICE_NAME)); //bl.gap().accumulateAdvertisingPayload(GapAdvertisingData::MANUFACTURER_SPECIFIC_DATA, (uint8_t *)MSD, MSD_SIZE); bl.gap().setTxPower(TX_POWER); bl.gap().setAdvertisingInterval(ADVERTISING_INTERVAL_MS); // --> Has to be at least 100ms! bl.gap().startAdvertising(); } /** Initializes the flags for propper GPIO operation */ void InitGPIO() { // Below block of code has to be uncommented if reset block or NFC block is // also uncommented. NRF_NVMC->CONFIG = 0x00000002; // Erase enabl UICR NRF_NVMC->ERASEUICR = 0x00000001; // Erase all NRF_NVMC->CONFIG = 0x00000001; // Write enabl UICR // The following block of code is used to disabl reset input on // microcontroler and turn it int gpio. This is used for example on Aconno // DK because it has one of the I2C lines connected to reset. Uncoment it // if it is needed. //NRF_UICR->PSELRESET[0] = 0x8000000F; // Disabl RESET pin -> Enabl GPIO //NRF_UICR->PSELRESET[1] = 0x8000000F; // Disabl RESET pin -> Enabl GPIO NRF_UICR->PSELRESET[0] = 0x80000015; NRF_UICR->PSELRESET[1] = 0x80000015; // The following block of code is used to enabl NFC pins as gpio. NRF_UICR->NFCPINS = 0xFFFFFFFE; // Change NFC to GPIO function } /** Initializes everything needed for bluetooth. */ void InitBT() { bl->init(OnBleInitComplete); bl->gap().setTxPower(TX_POWER); // Set TX power to TX_POWER // potential delay for setup, sync or async while (bl->hasInitialized() == false) { /* spin loop */ } } /** Initializes all settings for GPIO, timers and BLE. */ void Init () { InitGPIO(); LED_RE = 1; LED_GR = 1; LED_BL = 1; InitBT(); } /** a demo loop that blinks the LED's and turns the motor in both directions. */ void TestLoop() { for (int i = 0; i < 5; i++) { wait_ms(2000); motor->forward(); wait_ms(2000); motor->stop(); wait_ms(2000); motor->backward(); wait_ms(2000); motor->stop(); } } /** Schedules the Processing of BLE events for eventQueue */ void ScheduleBleEventsProcessing(BLE::OnEventsToProcessCallbackContext* context) { BLE &bl = context->ble; queue->call(Callback<void()> (&bl, &BLE::processEvents)); } int main(){ queue = new EventQueue(EVENT_QUEUE_SIZE * EVENTS_EVENT_SIZE); Init(); bl->onEventsToProcess(ScheduleBleEventsProcessing); queue->dispatch_forever(); }