Custom "Installer Assistant" software. Modified Single Sweep Mode. Goes right into single sweep mode upon power-up and displays signal strength. Works with mbed-os 5.1.2 and mdot lib 5.1.5
Dependencies: DOGS102 GpsParser ISL29011 MMA845x MPL3115A2 MTS-Serial NCP5623B libmDot-dev-mbed5-deprecated
Fork of MTDOT-BOX-EVB-Factory-Firmware by
main.cpp
- Committer:
- ScottHoppeMultitech
- Date:
- 2017-12-28
- Revision:
- 12:671b15182260
- Parent:
- 7:a31236c2e75c
File content as of revision 12:671b15182260:
/* Copyright (c) <2016> <MultiTech Systems>, MIT License
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
* BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
// mbed headers
#include "mbed.h"
#include "rtos.h"
// MTS headers
#include "mDot.h"
#include "MTSLog.h"
// display headers
#include "DOGS102.h"
#include "NCP5623B.h"
#include "LayoutStartup.h"
#include "LayoutScrollSelect.h"
#include "LayoutConfig.h"
#include "LayoutHelp.h"
// button header
#include "ButtonHandler.h"
// LoRa header
#include "LoRaHandler.h"
// Sensor header
#include "SensorHandler.h"
// mode objects
#include "ModeJoin.h"
#include "ModeSingle.h"
#include "ModeSweep.h"
#include "ModeDemo.h"
#include "ModeConfig.h"
#include "ModeGps.h"
#include "ModeData.h"
// misc heders
#include "FileName.h"
#include <string>
#define DISABLE_DUTY_CYCLE true
// LCD and LED controllers
SPI lcd_spi(SPI1_MOSI, SPI1_MISO, SPI1_SCK);
I2C led_i2c(I2C_SDA, I2C_SCL);
DigitalOut lcd_spi_cs(SPI1_CS, 1);
DigitalOut lcd_cd(XBEE_ON_SLEEP, 1);
DOGS102* lcd;
NCP5623B* led_cont;
// Thread informaiton
osThreadId main_id;
// Button controller
ButtonHandler* buttons;
// LoRa controller
LoRaHandler* lora_handler;
mDot* dot;
// GPS
GPSPARSER* gps;
MTSSerial gps_serial(XBEE_DOUT, XBEE_DIN, 256, 2048);
// Sensors
SensorHandler* sensors;
// Modes
ModeJoin* modeJoin;
ModeSingle* modeSingle;
ModeSweep* modeSweep;
ModeDemo* modeDemo;
ModeConfig* modeConfig;
ModeGps* modeGps;
ModeData* modeData;
// Serial debug port
Serial debug(USBTX, USBRX);
// Survey Data File
char file_name[] = "SurveyData.txt";
// Prototypes
void mainMenu();
int main() {
debug.baud(115200);
lcd = new DOGS102(lcd_spi, lcd_spi_cs, lcd_cd);
// NCP5623B::LEDs 1 & 2 are the screen backlight - not used on default build
// NCP5623B::LED3 is EVB LED2
led_cont = new NCP5623B(led_i2c);
main_id = Thread::gettid();
buttons = new ButtonHandler(main_id);
dot = mDot::getInstance();
lora_handler = new LoRaHandler(main_id);
dot->setDisableDutyCycle(DISABLE_DUTY_CYCLE);
dot->setLinkCheckThreshold(0);
dot->setLinkCheckCount(0);
// Seed the RNG
srand(dot->getRadioRandom());
gps = new GPSPARSER(&gps_serial, led_cont);
sensors = new SensorHandler();
led_cont->setLEDCurrent(16);
MTSLog::setLogLevel(MTSLog::TRACE_LEVEL);
modeJoin = new ModeJoin(lcd, buttons, dot, lora_handler, gps, sensors);
modeSingle = new ModeSingle(lcd, buttons, dot, lora_handler, gps, sensors);
modeSweep = new ModeSweep(lcd, buttons, dot, lora_handler, gps, sensors);
modeDemo = new ModeDemo(lcd, buttons, dot, lora_handler, gps, sensors);
modeConfig = new ModeConfig(lcd, buttons, dot, lora_handler, gps, sensors);
modeGps = new ModeGps(lcd, buttons, dot, lora_handler, gps, sensors, modeJoin);
modeData = new ModeData(lcd, buttons, dot, lora_handler, gps, sensors);
osDelay(1000);
logInfo("%sGPS detected", gps->gpsDetected() ? "" : "no ");
// display startup screen for 3 seconds
LayoutStartup ls(lcd, dot);
ls.display();
ls.updateGPS(gps->gpsDetected());
osDelay(3000);
logInfo("displaying main menu");
mainMenu();
return 0;
}
void mainMenu() {
bool mode_selected = false;
std::string selected;
std::string product;
typedef enum {
demo = 1,
config,
single,
sweep,
gps,
data
} menu_items;
std::string menu_strings[] = {
"Select Mode",
"LoRa Demo",
"Configuration",
"Survey Single",
"Survey Sweep",
"Survey GPS",
"View Data"
};
std::vector<std::string> items;
items.push_back(menu_strings[demo]);
items.push_back(menu_strings[config]);
items.push_back(menu_strings[single]);
items.push_back(menu_strings[sweep]);
items.push_back(menu_strings[gps]);
items.push_back(menu_strings[data]);
while (true) {
product = "DOT-BOX/EVB ";
product += mDot::FrequencyBandStr(dot->getFrequencyBand());
// reset session between modes
dot->resetNetworkSession();
lora_handler->resetActivityLed();
LayoutScrollSelect menu(lcd, items, product, menu_strings[0]);
// menu.display();
/*while (! mode_selected) {
osEvent e = Thread::signal_wait(buttonSignal);
if (e.status == osEventSignal) {
ButtonHandler::ButtonEvent ev = buttons->getButtonEvent();
switch (ev) {
case ButtonHandler::sw1_press:
selected = menu.select();
mode_selected = true;
break;
case ButtonHandler::sw2_press:
menu.scroll();
break;
case ButtonHandler::sw1_hold:
break;
default:
break;
}
}
}*/
selected = menu_strings[single];
if (selected == menu_strings[demo]) {
if (modeJoin->start())
modeDemo->start();
} else if (selected == menu_strings[config]) {
modeConfig->start();
} else if (selected == menu_strings[single]) {
if (modeJoin->start())
modeSingle->start();
} else if (selected == menu_strings[sweep]) {
if (modeJoin->start())
modeSweep->start();
} else if (selected == menu_strings[gps]) {
if(dot->getFrequencyBand() == mDot::FB_EU868) {
modeJoin->start();
}
modeGps->start();
} else if (selected == menu_strings[data]) {
modeData->start();
}
mode_selected = false;
}
}
