#include "lfr_state_machine.h" | #include "lfr_state_machine.h" | ||||
LFR_StateMachine::LFR_StateMachine(LFR_IState& startState): | |||||
autonomousMode(videoHeight, videoWidth, thresholdBinary, gaussKernelSize, [&](std::exception const &ex) | |||||
{ | |||||
std::unique_lock<std::mutex> lock(mutex); | |||||
std::cerr<<"camera exception:"<<ex.what()<<std::endl; | |||||
return false; | |||||
}), | |||||
uartCommunicator(), | |||||
socket([&](std::exception const &ex) | |||||
{ | |||||
std::unique_lock<std::mutex> lock(mutex); | |||||
std::cerr<<"socket exception:"<<ex.what()<<std::endl; | |||||
return false; | |||||
}) | |||||
{ | |||||
// Connect String parser to socket | |||||
socket.addListener([&](LFR_Socket::LFR_Telegram telegram) | |||||
{ | |||||
std::unique_lock<std::mutex> lock(mutex); | |||||
std::cout << telegram; | |||||
}, &mutex); | |||||
socket.startLoop(); | |||||
currentState = &startState; | |||||
currentState->enter(this); | |||||
//Start the permanent loop | |||||
char input; | |||||
std::cout << "press q to quit" << std::endl; | |||||
std::cin >> input; | |||||
std::cout << "binned" << std::endl; | |||||
while (input != 'q') | |||||
{ | |||||
std::cin >> input; | |||||
std::cout << "binned" << std::endl; | |||||
} | |||||
std::cout << "Exiting central" << std::endl; | |||||
} |
#pragma once | #pragma once | ||||
#include <iostream> | |||||
#include <lfr.h> | |||||
#include <lfr_socket.h> | |||||
#include <uart_communication.h> | |||||
#include "lfr_state_interface.h" | #include "lfr_state_interface.h" | ||||
class LFR_StateMachine | class LFR_StateMachine | ||||
{ | { | ||||
LFR_IState* currentState; | LFR_IState* currentState; | ||||
LFR_StateMachine() = delete; | LFR_StateMachine() = delete; | ||||
const int thresholdBinary = 140; | |||||
const int videoHeight = 720; | |||||
const int videoWidth = 1280; | |||||
const int gaussKernelSize = 11; | |||||
std::mutex mutex; | |||||
LFR autonomousMode; | |||||
LFR_UART uartCommunicator; | |||||
LFR_Socket socket; | |||||
public: | public: | ||||
LFR_StateMachine(LFR_IState& startState){ | |||||
currentState = &startState; | |||||
currentState->enter(this); | |||||
} | |||||
LFR_StateMachine(LFR_IState& startState); | |||||
inline LFR_IState* getCurrentState() const {return currentState;} | inline LFR_IState* getCurrentState() const {return currentState;} | ||||
void setState(LFR_IState& newState) | void setState(LFR_IState& newState) | ||||
{ | { |
#include <iostream> | #include <iostream> | ||||
#include <lfr.h> | |||||
#include <lfr_socket.h> | |||||
#include <uart_communication.h> | |||||
#include "lfr_state_machine.h" | #include "lfr_state_machine.h" | ||||
#include "lfr_states.h" | #include "lfr_states.h" | ||||
int main(void) | int main(void) | ||||
{ | { | ||||
std::cout << "started central" << std::endl; | std::cout << "started central" << std::endl; | ||||
const int thresholdBinary = 140; | |||||
const int videoHeight = 720; | |||||
const int videoWidth = 1280; | |||||
const int gaussKernelSize = 11; | |||||
std::mutex mutex; | |||||
// Init State Machine; | // Init State Machine; | ||||
std::cout << "create State Machine" << std::endl; | std::cout << "create State Machine" << std::endl; | ||||
LFR_StateMachine stateMachine(State::Idle::getInstance()); | LFR_StateMachine stateMachine(State::Idle::getInstance()); | ||||
// Init LFR Autonomous mode | |||||
std::cout << "create lfr" << std::endl; | |||||
LFR lfr(videoHeight, videoWidth, thresholdBinary, gaussKernelSize, [&](std::exception const &ex) | |||||
{ | |||||
std::unique_lock<std::mutex> lock(mutex); | |||||
std::cerr<<"camera exception:"<<ex.what()<<std::endl; | |||||
return false; | |||||
}); | |||||
// Init UART Communication | |||||
std::cout << "create uart" << std::endl; | |||||
LFR_UART uartCommunicator; | |||||
// Init Socket Communication | |||||
std::cout << "create socket" << std::endl; | |||||
LFR_Socket socket([&](std::exception const &ex) | |||||
{ | |||||
std::unique_lock<std::mutex> lock(mutex); | |||||
std::cerr<<"socket exception:"<<ex.what()<<std::endl; | |||||
return false; | |||||
}); | |||||
// Connect String parser to socket | |||||
socket.addListener([&](LFR_Socket::LFR_Telegram telegram) | |||||
{ | |||||
std::unique_lock<std::mutex> lock(mutex); | |||||
std::cout << telegram; | |||||
}, &mutex); | |||||
socket.startLoop(); | |||||
//Start the permanent loop | |||||
char input; | |||||
std::cout << "press q to quit" << std::endl; | |||||
std::cin >> input; | |||||
std::cout << "cinned" << std::endl; | |||||
while (input != 'q') | |||||
{ | |||||
std::cin >> input; | |||||
std::cout << "cinned" << std::endl; | |||||
} | |||||
std::cout << "Exiting central" << std::endl; | |||||
return 0; | return 0; | ||||
} | } |