Add logging and fix compilation errors

This commit is contained in:
ezratl 2019-02-24 22:28:12 -05:00
parent 3112e90c89
commit 8110b023a1
19 changed files with 3325 additions and 108 deletions

View File

@ -2,4 +2,10 @@ cmake_minimum_required (VERSION 2.6)
project (piScan_backend)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall")
add_executable(piScan_backend piScan_backend.cpp)
target_link_libraries(piScan_backend pthread dl)
include_directories(core drivers external scan server sigproc)

View File

@ -56,7 +56,7 @@ void ScannerStateMachine::stopScanner(){
END_TRANSITION_MAP(NULL)
}
void ScannerStateMachine::ST_Load(){
void ScannerStateMachine::ST_Load(EventData* data){
//file read and system tree population
// do not issue event - SM will wait until an event is generated before proceeding
@ -65,7 +65,7 @@ void ScannerStateMachine::ST_Load(){
_centralQueue.giveMessage(message);
}
void ScannerStateMachine::ST_Scan(){
void ScannerStateMachine::ST_Scan(EventData* data){
_enableAudioOut(false);
// incremental scan pattern
@ -90,7 +90,7 @@ void ScannerStateMachine::ST_Scan(){
}
void ScannerStateMachine::ST_Hold(){
void ScannerStateMachine::ST_Hold(EventData* data){
_enableAudioOut(false);
_broadcastEntryContext(_currentSystem, _currentEntry);
@ -99,7 +99,7 @@ void ScannerStateMachine::ST_Hold(){
}
}
void ScannerStateMachine::ST_Receive(){
void ScannerStateMachine::ST_Receive(EventData* data){
_enableAudioOut(true);
_broadcastEntryContext(_currentSystem, _currentEntry);
@ -111,16 +111,16 @@ void ScannerStateMachine::ST_Receive(){
}
}
void ScannerStateMachine::ST_Manual(){
void ScannerStateMachine::ST_Manual(EventData* data){
//TODO state for later implementation
}
void ScannerStateMachine::ST_SaveAll(){
void ScannerStateMachine::ST_SaveAll(EventData* data){
InternalEvent(ST_STOPPED);
}
void ScannerStateMachine::ST_Stopped(){
void ScannerStateMachine::ST_Stopped(EventData* data){
Message& message = new ControllerMessage(SCANNER_SM, ControllerMessage::NOTIFY_STOPPED);
_centralQueue.giveMessage(message);
}

View File

@ -24,22 +24,22 @@ public:
void stopScanner();
void giveMessage(Message& message);
private:
void ST_Load();
void ST_Scan();
void ST_Hold();
void ST_Receive();
void ST_Manual();
void ST_SaveAll();
void ST_Stopped();
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(ST_Load)
STATE_MAP_ENTRY(ST_Scan)
STATE_MAP_ENTRY(ST_Hold)
STATE_MAP_ENTRY(ST_Receive)
STATE_MAP_ENTRY(ST_Manual)
STATE_MAP_ENTRY(ST_SaveAll)
STATE_MAP_ENTRY(ST_Stopped)
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 {
@ -62,11 +62,11 @@ private:
struct EntryContext {
States state;
const RadioSystem& system;
const Entry& entry;
const RadioSystem* system;
const Entry* entry;
};
EntryContext _currentContext = {0, NULL, NULL};
EntryContext _currentContext = {(States) 0, NULL, NULL};
void _broadcastSystemContext(RadioSystem& sys);
void _broadcastEntryContext(RadioSystem& sys, Entry& entry);

View File

@ -58,10 +58,10 @@ const StateStruct* GetStateMap() {\
static const StateStruct StateMap[] = {
#define STATE_MAP_ENTRY(entry)\
{ reinterpret_cast<StateFunc>(entry) },
{ static_cast<StateFunc>/*(static_cast<void(*)(EventData*)>*/(entry)/*)*/ },
#define END_STATE_MAP \
{ reinterpret_cast<StateFunc>(NULL) }\
{ /*reinterpret_cast<StateFunc>*/(NULL) }\
}; \
return &StateMap[0]; }

View File

@ -0,0 +1,20 @@
/*
* constants.h
*
* Created on: Feb 24, 2019
* Author: ezra
*/
#ifndef CORE_CONSTANTS_H_
#define CORE_CONSTANTS_H_
#ifndef NDEBUG
#define LOG_PATH "log.txt"
#define CONFIG_PATH "piscan.config"
#else
#define LOG_PATH "~/piscan.log"
#define CONFIG_PATH "~/piscan.config"
#endif
#endif /* CORE_CONSTANTS_H_ */

1787
piScan_backend/src/external/loguru.cpp vendored Normal file

File diff suppressed because it is too large Load Diff

1324
piScan_backend/src/external/loguru.hpp vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,33 @@
#include <iostream>
using namespace std;
#include "constants.h"
#include "Demodulator.h"
//#include "loguru.hpp"
#include "loguru.cpp"
#include "messages.h"
#include "ServerManager.h"
#include "ScannerStateMachine.h"
#include "SystemList.h"
class MessageManager : public MessageReceiver {
public:
MessageManager();
private:
moodycamel::ConcurrentQueue<Message> _queue;
void giveMessage(Message& message){
_queue.enqueue(message);
}
};
int main(int argc, char **argv) {
cout << "Hello world";
//cout << "Hello world";
loguru::init(argc, argv);
loguru::add_file(LOG_PATH, loguru::Truncate, loguru::Verbosity_MAX);
loguru::g_stderr_verbosity = loguru::Verbosity_MAX;
LOG_F(INFO, "PiScan started");
return 0;
}

View File

@ -14,14 +14,14 @@
class Entry {
public:
virtual Entry(char* tag, bool lo, bool del);
Entry(char* tag, bool lo, bool del);
virtual ~Entry();
char* getTag() { return &tag[0]; }
virtual char* getModulation() = 0;
virtual char* getIdentity() = 0;
bool isLockedOut() { return lockedOut; }
void lockout(bool val) : lockedOut(val){}
void lockout(bool val) { lockedOut = val; }
virtual bool hasSignal() = 0;
protected:
@ -34,7 +34,7 @@ protected:
class Channel: public Entry {
public:
virtual Channel(unsigned long freq, char* tag, bool lo, bool del) : frequency(freq){}
Channel(unsigned long freq, char* tag, bool lo, bool del) : Entry(tag, lo, del), frequency(freq){}
virtual ~Channel();
protected:
const unsigned long frequency;

View File

@ -9,6 +9,7 @@
#define RADIOSYSTEM_H_
#include <stdint.h>
#include <string>
#include "Entry.h"
@ -18,7 +19,7 @@ typedef enum {
class RadioSystem {
public:
RadioSystem() = 0;
RadioSystem();
virtual ~RadioSystem();
virtual Entry& operator[](size_t pos) = 0;
@ -26,7 +27,7 @@ public:
size_t size() { return _size; }
private:
//const RadioSystemType type;
const char tag[];
const std::string tag;
size_t _size = 0;
};

View File

@ -8,7 +8,7 @@
#ifndef SYSTEMLIST_H_
#define SYSTEMLIST_H_
#include <list>
#include <vector>
#include "RadioSystem.h"
@ -20,7 +20,7 @@ public:
size_t size(){ return _size; }
private:
RadioSystem& _systems[];
std::vector<RadioSystem*> _systems;
size_t _size = 0;
};

View File

@ -1,18 +0,0 @@
/*
* ServerDebugOutput.cpp
*
* Created on: Oct 21, 2018
* Author: ezra
*/
#include "DebugOutputServer.h"
DebugOutputServer::DebugOutputServer() {
// TODO Auto-generated constructor stub
}
DebugOutputServer::~DebugOutputServer() {
// TODO Auto-generated destructor stub
}

View File

@ -1,17 +0,0 @@
/*
* ServerDebugOutput.h
*
* Created on: Oct 21, 2018
* Author: ezra
*/
#ifndef SERVERDEBUGOUTPUT_H_
#define SERVERDEBUGOUTPUT_H_
class DebugOutputServer {
public:
DebugOutputServer();
virtual ~DebugOutputServer();
};
#endif /* SERVERDEBUGOUTPUT_H_ */

View File

@ -0,0 +1,41 @@
/*
* ServerDebugOutput.cpp
*
* Created on: Oct 21, 2018
* Author: ezra
*/
#include <iostream>
#include "DebugServer.h"
void DebugConsole::connect(){
std::cout << "Console connected";
}
void DebugConsole::disconnect(){
std::cout << "Console disconnected";
notifyDisconnected();
}
void DebugConsole::giveMessage(Message& message){
delete message;
}
void DebugServer::start(){
_connection();
_host.requestConnection(_connection);
}
void DebugServer::stop(){
}
void DebugServer::giveMessage(Message& message){
delete message;
}

View File

@ -0,0 +1,34 @@
/*
* ServerDebugOutput.h
*
* Created on: Oct 21, 2018
* Author: ezra
*/
#ifndef SERVERDEBUGOUTPUT_H_
#define SERVERDEBUGOUTPUT_H_
#include "BackendServer.h"
#include "ServerManager.h"
class DebugConsole : public Connection {
public:
DebugConsole() : Connection(FULL_CONTROL, AUDIO_NONE) {}
void connect();
void disconnect();
void giveMessage(Message& message);
};
class DebugServer : public BackendServer {
public:
DebugServer(ServerInterface& host) : _host(host) {}
void start();
void stop();
void giveMessage(Message& message);
private:
DebugConsole _connection;
};
#endif /* SERVERDEBUGOUTPUT_H_ */

View File

@ -10,7 +10,7 @@
#define MAX_CONNECTIONS 5
#define QUEUE_SIZE 64
ServerManager::ServerManager(MessageReceiver central) :
ServerManager::ServerManager(MessageReceiver& central) :
_centralQueue(central), _queue(QUEUE_SIZE), _activeConnections(0), _connections(
MAX_CONNECTIONS) {
@ -27,7 +27,7 @@ void ServerManager::allowConnections(){
void ServerManager::disconnectClients(){
//TODO might need locks for array
for(int i = 0; i < MAX_CONNECTIONS; ++i){
Connection::Connection con = _connections[i];
Connection::Connection& con = _connections[i];
if(con != NULL){
con.disconnect();
}
@ -37,23 +37,23 @@ void ServerManager::disconnectClients(){
void ServerManager::_queueThreadFunc(void){
//todo break condition
while(1){
Message message;
if(_queue.try_dequeue(&message)){
Message& message;
if(_queue.try_dequeue(message)){
if(message.destination != SERVER_MAN){
_centralQueue.giveMessage(message);
}
else{
//todo
_handleMessage(message);
}
}
}
}
void ServerManager::giveMessage(Message message){
void ServerManager::giveMessage(Message& message){
_queue.enqueue(message);
}
ServerInterface::RequestResponse ServerManager::requestConnection(Connection::Connection client){
ServerInterface::RequestResponse ServerManager::requestConnection(Connection& client){
if(_activeConnections < MAX_CONNECTIONS){
_addConnection(client);
return RQ_ACCEPTED;
@ -64,7 +64,7 @@ ServerInterface::RequestResponse ServerManager::requestConnection(Connection::Co
}
}
ServerInterface::RequestResponse ServerManager::giveRequest(ClientRequest request){
ServerInterface::RequestResponse ServerManager::giveRequest(ClientRequest& request){
if(_connections[request.src._handle] != request.src){
delete request;
return RQ_INVALID_HANDLE;
@ -75,45 +75,47 @@ ServerInterface::RequestResponse ServerManager::giveRequest(ClientRequest reques
}
//todo new message, request passed as data
unsigned char dest = 0;
//unsigned char dest = 0;
Message message;
switch(request.requestType){
case ClientRequest::SYSTEM_FUNCTION:
dest = SYSTEM_CONTROL;
//dest = SYSTEM_CONTROL;
break;
case ClientRequest::SCANNER_FUNCTION:
//dest = SCANNER_SM;
message = new ScannerMessage(CLIENT, ScannerMessage::CLIENT_REQUEST, request);
message = new ScannerMessage(CLIENT, ScannerMessage::CLIENT_REQUEST, &request);
break;
case ClientRequest::DATABASE_RETRIEVE:
dest = SYSTEM_CONTROL;
//dest = SYSTEM_CONTROL;
break;
case ClientRequest::DATABASE_MODIFY:
dest = SYSTEM_CONTROL;
//dest = SYSTEM_CONTROL;
break;
case ClientRequest::CONFIG_RETRIEVE:
dest = SYSTEM_CONTROL;
//dest = SYSTEM_CONTROL;
break;
case ClientRequest::CONFIG_MODIFY:
dest = SYSTEM_CONTROL;
//dest = SYSTEM_CONTROL;
break;
}
this->giveMessage(message);
delete request;
//delete request;
return RQ_ACCEPTED;
}
void ServerManager::_handleMessage(Message message){
void ServerManager::_handleMessage(Message& message){
//TODO
}
void ServerManager::_addConnection(Connection::Connection client){
void ServerManager::_addConnection(Connection& client){
//TODO
for(int i = 0; i < MAX_CONNECTIONS; ++i){
if(_connections[i] == NULL){
_connections[i] = client;
client._handle = i;
client.serverManager = this;
client.connect();
}
}
}

View File

@ -8,6 +8,8 @@
#ifndef SERVER_SERVERMANAGER_H_
#define SERVER_SERVERMANAGER_H_
#include <vector>
#include "messages.h"
class Connection;
@ -30,17 +32,21 @@ public:
Connection(ConnectionLevel lvl, AudioReceive aud);
virtual void giveMessage(Message message) = 0;
void disconnect();
virtual void giveMessage(Message& message) = 0;
virtual void connect() = 0;
virtual void disconnect() = 0;
private:
friend class ServerManager;
int _handle;
ConnectionLevel _level;
AudioReceive _audio;
ServerInterface _serverManager;
protected:
ServerInterface& serverManager;
void _notifyDisconnected();
void notifyDisconnected() {
}
};
class ClientRequest : public Message {
@ -51,7 +57,7 @@ public:
};
enum RequestType {
SYSTEM_FUNCTION,
SYSTEM_FUNCTION = 0,
SCANNER_FUNCTION,
DATABASE_RETRIEVE,
DATABASE_MODIFY,
@ -59,10 +65,10 @@ public:
CONFIG_MODIFY,
};
ClientRequest(Connection client, unsigned char dst);
ClientRequest(Connection& client, unsigned char dst);
private:
static const Connection::ConnectionLevel permissionMap = {
static constexpr Connection::ConnectionLevel permissionMap[] = {
[SYSTEM_FUNCTION] = Connection::ConnectionLevel::FULL_CONTROL,
[SCANNER_FUNCTION] = Connection::ConnectionLevel::FULL_CONTROL,
[DATABASE_RETRIEVE] = Connection::ConnectionLevel::VIEWER,
@ -72,14 +78,13 @@ private:
};
friend class ServerManager;
Connection src;
Connection& src;
RequestType requestType;
void (*_callback)(void*);
};
class ServerInterface {
public:
ServerInterface() = 0;
virtual ~ServerInterface();
enum RequestResponse {
@ -89,31 +94,31 @@ public:
RQ_INVALID_HANDLE,
};
virtual RequestResponse requestConnection(Connection::Connection client) = 0;
virtual RequestResponse giveRequest(ClientRequest request) = 0;
virtual RequestResponse requestConnection(Connection& client) = 0;
virtual RequestResponse giveRequest(ClientRequest& request) = 0;
};
class ServerManager : public MessageReceiver, ServerInterface {
public:
ServerManager(MessageReceiver central);
ServerManager(MessageReceiver& central);
void start();
void allowConnections();
void disconnectClients();
void giveMessage(Message message);
void giveMessage(Message& message);
protected:
private:
moodycamel::ConcurrentQueue _queue;
moodycamel::ConcurrentQueue<Message> _queue;
int _activeConnections;
Connection _connections[];
MessageReceiver _centralQueue;
std::vector<Connection*> _connections;
MessageReceiver& _centralQueue;
void _queueThreadFunc(void);
void _handleMessage(Message message);
void _addConnection(Connection::Connection client);
RequestResponse requestConnection(Connection::Connection client);
RequestResponse giveRequest(ClientRequest request);
void _handleMessage(Message& message);
void _addConnection(Connection& client);
RequestResponse requestConnection(Connection& client);
RequestResponse giveRequest(ClientRequest& request);
};

View File

@ -9,7 +9,16 @@
#define SERVER_SOCKETSERVER_H_
#include "BackendServer.h"
#include "ServerManager.h"
class SocketConnection : public Connection {
public:
private:
};
/* listener for socket connections */
class SocketServer: public BackendServer {
public:
SocketServer();

View File

@ -28,7 +28,7 @@ private:
bool setFrequency(unsigned long freq);
int getRssi();
float getDecodedPL();
int getDecodedDC();
unsigned int getDecodedDC();
bool squelchThresholdMet();
};