26 #if PROBE_ENABLE && !defined(PROBE_PIN)
27 #error "Probe input is not supported in this configuration!"
30 #if SAFETY_DOOR_ENABLE && !defined(SAFETY_DOOR_PIN)
31 #error "Safety door input is not supported in this configuration!"
34 #if MOTOR_FAULT_ENABLE && !defined(MOTOR_FAULT_PIN)
35 #error "Motor fault input is not supported in this configuration!"
38 #if MOTOR_WARNING_ENABLE && !defined(MOTOR_WARNING_PIN)
39 #error "Motor warning input is not supported in this configuration!"
42 #if I2C_STROBE_ENABLE && !defined(I2C_STROBE_PIN)
43 #error "I2C keypad/strobe is not supported in this configuration!"
46 #if MPG_ENABLE == 1 && !defined(MPG_MODE_PIN)
47 #error "MPG mode input is not supported in this configuration!"
50 #if QEI_SELECT_ENABLE && !defined(QEI_SELECT_PIN)
51 #error "Encoder select input is not supported in this configuration!"
60 #define RESET_PORT CONTROL_PORT
62 #ifndef FEED_HOLD_PORT
63 #define FEED_HOLD_PORT CONTROL_PORT
65 #ifndef CYCLE_START_PORT
66 #define CYCLE_START_PORT CONTROL_PORT
69 #define ESTOP_PORT CONTROL_PORT
71 #ifndef PROBE_DISCONNECT_PORT
72 #define PROBE_DISCONNECT_PORT CONTROL_PORT
74 #ifndef STOP_DISABLE_PORT
75 #define STOP_DISABLE_PORT CONTROL_PORT
77 #ifndef BLOCK_DELETE_PORT
78 #define BLOCK_DELETE_PORT CONTROL_PORT
80 #ifndef SINGLE_BLOCK_PORT
81 #define SINGLE_BLOCK_PORT CONTROL_PORT
83 #ifndef MOTOR_FAULT_PORT
84 #define MOTOR_FAULT_PORT CONTROL_PORT
86 #ifndef MOTOR_WARNING_PORT
87 #define MOTOR_WARNING_PORT CONTROL_PORT
89 #ifndef LIMITS_OVERRIDE_PORT
90 #define LIMITS_OVERRIDE_PORT CONTROL_PORT
92 #if SAFETY_DOOR_ENABLE && !defined(SAFETY_DOOR_PORT)
93 #define SAFETY_DOOR_PORT CONTROL_PORT
100 #define RESET_BIT (1<<RESET_PIN)
106 #ifndef FEED_HOLD_BIT
108 #define FEED_HOLD_BIT (1<<FEED_HOLD_PIN)
110 #define FEED_HOLD_BIT 0
114 #ifndef CYCLE_START_BIT
115 #ifdef CYCLE_START_PIN
116 #define CYCLE_START_BIT (1<<CYCLE_START_PIN)
118 #define CYCLE_START_BIT 0
124 #define ESTOP_BIT (1<<ESTOP_PIN)
132 #ifndef SAFETY_DOOR_BIT
133 #if defined(SAFETY_DOOR_PIN) && !defined(AUX_DEVICES)
134 #define SAFETY_DOOR_BIT (1<<SAFETY_DOOR_PIN)
136 #define SAFETY_DOOR_BIT 0
142 #ifndef MOTOR_FAULT_BIT
143 #if defined(MOTOR_FAULT_PIN) && !MOTOR_FAULT_ENABLE
144 #define MOTOR_FAULT_BIT (1<<MOTOR_FAULT_PIN)
146 #define MOTOR_FAULT_BIT 0
150 #ifndef MOTOR_WARNING_BIT
151 #if defined(MOTOR_WARNING_PIN) && !MOTOR_WARNING_ENABLE
152 #define MOTOR_WARNING_BIT (1<<MOTOR_WARNING_PIN)
154 #define MOTOR_WARNING_BIT 0
158 #ifndef PROBE_DISCONNECT_BIT
159 #if defined(PROBE_DISCONNECT_PIN) && !PROBE_DISCONNECT_ENABLE
160 #define PROBE_DISCONNECT_BIT (1<<PROBE_DISCONNECT_PIN)
162 #define PROBE_DISCONNECT_BIT 0
166 #ifndef STOP_DISABLE_BIT
167 #if defined(STOP_DISABLE_PIN) && !STOP_DISABLE_ENABLE
168 #define STOP_DISABLE_BIT (1<<STOP_DISABLE_PIN)
170 #define STOP_DISABLE_BIT 0
174 #ifndef BLOCK_DELETE_BIT
175 #if defined(BLOCK_DELETE_PIN) && !BLOCK_DELETE_ENABLE
176 #define BLOCK_DELETE_BIT (1<<BLOCK_DELETE_PIN)
178 #define BLOCK_DELETE_BIT 0
182 #ifndef SINGLE_BLOCK_BIT
183 #if defined(SINGLE_BLOCK_PIN) && !SINGLE_BLOCK_ENABLE
184 #define SINGLE_BLOCK_BIT (1<<SINGLE_BLOCK_PIN)
186 #define SINGLE_BLOCK_BIT 0
190 #ifndef LIMITS_OVERRIDE_BIT
191 #if defined(LIMITS_OVERRIDE_PIN) && !LIMITS_OVERRIDE_ENABLE
192 #define LIMITS_OVERRIDE_BIT (1<<LIMITS_OVERRIDE_PIN)
194 #define LIMITS_OVERRIDE_BIT 0
198 #if SAFETY_DOOR_ENABLE || MOTOR_FAULT_ENABLE || MOTOR_WARNING_ENABLE || PROBE_DISCONNECT_ENABLE || \
199 STOP_DISABLE_ENABLE || BLOCK_DELETE_ENABLE || SINGLE_BLOCK_ENABLE || LIMITS_OVERRIDE_ENABLE || \
200 (defined(AUX_DEVICES) && (PROBE_ENABLE || I2C_STROBE_ENABLE || MPG_ENABLE == 1 || QEI_SELECT_ENABLE)) || defined __DOXYGEN__
202 #define AUX_CONTROLS_ENABLED 1
204 #if PROBE_DISCONNECT_ENABLE || STOP_DISABLE_ENABLE || BLOCK_DELETE_ENABLE || SINGLE_BLOCK_ENABLE || LIMITS_OVERRIDE_ENABLE
205 #define AUX_CONTROLS_SCAN 1
207 #define AUX_CONTROLS_SCAN 0
212 #if PROBE_ENABLE && defined(PROBE_PIN) && defined(AUX_DEVICES)
219 #if SAFETY_DOOR_ENABLE && defined(SAFETY_DOOR_PIN)
220 #ifdef SAFETY_DOOR_PORT
226 #if MOTOR_FAULT_ENABLE && defined(MOTOR_FAULT_PIN)
227 #ifdef MOTOR_FAULT_PORT
232 #if MOTOR_WARNING_ENABLE && defined(MOTOR_WARNING_PIN)
233 #ifdef MOTOR_WARNING_PORT
240 #if I2C_STROBE_ENABLE && defined(I2C_STROBE_PIN) && defined(AUX_DEVICES)
241 #ifdef I2C_STROBE_PORT
247 #if MPG_ENABLE == 1 && defined(MPG_MODE_PIN) && defined(AUX_DEVICES)
254 #if QEI_SELECT_ENABLE && defined(QEI_SELECT_PIN) && defined(AUX_DEVICES)
255 #ifdef QEI_SELECT_PORT
262 #if LIMITS_OVERRIDE_ENABLE
265 #if STOP_DISABLE_ENABLE
268 #if BLOCK_DELETE_ENABLE
271 #if SINGLE_BLOCK_ENABLE
274 #if PROBE_DISCONNECT_ENABLE
279 static inline aux_ctrl_t *aux_ctrl_remap_explicit (
void *port, uint8_t pin, uint8_t aux_port,
void *input)
283 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
287 if(aux_ctrl[idx].port == port && aux_ctrl[idx].pin == pin) {
288 ctrl_pin = &aux_ctrl[idx];
290 ctrl_pin->
input = input;
292 }
while(idx && ctrl_pin == NULL);
297 static inline aux_ctrl_t *aux_ctrl_get_pin (uint8_t aux_port)
301 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
304 if(aux_ctrl[--idx].aux_port == aux_port)
305 ctrl_pin = &aux_ctrl[idx];
306 }
while(idx && ctrl_pin == NULL);
313 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
316 if(aux_ctrl[--idx].aux_port != 0xFF) {
317 #if PROBE_ENABLE && defined(PROBE_PIN) && defined(AUX_DEVICES)
340 static bool aux_ctrl_claim_port (
xbar_t *properties, uint8_t port,
void *data)
345 return ((
aux_ctrl_t *)data)->aux_port != 0xFF;
352 if(aux_claim == NULL)
353 aux_claim = aux_ctrl_claim_port;
355 for(idx = 0; idx <
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t); idx++) {
356 if(aux_ctrl[idx].pin == 0xFF) {
359 }
else if(aux_ctrl[idx].aux_port != 0xFF)
360 aux_claim_explicit(&aux_ctrl[idx]);
364 #if AUX_CONTROLS_SCAN
368 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
371 if(aux_ctrl[--idx].pin != 0xFF)
373 if(aux_ctrl[idx].aux_port != 0xFF) {
377 signals.
mask |= aux_ctrl[idx].cap.mask;
380 signals.
mask |= aux_ctrl[idx].cap.mask;
391 #define AUX_CONTROLS_ENABLED 0
392 #define AUX_CONTROLS_SCAN 0
395 #ifdef AUX_CONTROLS_OUT
399 #if DRIVER_SPINDLE_ENABLE
401 #if DRIVER_SPINDLE_PWM_ENABLE
402 { .function =
Output_SpindlePWM, .aux_port = 0xFF, .pin = SPINDLE_PWM_PIN, .port = SPINDLE_PWM_PORT },
404 #if DRIVER_SPINDLE_DIR_ENABLE
405 { .function =
Output_SpindleDir, .aux_port = 0xFF, .pin = SPINDLE_DIRECTION_PIN, .port = SPINDLE_DIRECTION_PORT },
408 #if DRIVER_SPINDLE1_ENABLE
409 { .function =
Output_Spindle1On, .aux_port = 0xFF, .pin = SPINDLE1_ENABLE_PIN, .port = SPINDLE1_ENABLE_PORT },
410 #if DRIVER_SPINDLE1_PWM_ENABLE
411 { .function =
Output_Spindle1PWM, .aux_port = 0xFF, .pin = SPINDLE1_PWM_PIN, .port = SPINDLE1_PWM_PORT },
413 #if DRIVER_SPINDLE1_DIR_ENABLE
414 { .function =
Output_Spindle1Dir, .aux_port = 0xFF, .pin = SPINDLE1_DIRECTION_PIN, .port = SPINDLE1_DIRECTION_PORT },
427 static inline aux_ctrl_out_t *aux_out_remap_explicit (
void *port, uint8_t pin, uint8_t aux_port,
void *output)
435 if(aux_ctrl_out[idx].port == port && aux_ctrl_out[idx].pin == pin) {
436 ctrl_pin = &aux_ctrl_out[idx];
438 ctrl_pin->
output = output;
440 }
while(idx && ctrl_pin == NULL);
445 typedef bool (*aux_claim_explicit_out_ptr)(
aux_ctrl_out_t *aux_ctrl);
447 static bool aux_ctrl_claim_out_port (
xbar_t *properties, uint8_t port,
void *data)
452 return ((
aux_ctrl_t *)data)->aux_port != 0xFF;
459 if(aux_claim == NULL)
460 aux_claim = aux_ctrl_claim_out_port;
462 for(idx = 0; idx <
sizeof(aux_ctrl_out) /
sizeof(
aux_ctrl_out_t); idx++) {
463 if(aux_ctrl_out[idx].pin == 0xFF)
465 else if(aux_ctrl_out[idx].aux_port != 0xFF)
466 aux_claim_explicit(&aux_ctrl_out[idx]);
475 #if SAFETY_DOOR_ENABLE
476 #define CONTROL_MASK (RESET_BIT|FEED_HOLD_BIT|CYCLE_START_BIT|ESTOP_BIT|PROBE_DISCONNECT_BIT|STOP_DISABLE_BIT|BLOCK_DELETE_BIT|SINGLE_BLOCK_BIT|MOTOR_FAULT_BIT|MOTOR_WARNING_BIT|LIMITS_OVERRIDE_BIT|SAFETY_DOOR_BIT)
477 #define CONTROL_MASK_SUM (RESET_BIT+FEED_HOLD_BIT+CYCLE_START_BIT+ESTOP_BIT+PROBE_DISCONNECT_BIT+STOP_DISABLE_BIT+BLOCK_DELETE_BIT+SINGLE_BLOCK_BIT+MOTOR_FAULT_BIT+MOTOR_WARNING_BIT+LIMITS_OVERRIDE_BIT+SAFETY_DOOR_BIT)
479 #define CONTROL_MASK (RESET_BIT|FEED_HOLD_BIT|CYCLE_START_BIT|ESTOP_BIT|PROBE_DISCONNECT_BIT|STOP_DISABLE_BIT|BLOCK_DELETE_BIT|SINGLE_BLOCK_BIT|MOTOR_FAULT_BIT|MOTOR_WARNING_BIT|LIMITS_OVERRIDE_BIT)
480 #define CONTROL_MASK_SUM (RESET_BIT+FEED_HOLD_BIT+CYCLE_START_BIT+ESTOP_BIT+PROBE_DISCONNECT_BIT+STOP_DISABLE_BIT+BLOCK_DELETE_BIT+SINGLE_BLOCK_BIT+MOTOR_FAULT_BIT+MOTOR_WARNING_BIT+LIMITS_OVERRIDE_BIT)
486 #if defined(SPINDLE_ENABLE_PIN) && !defined(SPINDLE_ENABLE_BIT)
487 #define SPINDLE_ENABLE_BIT (1<<SPINDLE_ENABLE_PIN)
489 #if defined(SPINDLE_DIRECTION_PIN) && !defined(SPINDLE_DIRECTION_BIT)
490 #define SPINDLE_DIRECTION_BIT (1<<SPINDLE_DIRECTION_PIN)
493 #if defined(SPINDLE1_ENABLE_PIN) && !defined(SPINDLE1_ENABLE_BIT)
494 #define SPINDLE1_ENABLE_BIT (1<<SPINDLE1_ENABLE_PIN)
496 #if defined(SPINDLE1_DIRECTION_PIN) && !defined(SPINDLE1_DIRECTION_BIT)
497 #define SPINDLE1_DIRECTION_BIT (1<<SPINDLE1_DIRECTION_PIN)
500 #if defined(COOLANT_FLOOD_PIN) && !defined(COOLANT_FLOOD_BIT)
501 #define COOLANT_FLOOD_BIT (1<<COOLANT_FLOOD_PIN)
503 #if defined(COOLANT_MIST_PIN) && !defined(COOLANT_MIST_BIT)
504 #define COOLANT_MIST_BIT (1<<COOLANT_MIST_PIN)
507 #if defined(RTS_PIN) && !defined(RTS_BIT)
508 #define RTS_BIT (1<<RTS_PIN)
516 #if defined(PROBE_PIN) && !defined(PROBE_BIT)
517 #define PROBE_BIT (1<<PROBE_PIN)
520 #if defined(MPG_MODE_PIN) && !defined(MPG_MODE_BIT)
521 #define MPG_MODE_BIT (1<<MPG_MODE_PIN)
524 #if defined(I2C_STROBE_PIN) && !defined(I2C_STROBE_BIT)
525 #define I2C_STROBE_BIT (1<<I2C_STROBE_PIN)
528 #if defined(QEI_SELECT_PIN) && !defined(QEI_SELECT_BIT)
529 #define QEI_SELECT_BIT (1<<QEI_SELECT_PIN)
536 #define QEI_A_BIT (1<<QEI_A_PIN)
539 #define QEI_B_BIT (1<<QEI_B_PIN)
546 #ifndef QEI_SELECT_BIT
547 #define QEI_SELECT_BIT 0
550 #define MPG_MODE_BIT 0
552 #ifndef I2C_STROBE_BIT
553 #define I2C_STROBE_BIT 0
558 #if SPINDLE_ENCODER_ENABLE
559 #ifndef SPINDLE_PULSE_PIN
560 #error "Spindle encoder requires at least SPINDLE_PULSE_PIN defined in the board map!"
562 #if !defined(SPINDLE_PULSE_BIT) && defined(SPINDLE_PULSE_PIN)
563 #define SPINDLE_PULSE_BIT (1<<SPINDLE_PULSE_PIN)
565 #if !defined(SPINDLE_INDEX_BIT) && defined(SPINDLE_INDEX_PIN)
566 #define SPINDLE_INDEX_BIT (1<<SPINDLE_INDEX_PIN)
570 #ifndef SPINDLE_INDEX_BIT
571 #define SPINDLE_INDEX_BIT 0
573 #ifndef SPINDLE_PULSE_BIT
574 #define SPINDLE_PULSE_BIT 0
577 #if SPINDLE_SYNC_ENABLE && (SPINDLE_INDEX_BIT + SPINDLE_PULSE_BIT) == 0
578 #error "Spindle sync requires SPINDLE_PULSE_PIN and SPINDLE_INDEX_PIN defined in the board map!"
582 #define SPI_IRQ_BIT 0
583 #elif !defined(SPI_IRQ_BIT)
584 #define SPI_IRQ_BIT (1<<SPI_IRQ_PIN)
587 #ifndef DEVICES_IRQ_MASK
589 #define DEVICES_IRQ_MASK (SPI_IRQ_BIT|SPINDLE_INDEX_BIT|QEI_A_BIT|QEI_B_BIT)
590 #define DEVICES_IRQ_MASK_SUM (SPI_IRQ_BIT+SPINDLE_INDEX_BIT+QEI_A_BIT+QEI_B_BIT)
592 #define DEVICES_IRQ_MASK (MPG_MODE_BIT|I2C_STROBE_BIT|QEI_SELECT_BIT|SPI_IRQ_BIT|SPINDLE_INDEX_BIT|QEI_A_BIT|QEI_B_BIT)
593 #define DEVICES_IRQ_MASK_SUM (MPG_MODE_BIT+I2C_STROBE_BIT+QEI_SELECT_BIT+SPI_IRQ_BIT+SPINDLE_INDEX_BIT+QEI_A_BIT+QEI_B_BIT)
600 #define AUXINPUT0_BIT (1<<AUXINPUT0_PIN)
602 #define AUXINPUT0_BIT 0
605 #define AUXINPUT1_BIT (1<<AUXINPUT1_PIN)
607 #define AUXINPUT1_BIT 0
610 #define AUXINPUT2_BIT (1<<AUXINPUT2_PIN)
612 #define AUXINPUT2_BIT 0
615 #define AUXINPUT3_BIT (1<<AUXINPUT3_PIN)
617 #define AUXINPUT3_BIT 0
620 #define AUXINPUT4_BIT (1<<AUXINPUT4_PIN)
622 #define AUXINPUT4_BIT 0
625 #define AUXINPUT5_BIT (1<<AUXINPUT5_PIN)
627 #define AUXINPUT5_BIT 0
630 #define AUXINPUT6_BIT (1<<AUXINPUT6_PIN)
632 #define AUXINPUT6_BIT 0
635 #define AUXINPUT7_BIT (1<<AUXINPUT7_PIN)
637 #define AUXINPUT7_BIT 0
640 #ifndef AUXINPUT_MASK
641 #define AUXINPUT_MASK (AUXINPUT0_BIT|AUXINPUT1_BIT|AUXINPUT2_BIT|AUXINPUT3_BIT|AUXINPUT4_BIT|AUXINPUT5_BIT|AUXINPUT6_BIT|AUXINPUT7_BIT)
642 #define AUXINPUT_MASK_SUM (AUXINPUT0_BIT+AUXINPUT1_BIT+AUXINPUT2_BIT+AUXINPUT3_BIT+AUXINPUT4_BIT+AUXINPUT5_BIT+AUXINPUT6_BIT+AUXINPUT7_BIT)
const char * xbar_fn_to_pinname(pin_function_t fn)
Definition: crossbar.c:131
@ PullMode_None
0b00 (0x00)
Definition: crossbar.h:485
@ PullMode_Up
0b01 (0x01)
Definition: crossbar.h:486
@ Input_Probe
Definition: crossbar.h:43
@ Input_MotorFault
Definition: crossbar.h:37
@ Input_MotorWarning
Definition: crossbar.h:38
@ Input_ProbeDisconnect
Definition: crossbar.h:36
@ Input_StopDisable
Definition: crossbar.h:34
@ Input_LimitsOverride
Definition: crossbar.h:39
@ Input_QEI_Select
Definition: crossbar.h:206
@ Input_BlockDelete
Definition: crossbar.h:33
@ Output_SpindleDir
Definition: crossbar.h:147
@ Input_SingleBlock
Definition: crossbar.h:40
@ Output_SpindleOn
Definition: crossbar.h:146
@ Input_I2CStrobe
Definition: crossbar.h:200
@ Output_Spindle1Dir
Definition: crossbar.h:150
@ Output_SpindlePWM
Definition: crossbar.h:148
@ Input_MPGSelect
Definition: crossbar.h:45
@ Output_Spindle1On
Definition: crossbar.h:149
@ Input_SafetyDoor
Definition: crossbar.h:32
@ Output_Spindle1PWM
Definition: crossbar.h:151
pin_irq_mode_t
Pin interrupt modes, may be or'ed when reporting pin capability.
Definition: crossbar.h:458
@ IRQ_Mode_Rising
0b00001 (0x01)
Definition: crossbar.h:460
@ IRQ_Mode_None
0b00000 (0x00)
Definition: crossbar.h:459
@ IRQ_Mode_Change
0b00100 (0x04)
Definition: crossbar.h:463
@ IRQ_Mode_Falling
0b00010 (0x02)
Definition: crossbar.h:461
@ WaitMode_Immediate
0 - This is the only mode allowed for analog inputs
Definition: gcode.h:279
grbl_hal_t hal
Global HAL struct.
Definition: grbllib.c:88
bool ioport_claim(io_port_type_t type, io_port_direction_t dir, uint8_t *port, const char *description)
Claim a digital or analog port for exclusive use.
Definition: ioports.c:140
bool ioports_enumerate(io_port_type_t type, io_port_direction_t dir, pin_cap_t filter, ioports_enumerate_callback_ptr callback, void *data)
Definition: ioports.c:215
@ Port_Input
0
Definition: ioports.h:30
@ Port_Output
1
Definition: ioports.h:31
bool(* ioports_enumerate_callback_ptr)(xbar_t *properties, uint8_t port, void *data)
Definition: ioports.h:108
@ Port_Digital
1
Definition: ioports.h:26
void(* ioport_interrupt_callback_ptr)(uint8_t port, bool state)
Pointer to callback function for input port interrupt events.
Definition: ioports.h:98
#define On
Definition: nuts_bolts.h:36
bool(* aux_claim_explicit_ptr)(aux_ctrl_t *aux_ctrl)
Definition: pin_bits_masks.h:338
settings_t settings
Definition: settings.c:43
Definition: crossbar.h:616
uint8_t aux_port
Definition: crossbar.h:618
void * output
Definition: crossbar.h:621
pin_function_t function
Definition: crossbar.h:617
Definition: crossbar.h:606
uint8_t aux_port
Definition: crossbar.h:608
control_signals_t cap
Definition: crossbar.h:610
pin_irq_mode_t irq_mode
Definition: crossbar.h:609
void * input
Definition: crossbar.h:613
pin_function_t function
Definition: crossbar.h:607
/a cfg_data argument to /a xbar_config_ptr for gpio input pins
Definition: crossbar.h:567
bool debounce
Definition: crossbar.h:569
bool inverted
Definition: crossbar.h:568
pull_mode_t pull_mode
Definition: crossbar.h:570
io_port_t port
Optional handlers for axuillary I/O (adds support for M62-M66).
Definition: hal.h:621
control_signals_t signals_cap
Control input signals supported by the driver.
Definition: hal.h:656
wait_on_input_ptr wait_on_input
Optional handler for reading a digital or analog input.
Definition: ioports.h:118
ioport_register_interrupt_handler_ptr register_interrupt_handler
Definition: ioports.h:123
get_pin_info_ptr get_pin_info
Optional handler for getting information about an auxiliary pin.
Definition: ioports.h:120
Definition: settings.h:804
control_signals_t control_invert
Definition: settings.h:817
probeflags_t probe
Definition: settings.h:827
Definition: crossbar.h:624
pin_mode_t mode
Current pin configuration.
Definition: crossbar.h:632
xbar_config_ptr config
Optional pointer to function for configuring the port.
Definition: crossbar.h:633
uint16_t mask
Definition: system.h:125
Definition: crossbar.h:502
uint16_t debounce
Definition: crossbar.h:532
uint8_t disable_probe_pullup
Definition: settings.h:580
uint8_t invert_probe_pin
Definition: settings.h:579