mirror of
https://github.com/peterantypas/maiana.git
synced 2025-05-27 21:00:24 -07:00
More cleanup
This commit is contained in:
parent
ec3c02f093
commit
b0115b9c4a
@ -20,7 +20,7 @@ typedef enum {
|
||||
GPS_FIX_EVENT = 2, // The GPS obtained a fix.
|
||||
CLOCK_EVENT = 4, // One pulse per second as triggered by GPS. This is a convenient 1 Hz "wall" clock, as it carries UTC.
|
||||
AIS_PACKET_EVENT = 8, // A packet was just decoded (not necessarily valid, must still be CRC checked, etc)
|
||||
PACKET_SENT_EVENT = 16,
|
||||
INTERROGATION_EVENT = 16,
|
||||
DEBUG_EVENT = 32,
|
||||
KEYPRESS_EVENT = 64
|
||||
//GPS_ERROR_EVENT = 64, // A GPS failure
|
||||
|
@ -17,11 +17,11 @@ EventPool &EventPool::instance()
|
||||
|
||||
void EventPool::init()
|
||||
{
|
||||
mAISPacketPool = new ObjectPool<AISPacketEvent>(20);
|
||||
mGenericPool = new ObjectPool<Event>(10);
|
||||
mAISPacketPool = new ObjectPool<AISPacketEvent>(40);
|
||||
mGPSNMEAPool = new ObjectPool<GPSNMEASentence>(20);
|
||||
mGPSFixPool = new ObjectPool<GPSFIXEvent>(10);
|
||||
mClockPool = new ObjectPool<ClockEvent>(10);
|
||||
mAISPacketSentPool = new ObjectPool<AISPacketSentEvent>(5);
|
||||
mDebugEventPool = new ObjectPool<DebugEvent>(2);
|
||||
mKeyPressPool = new ObjectPool<KeyPressEvent>(20);
|
||||
}
|
||||
@ -43,10 +43,6 @@ Event *EventPool::newEvent(EventType type)
|
||||
result = mAISPacketPool->get();
|
||||
break;
|
||||
}
|
||||
case PACKET_SENT_EVENT: {
|
||||
result = mAISPacketSentPool->get();
|
||||
break;
|
||||
}
|
||||
case DEBUG_EVENT: {
|
||||
result = mDebugEventPool->get();
|
||||
break;
|
||||
@ -56,7 +52,9 @@ Event *EventPool::newEvent(EventType type)
|
||||
break;
|
||||
}
|
||||
default:
|
||||
result = NULL;
|
||||
result = mGenericPool->get();
|
||||
result->mType = type;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( result )
|
||||
@ -89,11 +87,6 @@ void EventPool::deleteEvent(Event *event)
|
||||
mAISPacketPool->put(p);
|
||||
break;
|
||||
}
|
||||
case PACKET_SENT_EVENT: {
|
||||
AISPacketSentEvent *p = static_cast<AISPacketSentEvent*>(event);
|
||||
mAISPacketSentPool->put(p);
|
||||
break;
|
||||
}
|
||||
case DEBUG_EVENT: {
|
||||
DebugEvent *e = static_cast<DebugEvent*>(event);
|
||||
mDebugEventPool->put(e);
|
||||
@ -105,6 +98,7 @@ void EventPool::deleteEvent(Event *event)
|
||||
break;
|
||||
}
|
||||
default:
|
||||
mGenericPool->put(event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -25,13 +25,29 @@ using namespace std;
|
||||
*/
|
||||
class Event
|
||||
{
|
||||
friend class EventPool;
|
||||
public:
|
||||
Event () {};
|
||||
virtual ~Event () {};
|
||||
virtual void prepare() {}
|
||||
virtual void clear() {}
|
||||
Event()
|
||||
: mType(UNKNOWN_EVENT) {
|
||||
}
|
||||
|
||||
virtual EventType type() = 0;
|
||||
Event (EventType type): mType(type) {
|
||||
}
|
||||
|
||||
virtual ~Event () {
|
||||
}
|
||||
|
||||
virtual void prepare() {
|
||||
}
|
||||
|
||||
virtual void clear() {
|
||||
}
|
||||
|
||||
virtual EventType type() {
|
||||
return mType;
|
||||
}
|
||||
protected:
|
||||
EventType mType;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -48,19 +64,18 @@ public:
|
||||
class GPSNMEASentence : public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return GPS_NMEA_SENTENCE;
|
||||
GPSNMEASentence()
|
||||
: Event(GPS_NMEA_SENTENCE){
|
||||
}
|
||||
|
||||
|
||||
char mSentence[100];
|
||||
};
|
||||
|
||||
class GPSFIXEvent: public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return GPS_FIX_EVENT;
|
||||
GPSFIXEvent()
|
||||
: Event(GPS_FIX_EVENT) {
|
||||
}
|
||||
|
||||
time_t mUTC;
|
||||
@ -73,20 +88,22 @@ public:
|
||||
class ClockEvent : public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return CLOCK_EVENT;
|
||||
ClockEvent()
|
||||
: Event(CLOCK_EVENT) {
|
||||
}
|
||||
|
||||
|
||||
time_t mTime;
|
||||
};
|
||||
|
||||
class AISPacketEvent: public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return AIS_PACKET_EVENT;
|
||||
AISPacketEvent()
|
||||
: Event(AIS_PACKET_EVENT) {
|
||||
}
|
||||
|
||||
|
||||
void prepare()
|
||||
{
|
||||
//mPacket = RXPacketPool::instance().newRXPacket();
|
||||
@ -102,23 +119,12 @@ public:
|
||||
RXPacket *mPacket;
|
||||
};
|
||||
|
||||
class AISPacketSentEvent : public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return PACKET_SENT_EVENT;
|
||||
}
|
||||
|
||||
uint8_t mChannel;
|
||||
uint16_t mSize;
|
||||
};
|
||||
|
||||
|
||||
class DebugEvent: public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return DEBUG_EVENT;
|
||||
DebugEvent()
|
||||
: Event(DEBUG_EVENT) {
|
||||
}
|
||||
|
||||
char mBuffer[256];
|
||||
@ -127,10 +133,11 @@ public:
|
||||
class KeyPressEvent : public Event
|
||||
{
|
||||
public:
|
||||
EventType type() {
|
||||
return KEYPRESS_EVENT;
|
||||
KeyPressEvent()
|
||||
: Event(KEYPRESS_EVENT) {
|
||||
}
|
||||
|
||||
|
||||
char key;
|
||||
};
|
||||
|
||||
@ -144,11 +151,11 @@ public:
|
||||
void deleteEvent(Event *event);
|
||||
|
||||
private:
|
||||
ObjectPool<Event> *mGenericPool;
|
||||
ObjectPool<AISPacketEvent> *mAISPacketPool;
|
||||
ObjectPool<GPSNMEASentence> *mGPSNMEAPool;
|
||||
ObjectPool<GPSFIXEvent> *mGPSFixPool;
|
||||
ObjectPool<ClockEvent> *mClockPool;
|
||||
ObjectPool<AISPacketSentEvent> *mAISPacketSentPool;
|
||||
ObjectPool<DebugEvent> *mDebugEventPool;
|
||||
ObjectPool<KeyPressEvent> *mKeyPressPool;
|
||||
};
|
||||
|
@ -25,7 +25,7 @@ NMEAEncoder::~NMEAEncoder()
|
||||
{
|
||||
}
|
||||
|
||||
void NMEAEncoder::encode(RXPacket &packet, list<string> &sentences)
|
||||
void NMEAEncoder::encode(RXPacket &packet, vector<string> &sentences)
|
||||
{
|
||||
static uint16_t MAX_SENTENCE_BYTES = 56;
|
||||
static uint16_t MAX_SENTENCE_BITS = MAX_SENTENCE_BYTES * 6;
|
||||
|
@ -8,7 +8,7 @@
|
||||
#ifndef NMEAENCODER_HPP_
|
||||
#define NMEAENCODER_HPP_
|
||||
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include "RXPacket.hpp"
|
||||
using namespace std;
|
||||
@ -20,7 +20,7 @@ public:
|
||||
NMEAEncoder();
|
||||
virtual ~NMEAEncoder();
|
||||
|
||||
void encode(RXPacket &packet, list<string> &sentences);
|
||||
void encode(RXPacket &packet, vector<string> &sentences);
|
||||
private:
|
||||
uint8_t nmeaCRC(const char* buff);
|
||||
private:
|
||||
|
@ -20,6 +20,8 @@
|
||||
RXPacketProcessor::RXPacketProcessor ()
|
||||
: mLastDumpTime(0), mGoodCount(0), mBadCRCCount(0), mInvalidCount(0), mLat(-200), mLng(-200)
|
||||
{
|
||||
mSentences.reserve(4); // We're not going to need more than 2 sentences for the longest AIS message we report ...
|
||||
EEPROM::instance().readStationData(mStationData);
|
||||
EventQueue::instance().addObserver(this, AIS_PACKET_EVENT | CLOCK_EVENT | GPS_FIX_EVENT);
|
||||
}
|
||||
|
||||
@ -67,7 +69,6 @@ void RXPacketProcessor::processEvent(Event *e)
|
||||
|
||||
if (pe->mPacket->checkCRC ()) {
|
||||
++mGoodCount;
|
||||
list<string> sentences;
|
||||
|
||||
mUniqueMMSIs.insert (pe->mPacket->mmsi ());
|
||||
switch (pe->mPacket->messageType ()) {
|
||||
@ -121,17 +122,16 @@ void RXPacketProcessor::processEvent(Event *e)
|
||||
}
|
||||
|
||||
#ifdef ENABLE_TERMINAL
|
||||
mEncoder.encode (*pe->mPacket, sentences);
|
||||
for (list<string>::iterator i = sentences.begin ();
|
||||
i != sentences.end (); ++i) {
|
||||
DataTerminal::instance ().write (i->c_str ());
|
||||
DataTerminal::instance ().write ("\r\n");
|
||||
mSentences.clear();
|
||||
mEncoder.encode(*pe->mPacket, mSentences);
|
||||
for (vector<string>::iterator i = mSentences.begin(); i != mSentences.end(); ++i) {
|
||||
DataTerminal::instance().write(i->c_str());
|
||||
DataTerminal::instance().write("\r\n");
|
||||
}
|
||||
#endif
|
||||
// TODO: Move this out of here
|
||||
switch (pe->mPacket->messageType ()) {
|
||||
switch (pe->mPacket->messageType()) {
|
||||
case 15:
|
||||
// TODO: This is an interrogation. Check if we are any of the 3 possible recipients and respond with message 18
|
||||
// TODO: This is an interrogation. If we are a target, push an appropriate event into the queue
|
||||
break;
|
||||
case 20:
|
||||
// TODO: This is a time slot reservation from a base station. Possibly use this information to augment CCA?
|
||||
|
@ -11,7 +11,8 @@
|
||||
#include "Events.hpp"
|
||||
#include "NMEAEncoder.hpp"
|
||||
#include <set>
|
||||
|
||||
#include "EEPROM.hpp"
|
||||
#include <vector>
|
||||
|
||||
class RXPacketProcessor : public EventConsumer
|
||||
{
|
||||
@ -30,6 +31,8 @@ private:
|
||||
double mLat;
|
||||
double mLng;
|
||||
std::set<uint32_t> mUniqueMMSIs;
|
||||
std::vector<std::string> mSentences;
|
||||
StationData mStationData;
|
||||
};
|
||||
|
||||
#endif /* RXPACKETPROCESSOR_HPP_ */
|
||||
|
@ -46,7 +46,6 @@ void TXScheduler::startTXTesting()
|
||||
|
||||
void TXScheduler::processEvent(Event *event)
|
||||
{
|
||||
//printf2("-> TXScheduler::processEvent()\r\n");
|
||||
#ifndef ENABLE_TX
|
||||
return;
|
||||
#endif
|
||||
@ -56,9 +55,6 @@ void TXScheduler::processEvent(Event *event)
|
||||
if ( mTesting )
|
||||
return;
|
||||
|
||||
//if ( Radio::instance().isCalibratingRSSI() )
|
||||
// return;
|
||||
|
||||
GPSFIXEvent *gfe = static_cast<GPSFIXEvent*> (event);
|
||||
|
||||
//printf2("UTC: %d\r\n", mUTC);
|
||||
@ -132,7 +128,6 @@ void TXScheduler::processEvent(Event *event)
|
||||
break;
|
||||
}
|
||||
|
||||
//printf2("<- TXScheduler::processEvent()\r\n");
|
||||
}
|
||||
|
||||
void TXScheduler::scheduleTestPacket()
|
||||
|
Loading…
x
Reference in New Issue
Block a user