// Returns control pin state as a uint8 bitfield. Each bit indicates the input pin state, where
// triggered is 1 and not triggered is 0. Invert mask is applied. Bitfield organization is
// defined by the CONTROL_PIN_INDEX in the header file.
uint8_t system_control_get_state()
{
uint8_t control_state = 0;
uint8_t pin = (CONTROL_PIN & CONTROL_MASK);
#ifdef INVERT_CONTROL_PIN_MASK
pin ^= INVERT_CONTROL_PIN_MASK;
#endif
if (pin) {
#ifdef ENABLE_SAFETY_DOOR_INPUT_PIN
if (bit_isfalse(pin,(1<<CONTROL_SAFETY_DOOR_BIT))) { control_state |= CONTROL_PIN_INDEX_SAFETY_DOOR; }
#endif
if (bit_isfalse(pin,(1<<CONTROL_RESET_BIT))) { control_state |= CONTROL_PIN_INDEX_RESET; }
if (bit_isfalse(pin,(1<<CONTROL_FEED_HOLD_BIT))) { control_state |= CONTROL_PIN_INDEX_FEED_HOLD; }
if (bit_isfalse(pin,(1<<CONTROL_CYCLE_START_BIT))) { control_state |= CONTROL_PIN_INDEX_CYCLE_START; }
}
return(control_state);
}
我可能又在这里变得密集了……但是……如果所有输入都处于活动状态……然后跳过检查?
来自 system.c:
假设:未定义 INVERT_CONTROL_PIN_MASK 和 ENABLE_SAFETY_DOOR_INPUT_PIN …
并且出于某种原因,同时按下了复位、循环开始和进给保持按钮(我知道……矛盾的输入)……
然后 (CONTROL_PIN & CONTROL_MASK) – 因此 pin – 将为零…
所以 if(pin) 测试是错误的……并且没有执行其他测试。
嗯…这是预期的行为吗?
它正在做的是在任何输入未断言时执行测试… ???
所以它应该这样做
if(pin != CONTROL_MASK) {???