/*
Copyright (c) 2016-2020 Peter Antypas
This file is part of the MAIANAâ„¢ transponder firmware.
The firmware is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
*/
#include
#include
#include "Configuration.hpp"
#include "Utils.hpp"
#include "config.h"
#include "EventQueue.hpp"
#include "bsp.hpp"
#if 0
// This has no effect anymore, just left here for reference
static StationData __THIS_STATION__ = {
STATION_DATA_MAGIC,
987654321, // MMSI
"NAUT", // Name
"", // Call sign
0, // Length overall
0, // Beam
0, // Bow offset
0, // Port offset
VESSEL_TYPE_UNSPECIFIED
};
#endif
Configuration &Configuration::instance()
{
static Configuration __instance;
return __instance;
}
Configuration::Configuration()
{
}
void Configuration::init()
{
reportStationData();
}
void Configuration::reportStationData()
{
StationData d;
if ( !readStationData(d) )
memset(&d, 0, sizeof d);
Event *e = EventPool::instance().newEvent(PROPR_NMEA_SENTENCE);
if ( !e )
return;
sprintf(e->nmeaBuffer.sentence,
"$PAISTN,%lu,%s,%s,%d,%d,%d,%d,%d*",
d.mmsi,
d.name,
d.callsign,
d.type,
d.len,
d.beam,
d.portOffset,
d.bowOffset);
Utils::completeNMEA(e->nmeaBuffer.sentence);
EventQueue::instance().push(e);
}
void Configuration::resetToDefaults()
{
if ( bsp_erase_station_data() )
bsp_reboot();
}
bool Configuration::writeStationData(const StationData &data)
{
if ( bsp_save_station_data(data) )
{
bsp_reboot();
return true;
}
return false;
}
bool Configuration::readStationData(StationData &data)
{
return bsp_read_station_data(data) && data.magic == STATION_DATA_MAGIC;
}