- outsoruce common files and separate common types from source files (new common/types.hpp) - split source files to 2 board folders (relevant only, no duplicate) - currently boards compile successfull but not functional at all - comment out currently incompatible code
131 lines
5.0 KiB
C++
131 lines
5.0 KiB
C++
#pragma once
|
|
|
|
#include "buzzer.hpp"
|
|
#include "http.hpp"
|
|
#include "auto.hpp"
|
|
#include "types.hpp"
|
|
|
|
|
|
//FIXME controlledMotor class not available for this pcb, rework
|
|
//--------------------------------------------
|
|
//---- struct, enum, variable declarations ---
|
|
//--------------------------------------------
|
|
//enum that decides how the motors get controlled
|
|
enum class controlMode_t {IDLE, JOYSTICK, MASSAGE, HTTP, MQTT, BLUETOOTH, AUTO};
|
|
//string array representing the mode enum (for printing the state as string)
|
|
extern const char* controlModeStr[7];
|
|
|
|
//--- control_config_t ---
|
|
//struct with config parameters
|
|
typedef struct control_config_t {
|
|
controlMode_t defaultMode; //default mode after startup and toggling IDLE
|
|
//timeout options
|
|
uint32_t timeoutMs; //time of inactivity after which the mode gets switched to IDLE
|
|
float timeoutTolerancePer; //percentage the duty can vary between timeout checks considered still inactive
|
|
} control_config_t;
|
|
|
|
|
|
|
|
|
|
// //==================================
|
|
// //========= control class ==========
|
|
// //==================================
|
|
// //controls the mode the armchair operates
|
|
// //repeatedly generates the motor commands corresponding to current mode and sends those to motorcontrol
|
|
// class controlledArmchair {
|
|
// public:
|
|
// //--- constructor ---
|
|
// controlledArmchair (
|
|
// control_config_t config_f,
|
|
// buzzer_t* buzzer_f,
|
|
// controlledMotor* motorLeft_f,
|
|
// controlledMotor* motorRight_f,
|
|
// evaluatedJoystick* joystick_f,
|
|
// httpJoystick* httpJoystick_f
|
|
// );
|
|
//
|
|
// //--- functions ---
|
|
// //task that repeatedly generates motor commands depending on the current mode
|
|
// void startHandleLoop();
|
|
//
|
|
// //function that changes to a specified control mode
|
|
// void changeMode(controlMode_t modeNew);
|
|
//
|
|
// //function that toggle between IDLE and previous active mode (or default if not switched to certain mode yet)
|
|
// void toggleIdle();
|
|
//
|
|
// //function that toggles between two modes, but prefers first argument if entirely different mode is currently active
|
|
// void toggleModes(controlMode_t modePrimary, controlMode_t modeSecondary);
|
|
//
|
|
// //toggle between certain mode and previous mode
|
|
// void toggleMode(controlMode_t modePrimary);
|
|
//
|
|
// //function that restarts timer which initiates the automatic timeout (switch to IDLE) after certain time of inactivity
|
|
// void resetTimeout();
|
|
//
|
|
// //function for sending a button event (e.g. from button task at event) to control task
|
|
// //TODO: use queue instead?
|
|
// void sendButtonEvent(uint8_t count);
|
|
//
|
|
// private:
|
|
//
|
|
// //--- functions ---
|
|
// //function that evaluates whether there is no activity/change on the motor duty for a certain time, if so a switch to IDLE is issued. - has to be run repeatedly in a slow interval
|
|
// void handleTimeout();
|
|
//
|
|
// //--- objects ---
|
|
// buzzer_t* buzzer;
|
|
// controlledMotor* motorLeft;
|
|
// controlledMotor* motorRight;
|
|
// httpJoystick* httpJoystickMain_l;
|
|
// evaluatedJoystick* joystick_l;
|
|
//
|
|
// //---variables ---
|
|
// //struct for motor commands returned by generate functions of each mode
|
|
// motorCommands_t commands;
|
|
// //struct with config parameters
|
|
// control_config_t config;
|
|
//
|
|
// //store joystick data
|
|
// joystickData_t stickData;
|
|
// bool altStickMapping; //alternative joystick mapping (reverse mapped differently)
|
|
//
|
|
// //variables for http mode
|
|
// uint32_t http_timestamp_lastData = 0;
|
|
//
|
|
// //variables for MASSAGE mode
|
|
// bool freezeInput = false;
|
|
//
|
|
// //variables for AUTO mode
|
|
// auto_instruction_t instruction = auto_instruction_t::NONE; //variable to receive instructions from automatedArmchair
|
|
//
|
|
// //variable to store button event
|
|
// uint8_t buttonCount = 0;
|
|
//
|
|
// //definition of mode enum
|
|
// controlMode_t mode = controlMode_t::IDLE;
|
|
//
|
|
// //variable to store mode when toggling IDLE mode
|
|
// controlMode_t modePrevious; //default mode
|
|
//
|
|
// //command preset for idling motors
|
|
// const motorCommand_t cmd_motorIdle = {
|
|
// .state = motorstate_t::IDLE,
|
|
// .duty = 0
|
|
// };
|
|
// const motorCommands_t cmds_bothMotorsIdle = {
|
|
// .left = cmd_motorIdle,
|
|
// .right = cmd_motorIdle
|
|
// };
|
|
//
|
|
// //variable for slow loop
|
|
// uint32_t timestamp_SlowLoopLastRun = 0;
|
|
//
|
|
// //variables for detecting timeout (switch to idle, after inactivity)
|
|
// float dutyLeft_lastActivity = 0;
|
|
// float dutyRight_lastActivity = 0;
|
|
// uint32_t timestamp_lastActivity = 0;
|
|
// };
|
|
//
|
|
//
|