Skip to content

Commit

Permalink
Edit: refactoring all
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonyang-ee committed Jul 4, 2023
1 parent 905d0d8 commit fc054ff
Show file tree
Hide file tree
Showing 12 changed files with 220 additions and 132 deletions.
24 changes: 13 additions & 11 deletions Application/Inc/ADC.hpp
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
#ifndef APPLICATION_INC_ADC
#define APPLICATION_INC_ADC

#include "array"
#include "cmath"
#include "main.h"

#ifndef ADC_BUFFER
#define ADC_BUFFER 10
#endif

class CustomADC {
public:
CustomADC();
virtual ~CustomADC();
void setPort(ADC_HandleTypeDef *);
CustomADC();
virtual ~CustomADC();

uint32_t sample();
uint32_t getValue();
double getVolt();
void saveSample(uint8_t);

uint32_t m_buffer;
std::array <uint32_t, 1> m_buffer;

private:
uint32_t m_value{};
ADC_HandleTypeDef *m_port;
// Public Data
uint32_t volt_from_dac{};
};

#endif /* APPLICATION_INC_ADC */
#endif /* APPLICATION_INC_ADC */
3 changes: 2 additions & 1 deletion Application/Inc/CLI.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ class CLI {
static int32_t cmd_help(int32_t, char**);
static int32_t cmd_led(int32_t, char**);
static int32_t cmd_flash(int32_t, char**);
static int32_t cmd_motor(int32_t, char**);
static int32_t cmd_idle(int32_t, char**);
static int32_t cmd_dac(int32_t, char**);
static int32_t cmd_show(int32_t, char**);

private:
Expand Down
2 changes: 1 addition & 1 deletion Application/Inc/Flash_STM32G431KB.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class Flash {
private:
// Update config_arr_size according to the sizeof(config)/sizeof(uint64_t)
// ------------------- MUST EDIT -------------------
#define config_arr_size 50
#define config_arr_size 10
union Config_Arr {
struct Config {
uint32_t led_level;
Expand Down
2 changes: 1 addition & 1 deletion Application/Inc/FreeRTOSConfig.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
#define configTICK_RATE_HZ ((TickType_t)1000)
#define configMAX_PRIORITIES ( 7 )
#define configMINIMAL_STACK_SIZE ((uint16_t)64)
#define configTOTAL_HEAP_SIZE ((size_t)7500)
#define configTOTAL_HEAP_SIZE ((size_t)14000)
#define configMAX_TASK_NAME_LEN ( 16 )
#define configUSE_16_BIT_TICKS 0
#define configUSE_MUTEXES 1
Expand Down
6 changes: 3 additions & 3 deletions Application/Inc/Instances.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ extern SerialCOM serialCOM;
extern CLI cli;
extern Thread thread;
extern Flash flash;
extern CustomDAC motor_dac;
extern CustomADC sensor_adc;
extern CustomDAC dac;
extern CustomADC adc;

extern sml::sm<StreamState> stream_sm;
extern sml::sm<MainState> main_sm;
extern sml::sm<MainState, sml::process_queue<std::queue>> main_sm;

#endif /* APPLICATION_INC_INSTANCES */
71 changes: 43 additions & 28 deletions Application/Inc/State.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,31 @@ struct shutting_down {};
// Events
struct start {};
struct stop {};
struct toggle {};
struct oneshot {};
struct next {};
struct finish {};
struct shutdown {};
struct toggle {};
struct sub_endded {};
struct function_ended {};
struct sub_transit {};

// Application Events
struct dac_update {};

struct Idle {
auto operator()() {
using namespace sml;

// State Machine Actions
auto act_delay = []() { vTaskDelay(1000); };
auto act_start = [](Thread *thread) {
auto act_delay = []() { vTaskDelay(3000); };
auto act_start = [](Thread *thread, SerialCOM *serial) {
thread->idling_start();
vTaskResume(thread->idling_handle);
vTaskResume(thread->idle_handle);
serial->sendString("ideling act_start completed\n");
};
auto act_shutdown = [](Thread *thread) {
vTaskSuspend(thread->idling_handle);
auto act_shutdown = [](Thread *thread, SerialCOM *serial) {
vTaskSuspend(thread->idle_handle);
serial->sendString("ideling act_shutdown completed\n");
};

// State Machine Logics
Expand All @@ -44,7 +50,7 @@ struct Idle {
*state<begin> / act_start = state<on>,
state<on> + event<finish> / act_delay = state<on>,
state<on> + event<shutdown> / act_shutdown = state<shutting_down>,
state<shutting_down> / process(sub_endded{}) = X
state<shutting_down> / process(function_ended{}) = X
);
// clang-format on
}
Expand All @@ -54,14 +60,16 @@ struct DACState {
auto operator()() {
using namespace sml;

auto act_delay = []() { vTaskDelay(1000); };
auto act_start = [](Thread *thread) {
thread->constant_run_start();
vTaskResume(thread->constant_run_handle);
auto act_delay = []() { vTaskDelay(3000); };
auto act_start = [](Thread *thread, SerialCOM *serial) {
thread->dac_start();
vTaskResume(thread->dac_handle);
serial->sendString("dac act_start completed\n");
};
auto act_shutdown = [](Thread *thread) {
thread->constant_run_shutdown();
vTaskSuspend(thread->constant_run_handle);
auto act_shutdown = [](Thread *thread, SerialCOM *serial) {
thread->dac_shutdown();
vTaskSuspend(thread->dac_handle);
serial->sendString("dac act_shutdown completed\n");
};

// State Machine Logics
Expand All @@ -70,7 +78,7 @@ struct DACState {
*state<begin> / act_start = state<on>,
state<on> + event<finish> / act_delay = state<on>,
state<on> + event<shutdown> / act_shutdown = state<shutting_down>,
state<shutting_down> / process(sub_endded{}) = X,
state<shutting_down> / process(function_ended{}) = X,
state<on> + event<toggle> / act_shutdown = state<off>,
state<off> + event<toggle> = state<begin>
);
Expand All @@ -82,19 +90,24 @@ struct MainState {
auto operator()() {
using namespace sml;

auto act_start = [](Thread thread) {};
auto act_shutdown = [](Thread thread) {};
auto act_idle = [](Thread *thread, SerialCOM *serial) {
// thread->idling_start();
// vTaskResume(thread->idle_handle);
serial->sendString("MainState act_idle completed\n");
};
auto act_dac = [](Thread *thread, SerialCOM *serial) {
// thread->dac_start();
// xTaskResumeFromISR(thread->dac_handle);
serial->sendString("MainState act_dac completed\n");
};

// State Machine Logics
// clang-format off
return make_transition_table(
*state<begin> + event<start> / act_idle = state<Idle>,
state<Idle> + event<next> / process(shutdown{}),
state<Idle> + event<sub_endded> / act_constant = state<Constant>,
state<Constant> + event<next> / process(shutdown{}),
state<Constant> + event<sub_endded> / act_breathing = state<Breathing>,
state<Breathing> + event<next> / process(shutdown{}),
state<Breathing> + event<sub_endded> / act_idle = state<Idle>
state<Idle> + event<dac_update> / (act_dac, process(start{})) = state<DACState>,
state<DACState> + event<function_ended> / state<Idle>

);
// clang-format on
}
Expand All @@ -105,22 +118,24 @@ struct StreamState {
using namespace sml;

// State Machine Actions
auto act_on = [](Thread *thread) {
auto act_on = [](Thread *thread, SerialCOM *serial) {
xTaskResumeFromISR(thread->telemetry_human_handle);
};
auto act_off = [](Thread *thread) {
auto act_off = [](Thread *thread, SerialCOM *serial) {
vTaskSuspend(thread->telemetry_human_handle);
};
auto act_delay = [](Thread *thread) { vTaskDelay(thread->m_stream_freq); };
auto act_delay = [](Thread *thread, SerialCOM *serial) { vTaskDelay(thread->m_stream_freq); };

// State Machine Logics
// clang-format off
return make_transition_table(
*state<off> + event<start> / act_on = state<on>,
state<off> + event<toggle> / act_on = state<on>,
state<off> + event<oneshot> / act_on = state<single_on>,
state<single_on> + event<finish> / act_off = state<off>,
state<on> + event<finish> / act_delay = state<on>,
state<on> + event<stop> / act_off = state<off>
state<on> + event<stop> / act_off = state<off>,
state<on> + event<toggle> / act_off = state<off>
);
// clang-format on
}
Expand Down
48 changes: 34 additions & 14 deletions Application/Inc/Thread.hpp
Original file line number Diff line number Diff line change
@@ -1,39 +1,59 @@
#ifndef APPLICATION_INC_THREAD
#define APPLICATION_INC_THREAD

#include "main.h"
#include "FreeRTOS.h"
#include "main.h"
#include "task.h"

class Thread {
public:
Thread();
virtual ~Thread();

TaskHandle_t parse_handle;
void parse();
TaskHandle_t telemetry_human_handle;
void telemetry_human();

TaskHandle_t telemetry_human_handle;
void telemetry_human();
/*---------------------------------------------------------------------------
TaskHandle_t init_handle;
void init();
Applications
---------------------------------------------------------------------------*/

TaskHandle_t idle_handle;
void idle();

TaskHandle_t dac_handle;
void dacUpdate();

/*---------------------------------------------------------------------------
TaskHandle_t utilities_handle;
void utilities();
System initialization and periodic update
TaskHandle_t app_dac_handle;
void app_dac();
---------------------------------------------------------------------------*/

TaskHandle_t init_handle;
void init();

TaskHandle_t schedule_20Hz_handle;
void schedule_20Hz();

TaskHandle_t serial_send_handle;
void serial_send();

TaskHandle_t parse_handle;
void parse();

/*---------------------------------------------------------------------------
Thread Settings
---------------------------------------------------------------------------*/

void idling_start();
void dac_start();
void dac_shutdown();

// Settings
uint16_t m_stream_freq{500};
uint16_t m_stream_freq{2000};
};

#endif /* APPLICATION_INC_THREAD */
#endif /* APPLICATION_INC_THREAD */
20 changes: 12 additions & 8 deletions Application/Src/ADC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@ CustomADC::CustomADC() {}

CustomADC::~CustomADC() {}

void CustomADC::setPort(ADC_HandleTypeDef *port) { m_port = port; }

uint32_t CustomADC::sample() {
m_value = m_buffer;
return m_value;
void CustomADC::saveSample(uint8_t port) {
switch (port) {
// hadc1
case 1:
break;
// hadc2
case 2:
volt_from_dac = m_buffer.at(0);
break;
default:
break;
}
}

uint32_t CustomADC::getValue() { return m_value; }

double CustomADC::getVolt() { return static_cast<double>(m_value) / 4096 * 3.3; }
Loading

0 comments on commit fc054ff

Please sign in to comment.