PiScan/piScan_backend/src/core/ScannerStateMachine.h

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_ */