78 lines
1.8 KiB
C++
78 lines
1.8 KiB
C++
/*
|
|
* ScannerStateMachine.h
|
|
*
|
|
* Created on: Feb 9, 2019
|
|
* Author: ezra
|
|
*/
|
|
|
|
#ifndef SERVER_SCANNERSTATEMACHINE_H_
|
|
#define SERVER_SCANNERSTATEMACHINE_H_
|
|
|
|
#include "StateMachine.h"
|
|
#include "SystemList.h"
|
|
#include "Entry.h"
|
|
#include "messages.h"
|
|
|
|
|
|
class ScannerStateMachine: public MessageReceiver, StateMachine {
|
|
public:
|
|
ScannerStateMachine(MessageReceiver& central, SystemList& dataSource);
|
|
//~ScannerStateMachine();
|
|
|
|
void startScan();
|
|
void holdScan();
|
|
void stopScanner();
|
|
void giveMessage(Message& message);
|
|
private:
|
|
void ST_Load(EventData* data);
|
|
void ST_Scan(EventData* data);
|
|
void ST_Hold(EventData* data);
|
|
void ST_Receive(EventData* data);
|
|
void ST_Manual(EventData* data);
|
|
void ST_SaveAll(EventData* data);
|
|
void ST_Stopped(EventData* data);
|
|
|
|
BEGIN_STATE_MAP
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_Load)
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_Scan)
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_Hold)
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_Receive)
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_Manual)
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_SaveAll)
|
|
STATE_MAP_ENTRY(&ScannerStateMachine::ST_Stopped)
|
|
END_STATE_MAP
|
|
|
|
enum States {
|
|
ST_LOAD = 0,
|
|
ST_SCAN,
|
|
ST_HOLD,
|
|
ST_RECEIVE,
|
|
ST_MANUAL,
|
|
ST_SAVEALL,
|
|
ST_STOPPED,
|
|
};
|
|
|
|
private:
|
|
MessageReceiver& _centralQueue;
|
|
//moodycamel::ReaderWriterQueue<Message> _msgQueue;
|
|
SystemList& _systems;
|
|
RadioSystem& _currentSystem;
|
|
Entry& _currentEntry;
|
|
size_t _sysCounter = 0, _entryCounter = 0;
|
|
|
|
struct EntryContext {
|
|
States state;
|
|
const RadioSystem* system;
|
|
const Entry* entry;
|
|
};
|
|
|
|
EntryContext _currentContext = {(States) 0, NULL, NULL};
|
|
|
|
void _broadcastSystemContext(RadioSystem& sys);
|
|
void _broadcastEntryContext(RadioSystem& sys, Entry& entry);
|
|
void _enableAudioOut(bool en);
|
|
|
|
};
|
|
|
|
#endif /* SERVER_SCANNERSTATEMACHINE_H_ */
|