ESTOP_PIN,
MOTOR_FAULT_PIN,
MOTOR_ENABLE_PIN,
- NC_0_PIN,
+ TEST_PIN,
PROBE_PIN,
};
#define AXES 6 // number of axes
#define MOTORS 4 // number of motors on the board
-#define OUTS 5 // number of supported pin outputs
+#define OUTS 6 // number of supported pin outputs
#define ANALOG 2 // number of supported analog inputs
#define VFDREG 32 // number of supported VFD modbus registers
* LO Segment execution SW interrupt (set in stepper.h)
* MED Serial RX (set in usart.c)
* MED Serial TX (set in usart.c) (* see note)
+ * MED I2C Slave (set in i2c.c)
* LO Real time clock interrupt (set in rtc.h)
*
* (*) The TX cannot run at LO level or exception reports and other prints
{SWITCH_1_PIN},
{SWITCH_2_PIN},
{FAULT_PIN},
+ {TEST_PIN},
};
case SWITCH_1_PIN: return &outputs[2];
case SWITCH_2_PIN: return &outputs[3];
case FAULT_PIN: return &outputs[4];
+ case TEST_PIN: return &outputs[5];
}
return 0;
static void _update_state(output_t *output) {
switch (output->mode) {
case OUT_DISABLED: output->state = OUT_TRI; break;
- case OUT_LO_HI: output->state = output->active ? OUT_HI : OUT_LO; break;
- case OUT_HI_LO: output->state = output->active ? OUT_LO : OUT_HI; break;
- case OUT_TRI_LO: output->state = output->active ? OUT_LO : OUT_TRI; break;
- case OUT_TRI_HI: output->state = output->active ? OUT_HI : OUT_TRI; break;
- case OUT_LO_TRI: output->state = output->active ? OUT_TRI : OUT_LO; break;
- case OUT_HI_TRI: output->state = output->active ? OUT_TRI : OUT_HI; break;
+ case OUT_LO_HI: output->state = output->active ? OUT_HI : OUT_LO; break;
+ case OUT_HI_LO: output->state = output->active ? OUT_LO : OUT_HI; break;
+ case OUT_TRI_LO: output->state = output->active ? OUT_LO : OUT_TRI; break;
+ case OUT_TRI_HI: output->state = output->active ? OUT_HI : OUT_TRI; break;
+ case OUT_LO_TRI: output->state = output->active ? OUT_TRI : OUT_LO; break;
+ case OUT_HI_TRI: output->state = output->active ? OUT_TRI : OUT_HI; break;
}
switch (output->state) {
case OUT_TRI: DIRCLR_PIN(output->pin); break;
- case OUT_HI: OUTSET_PIN(output->pin); DIRSET_PIN(output->pin); break;
- case OUT_LO: OUTCLR_PIN(output->pin); DIRSET_PIN(output->pin); break;
+ case OUT_HI: OUTSET_PIN(output->pin); DIRSET_PIN(output->pin); break;
+ case OUT_LO: OUTCLR_PIN(output->pin); DIRSET_PIN(output->pin); break;
}
}
}
+bool outputs_toggle(uint8_t pin) {
+ output_t *output = _get_output(pin);
+ if (!output) return false;
+
+ output->active = !output->active;
+ _update_state(output);
+ return output->active;
+}
+
+
void outputs_set_mode(uint8_t pin, output_mode_t mode) {
output_t *output = _get_output(pin);
if (!output) return;
void outputs_init();
bool outputs_is_active(uint8_t pin);
void outputs_set_active(uint8_t pin, bool active);
+bool outputs_toggle(uint8_t pin);
void outputs_set_mode(uint8_t pin, output_mode_t mode);
output_state_t outputs_get_state(uint8_t pin);
void outputs_stop();