Browse Source

Move initialisation in state machine

master
Tim Zeuner 1 year ago
parent
commit
e5fc3f9f38
3 changed files with 59 additions and 58 deletions
  1. 39
    0
      lfr_state_machine.cpp
  2. 18
    4
      lfr_state_machine.h
  3. 2
    54
      main.cpp

+ 39
- 0
lfr_state_machine.cpp View File

#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;
}

+ 18
- 4
lfr_state_machine.h View File

#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)
{ {

+ 2
- 54
main.cpp View File

#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;
} }

Loading…
Cancel
Save