tdse-tp3_04-interactive_menu

Index Commits Files Refs
app/inc/task_menu_attribute.h (10299B)
   1 /*
   2  * Copyright (c) 2023 Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>.
   3  * All rights reserved.
   4  *
   5  * Redistribution and use in source and binary forms, with or without
   6  * modification, are permitted provided that the following conditions are met:
   7  *
   8  * 1. Redistributions of source code must retain the above copyright
   9  *    notice, this list of conditions and the following disclaimer.
  10  *
  11  * 2. Redistributions in binary form must reproduce the above copyright
  12  *    notice, this list of conditions and the following disclaimer in the
  13  *    documentation and/or other materials provided with the distribution.
  14  *
  15  * 3. Neither the name of the copyright holder nor the names of its
  16  *    contributors may be used to endorse or promote products derived from
  17  *    this software without specific prior written permission.
  18  *
  19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  22  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  23  * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  25  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  26  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  28  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  29  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  30  * POSSIBILITY OF SUCH DAMAGE.
  31  *
  32  * @file   : task_menu_attribute.h
  33  * @date   : Set 26, 2023
  34  * @author : Juan Manuel Cruz <jcruz@fi.uba.ar> <jcruz@frba.utn.edu.ar>
  35  * @version    v1.0.0
  36  */
  37 
  38 #ifndef TASK_INC_TASK_MENU_ATTRIBUTE_H_
  39 #define TASK_INC_TASK_MENU_ATTRIBUTE_H_
  40 
  41 /********************** CPP guard ********************************************/
  42 #ifdef __cplusplus
  43 extern "C" {
  44 #endif
  45 
  46 /********************** inclusions *******************************************/
  47 
  48 /********************** macros ***********************************************/
  49 
  50 /********************** typedef **********************************************/
  51 /*
  52 * Menu Statechart - State Transition Table
  53 * 
  54 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  55 * | Current State          | Event                   | [Guard] | Next State              | Actions                                                              |
  56 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  57 * | ST_MEN_MOTOR_INFO      | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_SELECT     | sel_motor = 1                                                        |
  58 * | ST_MEN_MOTOR_INFO      | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_SELECT     | sel_motor = 1                                                        |
  59 * | ST_MEN_MOTOR_INFO      | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_SELECT     | sel_motor = 1                                                        |
  60 * | ST_MEN_MOTOR_INFO      | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  61 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  62 * | ST_MEN_MOTOR_SELECT    | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_POWER      |                                                                      |
  63 * | ST_MEN_MOTOR_SELECT    | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_SELECT     | sel_motor = (sel_motor % motor_qty) + 1                              |
  64 * | ST_MEN_MOTOR_SELECT    | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_INFO       |                                                                      |
  65 * | ST_MEN_MOTOR_SELECT    | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  66 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  67 * | ST_MEN_MOTOR_POWER     | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_POWER_SEL  | new_sel_motor_pow = sel_motor_pow                                    |
  68 * | ST_MEN_MOTOR_POWER     | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_SPEED      |                                                                      |
  69 * | ST_MEN_MOTOR_POWER     | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_SELECT     |                                                                      |
  70 * | ST_MEN_MOTOR_POWER     | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  71 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  72 * | ST_MEN_MOTOR_POWER_SEL | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_POWER      | sel_motor_pow = new_sel_motor_pow                                    |
  73 * | ST_MEN_MOTOR_POWER_SEL | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_POWER_SEL  | new_sel_motor_pow = !new_sel_motor_pow                               |
  74 * | ST_MEN_MOTOR_POWER_SEL | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_POWER      |                                                                      |
  75 * | ST_MEN_MOTOR_POWER_SEL | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  76 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  77 * | ST_MEN_MOTOR_SPEED     | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_SPEED_SEL  | new_sel_motor_speed = sel_motor_speed                                |
  78 * | ST_MEN_MOTOR_SPEED     | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_SPIN       |                                                                      |
  79 * | ST_MEN_MOTOR_SPEED     | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_SELECT     |                                                                      |
  80 * | ST_MEN_MOTOR_SPEED     | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  81 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  82 * | ST_MEN_MOTOR_SPEED_SEL | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_SPEED      | sel_motor_speed = new_sel_motor_speed                                |
  83 * | ST_MEN_MOTOR_SPEED_SEL | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_SPEED_SEL  | new_sel_motor_speed = (new_sel_motor_speed + step) % max_motor_speed |
  84 * | ST_MEN_MOTOR_SPEED_SEL | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_SPEED      |                                                                      |
  85 * | ST_MEN_MOTOR_SPEED_SEL | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  86 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  87 * | ST_MEN_MOTOR_SPIN      | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_SPIN_SEL   | new_sel_motor_spin = sel_motor_spin                                  |
  88 * | ST_MEN_MOTOR_SPIN      | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_POWER      |                                                                      |
  89 * | ST_MEN_MOTOR_SPIN      | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_SELECT     |                                                                      |
  90 * | ST_MEN_MOTOR_SPIN      | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  91 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  92 * | ST_MEN_MOTOR_SPIN_SEL  | EV_MEN_ENT_ACTIVE       |         | ST_MEN_MOTOR_SPIN       | sel_motor_spin = new_sel_motor_spin                                  |
  93 * | ST_MEN_MOTOR_SPIN_SEL  | EV_MEN_NEX_ACTIVE       |         | ST_MEN_MOTOR_SPIN_SEL   | new_sel_motor_spin = !new_sel_motor_spin                             |
  94 * | ST_MEN_MOTOR_SPIN_SEL  | EV_MEN_ESC_ACTIVE       |         | ST_MEN_MOTOR_SPIN       |                                                                      |
  95 * | ST_MEN_MOTOR_SPIN_SEL  | EV_MEN_INACTIVE_TIMEOUT |         | ST_MEN_MOTOR_INFO       |                                                                      |
  96 * +------------------------+-------------------------+---------+-------------------------+----------------------------------------------------------------------+
  97 */
  98 
  99 /* Events to excite Task Menu */
 100 typedef enum {
 101     EV_MEN_ENT_IDLE,
 102     EV_MEN_ENT_ACTIVE,
 103 
 104     EV_MEN_NEX_IDLE,
 105     EV_MEN_NEX_ACTIVE,
 106 
 107     EV_MEN_ESC_IDLE,
 108     EV_MEN_ESC_ACTIVE,
 109 
 110     EV_MEN_INACTIVE_TIMEOUT
 111 } task_menu_ev_t;
 112 
 113 /* State of Task Menu */
 114 typedef enum {
 115     ST_MEN_MOTOR_INFO,
 116     ST_MEN_MOTOR_SELECT,
 117     ST_MEN_MOTOR_POWER,
 118     ST_MEN_MOTOR_POWER_SEL,
 119     ST_MEN_MOTOR_SPEED,
 120     ST_MEN_MOTOR_SPEED_SEL,
 121     ST_MEN_MOTOR_SPIN,
 122     ST_MEN_MOTOR_SPIN_SEL
 123 } task_menu_st_t;
 124 
 125 typedef struct {
 126     uint32_t tick;
 127     task_menu_st_t state;
 128     task_menu_ev_t event;
 129     bool flag;
 130 } task_menu_dta_t;
 131 
 132 /********************** external data declaration ****************************/
 133 extern task_menu_dta_t task_menu_dta;
 134 
 135 /********************** external functions declaration ***********************/
 136 
 137 /********************** End of CPP guard *************************************/
 138 #ifdef __cplusplus
 139 }
 140 #endif
 141 
 142 #endif /* TASK_INC_TASK_MENU_ATTRIBUTE_H_ */
 143 
 144 /********************** end of file ******************************************/