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 ******************************************/
