Helmut Tschemernjak / Mbed 2 deprecated Turtle_RadioShuttle

Dependencies:   mbed BufferedSerial SX1276GenericLib OLED_SSD1306 HELIOS_Si7021 NVProperty RadioShuttle-STM32L4 USBDeviceHT

Committer:
Helmut Tschemernjak
Date:
Wed May 29 11:18:32 2019 +0200
Revision:
61:6e462fa1b7d5
Parent:
50:28166f6fdaa2
Updated OLED lib

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Helmut64 0:3b6c2ce051a6 1 /*
Helmut Tschemernjak 3:b5052f3fa638 2 * Copyright (c) 2019 Helmut Tschemernjak
Helmut64 0:3b6c2ce051a6 3 * 30826 Garbsen (Hannover) Germany
Helmut64 0:3b6c2ce051a6 4 * Licensed under the Apache License, Version 2.0);
Helmut64 0:3b6c2ce051a6 5 */
Helmut Tschemernjak 3:b5052f3fa638 6
Helmut Tschemernjak 3:b5052f3fa638 7 /*
Helmut Tschemernjak 3:b5052f3fa638 8 * TODO:
Helmut Tschemernjak 45:22bb680cad5a 9 * Compiler Date/Time is not set correctly on startup using gcc
Helmut Tschemernjak 45:22bb680cad5a 10 * USB Serial block deepsleep
Helmut Tschemernjak 3:b5052f3fa638 11 */
Helmut Tschemernjak 3:b5052f3fa638 12 #include "main.h"
Helmut Tschemernjak 3:b5052f3fa638 13 #include "RadioTest.h"
Helmut64 0:3b6c2ce051a6 14
Helmut Tschemernjak 3:b5052f3fa638 15 DigitalOut statusLED(LED);
Helmut Tschemernjak 3:b5052f3fa638 16 DigitalOut redLED(LED2);
Helmut Tschemernjak 3:b5052f3fa638 17 InterruptIn buttonIntr(USER_BUTTON);
Helmut Tschemernjak 13:3c7a52b11316 18 volatile int pressedCount;
Helmut64 0:3b6c2ce051a6 19
Helmut Tschemernjak 3:b5052f3fa638 20 void switchInput(void) {
Helmut Tschemernjak 47:59a9923a9f77 21 InterruptMSG(INT_BUTTON1);
Helmut Tschemernjak 3:b5052f3fa638 22 }
Helmut64 0:3b6c2ce051a6 23
Helmut Tschemernjak 3:b5052f3fa638 24 void timerUpdate(void) {
Helmut Tschemernjak 5:c6a960febe80 25 static LowPowerTimeout timeout;
Helmut Tschemernjak 3:b5052f3fa638 26 if (redLED == 0)
Helmut Tschemernjak 3:b5052f3fa638 27 timeout.attach_us(&timerUpdate, 20000); // setup to call timerUpdate after 20 millis
Helmut Tschemernjak 3:b5052f3fa638 28 else
Helmut Tschemernjak 3:b5052f3fa638 29 timeout.attach_us(&timerUpdate, 2000000); // setup to call timerUpdate after 2 seconds
Helmut Tschemernjak 3:b5052f3fa638 30
Helmut Tschemernjak 47:59a9923a9f77 31 InterruptMSG(INT_TIMEOUT);
Helmut Tschemernjak 3:b5052f3fa638 32 }
Helmut Tschemernjak 3:b5052f3fa638 33
Helmut Tschemernjak 18:d2f227e0a8bf 34
Helmut Tschemernjak 34:d3d60dbb84ea 35
Helmut64 0:3b6c2ce051a6 36 int main() {
Helmut64 0:3b6c2ce051a6 37 /*
Helmut64 0:3b6c2ce051a6 38 * inits the Serial or USBSerial when available (230400 baud).
Helmut64 0:3b6c2ce051a6 39 * If the serial uart is not is not connected it swiches to USB Serial
Helmut64 0:3b6c2ce051a6 40 * blinking LED means USBSerial detected, waiting for a connect.
Helmut64 0:3b6c2ce051a6 41 * It waits up to 30 seconds for a USB terminal connections
Helmut64 0:3b6c2ce051a6 42 */
Helmut Tschemernjak 45:22bb680cad5a 43 InitSerial(30*1000, &statusLED, &buttonIntr);
Helmut Tschemernjak 37:77fa81e4ad79 44 RunStartup();
Helmut Tschemernjak 3:b5052f3fa638 45 dprintf("Welcome to RadioShuttle v%d.%d", RS_MAJOR, RS_MINOR);
Helmut Tschemernjak 37:77fa81e4ad79 46 timerUpdate(); // start timer for status blinked, can be disalbed to save energy
Helmut Tschemernjak 3:b5052f3fa638 47 #if defined (USER_BUTTON_RISE) // attach switchInput function to the rising or falling edge
Helmut Tschemernjak 3:b5052f3fa638 48 buttonIntr.rise(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 49 #else
Helmut Tschemernjak 3:b5052f3fa638 50 buttonIntr.fall(&switchInput);
Helmut Tschemernjak 3:b5052f3fa638 51 #endif
Helmut Tschemernjak 34:d3d60dbb84ea 52
Helmut Tschemernjak 37:77fa81e4ad79 53 RunCommands(10000); // check 10 secs for any commands
Helmut Tschemernjak 34:d3d60dbb84ea 54
Helmut Tschemernjak 34:d3d60dbb84ea 55 #ifdef FEATURE_LORA
Helmut Tschemernjak 34:d3d60dbb84ea 56 InitRadio();
Helmut Tschemernjak 34:d3d60dbb84ea 57 #endif
Helmut Tschemernjak 34:d3d60dbb84ea 58
Helmut Tschemernjak 3:b5052f3fa638 59 /*
Helmut Tschemernjak 45:22bb680cad5a 60 * Main event loop, process interrupts and goes to sleep when idle.
Helmut Tschemernjak 3:b5052f3fa638 61 * the green statusLED indicates CPU activity
Helmut Tschemernjak 45:22bb680cad5a 62 * the red redLED indicates that low power timerUpdate function is running.
Helmut Tschemernjak 3:b5052f3fa638 63 */
Helmut Tschemernjak 3:b5052f3fa638 64 while(true) {
Helmut Tschemernjak 3:b5052f3fa638 65 while ((readPendingInterrupts() == 0)) {
Helmut Tschemernjak 3:b5052f3fa638 66 statusLED = 0;
Helmut Tschemernjak 45:22bb680cad5a 67 sleep();
Helmut Tschemernjak 3:b5052f3fa638 68 statusLED = 1;
Helmut Tschemernjak 3:b5052f3fa638 69 }
Helmut Tschemernjak 3:b5052f3fa638 70
Helmut Tschemernjak 3:b5052f3fa638 71 uint32_t pendirqs = readclrPendingInterrupts();
Helmut Tschemernjak 3:b5052f3fa638 72 if (pendirqs & INT_BUTTON1) {
Helmut Tschemernjak 3:b5052f3fa638 73 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 74 statusLED = !statusLED;
Helmut Tschemernjak 3:b5052f3fa638 75 RadioUpdate(true); // pass the pressed user button to RadioShuttle
Helmut Tschemernjak 3:b5052f3fa638 76 #endif
Helmut Tschemernjak 3:b5052f3fa638 77 }
Helmut Tschemernjak 3:b5052f3fa638 78 if (pendirqs & INT_LORA) {
Helmut Tschemernjak 3:b5052f3fa638 79 #ifdef FEATURE_LORA
Helmut Tschemernjak 3:b5052f3fa638 80 RadioUpdate(false);
Helmut Tschemernjak 3:b5052f3fa638 81 #endif
Helmut Tschemernjak 3:b5052f3fa638 82 }
Helmut Tschemernjak 3:b5052f3fa638 83 if (pendirqs & INT_TIMEOUT) {
Helmut Tschemernjak 37:77fa81e4ad79 84 redLED = ! redLED;
Helmut Tschemernjak 3:b5052f3fa638 85 }
Helmut Tschemernjak 3:b5052f3fa638 86 }
Helmut64 0:3b6c2ce051a6 87 }