Bayley Wang
/
foc-ed_in_the_bot_compact
robot
Embed:
(wiki syntax)
Show/hide line numbers
errors.cpp
00001 #include "errors.h" 00002 #include "globals.h" 00003 #include "prefs.h" 00004 00005 int errors = 0, moded_errors = 0; 00006 int masks[32]; 00007 00008 void init_masks() { 00009 masks[ERR_THROTTLE_DISABLED] = _MASK_MODE_RUN | 00010 _MASK_OP_TORQUE | _MASK_OP_DRIVING | _MASK_OP_SPEED | _MASK_OP_POSITION | 00011 _MASK_SRC_RC | _MASK_SRC_ANALOG; 00012 masks[ERR_POS_INVALID] = _MASK_MODE_RUN | _MASK_MODE_ZERO | _MASK_MODE_CHR | 00013 _MASK_OP_TORQUE | _MASK_OP_DRIVING | _MASK_OP_SPEED | _MASK_OP_POSITION | 00014 _MASK_SRC_RC | _MASK_SRC_ANALOG | _MASK_SRC_TERMINAL | _MASK_SRC_SERIAL | 00015 _MASK_SRC_CAN | _MASK_SRC_INTERNAL; 00016 masks[ERR_NOT_DRIVING] = _MASK_MODE_RUN | 00017 _MASK_OP_TORQUE | _MASK_OP_DRIVING | _MASK_OP_SPEED | 00018 _MASK_SRC_RC | _MASK_SRC_ANALOG | _MASK_SRC_TERMINAL | _MASK_SRC_SERIAL | 00019 _MASK_SRC_CAN | _MASK_SRC_INTERNAL; 00020 } 00021 00022 void go_enabled() { 00023 control.enabled = true; 00024 io.en->write(1); 00025 } 00026 00027 void go_disabled() { 00028 control.d_integral = 0.0f; 00029 control.q_integral = 0.0f; 00030 control.w_integral = 0.0f; 00031 control.enabled = false; 00032 io.en->write(0); 00033 } 00034 00035 bool is_driving() { 00036 return fabsf(control.user_cmd) > 0.01f || fabsf(control.torque_percent) > 0.01f || fabsf(read.w) > _W_SAFE; 00037 } 00038 00039 #define _seterr(x) errors |= (1 << x) 00040 #define _unseterr(x) errors &= ~(1 << x) 00041 #define _upderr(x) _unseterr(x) : _seterr(x) 00042 void check_errors_modeless() { 00043 io.throttle_in->get_enabled() ? _upderr(ERR_THROTTLE_DISABLED); 00044 io.pos->IsValid() ? _upderr(ERR_POS_INVALID); 00045 is_driving() ? _upderr(ERR_NOT_DRIVING); 00046 } 00047 00048 bool checks_passed() { 00049 check_errors_modeless(); 00050 for (int k = 0; k < NUM_ERRORS; k++) { 00051 int mask_mode = masks[k] & _mask_mode(BREMS_mode); 00052 int mask_op = masks[k] & _mask_op(BREMS_op); 00053 int mask_src = masks[k] & _mask_src(BREMS_src); 00054 if ((errors & (1 << k)) != 0 && mask_mode != 0 && mask_op != 0 && mask_src != 0) { 00055 moded_errors |= 1 << k; 00056 } else { 00057 moded_errors &= ~(1 << k); 00058 } 00059 } 00060 00061 if (moded_errors != 0) { 00062 return false; 00063 } 00064 return true; 00065 }
Generated on Tue Jul 12 2022 17:58:39 by 1.7.2