28 #if PROBE_ENABLE && !defined(PROBE_PIN)
29 #error "Probe input is not supported in this configuration!"
32 #if SAFETY_DOOR_ENABLE && !defined(SAFETY_DOOR_PIN)
33 #error "Safety door input is not supported in this configuration!"
36 #if MOTOR_FAULT_ENABLE && !defined(MOTOR_FAULT_PIN)
37 #error "Motor fault input is not supported in this configuration!"
40 #if MOTOR_WARNING_ENABLE && !defined(MOTOR_WARNING_PIN)
41 #error "Motor warning input is not supported in this configuration!"
44 #if I2C_STROBE_ENABLE && !defined(I2C_STROBE_PIN)
45 #error "I2C keypad/strobe is not supported in this configuration!"
48 #if MPG_ENABLE == 1 && !defined(MPG_MODE_PIN)
49 #error "MPG mode input is not supported in this configuration!"
52 #if QEI_SELECT_ENABLE && !defined(QEI_SELECT_PIN)
53 #error "Encoder select input is not supported in this configuration!"
56 #define EXPANDER_PORT 1
64 #define RESET_PORT CONTROL_PORT
66 #ifndef FEED_HOLD_PORT
67 #define FEED_HOLD_PORT CONTROL_PORT
69 #ifndef CYCLE_START_PORT
70 #define CYCLE_START_PORT CONTROL_PORT
73 #define ESTOP_PORT CONTROL_PORT
75 #ifndef PROBE_DISCONNECT_PORT
76 #define PROBE_DISCONNECT_PORT CONTROL_PORT
78 #ifndef STOP_DISABLE_PORT
79 #define STOP_DISABLE_PORT CONTROL_PORT
81 #ifndef BLOCK_DELETE_PORT
82 #define BLOCK_DELETE_PORT CONTROL_PORT
84 #ifndef SINGLE_BLOCK_PORT
85 #define SINGLE_BLOCK_PORT CONTROL_PORT
87 #ifndef MOTOR_FAULT_PORT
88 #define MOTOR_FAULT_PORT CONTROL_PORT
90 #ifndef MOTOR_WARNING_PORT
91 #define MOTOR_WARNING_PORT CONTROL_PORT
93 #ifndef LIMITS_OVERRIDE_PORT
94 #define LIMITS_OVERRIDE_PORT CONTROL_PORT
96 #if SAFETY_DOOR_ENABLE && !defined(SAFETY_DOOR_PORT)
97 #define SAFETY_DOOR_PORT CONTROL_PORT
102 #ifndef SD_DETECT_BIT
104 #define SD_DETECT_BIT (1<<SD_DETECT_PIN)
106 #define SD_DETECT_BIT 0
110 #ifndef CONTROL_ENABLE
111 #define CONTROL_ENABLE 0
116 #if (CONTROL_ENABLE & CONTROL_ESTOP) && defined(RESET_PIN)
121 #elif (CONTROL_ENABLE & CONTROL_RESET) && defined(RESET_PIN)
127 #if (CONTROL_ENABLE & CONTROL_FEED_HOLD) && defined(FEED_HOLD_PIN)
128 #ifndef FEED_HOLD_PORT
129 #define FEED_HOLD_PORT 0
133 #if (CONTROL_ENABLE & CONTROL_CYCLE_START) && defined(CYCLE_START_PIN)
134 #ifndef CYCLE_START_PORT
135 #define CYCLE_START_PORT 0
139 #if SAFETY_DOOR_ENABLE && defined(SAFETY_DOOR_PIN)
140 #ifndef SAFETY_DOOR_PORT
141 #define SAFETY_DOOR_PORT 0
145 #if MOTOR_FAULT_ENABLE && defined(MOTOR_FAULT_PIN)
146 #ifndef MOTOR_FAULT_PORT
147 #define MOTOR_FAULT_PORT 0
151 #if MOTOR_WARNING_ENABLE && defined(MOTOR_WARNING_PIN)
152 #ifndef MOTOR_WARNING_PORT
153 #define MOTOR_WARNING_PORT 0
158 #if I2C_STROBE_ENABLE && defined(I2C_STROBE_PIN)
159 #ifndef I2C_STROBE_PORT
160 #define I2C_STROBE_PORT 0
164 #if MPG_ENABLE == 1 && defined(MPG_MODE_PIN)
165 #ifndef MPG_MODE_PORT
166 #define MPG_MODE_PORT 0
170 #if QEI_SELECT_ENABLE && defined(QEI_SELECT_PIN)
171 #ifndef QEI_SELECT_PORT
172 #define QEI_SELECT_PORT 0
178 #if PROBE_ENABLE && defined(PROBE_PIN)
184 #if PROBE2_ENABLE && defined(PROBE2_PIN)
186 #define PROBE2_PORT 0
190 #if TOOLSETTER_ENABLE && defined(TOOLSETTER_PIN)
191 #ifndef TOOLSETTER_PORT
192 #define TOOLSETTER_PORT 0
198 #if TOOLSETTER_ENABLE && !defined(TOOLSETTER_PIN)
201 #if PROBE2_ENABLE && !defined(PROBE2_PIN)
204 #if LIMITS_OVERRIDE_ENABLE
207 #if STOP_DISABLE_ENABLE
210 #if BLOCK_DELETE_ENABLE
213 #if SINGLE_BLOCK_ENABLE
216 #if PROBE_DISCONNECT_ENABLE
226 #ifdef STM32_PLATFORM
228 static inline aux_ctrl_t *aux_ctrl_get_fn (
void *port, uint8_t pin)
234 for(idx = 0; ctrl_pin == NULL && aux_ctrl[idx].
pin != 0xFF && idx <
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t); idx++) {
235 if(aux_ctrl[idx].pin == pin && aux_ctrl[idx].port == port)
236 ctrl_pin = &aux_ctrl[idx];
245 static inline aux_ctrl_t *aux_ctrl_remap_explicit (
void *port, uint8_t pin, uint8_t aux_port,
void *input)
253 for(idx = 0; ctrl_pin == NULL && idx <
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t) && aux_ctrl[idx].
pin != 0xFF; idx++) {
254 if(aux_ctrl[idx].pin == pin && aux_ctrl[idx].port == port) {
255 ctrl_pin = &aux_ctrl[idx];
257 ctrl_pin->
input = input;
266 static inline aux_ctrl_t *aux_ctrl_get_pin (uint8_t aux_port)
270 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
273 if(aux_ctrl[--idx].aux_port == aux_port)
274 ctrl_pin = &aux_ctrl[idx];
275 }
while(idx && ctrl_pin == NULL);
282 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
285 if(aux_ctrl[--idx].aux_port != 0xFF && aux_ctrl[idx].irq_mode !=
IRQ_Mode_None) {
286 if(!aux_ctrl_is_probe(aux_ctrl[idx].
function)) {
298 static bool aux_ctrl_claim_port (
xbar_t *properties, uint8_t port,
void *data)
306 static bool aux_ctrl_find_port (
xbar_t *properties, uint8_t port,
void *data)
317 if(aux_claim == NULL)
318 aux_claim = aux_ctrl_claim_port;
320 for(idx = 0; idx <
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t); idx++) {
324 if(aux_ctrl[idx].pin == 0xFE)
326 #ifdef STM32_PLATFORM
330 if(aux_ctrl[idx].pin == 0xFF) {
334 aux_claim_explicit(&aux_ctrl[idx]);
340 #if PROBE_DISCONNECT_ENABLE || STOP_DISABLE_ENABLE || BLOCK_DELETE_ENABLE || SINGLE_BLOCK_ENABLE || LIMITS_OVERRIDE_ENABLE
342 uint_fast8_t idx =
sizeof(aux_ctrl) /
sizeof(
aux_ctrl_t);
345 if(aux_ctrl[--idx].pin != 0xFF)
351 signals.
mask |= aux_ctrl[idx].cap.mask;
354 signals.
mask |= aux_ctrl[idx].cap.mask;
366 #if defined(ESP_PLATFORM) || defined(RP2040)
367 #if defined(STEPPERS_ENABLE_PIN) && STEPPERS_ENABLE_PORT == EXPANDER_PORT
370 #if defined(X_ENABLE_PIN) && X_ENABLE_PORT == EXPANDER_PORT
373 #if defined(X2_ENABLE_PIN) && X2_ENABLE_PORT == EXPANDER_PORT
376 #if defined(Y_ENABLE_PIN) && Y_ENABLE_PORT == EXPANDER_PORT
379 #if defined(Y2_ENABLE_PIN) && Y2_ENABLE_PORT == EXPANDER_PORT
382 #if defined(XY_ENABLE_PIN) && XY_ENABLE_PORT == EXPANDER_PORT
385 #if defined(Z_ENABLE_PIN) && Z_ENABLE_PORT == EXPANDER_PORT
388 #if defined(Z2_ENABLE_PIN) && Z2_ENABLE_PORT == EXPANDER_PORT
391 #if defined(A_ENABLE_PIN) && A_ENABLE_PORT == EXPANDER_PORT
394 #if defined(B_ENABLE_PIN) && B_ENABLE_PORT == EXPANDER_PORT
397 #if defined(C_ENABLE_PIN) && C_ENABLE_PORT == EXPANDER_PORT
400 #if defined(U_ENABLE_PIN) && U_ENABLE_PORT == EXPANDER_PORT
403 #if defined(V_ENABLE_PIN) && AV_ENABLE_PORT == EXPANDER_PORT
407 #ifdef SPINDLE_ENABLE_PIN
408 #ifndef SPINDLE_ENABLE_PORT
409 #define SPINDLE_ENABLE_PORT 0
413 #ifdef SPINDLE_PWM_PIN
414 #ifndef SPINDLE_PWM_PORT
415 #define SPINDLE_PWM_PORT 0
419 #ifdef SPINDLE_DIRECTION_PIN
420 #ifndef SPINDLE_DIRECTION_PORT
421 #define SPINDLE_DIRECTION_PORT 0
426 #ifdef SPINDLE1_ENABLE_PIN
427 #ifndef SPINDLE1_ENABLE_PORT
428 #define SPINDLE1_ENABLE_PORT 0
432 #ifdef SPINDLE1_PWM_PIN
433 #ifndef SPINDLE1_PWM_PORT
434 #define SPINDLE1_PWM_PORT 0
438 #ifdef SPINDLE1_DIRECTION_PIN
439 #ifndef SPINDLE1_DIRECTION_PORT
440 #define SPINDLE1_DIRECTION_PORT 0
445 #ifdef COOLANT_FLOOD_PIN
446 #ifndef COOLANT_FLOOD_PORT
447 #define COOLANT_FLOOD_PORT 0
451 #ifdef COOLANT_MIST_PIN
452 #ifndef COOLANT_MIST_PORT
453 #define COOLANT_MIST_PORT 0
458 #ifdef COPROC_RESET_PIN
459 #ifndef COPROC_RESET_PORT
460 #define COPROC_RESET_PORT 0
464 #ifdef COPROC_BOOT0_PIN
465 #ifndef COPROC_BOOT0_PORT
466 #define COPROC_BOOT0_PORT 0
470 #if defined(SPI_RST_PIN) && defined(RP2040)
471 #if SPI_RST_PORT == EXPANDER_PORT
477 static inline aux_ctrl_out_t *aux_out_remap_explicit (
void *port, uint8_t pin, uint8_t aux_port,
void *output)
485 if(aux_ctrl_out[idx].port == port && aux_ctrl_out[idx].pin == pin) {
486 ctrl_pin = &aux_ctrl_out[idx];
488 ctrl_pin->
output = output;
490 }
while(idx && ctrl_pin == NULL);
497 static bool aux_ctrl_claim_out_port (
xbar_t *properties, uint8_t port,
void *data)
512 if(aux_claim == NULL)
513 aux_claim = aux_ctrl_claim_out_port;
515 for(idx = 0; idx <
sizeof(aux_ctrl_out) /
sizeof(
aux_ctrl_out_t); idx++) {
521 aux_claim_explicit(&aux_ctrl_out[idx]);
524 }
else if(aux_ctrl_out[idx].pin == 0xFF) {
526 aux_claim_explicit(&aux_ctrl_out[idx]);
527 }
else if(aux_ctrl_out[idx].aux_port != 0xFF)
528 aux_claim_explicit(&aux_ctrl_out[idx]);
534 #if defined(SPINDLE_ENABLE_PIN) && !defined(SPINDLE_ENABLE_BIT)
535 #define SPINDLE_ENABLE_BIT (1<<SPINDLE_ENABLE_PIN)
537 #if defined(SPINDLE_DIRECTION_PIN) && !defined(SPINDLE_DIRECTION_BIT)
538 #define SPINDLE_DIRECTION_BIT (1<<SPINDLE_DIRECTION_PIN)
541 #if defined(SPINDLE1_ENABLE_PIN) && !defined(SPINDLE1_ENABLE_BIT)
542 #define SPINDLE1_ENABLE_BIT (1<<SPINDLE1_ENABLE_PIN)
544 #if defined(SPINDLE1_DIRECTION_PIN) && !defined(SPINDLE1_DIRECTION_BIT)
545 #define SPINDLE1_DIRECTION_BIT (1<<SPINDLE1_DIRECTION_PIN)
548 #if defined(COOLANT_FLOOD_PIN) && !defined(COOLANT_FLOOD_BIT)
549 #define COOLANT_FLOOD_BIT (1<<COOLANT_FLOOD_PIN)
551 #if defined(COOLANT_MIST_PIN) && !defined(COOLANT_MIST_BIT)
552 #define COOLANT_MIST_BIT (1<<COOLANT_MIST_PIN)
555 #if defined(RTS_PIN) && !defined(RTS_BIT)
556 #define RTS_BIT (1<<RTS_PIN)
563 #define QEI_A_BIT (1<<QEI_A_PIN)
566 #define QEI_B_BIT (1<<QEI_B_PIN)
573 #ifndef QEI_SELECT_BIT
574 #define QEI_SELECT_BIT 0
577 #define MPG_MODE_BIT 0
579 #ifndef I2C_STROBE_BIT
580 #define I2C_STROBE_BIT 0
585 #if SPINDLE_ENCODER_ENABLE
586 #ifndef SPINDLE_PULSE_PIN
587 #error "Spindle encoder requires at least SPINDLE_PULSE_PIN defined in the board map!"
589 #if !defined(SPINDLE_PULSE_BIT) && defined(SPINDLE_PULSE_PIN)
590 #define SPINDLE_PULSE_BIT (1<<SPINDLE_PULSE_PIN)
592 #if !defined(SPINDLE_INDEX_BIT) && defined(SPINDLE_INDEX_PIN)
593 #define SPINDLE_INDEX_BIT (1<<SPINDLE_INDEX_PIN)
597 #ifndef SPINDLE_INDEX_BIT
598 #define SPINDLE_INDEX_BIT 0
600 #ifndef SPINDLE_PULSE_BIT
601 #define SPINDLE_PULSE_BIT 0
604 #if SPINDLE_SYNC_ENABLE && (SPINDLE_INDEX_BIT + SPINDLE_PULSE_BIT) == 0
605 #error "Spindle sync requires SPINDLE_PULSE_PIN and SPINDLE_INDEX_PIN defined in the board map!"
609 #define SPI_IRQ_BIT 0
610 #elif !defined(SPI_IRQ_BIT)
611 #define SPI_IRQ_BIT (1<<SPI_IRQ_PIN)
614 #ifndef DEVICES_IRQ_MASK
615 #define DEVICES_IRQ_MASK (SPI_IRQ_BIT|SPINDLE_INDEX_BIT|QEI_A_BIT|QEI_B_BIT|SD_DETECT_BIT)
616 #define DEVICES_IRQ_MASK_SUM (SPI_IRQ_BIT+SPINDLE_INDEX_BIT+QEI_A_BIT+QEI_B_BIT+SD_DETECT_BIT)
622 #define AUXINPUT0_BIT (1<<AUXINPUT0_PIN)
624 #define AUXINPUT0_BIT 0
627 #define AUXINPUT1_BIT (1<<AUXINPUT1_PIN)
629 #define AUXINPUT1_BIT 0
632 #define AUXINPUT2_BIT (1<<AUXINPUT2_PIN)
634 #define AUXINPUT2_BIT 0
637 #define AUXINPUT3_BIT (1<<AUXINPUT3_PIN)
639 #define AUXINPUT3_BIT 0
642 #define AUXINPUT4_BIT (1<<AUXINPUT4_PIN)
644 #define AUXINPUT4_BIT 0
647 #define AUXINPUT5_BIT (1<<AUXINPUT5_PIN)
649 #define AUXINPUT5_BIT 0
652 #define AUXINPUT6_BIT (1<<AUXINPUT6_PIN)
654 #define AUXINPUT6_BIT 0
657 #define AUXINPUT7_BIT (1<<AUXINPUT7_PIN)
659 #define AUXINPUT7_BIT 0
662 #define AUXINPUT8_BIT (1<<AUXINPUT8_PIN)
664 #define AUXINPUT8_BIT 0
667 #define AUXINPUT9_BIT (1<<AUXINPUT9_PIN)
669 #define AUXINPUT9_BIT 0
671 #ifdef AUXINPUT10_PIN
672 #define AUXINPUT10_BIT (1<<AUXINPUT10_PIN)
674 #define AUXINPUT10_BIT 0
676 #ifdef AUXINPUT11_PIN
677 #define AUXINPUT11_BIT (1<<AUXINPUT11_PIN)
679 #define AUXINPUT11_BIT 0
681 #ifdef AUXINPUT12_PIN
682 #define AUXINPUT12_BIT (1<<AUXINPUT12_PIN)
684 #define AUXINPUT12_BIT 0
686 #ifdef AUXINPUT13_PIN
687 #define AUXINPUT13_BIT (1<<AUXINPUT13_PIN)
689 #define AUXINPUT13_BIT 0
691 #ifdef AUXINPUT14_PIN
692 #define AUXINPUT14_BIT (1<<AUXINPUT14_PIN)
694 #define AUXINPUT14_BIT 0
696 #ifdef AUXINPUT15_PIN
697 #define AUXINPUT15_BIT (1<<AUXINPUT15_PIN)
699 #define AUXINPUT15_BIT 0
702 #ifndef AUXINPUT_MASK
703 #define AUXINPUT_MASK (AUXINPUT0_BIT|AUXINPUT1_BIT|AUXINPUT2_BIT|AUXINPUT3_BIT|AUXINPUT4_BIT|AUXINPUT5_BIT|AUXINPUT6_BIT|AUXINPUT7_BIT|\
704 AUXINPUT8_BIT|AUXINPUT9_BIT|AUXINPUT10_BIT|AUXINPUT11_BIT|AUXINPUT12_BIT|AUXINPUT13_BIT|AUXINPUT4_BIT|AUXINPUT15_BIT)
705 #define AUXINPUT_MASK_SUM (AUXINPUT0_BIT+AUXINPUT1_BIT+AUXINPUT2_BIT+AUXINPUT3_BIT+AUXINPUT4_BIT+AUXINPUT5_BIT+AUXINPUT6_BIT+AUXINPUT7_BIT+\
706 AUXINPUT8_BIT+AUXINPUT9_BIT+AUXINPUT10_BIT+AUXINPUT11_BIT+AUXINPUT12_BIT+AUXINPUT13_BIT+AUXINPUT4_BIT+AUXINPUT15_BIT)
const char * xbar_fn_to_pinname(pin_function_t fn)
Definition: crossbar.c:142
pin_function_t
Definition: crossbar.h:27
@ Input_FeedHold
Definition: crossbar.h:30
@ Input_Toolsetter
Definition: crossbar.h:58
@ Output_StepperEnableV
Definition: crossbar.h:182
@ Input_Reset
Definition: crossbar.h:29
@ Output_CoProc_Boot0
Definition: crossbar.h:237
@ Input_Probe
Definition: crossbar.h:43
@ Output_StepperEnableX
Definition: crossbar.h:173
@ Input_MotorFault
Definition: crossbar.h:37
@ Input_Probe2
Definition: crossbar.h:56
@ Input_MotorWarning
Definition: crossbar.h:38
@ Input_ProbeDisconnect
Definition: crossbar.h:36
@ Input_EStop
Definition: crossbar.h:35
@ Input_StopDisable
Definition: crossbar.h:34
@ Output_StepperEnableXY
Definition: crossbar.h:184
@ Input_LimitsOverride
Definition: crossbar.h:39
@ Output_CoProc_Reset
Definition: crossbar.h:236
@ Output_StepperEnableZ
Definition: crossbar.h:177
@ Input_QEI_Select
Definition: crossbar.h:260
@ Output_StepperEnableU
Definition: crossbar.h:181
@ Output_StepperEnableA
Definition: crossbar.h:179
@ Output_StepperEnableY2
Definition: crossbar.h:176
@ Input_BlockDelete
Definition: crossbar.h:33
@ Output_StepperEnable
Definition: crossbar.h:171
@ Output_SpindleDir
Definition: crossbar.h:187
@ Output_StepperEnableY
Definition: crossbar.h:175
@ Output_StepperEnableC
Definition: crossbar.h:183
@ Input_SingleBlock
Definition: crossbar.h:40
@ Output_SPIRST
Definition: crossbar.h:247
@ Output_SpindleOn
Definition: crossbar.h:186
@ Input_I2CStrobe
Definition: crossbar.h:254
@ Output_Spindle1Dir
Definition: crossbar.h:190
@ Output_SpindlePWM
Definition: crossbar.h:188
@ Output_CoolantMist
Definition: crossbar.h:192
@ Input_MPGSelect
Definition: crossbar.h:60
@ Output_Spindle1On
Definition: crossbar.h:189
@ Output_StepperEnableB
Definition: crossbar.h:180
@ Input_CycleStart
Definition: crossbar.h:31
@ Input_SafetyDoor
Definition: crossbar.h:32
@ Output_CoolantFlood
Definition: crossbar.h:193
@ Output_StepperEnableX2
Definition: crossbar.h:174
@ Output_StepperEnableZ2
Definition: crossbar.h:178
@ Output_Spindle1PWM
Definition: crossbar.h:191
pin_irq_mode_t
Pin interrupt modes, may be or'ed when reporting pin capability.
Definition: crossbar.h:560
@ IRQ_Mode_Rising
0b00001 (0x01)
Definition: crossbar.h:562
@ IRQ_Mode_RisingFalling
0b00011 (0x03) - only used to report port capability.
Definition: crossbar.h:564
@ IRQ_Mode_None
0b00000 (0x00)
Definition: crossbar.h:561
@ IRQ_Mode_Change
0b00100 (0x04)
Definition: crossbar.h:565
@ IRQ_Mode_Falling
0b00010 (0x02)
Definition: crossbar.h:563
@ WaitMode_Immediate
0 - This is the only mode allowed for analog inputs
Definition: gcode.h:291
DCRAM grbl_hal_t hal
Global HAL struct.
Definition: grbllib.c:91
xbar_t * 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:294
bool ioport_set_function(xbar_t *pin, pin_function_t function, driver_caps_t caps)
Set pin function.
Definition: ioports.c:357
bool ioports_enumerate(io_port_type_t type, io_port_direction_t dir, pin_cap_t filter, ioports_enumerate_callback_ptr callback, void *data)
Enumerate ports.
Definition: ioports.c:433
@ Port_Input
0
Definition: ioports.h:34
@ Port_Output
1
Definition: ioports.h:35
bool(* ioports_enumerate_callback_ptr)(xbar_t *properties, uint8_t port, void *data)
Definition: ioports.h:161
@ Port_Digital
1
Definition: ioports.h:30
#define IOPORT_UNASSIGNED
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:142
#define On
Definition: nuts_bolts.h:36
bool(* aux_claim_explicit_ptr)(aux_ctrl_t *aux_ctrl)
Definition: pin_bits_masks.h:296
bool(* aux_claim_explicit_out_ptr)(aux_ctrl_out_t *aux_ctrl)
Definition: pin_bits_masks.h:495
#define EXPANDER_PORT
Definition: pin_bits_masks.h:56
settings_t settings
Definition: settings.c:46
Definition: crossbar.h:737
uint8_t aux_port
Definition: crossbar.h:739
void * output
Definition: crossbar.h:742
pin_function_t function
Definition: crossbar.h:738
Definition: crossbar.h:727
uint8_t aux_port
Definition: crossbar.h:729
control_signals_t cap
Definition: crossbar.h:731
pin_irq_mode_t irq_mode
Definition: crossbar.h:730
void * input
Definition: crossbar.h:734
uint8_t pin
Definition: crossbar.h:732
pin_function_t function
Definition: crossbar.h:728
io_port_t port
Optional handlers for axuillary I/O (adds support for M62-M66).
Definition: hal.h:645
control_signals_t signals_cap
Control input signals supported by the driver.
Definition: hal.h:680
wait_on_input_ptr wait_on_input
Optional handler for reading a digital or analog input.
Definition: ioports.h:171
ioport_register_interrupt_handler_ptr register_interrupt_handler
Definition: ioports.h:176
Definition: settings.h:861
control_signals_t control_invert
Definition: settings.h:873
Definition: crossbar.h:745
xbar_set_value_ptr set_value
Optional pointer to function to set port value.
Definition: crossbar.h:757
uint_fast8_t pin
Pin number.
Definition: crossbar.h:752
uint16_t mask
Definition: system.h:164
Definition: crossbar.h:618
uint32_t irq_mode
pin_irq_mode_t - IRQ modes
Definition: crossbar.h:625