grblHAL core  20260318
crossbar.h
Go to the documentation of this file.
1 /*
2  crossbar.h - signal crossbar definitions
3 
4  Part of grblHAL
5 
6  Copyright (c) 2021-2026 Terje Io
7 
8  grblHAL is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  grblHAL is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
20 */
21 
22 #ifndef _CROSSBAR_H_
23 #define _CROSSBAR_H_
24 
25 #include "nuts_bolts.h"
26 
27 #if !defined N_AUX_AIN || defined __DOXYGEN__
28 #define N_AUX_AIN 8
29 #endif
30 
31 #if !defined N_AUX_AOUT || defined __DOXYGEN__
32 #define N_AUX_AOUT 8
33 #endif
34 
35 #if !defined N_AUX_DIN || defined __DOXYGEN__
36 #define N_AUX_DIN 24
37 #endif
38 
39 #if !defined N_AUX_DOUT || defined __DOXYGEN__
40 #define N_AUX_DOUT 24
41 #endif
42 
43 typedef enum {
44 // NOTE: the sequence of the following enums MUST match the control_signals_t layout
60 // end control_signals_t sequence
80  Input_LimitX_2 = Input_LimitX2, // Deprecated
86  Input_LimitY_2 = Input_LimitY2, // Deprecated
92  Input_LimitZ_2 = Input_LimitZ2, // Deprecated
132 #if N_AUX_DIN > 16
141 #endif
142 #if N_AUX_DIN > 24
143  Input_Aux24,
144  Input_Aux25,
145  Input_Aux26,
146  Input_Aux27,
147  Input_Aux28,
148  Input_Aux29,
149  Input_Aux30,
150  Input_Aux31,
151  Input_AuxMax = Input_Aux31,
152 #elif N_AUX_DIN > 16
154 #elif
156 #endif
165 #if N_AUX_AIN > 8
166  Input_Analog_Aux8,
167  Input_Analog_Aux9,
168  Input_Analog_Aux10,
169  Input_Analog_Aux11,
170  Input_Analog_Aux12,
171  Input_Analog_Aux13,
172  Input_Analog_Aux14,
173  Input_Analog_Aux15,
174  Input_Analog_AuxMax = Input_Analog_Aux15,
175 #else
177 #endif
178 // Output pins
182  Output_StepX_2 = Output_StepX2, // deprecated
185  Output_StepY_2 = Output_StepY2, // deprecated
188  Output_StepZ_2 = Output_StepZ2, // deprecated
197  Output_DirX_2 = Output_DirX2, // deprecated
200  Output_DirY_2 = Output_DirY2, // deprecated
203  Output_DirZ_2 = Output_DirZ2, // deprecated
260 #if N_AUX_DOUT > 16
269 #endif
270 #if N_AUX_DOUT > 24
271  Output_Aux24,
272  Output_Aux25,
273  Output_Aux26,
274  Output_Aux27,
275  Output_Aux28,
276  Output_Aux29,
277  Output_Aux30,
278  Output_Aux31,
279  Output_AuxMax = Output_Aux31,
280 #elif N_AUX_DOUT > 16
282 #elif
284 #endif
293 #if N_AUX_AOUT > 8
294  Output_Analog_Aux8,
295  Output_Analog_Aux9,
296  Output_Analog_Aux10,
297  Output_Analog_Aux11,
298  Output_Analog_Aux12,
299  Output_Analog_Aux13,
300  Output_Analog_Aux14,
301  Output_Analog_Aux15,
302  Output_Analog_AuxMax = Output_Analog_Aux15,
303 #else
305 #endif
316 // Multipin peripherals
331  Input_KeypadStrobe, // To be deprecated? Use Input_I2CStrobe instead.
342 // Single pin bidirectional peripherals
353 
354 #define PIN_ISINPUT(pin) (pin < Outputs)
355 #define PIN_ISOUTPUT(pin) (pin >= Outputs && pin < Bidirectional)
356 #define PIN_ISBIDIRECTIONAL(pin) (pin >= Bidirectional)
357 
358 typedef struct {
359  pin_function_t function;
360  const char *name;
361 } pin_name_t;
362 
363 PROGMEM static const pin_name_t pin_names[] = {
364  { .function = Input_Reset, .name = "Reset" },
365  { .function = Input_FeedHold, .name = "Feed hold" },
366  { .function = Input_CycleStart, .name = "Cycle start" },
367  { .function = Input_SafetyDoor, .name = "Safety door" },
368  { .function = Input_BlockDelete, .name = "Block delete" },
369  { .function = Input_StopDisable, .name = "Stop disable" },
370  { .function = Input_EStop, .name = "Emergency stop" },
371  { .function = Input_ProbeDisconnect, .name = "Probe disconnect" },
372  { .function = Input_MotorFault, .name = "Motor fault" },
373  { .function = Input_MotorWarning, .name = "Motor warning" },
374  { .function = Input_LimitsOverride, .name = "Limits override" },
375  { .function = Input_SingleBlock, .name = "Single block" },
376  { .function = Input_ProbeOvertravel, .name = "Probe overtravel" },
377  { .function = Input_Probe, .name = "Probe" },
378  { .function = Input_MotorFaultX, .name = "X motor fault" },
379  { .function = Input_MotorFaultY, .name = "Y motor fault" },
380  { .function = Input_MotorFaultZ, .name = "Z motor fault" },
381  { .function = Input_MotorFaultX2, .name = "X motor fault 2" },
382  { .function = Input_MotorFaultY2, .name = "Y motor fault 2" },
383  { .function = Input_MotorFaultZ2, .name = "Z motor fault 2" },
384  { .function = Input_Probe2, .name = "Probe 2" },
385  { .function = Input_Probe2Overtravel, .name = "Probe 2 overtravel" },
386  { .function = Input_Toolsetter, .name = "Toolsetter" },
387  { .function = Input_ToolsetterOvertravel, .name = "Toolsetter overtravel" },
388  { .function = Input_MPGSelect, .name = "MPG mode select" },
389  { .function = Input_LimitX, .name = "X limit min" },
390  { .function = Input_LimitX_2, .name = "X limit min 2" },
391  { .function = Input_LimitX_Max, .name = "X limit max" },
392  { .function = Input_HomeX, .name = "X home" },
393  { .function = Input_HomeX_2, .name = "X home 2" },
394  { .function = Input_LimitY, .name = "Y limit min" },
395  { .function = Input_LimitY_2, .name = "Y limit min 2" },
396  { .function = Input_LimitY_Max, .name = "Y limit max" },
397  { .function = Input_HomeY, .name = "Y home" },
398  { .function = Input_HomeY_2, .name = "Y home 2" },
399  { .function = Input_LimitZ, .name = "Z limit min" },
400  { .function = Input_LimitZ_2, .name = "Z limit min 2" },
401  { .function = Input_LimitZ_Max, .name = "Z limit max" },
402  { .function = Input_HomeZ, .name = "Z home" },
403  { .function = Input_HomeZ_2, .name = "Z home 2" },
404  { .function = Input_SpindleIndex, .name = "Spindle index" },
405  { .function = Input_SpindlePulse, .name = "Spindle pulse" },
406  { .function = Input_Aux0, .name = "Aux in 0" },
407  { .function = Input_Aux1, .name = "Aux in 1" },
408  { .function = Input_Aux2, .name = "Aux in 2" },
409  { .function = Input_Aux3, .name = "Aux in 3" },
410  { .function = Input_Aux4, .name = "Aux in 4" },
411  { .function = Input_Aux5, .name = "Aux in 5" },
412  { .function = Input_Aux6, .name = "Aux in 6" },
413  { .function = Input_Aux7, .name = "Aux in 7" },
414  { .function = Input_Aux8, .name = "Aux in 8" },
415  { .function = Input_Aux9, .name = "Aux in 9" },
416  { .function = Input_Aux10, .name = "Aux in 10" },
417  { .function = Input_Aux11, .name = "Aux in 11" },
418  { .function = Input_Aux12, .name = "Aux in 12" },
419  { .function = Input_Aux13, .name = "Aux in 13" },
420  { .function = Input_Aux14, .name = "Aux in 14" },
421  { .function = Input_Aux15, .name = "Aux in 15" },
422 #if N_AUX_DIN > 16
423  { .function = Input_Aux16, .name = "Aux in 16" },
424  { .function = Input_Aux17, .name = "Aux in 17" },
425  { .function = Input_Aux18, .name = "Aux in 18" },
426  { .function = Input_Aux19, .name = "Aux in 19" },
427  { .function = Input_Aux20, .name = "Aux in 20" },
428  { .function = Input_Aux21, .name = "Aux in 21" },
429  { .function = Input_Aux22, .name = "Aux in 22" },
430  { .function = Input_Aux23, .name = "Aux in 23" },
431 #endif
432 #if N_AUX_DIN > 24
433  { .function = Input_Aux24, .name = "Aux in 24" },
434  { .function = Input_Aux25, .name = "Aux in 25" },
435  { .function = Input_Aux26, .name = "Aux in 26" },
436  { .function = Input_Aux27, .name = "Aux in 27" },
437  { .function = Input_Aux28, .name = "Aux in 28" },
438  { .function = Input_Aux29, .name = "Aux in 29" },
439  { .function = Input_Aux30, .name = "Aux in 30" },
440  { .function = Input_Aux31, .name = "Aux in 31" },
441 #endif
442  { .function = Input_Analog_Aux0, .name = "Aux analog in 0" },
443  { .function = Input_Analog_Aux1, .name = "Aux analog in 1" },
444  { .function = Input_Analog_Aux2, .name = "Aux analog in 2" },
445  { .function = Input_Analog_Aux3, .name = "Aux analog in 3" },
446  { .function = Input_Analog_Aux4, .name = "Aux analog in 4" },
447  { .function = Input_Analog_Aux5, .name = "Aux analog in 5" },
448  { .function = Input_Analog_Aux6, .name = "Aux analog in 6" },
449  { .function = Input_Analog_Aux7, .name = "Aux analog in 7" },
450 #if N_AUX_AIN > 8
451  { .function = Input_Analog_Aux8, .name = "Aux analog in 8" },
452  { .function = Input_Analog_Aux9, .name = "Aux analog in 9" },
453  { .function = Input_Analog_Aux10, .name = "Aux analog in 10" },
454  { .function = Input_Analog_Aux11, .name = "Aux analog in 11" },
455  { .function = Input_Analog_Aux12, .name = "Aux analog in 12" },
456  { .function = Input_Analog_Aux13, .name = "Aux analog in 13" },
457  { .function = Input_Analog_Aux14, .name = "Aux analog in 14" },
458  { .function = Input_Analog_Aux15, .name = "Aux analog in 15" },
459 #endif
460  { .function = Output_StepX, .name = "X step" },
461  { .function = Output_StepX2, .name = "X2 step" },
462  { .function = Output_StepY, .name = "Y step" },
463  { .function = Output_StepY2, .name = "Y2 step" },
464  { .function = Output_StepZ, .name = "Z step" },
465  { .function = Output_StepZ2, .name = "Z2 step" },
466  { .function = Output_DirX, .name = "X dir" },
467  { .function = Output_DirX2, .name = "X2 dir" },
468  { .function = Output_DirY, .name = "Y dir" },
469  { .function = Output_DirY2, .name = "Y2 dir" },
470  { .function = Output_DirZ, .name = "Z dir" },
471  { .function = Output_DirZ2, .name = "Z2 dir" },
472  { .function = Output_StepperPower, .name = "Stepper power" },
473  { .function = Output_StepperEnable, .name = "Steppers enable" },
474  { .function = Output_StepperEnableX, .name = "X enable" },
475  { .function = Output_StepperEnableY, .name = "Y enable" },
476  { .function = Output_StepperEnableZ, .name = "Z enable" },
477  { .function = Output_StepperEnableXY, .name = "XY enable" },
478 #ifdef A_AXIS
479  { .function = Output_StepA, .name = "A step" },
480  { .function = Output_DirA, .name = "A dir" },
481  { .function = Output_StepperEnableA, .name = "A enable" },
482  { .function = Input_LimitA, .name = "A limit min" },
483  { .function = Input_LimitA_Max, .name = "A limit max" },
484  { .function = Input_HomeA, .name = "A home" },
485  { .function = Input_MotorFaultA, .name = "A motor fault" },
486 #endif
487 #ifdef B_AXIS
488  { .function = Output_StepB, .name = "B step" },
489  { .function = Output_DirB, .name = "B dir" },
490  { .function = Output_StepperEnableB, .name = "B enable" },
491  { .function = Output_StepperEnableAB, .name = "AB enable" },
492  { .function = Input_LimitB, .name = "B limit min" },
493  { .function = Input_LimitB_Max, .name = "B limit max" },
494  { .function = Input_HomeB, .name = "B home" },
495  { .function = Input_MotorFaultB, .name = "B motor fault" },
496 #endif
497 #ifdef C_AXIS
498  { .function = Output_StepC, .name = "C step" },
499  { .function = Output_DirC, .name = "C dir" },
500  { .function = Output_StepperEnableC, .name = "C enable" },
501  { .function = Input_LimitC, .name = "C limit min" },
502  { .function = Input_LimitC_Max, .name = "C limit max" },
503  { .function = Input_HomeC, .name = "C home" },
504  { .function = Input_MotorFaultC, .name = "C motor fault" },
505 #endif
506 #ifdef U_AXIS
507  { .function = Output_StepU, .name = "U step" },
508  { .function = Output_DirU, .name = "U dir" },
509  { .function = Output_StepperEnableU, .name = "U enable" },
510  { .function = Input_LimitU, .name = "U limit min" },
511  { .function = Input_LimitU_Max, .name = "U limit max" },
512  { .function = Input_HomeU, .name = "U home" },
513  { .function = Input_MotorFaultU, .name = "U motor fault" },
514 #endif
515 #ifdef V_AXIS
516  { .function = Output_StepV, .name = "V step" },
517  { .function = Output_DirV, .name = "V dir" },
518  { .function = Output_StepperEnableV, .name = "V enable" },
519  { .function = Input_LimitV, .name = "V limit min" },
520  { .function = Input_LimitV_Max, .name = "V limit max" },
521  { .function = Input_HomeV, .name = "V home" },
522  { .function = Input_MotorFaultV, .name = "V motor fault" },
523 #endif
524 #ifdef W_AXIS
525  { .function = Output_StepW, .name = "W step" },
526  { .function = Output_DirW, .name = "W dir" },
527  { .function = Output_StepperEnableW, .name = "W enable" },
528  { .function = Input_LimitW, .name = "W limit min" },
529  { .function = Input_LimitW_Max, .name = "W limit max" },
530  { .function = Input_HomeW, .name = "W home" },
531  { .function = Input_MotorFaultW, .name = "W motor fault" },
532 #endif
533  { .function = Output_MotorChipSelect, .name = "Motor CS" },
534  { .function = Output_MotorChipSelectX, .name = "Motor CSX" },
535  { .function = Output_MotorChipSelectY, .name = "Motor CSY" },
536  { .function = Output_MotorChipSelectZ, .name = "Motor CSZ" },
537  { .function = Output_MotorChipSelectM3, .name = "Motor CSM3" },
538  { .function = Output_MotorChipSelectM4, .name = "Motor CSM4" },
539  { .function = Output_MotorChipSelectM5, .name = "Motor CSM5" },
540  { .function = Output_MotorChipSelectM6, .name = "Motor CSM6" },
541  { .function = Output_MotorChipSelectM7, .name = "Motor CSM7" },
542  { .function = Output_SpindleOn, .name = "Spindle on" },
543  { .function = Output_SpindleDir, .name = "Spindle direction" },
544  { .function = Output_SpindlePWM, .name = "Spindle PWM" },
545  { .function = Output_Spindle1On, .name = "Spindle 2 on" },
546  { .function = Output_Spindle1Dir, .name = "Spindle 2 direction" },
547  { .function = Output_Spindle1PWM, .name = "Spindle 2 PWM" },
548  { .function = Output_CoolantMist, .name = "Mist" },
549  { .function = Output_CoolantFlood, .name = "Flood" },
550  { .function = Output_Aux0, .name = "Aux out 0" },
551  { .function = Output_Aux1, .name = "Aux out 1" },
552  { .function = Output_Aux2, .name = "Aux out 2" },
553  { .function = Output_Aux3, .name = "Aux out 3" },
554  { .function = Output_Aux4, .name = "Aux out 4" },
555  { .function = Output_Aux5, .name = "Aux out 5" },
556  { .function = Output_Aux6, .name = "Aux out 6" },
557  { .function = Output_Aux7, .name = "Aux out 7" },
558  { .function = Output_Aux8, .name = "Aux out 8" },
559  { .function = Output_Aux9, .name = "Aux out 9" },
560  { .function = Output_Aux10, .name = "Aux out 10" },
561  { .function = Output_Aux11, .name = "Aux out 11" },
562  { .function = Output_Aux12, .name = "Aux out 12" },
563  { .function = Output_Aux13, .name = "Aux out 13" },
564  { .function = Output_Aux14, .name = "Aux out 14" },
565  { .function = Output_Aux15, .name = "Aux out 15" },
566 #if N_AUX_DOUT > 16
567  { .function = Output_Aux16, .name = "Aux out 16" },
568  { .function = Output_Aux17, .name = "Aux out 17" },
569  { .function = Output_Aux18, .name = "Aux out 18" },
570  { .function = Output_Aux19, .name = "Aux out 19" },
571  { .function = Output_Aux20, .name = "Aux out 20" },
572  { .function = Output_Aux21, .name = "Aux out 21" },
573  { .function = Output_Aux22, .name = "Aux out 22" },
574  { .function = Output_Aux23, .name = "Aux out 23" },
575 #endif
576 #if N_AUX_DOUT > 24
577  { .function = Output_Aux24, .name = "Aux out 24" },
578  { .function = Output_Aux25, .name = "Aux out 25" },
579  { .function = Output_Aux26, .name = "Aux out 26" },
580  { .function = Output_Aux27, .name = "Aux out 27" },
581  { .function = Output_Aux28, .name = "Aux out 28" },
582  { .function = Output_Aux29, .name = "Aux out 29" },
583  { .function = Output_Aux30, .name = "Aux out 30" },
584  { .function = Output_Aux31, .name = "Aux out 31" },
585 #endif
586  { .function = Output_Analog_Aux0, .name = "Aux analog out 0" },
587  { .function = Output_Analog_Aux1, .name = "Aux analog out 1" },
588  { .function = Output_Analog_Aux2, .name = "Aux analog out 2" },
589  { .function = Output_Analog_Aux3, .name = "Aux analog out 3" },
590  { .function = Output_Analog_Aux4, .name = "Aux analog out 4" },
591  { .function = Output_Analog_Aux5, .name = "Aux analog out 5" },
592  { .function = Output_Analog_Aux6, .name = "Aux analog out 6" },
593  { .function = Output_Analog_Aux7, .name = "Aux analog out 7" },
594 #if N_AUX_AOUT > 8
595  { .function = Output_Analog_Aux8, .name = "Aux analog out 8" },
596  { .function = Output_Analog_Aux9, .name = "Aux analog out 9" },
597  { .function = Output_Analog_Aux10, .name = "Aux analog out 10" },
598  { .function = Output_Analog_Aux11, .name = "Aux analog out 11" },
599  { .function = Output_Analog_Aux12, .name = "Aux analog out 12" },
600  { .function = Output_Analog_Aux13, .name = "Aux analog out 13" },
601  { .function = Output_Analog_Aux14, .name = "Aux analog out 14" },
602  { .function = Output_Analog_Aux15, .name = "Aux analog out 15" },
603 #endif
604  { .function = Output_LED, .name = "LED" },
605  { .function = Output_LED_R, .name = "LED R" },
606  { .function = Output_LED_G, .name = "LED G" },
607  { .function = Output_LED_B, .name = "LED B" },
608  { .function = Output_LED_W, .name = "LED W" },
609  { .function = Output_LED_Adressable, .name = "LED adressable" },
610  { .function = Output_LED1_Adressable, .name = "LED adressable 1" },
611  { .function = Output_CoProc_Reset, .name = "CoProc Reset" },
612  { .function = Output_CoProc_Boot0, .name = "CoProc Boot0" },
613  { .function = Input_MISO, .name = "MISO" },
614  { .function = Output_MOSI, .name = "MOSI" },
615  { .function = Output_SPICLK, .name = "SPI CLK" },
616  { .function = Output_SPICS, .name = "SPI CS" },
617  { .function = Output_FlashCS, .name = "Flash CS" },
618  { .function = Output_SdCardCS, .name = "SD card CS" },
619  { .function = Input_SdCardDetect, .name = "SD card detect" },
620  { .function = Output_SPIRST, .name = "SPI reset" },
621  { .function = Input_SPIIRQ, .name = "SPI IRQ" },
622  { .function = Output_I2CSCK, .name = "I2C SCK" },
623  { .function = Bidirectional_SDA, .name = "I2C SDA" },
624  { .function = Input_KeypadStrobe, .name = "Keypad strobe" },
625  { .function = Input_I2CStrobe, .name = "I2C strobe" },
626  { .function = Input_RX, .name = "RX" },
627  { .function = Output_TX, .name = "TX" },
628  { .function = Output_RTS, .name = "RTS" },
629  { .function = Output_RS485_Direction, .name = "RS485 RX/TX direction" },
630  { .function = Input_QEI_A, .name = "QEI A" },
631  { .function = Input_QEI_B, .name = "QEI B" },
632  { .function = Input_QEI_Select, .name = "QEI select" },
633  { .function = Input_QEI_Index, .name = "QEI index" },
634  { .function = Virtual_Pin, .name = "Virtual" },
635  { .function = Bidirectional_MotorUARTX, .name = "UART X" },
636  { .function = Bidirectional_MotorUARTY, .name = "UART Y" },
637  { .function = Bidirectional_MotorUARTZ, .name = "UART Z" },
638  { .function = Bidirectional_MotorUARTM3, .name = "UART M3" },
639  { .function = Bidirectional_MotorUARTM4, .name = "UART M4" },
640  { .function = Bidirectional_MotorUARTM5, .name = "UART M5" },
641  { .function = Bidirectional_MotorUARTM6, .name = "UART M6" },
642  { .function = Bidirectional_MotorUARTM7, .name = "UART M7" }
643 };
644 
645 typedef enum {
672 // Interrupt capable pins that may have debounce processing enabled
674  PinGroup_Limit = (1<<9),
675  PinGroup_LimitMax = (1<<10),
676  PinGroup_Probe = (1<<11),
677  PinGroup_Keypad = (1<<12),
678  PinGroup_MPG = (1<<13),
679  PinGroup_QEI = (1<<14),
684  PinGroup_SdCard = (1<<19),
685  PinGroup_AuxInput = (1<<20)
687 
689 typedef enum {
690  IRQ_Mode_None = 0b00000,
691  IRQ_Mode_Rising = 0b00001,
692  IRQ_Mode_Falling = 0b00010,
694  IRQ_Mode_Change = 0b00100,
695  IRQ_Mode_Edges = 0b00111,
696  IRQ_Mode_High = 0b01000,
697  IRQ_Mode_Low = 0b10000,
698  IRQ_Mode_All = 0b11111
700 
701 typedef enum {
703  IRQ_SPI
705 
706 typedef bool (*irq_callback_ptr)(uint_fast8_t id, bool level);
707 
708 typedef struct driver_irq_handler {
713 
715 typedef enum {
716  PullMode_None = 0b00,
717  PullMode_Up = 0b01,
718  PullMode_Down = 0b10,
719  PullMode_UpDown = 0b11
721 
723 typedef enum {
735 
736 #define PINMODE_NONE (0)
737 #define PINMODE_OUTPUT (1U<<1)
738 #ifndef __LPC17XX__
739 #define PINMODE_OD (1U<<2)
740 #endif
741 #define PINMODE_PULLUP (PullMode_Up<<3)
742 #define PINMODE_PULLDOWN (PullMode_Down<<3)
743 #define PINMODE_ANALOG (1U<<11)
744 #define PINMODE_PWM (1U<<12)
745 #define PINMODE_PWM_SERVO (1U<<13)
746 
747 typedef union {
748  uint32_t mask;
749  struct {
750  uint32_t input :1,
751  output :1,
754  irq_mode :5,
755  invert :1,
756  analog :1,
757  pwm :1,
762  async :1,
764  unused :10;
765  };
766 } pin_cap_t;
767 
768 typedef union {
769  uint16_t mask;
770  struct {
771  uint16_t input :1,
772  output :1,
777  analog :1,
778  pwm :1,
782  };
783 } pin_mode_t;
784 
785 #define XBAR_SET_CAP(cap, mode) { cap.mask = mode.mask; cap.claimable = !mode.claimed; }
786 #define XBAR_SET_DIN_INFO(pin, pin_id, src, cfg_fn, get_val_fn) { \
787  pin.id = pin_id; \
788  pin.mode = src.mode; \
789  pin.cap = src.cap; \
790  pin.cap.invert = On; \
791  pin.cap.claimable = !src.mode.claimed; \
792  pin.function = src.id; \
793  pin.group = src.group; \
794  pin.pin = src.pin; \
795  pin.port = (void *)src.port; \
796  pin.description = src.description; \
797  pin.config = cfg_fn; \
798  pin.get_value = get_val_fn; \
799 }
800 #define XBAR_SET_DOUT_INFO(pin, pin_id, src, cfg_fn, get_val_fn) { \
801  pin.id = pin_id; \
802  pin.mode = src.mode; \
803  pin.cap.mask = src.mode.mask; \
804  pin.cap.invert = On; \
805  pin.cap.claimable = !src.mode.claimed; \
806  pin.function = src.id; \
807  pin.group = src.group; \
808  pin.pin = src.pin; \
809  pin.port = (void *)src.port; \
810  pin.description = src.description; \
811  pin.config = cfg_fn; \
812  pin.get_value = get_val_fn; \
813 }
814 
816 typedef struct {
817  bool inverted;
818  bool debounce;
821 
823 typedef struct {
824  bool inverted;
826  bool pwm;
828 
830 typedef struct {
831  float freq_hz; //
832  float min;
833  float max;
834  float off_value; // percent of period
835  float min_value; // percent of period
836  float max_value; // percent of period
837  bool invert;
839 } pwm_config_t;
840 
841 typedef union
842 {
846 } xbar_cfg_ptr_t __attribute__ ((__transparent_union__));
847 
848 struct xbar;
849 
850 typedef float (*xbar_get_value_ptr)(struct xbar *pin);
851 typedef void (*xbar_set_value_ptr)(struct xbar *pin, float value);
852 typedef bool (*xbar_set_function_ptr)(struct xbar *pin, pin_function_t function);
853 typedef void (*xbar_event_ptr)(bool on);
854 typedef bool (*xbar_config_ptr)(struct xbar *pin, xbar_cfg_ptr_t cfg_data, bool persistent);
855 
856 // MCU port base address and pin number
857 typedef struct {
858  void *port;
859  uint8_t pin;
860 } aux_gpio_t;
861 
862 typedef struct {
863  pin_function_t function;
864  uint8_t port;
868  void *input;
869  bool scan;
870 } aux_ctrl_t;
871 
872 typedef struct {
873  pin_function_t function;
874  uint8_t port;
876  void *output;
878 
879 typedef struct xbar {
880  void *ports_id;
881  uint8_t id;
882  pin_function_t function;
884  void *port;
885  const char *description;
886  uint_fast8_t pin;
893 // xbar_event_ptr on_event; //!< Not used - might be removed.
895 
896 typedef struct {
897  pin_function_t function;
899  void *port;
900  uint_fast8_t pin;
902  const char *description;
903 } periph_pin_t;
904 
905 typedef struct periph_signal {
909 
910 typedef union {
911  uint8_t mask;
912  struct {
913  uint8_t limits :1,
918  };
920 
921 static inline uint8_t xbar_fault_pin_to_axis (pin_function_t fn)
922 {
923  return fn >= Input_MotorFaultX && fn <= Input_MotorFaultV ? fn - Input_MotorFaultX : (fn >= Input_MotorFaultX2 && fn <= Input_MotorFaultZ2 ? fn - Input_MotorFaultX2 : 0);
924 }
925 
926 static inline stepper_state_t xbar_stepper_state_set (stepper_state_t *state, uint8_t axis, bool b)
927 {
928  if(b)
929  state->details.b.bits |= bit(axis);
930  else
931  state->details.a.bits |= bit(axis);
932 
933  return *state;
934 }
935 
936 static inline bool xbar_stepper_state_get (stepper_state_t state, uint8_t axis, bool b)
937 {
938  return bit_istrue(b ? state.details.b.bits : state.details.a.bits, bit(axis));
939 }
940 
941 static inline bool xbar_is_probe_in (pin_function_t fn)
942 {
943  return fn == Input_Probe || fn == Input_Probe2 || fn == Input_Toolsetter;
944 }
945 
946 static inline bool xbar_is_encoder_in (pin_function_t function)
947 {
948  return function == Input_QEI_A || function == Input_QEI_B || function == Input_QEI_Select;
949 }
950 
951 static inline bool xbar_is_motor_fault_in (pin_function_t function)
952 {
953  return function >= Input_MotorFaultX && function <= Input_MotorFaultZ2;
954 }
955 
956 #define N_AUX_AIN_MAX (Input_Analog_AuxMax - Input_Analog_Aux0 + 1)
957 #define N_AUX_AOUT_MAX (Output_Analog_AuxMax - Output_Analog_Aux0 + 1)
958 #define N_AUX_DIN_MAX (Input_AuxMax - Input_Aux0 + 1)
959 #define N_AUX_DOUT_MAX (Output_AuxMax - Output_Aux0 + 1)
960 
961 void xbar_set_homing_source (void);
965 const char *xbar_fn_to_pinname (pin_function_t id);
966 const char *xbar_group_to_description ( pin_group_t group);
967 const char *xbar_resolution_to_string (pin_cap_t cap);
969 
970 #endif
limit_signals_t xbar_get_homing_source_from_cycle(axes_signals_t homing_cycle)
Definition: crossbar.c:161
bool(* irq_callback_ptr)(uint_fast8_t id, bool level)
Definition: crossbar.h:706
const char * xbar_fn_to_pinname(pin_function_t id)
Definition: crossbar.c:177
const char * xbar_group_to_description(pin_group_t group)
Definition: crossbar.c:191
const char * xbar_resolution_to_string(pin_cap_t cap)
Definition: crossbar.c:205
pull_mode_t
Pin pullup and pulldown modes, may be or'ed when reporting pin capability.
Definition: crossbar.h:715
@ PullMode_Down
0b10 (0x02)
Definition: crossbar.h:718
@ PullMode_None
0b00 (0x00)
Definition: crossbar.h:716
@ PullMode_Up
0b01 (0x01)
Definition: crossbar.h:717
@ PullMode_UpDown
0b11 (0x03) - only used to report port capability.
Definition: crossbar.h:719
resolution_t
ADC/DAC resolution or multi pin register width.
Definition: crossbar.h:723
@ Resolution_32bit
9 - 32 bit, NOTE: "wait for input" can only return 31 bits
Definition: crossbar.h:733
@ Resolution_8bit
1 - 8 bit
Definition: crossbar.h:725
@ Resolution_20bit
7 - 20 bit
Definition: crossbar.h:731
@ Resolution_18bit
6 - 18 bit
Definition: crossbar.h:730
@ Resolution_14bit
4 - 14 bit
Definition: crossbar.h:728
@ Resolution_4bit
0 - 4 bit
Definition: crossbar.h:724
@ Resolution_10bit
2 - 10 bit
Definition: crossbar.h:726
@ Resolution_24bit
8 - 24 bit
Definition: crossbar.h:732
@ Resolution_12bit
3 - 12 bit
Definition: crossbar.h:727
@ Resolution_16bit
5 - 16 bit
Definition: crossbar.h:729
pin_function_t
Definition: crossbar.h:43
@ Output_DirX_2
Definition: crossbar.h:197
@ Output_SPICS
Definition: crossbar.h:321
@ Input_MotorFaultW
Definition: crossbar.h:69
@ Input_LimitB
Definition: crossbar.h:99
@ Input_QEI_A
Definition: crossbar.h:337
@ Input_MotorFaultZ2
Definition: crossbar.h:72
@ Input_LimitY_2
Definition: crossbar.h:86
@ Input_MotorFaultX2
Definition: crossbar.h:70
@ Input_FeedHold
Definition: crossbar.h:46
@ Input_Aux6
Definition: crossbar.h:122
@ Output_Aux2
Definition: crossbar.h:246
@ Input_Toolsetter
Definition: crossbar.h:75
@ Output_Analog_Aux0
Definition: crossbar.h:285
@ Output_MOSI
Definition: crossbar.h:319
@ Output_LED_R
Definition: crossbar.h:307
@ Input_MotorFaultA
Definition: crossbar.h:64
@ Input_HomeX_2
Definition: crossbar.h:83
@ Output_Aux14
Definition: crossbar.h:258
@ Output_RTS
Definition: crossbar.h:335
@ Input_Analog_Aux1
Definition: crossbar.h:158
@ Input_SpindleIndex
Definition: crossbar.h:114
@ Input_Analog_Aux5
Definition: crossbar.h:162
@ Input_MotorFaultB
Definition: crossbar.h:65
@ Output_StepperEnableV
Definition: crossbar.h:232
@ Virtual_Pin
Definition: crossbar.h:341
@ Output_StepZ_2
Definition: crossbar.h:188
@ Input_HomeA
Definition: crossbar.h:98
@ Input_HomeC
Definition: crossbar.h:104
@ Output_DirX
Definition: crossbar.h:195
@ Output_StepX2
Definition: crossbar.h:181
@ Output_TX
Definition: crossbar.h:334
@ Input_Aux13
Definition: crossbar.h:129
@ Output_MotorChipSelectX
Definition: crossbar.h:211
@ Input_MotorFaultU
Definition: crossbar.h:67
@ Output_Aux16
Definition: crossbar.h:261
@ Input_Aux19
Definition: crossbar.h:136
@ Input_Reset
Definition: crossbar.h:45
@ Output_StepZ2
Definition: crossbar.h:187
@ Bidirectional_MotorUARTM7
Definition: crossbar.h:351
@ Input_SPIIRQ
Definition: crossbar.h:326
@ Output_CoProc_Boot0
Definition: crossbar.h:315
@ Input_Aux15
Definition: crossbar.h:131
@ Output_StepB
Definition: crossbar.h:190
@ Input_HomeZ
Definition: crossbar.h:94
@ Bidirectional_MotorUARTM5
Definition: crossbar.h:349
@ Output_Aux4
Definition: crossbar.h:248
@ Input_Aux23
Definition: crossbar.h:140
@ Input_LimitZ2
Definition: crossbar.h:91
@ Input_Analog_Aux7
Definition: crossbar.h:164
@ Output_Analog_AuxMax
Definition: crossbar.h:304
@ Input_Probe
Definition: crossbar.h:59
@ Output_DirV
Definition: crossbar.h:208
@ Input_MotorFaultV
Definition: crossbar.h:68
@ Output_StepW
Definition: crossbar.h:194
@ Output_StepperEnableX
Definition: crossbar.h:222
@ Output_FlashCS
Definition: crossbar.h:322
@ Input_LimitW_Max
Definition: crossbar.h:112
@ Output_DirA
Definition: crossbar.h:204
@ Output_StepY_2
Definition: crossbar.h:185
@ Input_MotorFaultY2
Definition: crossbar.h:71
@ Output_MotorChipSelectM6
Definition: crossbar.h:217
@ Output_DirB
Definition: crossbar.h:205
@ Input_MotorFault
Definition: crossbar.h:53
@ Output_SdCardCS
Definition: crossbar.h:323
@ Input_Probe2
Definition: crossbar.h:73
@ Input_Analog_AuxMax
Definition: crossbar.h:176
@ Bidirectional_MotorUARTM4
Definition: crossbar.h:348
@ Input_MotorWarning
Definition: crossbar.h:54
@ Output_DirY
Definition: crossbar.h:198
@ Input_AuxMax
Definition: crossbar.h:153
@ Input_ToolsetterOvertravel
Definition: crossbar.h:57
@ Output_DirW
Definition: crossbar.h:209
@ Output_StepperEnableAB
Definition: crossbar.h:235
@ Output_Aux13
Definition: crossbar.h:257
@ Output_MotorChipSelectM5
Definition: crossbar.h:216
@ Output_Aux1
Definition: crossbar.h:245
@ Input_ProbeDisconnect
Definition: crossbar.h:52
@ Input_MotorFaultX
Definition: crossbar.h:61
@ Bidirectional_I2CSDA
Definition: crossbar.h:330
@ Output_Aux11
Definition: crossbar.h:255
@ Input_Aux16
Definition: crossbar.h:133
@ Input_LimitX
Definition: crossbar.h:78
@ Output_DirX2
Definition: crossbar.h:196
@ Output_Analog_Aux6
Definition: crossbar.h:291
@ Input_Probe2Overtravel
Definition: crossbar.h:74
@ Output_LED
Definition: crossbar.h:306
@ Input_EStop
Definition: crossbar.h:51
@ Output_AuxMax
Definition: crossbar.h:281
@ Input_Aux12
Definition: crossbar.h:128
@ Input_StopDisable
Definition: crossbar.h:50
@ Input_LimitW
Definition: crossbar.h:111
@ Input_HomeZ_2
Definition: crossbar.h:95
@ Input_LimitA_Max
Definition: crossbar.h:97
@ Output_DirY_2
Definition: crossbar.h:200
@ Input_HomeX
Definition: crossbar.h:82
@ Output_StepperEnableXY
Definition: crossbar.h:234
@ Input_SdCardDetect
Definition: crossbar.h:324
@ Input_Aux21
Definition: crossbar.h:138
@ Output_LED1_Adressable
Definition: crossbar.h:313
@ Input_MotorFaultC
Definition: crossbar.h:66
@ Input_SpindlePulse
Definition: crossbar.h:115
@ Input_HomeY_2
Definition: crossbar.h:89
@ Output_LED_Adressable
Definition: crossbar.h:311
@ Output_Aux18
Definition: crossbar.h:263
@ Output_DirZ
Definition: crossbar.h:201
@ Bidirectional_MotorUARTM6
Definition: crossbar.h:350
@ Input_LimitsOverride
Definition: crossbar.h:55
@ Input_HomeU
Definition: crossbar.h:107
@ Input_Aux3
Definition: crossbar.h:119
@ Input_ModeSelect
Definition: crossbar.h:77
@ Output_LED0_Adressable
Definition: crossbar.h:312
@ Output_RS485_Direction
Definition: crossbar.h:336
@ Outputs
Definition: crossbar.h:180
@ Input_Aux18
Definition: crossbar.h:135
@ Input_Aux8
Definition: crossbar.h:124
@ Output_CoProc_Reset
Definition: crossbar.h:314
@ Output_StepV
Definition: crossbar.h:193
@ Input_Aux11
Definition: crossbar.h:127
@ Output_StepperEnableZ
Definition: crossbar.h:226
@ Output_Analog_Aux3
Definition: crossbar.h:288
@ Output_StepU
Definition: crossbar.h:192
@ Input_LimitX_Max
Definition: crossbar.h:81
@ Output_Aux17
Definition: crossbar.h:262
@ Input_QEI_Select
Definition: crossbar.h:339
@ Output_StepperEnableU
Definition: crossbar.h:231
@ Output_StepperEnableA
Definition: crossbar.h:228
@ Input_Aux9
Definition: crossbar.h:125
@ Output_Aux7
Definition: crossbar.h:251
@ Output_MotorChipSelectY
Definition: crossbar.h:212
@ Bidirectional_MotorUARTZ
Definition: crossbar.h:346
@ Input_LimitA
Definition: crossbar.h:96
@ Output_StepperPower
Definition: crossbar.h:219
@ Output_StepperEnableY2
Definition: crossbar.h:225
@ Input_HomeY
Definition: crossbar.h:88
@ Input_MotorFaultY
Definition: crossbar.h:62
@ Input_LimitY
Definition: crossbar.h:84
@ Output_Aux9
Definition: crossbar.h:253
@ Input_BlockDelete
Definition: crossbar.h:49
@ Input_KeypadStrobe
Definition: crossbar.h:331
@ Output_LED_G
Definition: crossbar.h:308
@ Output_StepY2
Definition: crossbar.h:184
@ Input_Aux2
Definition: crossbar.h:118
@ Input_Aux4
Definition: crossbar.h:120
@ Output_StepperEnableW
Definition: crossbar.h:233
@ Output_Aux15
Definition: crossbar.h:259
@ Input_HomeV
Definition: crossbar.h:110
@ Output_StepperEnable
Definition: crossbar.h:220
@ Input_LimitV_Max
Definition: crossbar.h:109
@ Input_Aux20
Definition: crossbar.h:137
@ Output_Analog_Aux1
Definition: crossbar.h:286
@ Input_HomeW
Definition: crossbar.h:113
@ Input_LimitU_Max
Definition: crossbar.h:106
@ Input_LimitY_Max
Definition: crossbar.h:87
@ Output_Aux22
Definition: crossbar.h:267
@ Output_SpindleDir
Definition: crossbar.h:237
@ Output_Aux20
Definition: crossbar.h:265
@ Output_StepperEnableY
Definition: crossbar.h:224
@ Input_LimitZ_Max
Definition: crossbar.h:93
@ Multipin
Definition: crossbar.h:318
@ Output_StepperEnableC
Definition: crossbar.h:230
@ Input_LimitX_2
Definition: crossbar.h:80
@ Input_LimitC
Definition: crossbar.h:102
@ Input_SingleBlock
Definition: crossbar.h:56
@ Output_DirU
Definition: crossbar.h:207
@ Input_Aux14
Definition: crossbar.h:130
@ Output_SPIRST
Definition: crossbar.h:325
@ Input_LimitU
Definition: crossbar.h:105
@ Input_LimitX2
Definition: crossbar.h:79
@ Input_LimitB_Max
Definition: crossbar.h:100
@ Output_DirZ_2
Definition: crossbar.h:203
@ Output_MotorChipSelectM7
Definition: crossbar.h:218
@ Input_ProbeOvertravel
Definition: crossbar.h:58
@ Output_MotorChipSelectM3
Definition: crossbar.h:214
@ Input_LimitZ_2
Definition: crossbar.h:92
@ Output_DirC
Definition: crossbar.h:206
@ Output_Analog_Aux7
Definition: crossbar.h:292
@ Output_Aux12
Definition: crossbar.h:256
@ Output_StepY
Definition: crossbar.h:183
@ Output_SpindleOn
Definition: crossbar.h:236
@ Input_LimitV
Definition: crossbar.h:108
@ Output_Aux8
Definition: crossbar.h:252
@ Input_I2CStrobe
Definition: crossbar.h:332
@ Input_Analog_Aux3
Definition: crossbar.h:160
@ Output_Spindle1Dir
Definition: crossbar.h:240
@ Output_Aux10
Definition: crossbar.h:254
@ Output_SpindlePWM
Definition: crossbar.h:238
@ Output_Aux23
Definition: crossbar.h:268
@ Output_CoolantMist
Definition: crossbar.h:242
@ Input_MPGSelect
Definition: crossbar.h:76
@ Output_Spindle1On
Definition: crossbar.h:239
@ Input_Aux1
Definition: crossbar.h:117
@ Input_RX
Definition: crossbar.h:333
@ Bidirectional_MotorUARTM3
Definition: crossbar.h:347
@ Output_DirY2
Definition: crossbar.h:199
@ Input_LimitZ
Definition: crossbar.h:90
@ Output_StepX_2
Definition: crossbar.h:182
@ Input_Analog_Aux6
Definition: crossbar.h:163
@ Output_Aux21
Definition: crossbar.h:266
@ Output_MotorChipSelectM4
Definition: crossbar.h:215
@ Bidirectional_MotorUARTX
Definition: crossbar.h:343
@ Input_Aux17
Definition: crossbar.h:134
@ Input_Aux0
Definition: crossbar.h:116
@ Bidirectional_SDA
Definition: crossbar.h:329
@ Output_MotorChipSelectZ
Definition: crossbar.h:213
@ Output_Analog_Aux2
Definition: crossbar.h:287
@ Input_Aux10
Definition: crossbar.h:126
@ Output_Analog_Aux4
Definition: crossbar.h:289
@ Output_Aux0
Definition: crossbar.h:244
@ Input_Analog_Aux2
Definition: crossbar.h:159
@ Input_QEI_B
Definition: crossbar.h:338
@ Output_Aux19
Definition: crossbar.h:264
@ Output_Aux6
Definition: crossbar.h:250
@ Input_MISO
Definition: crossbar.h:317
@ Bidirectional_MotorUARTY
Definition: crossbar.h:345
@ Output_Aux5
Definition: crossbar.h:249
@ Output_StepperEnableB
Definition: crossbar.h:229
@ Output_SCK
Definition: crossbar.h:327
@ Input_CycleStart
Definition: crossbar.h:47
@ Output_LED_B
Definition: crossbar.h:309
@ Output_StepX
Definition: crossbar.h:179
@ Output_Aux3
Definition: crossbar.h:247
@ Bidirectional
Definition: crossbar.h:344
@ Input_LimitY2
Definition: crossbar.h:85
@ Output_DirZ2
Definition: crossbar.h:202
@ Output_StepZ
Definition: crossbar.h:186
@ Output_StepC
Definition: crossbar.h:191
@ Output_SPICLK
Definition: crossbar.h:320
@ Input_MotorFaultZ
Definition: crossbar.h:63
@ Input_QEI_Index
Definition: crossbar.h:340
@ Input_Analog_Aux0
Definition: crossbar.h:157
@ Output_MotorChipSelect
Definition: crossbar.h:210
@ Input_Aux7
Definition: crossbar.h:123
@ Input_SafetyDoor
Definition: crossbar.h:48
@ Output_CoolantFlood
Definition: crossbar.h:243
@ Output_StepperEnableX2
Definition: crossbar.h:223
@ Output_StepperEnableSTEPPERS
Definition: crossbar.h:221
@ Input_HomeB
Definition: crossbar.h:101
@ Input_Aux5
Definition: crossbar.h:121
@ Output_Analog_Aux5
Definition: crossbar.h:290
@ Input_LimitC_Max
Definition: crossbar.h:103
@ Output_LED_W
Definition: crossbar.h:310
@ Input_Aux22
Definition: crossbar.h:139
@ Output_StepA
Definition: crossbar.h:189
@ Input_Analog_Aux4
Definition: crossbar.h:161
@ Output_StepperEnableZ2
Definition: crossbar.h:227
@ Output_I2CSCK
Definition: crossbar.h:328
@ Output_Spindle1PWM
Definition: crossbar.h:241
float(* xbar_get_value_ptr)(struct xbar *pin)
Definition: crossbar.h:850
bool(* xbar_set_function_ptr)(struct xbar *pin, pin_function_t function)
Definition: crossbar.h:852
limit_signals_t xbar_get_homing_source(void)
Definition: crossbar.c:155
void(* xbar_event_ptr)(bool on)
Definition: crossbar.h:853
axes_signals_t xbar_fn_to_axismask(pin_function_t id)
Definition: crossbar.c:26
pin_group_t
Definition: crossbar.h:645
@ PinGroup_SpindlePWM
Definition: crossbar.h:647
@ PinGroup_AuxInputAnalog
Definition: crossbar.h:656
@ PinGroup_UART1
Definition: crossbar.h:662
@ PinGroup_Control
Definition: crossbar.h:673
@ PinGroup_QEI_Select
Definition: crossbar.h:680
@ PinGroup_AuxOutput
Definition: crossbar.h:655
@ PinGroup_QEI
Definition: crossbar.h:679
@ PinGroup_Keypad
Definition: crossbar.h:677
@ PinGroup_StepperDir
Definition: crossbar.h:654
@ PinGroup_USB
Definition: crossbar.h:667
@ PinGroup_SPI
Definition: crossbar.h:661
@ PinGroup_UART3
Definition: crossbar.h:665
@ PinGroup_StepperPower
Definition: crossbar.h:651
@ PinGroup_Virtual
Definition: crossbar.h:671
@ PinGroup_UART4
Definition: crossbar.h:666
@ PinGroup_CAN
Definition: crossbar.h:668
@ PinGroup_MotorChipSelect
Definition: crossbar.h:658
@ PinGroup_AuxOutputAnalog
Definition: crossbar.h:657
@ PinGroup_SdCard
Definition: crossbar.h:684
@ PinGroup_Motor_Warning
Definition: crossbar.h:682
@ PinGroup_I2C
Definition: crossbar.h:660
@ PinGroup_LED
Definition: crossbar.h:669
@ PinGroup_MotorUART
Definition: crossbar.h:659
@ PinGroup_UART2
Definition: crossbar.h:664
@ PinGroup_Limit
Definition: crossbar.h:674
@ PinGroup_QEI_Index
Definition: crossbar.h:681
@ PinGroup_SpindleIndex
Definition: crossbar.h:650
@ PinGroup_AuxInput
Definition: crossbar.h:685
@ PinGroup_Home
Definition: crossbar.h:670
@ PinGroup_Probe
Definition: crossbar.h:676
@ PinGroup_LimitMax
Definition: crossbar.h:675
@ PinGroup_MPG
Definition: crossbar.h:678
@ PinGroup_StepperStep
Definition: crossbar.h:653
@ PinGroup_StepperEnable
Definition: crossbar.h:652
@ PinGroup_SpindlePulse
Definition: crossbar.h:649
@ PinGroup_Coolant
Definition: crossbar.h:648
@ PinGroup_Motor_Fault
Definition: crossbar.h:683
@ PinGroup_SpindleControl
Definition: crossbar.h:646
@ PinGroup_UART
Definition: crossbar.h:663
irq_type_t
Definition: crossbar.h:701
@ IRQ_I2C_Strobe
Definition: crossbar.h:702
@ IRQ_SPI
Definition: crossbar.h:703
bool(* xbar_config_ptr)(struct xbar *pin, xbar_cfg_ptr_t cfg_data, bool persistent)
Definition: crossbar.h:854
struct driver_irq_handler driver_irq_handler_t
control_signals_t xbar_fn_to_signals_mask(pin_function_t id)
Definition: crossbar.c:196
struct xbar xbar_t
pin_irq_mode_t
Pin interrupt modes, may be or'ed when reporting pin capability.
Definition: crossbar.h:689
@ IRQ_Mode_Low
0b10000 (0x10)
Definition: crossbar.h:697
@ IRQ_Mode_Rising
0b00001 (0x01)
Definition: crossbar.h:691
@ IRQ_Mode_RisingFalling
0b00011 (0x03) - only used to report port capability.
Definition: crossbar.h:693
@ IRQ_Mode_None
0b00000 (0x00)
Definition: crossbar.h:690
@ IRQ_Mode_High
0b01000 (0x08)
Definition: crossbar.h:696
@ IRQ_Mode_All
0b11111 (0x1F) - only used to report port capability.
Definition: crossbar.h:698
@ IRQ_Mode_Change
0b00100 (0x04)
Definition: crossbar.h:694
@ IRQ_Mode_Falling
0b00010 (0x02)
Definition: crossbar.h:692
@ IRQ_Mode_Edges
0b00111 (0x07) - only used to report port capability.
Definition: crossbar.h:695
void xbar_set_homing_source(void)
Definition: crossbar.c:144
void(* xbar_set_value_ptr)(struct xbar *pin, float value)
Definition: crossbar.h:851
struct periph_signal periph_signal_t
#define bit_istrue(x, mask)
Definition: nuts_bolts.h:474
Definition: crossbar.h:872
uint8_t port
Auxiliary port number, post claimed.
Definition: crossbar.h:874
void * output
Pointer to the driver input array entry for the pin.
Definition: crossbar.h:876
aux_gpio_t gpio
MCU port base address (may be NULL) and pin number.
Definition: crossbar.h:875
Definition: crossbar.h:862
bool scan
true if the pin is to be scanned when control state is requested.
Definition: crossbar.h:869
pin_irq_mode_t irq_mode
Required IRQ mode for the input.
Definition: crossbar.h:865
control_signals_t signal
Set to the pin the input maps to, 0 if none.
Definition: crossbar.h:866
uint8_t port
Auxiliary port number, post claimed.
Definition: crossbar.h:864
void * input
Pointer to the driver input array entry for the pin.
Definition: crossbar.h:868
aux_gpio_t gpio
MCU port base address (may be NULL) and pin number.
Definition: crossbar.h:867
Definition: crossbar.h:857
uint8_t pin
MCU pin number.
Definition: crossbar.h:859
void * port
MCU port address (may be NULL).
Definition: crossbar.h:858
Definition: crossbar.h:708
irq_callback_ptr callback
Definition: crossbar.h:710
struct driver_irq_handler * next
Definition: crossbar.h:711
irq_type_t type
Definition: crossbar.h:709
/a cfg_data argument to /a xbar_config_ptr for gpio input pins
Definition: crossbar.h:816
bool debounce
Definition: crossbar.h:818
bool inverted
Definition: crossbar.h:817
pull_mode_t pull_mode
Definition: crossbar.h:819
/a cfg_data argument to /a xbar_config_ptr for gpio output pins
Definition: crossbar.h:823
bool inverted
Definition: crossbar.h:824
bool open_drain
Definition: crossbar.h:825
bool pwm
Definition: crossbar.h:826
axes_signals_t a
Primary home switches status, optional. Limit signals are used for homing if not available.
Definition: nuts_bolts.h:397
axes_signals_t b
Secondary home switch(es) status, required for auto squaring enabled axes if primary switches are ava...
Definition: nuts_bolts.h:398
Definition: crossbar.h:896
pin_mode_t mode
Definition: crossbar.h:901
const char * description
Definition: crossbar.h:902
uint_fast8_t pin
Definition: crossbar.h:900
void * port
Definition: crossbar.h:899
pin_group_t group
Definition: crossbar.h:898
Definition: crossbar.h:905
struct periph_signal * next
Definition: crossbar.h:907
periph_pin_t pin
Definition: crossbar.h:906
Definition: crossbar.h:358
const char * name
Definition: crossbar.h:360
pin_function_t function
Definition: crossbar.h:359
/a cfg_data argument to /a xbar_config_ptr for PWM pins
Definition: crossbar.h:830
float freq_hz
Definition: crossbar.h:831
bool invert
Definition: crossbar.h:837
float max
Definition: crossbar.h:833
bool servo_mode
Definition: crossbar.h:838
float off_value
Definition: crossbar.h:834
float min_value
Definition: crossbar.h:835
float max_value
Definition: crossbar.h:836
float min
Definition: crossbar.h:832
Definition: crossbar.h:879
uint8_t id
Pin id.
Definition: crossbar.h:881
pin_mode_t mode
Current pin configuration.
Definition: crossbar.h:888
const char * description
Optional pointer to description string.
Definition: crossbar.h:885
xbar_config_ptr config
Optional pointer to function for configuring the port.
Definition: crossbar.h:889
xbar_set_function_ptr set_function
Optional pointer to function to set port function.
Definition: crossbar.h:892
xbar_set_value_ptr set_value
Optional pointer to function to set port value.
Definition: crossbar.h:891
xbar_get_value_ptr get_value
Optional pointer to function to get current port value.
Definition: crossbar.h:890
void * ports_id
Definition: crossbar.h:880
uint_fast8_t pin
Pin number.
Definition: crossbar.h:886
pin_cap_t cap
Pin capabilities.
Definition: crossbar.h:887
void * port
Optional pointer to the underlying peripheral or pin specific data.
Definition: crossbar.h:884
pin_group_t group
Pin group.
Definition: crossbar.h:883
Definition: nuts_bolts.h:246
uint8_t bits
Definition: nuts_bolts.h:248
Definition: nuts_bolts.h:416
Limit switches struct, consists of four packed axes_signals_t structs in 32 bits.
Definition: nuts_bolts.h:385
Definition: crossbar.h:747
uint32_t input
Definition: crossbar.h:750
uint32_t open_drain
Definition: crossbar.h:752
uint32_t analog
Definition: crossbar.h:756
uint32_t invert
Definition: crossbar.h:755
uint32_t claimable
Definition: crossbar.h:759
uint32_t servo_pwm
Definition: crossbar.h:758
uint32_t unused
Definition: crossbar.h:764
uint32_t pull_mode
pull_mode_t - pull up/down modes
Definition: crossbar.h:753
uint32_t output
Definition: crossbar.h:751
uint32_t mask
Definition: crossbar.h:748
uint32_t irq_mode
pin_irq_mode_t - IRQ modes
Definition: crossbar.h:754
uint32_t pwm
Definition: crossbar.h:757
uint32_t resolution
resolution_t - ADC/DAC resolution
Definition: crossbar.h:763
uint32_t external
Definition: crossbar.h:761
uint32_t async
Definition: crossbar.h:762
uint32_t debounce
Definition: crossbar.h:760
Definition: crossbar.h:910
uint8_t qei_select
Definition: crossbar.h:916
uint8_t aux_inputs
Definition: crossbar.h:914
uint8_t limits
Definition: crossbar.h:913
uint8_t unassigned
Definition: crossbar.h:917
uint8_t mask
Definition: crossbar.h:911
uint8_t safety_door
Definition: crossbar.h:915
Definition: crossbar.h:768
uint16_t output
Definition: crossbar.h:772
uint16_t irq_mode
Definition: crossbar.h:775
uint16_t claimed
Definition: crossbar.h:780
uint16_t debounce
Definition: crossbar.h:781
uint16_t pwm
Definition: crossbar.h:778
uint16_t open_drain
Definition: crossbar.h:773
uint16_t mask
Definition: crossbar.h:769
uint16_t input
Definition: crossbar.h:771
uint16_t analog
Definition: crossbar.h:777
uint16_t inverted
Definition: crossbar.h:776
uint16_t pull_mode
Definition: crossbar.h:774
uint16_t servo_pwm
Definition: crossbar.h:779
Stepper driver states struct.
Definition: nuts_bolts.h:402
home_signals_t details
Definition: nuts_bolts.h:404
Definition: crossbar.h:842
pwm_config_t * pwm_config
Definition: crossbar.h:843
gpio_out_config_t * gpio_out_config
Definition: crossbar.h:845
gpio_in_config_t * gpio_in_config
Definition: crossbar.h:844