Skip to content
Snippets Groups Projects
Commit e74f0bec authored by Flax's avatar Flax
Browse files

STM32L011K4 : Created display state machine.

parent 36bd6ac6
No related branches found
No related tags found
No related merge requests found
/*
* display.h
*
* Created on: 21 avr. 2023
* Author: Flax
*/
#ifndef INC_DISPLAY_H_
#define INC_DISPLAY_H_
#endif /* INC_DISPLAY_H_ */
/*
* display.c
*
* Created on: 21 avr. 2023
* Author: Flax
*/
......@@ -15,6 +15,17 @@
#include "encoder.h"
#include "register.h"
// ==============
// Local typedefs
// ==============
typedef enum {
HMI_DISPLAY_MODE_RESET,
HMI_DISPLAY_MODE_TEMP,
HMI_DISPLAY_MODE_SPT,
HMI_DISPLAY_MODE_ERR,
HMI_DISPLAY_MODE_STANDBY,
}e_HMIDisplayModeType;
// ===============
// Local constants
// ===============
......@@ -23,6 +34,8 @@
#define cHMIClicLongLength 200 // Long clic length in number of cyclic task cycles
#define cHMIClicFilter 10 // Encoder switch debounce filter
#define cHMIDisplaySPTTime 2000 // Timeout during which the set point is shown
// ==========================
// Local functions prototypes
// ==========================
......@@ -48,6 +61,11 @@ static uint8_t HMIInputEventQueueCurrentIndex_U8;
static uint8_t HMIInputEventQueueWriteIndex_U8;
static bool HMINewInputEventAvailable_B;
// Display
static e_HMIDisplayModeType display_mode_current_E;
static e_HMIDisplayModeType display_mode_prev_E;
static uint16_t display_spt_cnt_u16;
// ===========================
// Local functions definitions
// ===========================
......@@ -137,7 +155,117 @@ static void HmiGetInputs (void)
static void HmiUpdateDisplay (void)
{
e_HMIInputEventType evt;
// Display main state machine
switch(display_mode_current_E)
{
case HMI_DISPLAY_MODE_RESET:
display_mode_current_E = HMI_DISPLAY_MODE_STANDBY; // First state after reset is standby
break;
case HMI_DISPLAY_MODE_TEMP:
// Display actual tip temperature (stable)
display_spt_cnt_u16 = cHMIDisplaySPTTime;
/*if (REGIsStandby())
{
display_mode_current_E = HMI_DISPLAY_MODE_STANDBY;
}
else*/
if (HMIPopInputEvent(&evt))
{ // Get next input event
switch (evt)
{
case HMI_EVENT_INPUT_MOVE_RIGHT:
case HMI_EVENT_INPUT_MOVE_LEFT:
// Encoder movement : go to SPT display
display_mode_current_E = HMI_DISPLAY_MODE_SPT;
break;
case HMI_EVENT_INPUT_CLIC_SHORT:
// Switch to standby
// REGStandbySet();
break;
default:
break;
}
}
break;
case HMI_DISPLAY_MODE_SPT:
// Display set point (temporary)
if (HMIPopInputEvent(&evt))
{ // Get next input event
switch (evt)
{
case HMI_EVENT_INPUT_MOVE_RIGHT:
case HMI_EVENT_INPUT_MOVE_LEFT:
// Encoder movement : stay in SPT display
display_spt_cnt_u16 = cHMIDisplaySPTTime;
break;
case HMI_EVENT_INPUT_CLIC_SHORT:
// Switch to standby
// REGStandbySet();
break;
default:
break;
}
}
else if (display_spt_cnt_u16 > 0U)
{ // increment timeout counter
display_spt_cnt_u16--;
}
else
{ // Timeout elapsed
/*if (REGIsStandby())
{ // Go back to standby
display_mode_current_E = HMI_DISPLAY_MODE_STANDBY;
}
else
{ // Go back to temperature display*/
display_mode_current_E = HMI_DISPLAY_MODE_TEMP;
/*}*/
}
break;
case HMI_DISPLAY_MODE_ERR:
// Error present
/*if (REGIsError())
{*/
if (HMIPopInputEvent(&evt))
{ // Get next input event
if (evt == HMI_EVENT_INPUT_CLIC_LONG)
{ // Long clic to reset error
// REGErrorReset(); // Try to reset error
}
}
/*}
else
{ // If no error is present, go back to standby
display_mode_current_E = HMI_DISPLAY_MODE_STANDBY;
}*/
break;
case HMI_DISPLAY_MODE_STANDBY:
// Standby
if (HMIPopInputEvent(&evt))
{ // Get next input event
switch (evt)
{
case HMI_EVENT_INPUT_MOVE_RIGHT:
case HMI_EVENT_INPUT_MOVE_LEFT:
// Encoder movement : go to SPT display
display_mode_current_E = HMI_DISPLAY_MODE_SPT;
break;
case HMI_EVENT_INPUT_CLIC_SHORT:
// Switch to standby
// REGStandbySet();
break;
default:
break;
}
}
break;
default:
break;
}
display_mode_prev_E = display_mode_current_E;
}
static void HmiSetOutputs (void)
......@@ -173,7 +301,9 @@ static bool HmiPushInputEvent (e_HMIInputEventType *evt)
void HMIInit (void)
{
display_mode_prev_E = HMI_DISPLAY_MODE_RESET;
display_mode_current_E = HMI_DISPLAY_MODE_RESET;
display_spt_cnt_u16 = cHMIDisplaySPTTime;
}
void HMIStart (void)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment