Add gQuadratic rev C (need to fix motors still)

This commit is contained in:
Rob Giseburt
2018-02-26 18:41:31 -06:00
parent 4a86b9d660
commit 865dd561ef
8 changed files with 235 additions and 58 deletions
+6
View File
@@ -18,6 +18,12 @@ ifeq ("$(BOARD)","gquadratic-b")
DEVICE_DEFINES += SETTINGS_FILE=${SETTINGS_FILE}
endif
ifeq ("$(BOARD)","gquadratic-c")
BASE_BOARD=gquadratic
DEVICE_DEFINES += MOTATE_BOARD="gquadratic-c"
DEVICE_DEFINES += SETTINGS_FILE=${SETTINGS_FILE}
endif
##########
# The general gquadratic BASE_BOARD.
+8 -27
View File
@@ -56,37 +56,18 @@
/**** Setup Actual Objects ****/
gpioDigitalInputPin<IRQPin<Motate::kInput1_PinNumber>> din1 {DI1_ENABLED, DI1_POLARITY, 1};
gpioDigitalInputPin<IRQPin<Motate::kInput2_PinNumber>> din2 {DI2_ENABLED, DI2_POLARITY, 2};
gpioDigitalInputPin<IRQPin<Motate::kInput3_PinNumber>> din3 {DI3_ENABLED, DI3_POLARITY, 3};
gpioDigitalInputPin<IRQPin<Motate::kInput4_PinNumber>> din4 {DI4_ENABLED, DI4_POLARITY, 4};
gpioDigitalInputPin<IRQPin<Motate::kInput5_PinNumber>> din5 {DI5_ENABLED, DI5_POLARITY, 5};
gpioDigitalInputPin<IRQPin<Motate::kInput6_PinNumber>> din6 {DI6_ENABLED, DI6_POLARITY, 6};
gpioDigitalInputPin<IRQPin<Motate::kInput7_PinNumber>> din7 {DI7_ENABLED, DI7_POLARITY, 7};
gpioDigitalInputPin<IRQPin<Motate::kInput8_PinNumber>> din8 {DI8_ENABLED, DI8_POLARITY, 8};
gpioDigitalInputPin<IRQPin<Motate::kInput9_PinNumber>> din9 {DI9_ENABLED, DI9_POLARITY, 9};
// gpioDigitalInputPin<IRQPin<Motate::kInput10_PinNumber>> din10 {DI10ENABLEDE, DI10_POLARITY, 10};
// gpioDigitalInputPin<IRQPin<Motate::kInput11_PinNumber>> din11 {DI11ENABLEDE, DI11_POLARITY, 11};
// gpioDigitalInputPin<IRQPin<Motate::kInput12_PinNumber>> din12 {DI12ENABLEDE, DI12_POLARITY, 12};
gpioDigitalInputPin<IRQPin<Motate::kInput1_PinNumber>> din1 {DI1_ENABLED, DI1_POLARITY, 1, DI1_EXTERNAL_NUMBER};
gpioDigitalInputPin<IRQPin<Motate::kInput2_PinNumber>> din2 {DI2_ENABLED, DI2_POLARITY, 2, DI2_EXTERNAL_NUMBER};
gpioDigitalInputPin<IRQPin<Motate::kInput3_PinNumber>> din3 {DI3_ENABLED, DI3_POLARITY, 3, DI3_EXTERNAL_NUMBER};
gpioDigitalInputPin<IRQPin<Motate::kInput4_PinNumber>> din4 {DI4_ENABLED, DI4_POLARITY, 4, DI4_EXTERNAL_NUMBER};
gpioDigitalOutputPin<OutputType<OUTPUT1_PWM, Motate::kOutput1_PinNumber>> dout1 { DO1_ENABLED, DO1_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT2_PWM, Motate::kOutput2_PinNumber>> dout2 { DO2_ENABLED, DO2_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT3_PWM, Motate::kOutput3_PinNumber>> dout3 { DO3_ENABLED, DO3_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT4_PWM, Motate::kOutput4_PinNumber>> dout4 { DO4_ENABLED, DO4_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT5_PWM, Motate::kOutput5_PinNumber>> dout5 { DO5_ENABLED, DO5_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT6_PWM, Motate::kOutput6_PinNumber>> dout6 { DO6_ENABLED, DO6_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT7_PWM, Motate::kOutput7_PinNumber>> dout7 { DO7_ENABLED, DO7_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT8_PWM, Motate::kOutput8_PinNumber>> dout8 { DO8_ENABLED, DO8_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT9_PWM, Motate::kOutput9_PinNumber>> dout9 { DO9_ENABLED, DO9_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT10_PWM, Motate::kOutput10_PinNumber>> dout10 { DO10_ENABLED, DO10_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT11_PWM, Motate::kOutput11_PinNumber>> dout11 { DO11_ENABLED, DO11_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT12_PWM, Motate::kOutput12_PinNumber>> dout12 { DO12_ENABLED, DO12_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT13_PWM, Motate::kOutput13_PinNumber>> dout13 { DO13_ENABLED, DO13_POLARITY, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT1_PWM, Motate::kOutput1_PinNumber>> dout1 { DO1_ENABLED, DO1_POLARITY, DO1_EXTERNAL_NUMBER, (uint32_t)200000 };
gpioDigitalOutputPin<OutputType<OUTPUT2_PWM, Motate::kOutput2_PinNumber>> dout2 { DO2_ENABLED, DO2_POLARITY, DO2_EXTERNAL_NUMBER, (uint32_t)200000 };
/**** Setup Arrays - these are extern and MUST match the board_gpio.h ****/
gpioDigitalInput* const d_in[] = {&din1, &din2, &din3, &din4, &din5, &din6, &din7, &din8, &din9};
gpioDigitalOutput* const d_out[] = {&dout1, &dout2, &dout3, &dout4, &dout5, &dout6, &dout7, &dout8, &dout9, &dout10, &dout11, &dout12, &dout13};
gpioDigitalInput* const d_in[] = {&din1, &din2, &din3, &din4};
gpioDigitalOutput* const d_out[] = {&dout1, &dout2};
// not yet used
// gpioAnalogInput* a_in[A_IN_CHANNELS];
// gpioAnalogOutput* a_out[A_OUT_CHANNELS];
+2 -21
View File
@@ -36,8 +36,8 @@
*/
//--- change as required for board and switch hardware ---//
#define D_IN_CHANNELS 9 // v9 // number of digital inputs supported
#define D_OUT_CHANNELS 13 // number of digital outputs supported
#define D_IN_CHANNELS 4 // number of digital inputs supported
#define D_OUT_CHANNELS 2 // number of digital outputs supported
#define A_IN_CHANNELS 0 // number of analog inputs supported
#define A_OUT_CHANNELS 0 // number of analog outputs supported
@@ -63,28 +63,9 @@ extern gpioDigitalInputPin<IRQPin<Motate::kInput1_PinNumber>> din1;
extern gpioDigitalInputPin<IRQPin<Motate::kInput2_PinNumber>> din2;
extern gpioDigitalInputPin<IRQPin<Motate::kInput3_PinNumber>> din3;
extern gpioDigitalInputPin<IRQPin<Motate::kInput4_PinNumber>> din4;
extern gpioDigitalInputPin<IRQPin<Motate::kInput5_PinNumber>> din5;
extern gpioDigitalInputPin<IRQPin<Motate::kInput6_PinNumber>> din6;
extern gpioDigitalInputPin<IRQPin<Motate::kInput7_PinNumber>> din7;
extern gpioDigitalInputPin<IRQPin<Motate::kInput8_PinNumber>> din8;
extern gpioDigitalInputPin<IRQPin<Motate::kInput9_PinNumber>> din9;
// extern gpioDigitalInputPin<IRQPin<Motate::kInput10_PinNumber>> din10;
// extern gpioDigitalInputPin<IRQPin<Motate::kInput11_PinNumber>> din11;
// extern gpioDigitalInputPin<IRQPin<Motate::kInput12_PinNumber>> din12;
extern gpioDigitalOutputPin<OutputType<OUTPUT1_PWM, Motate::kOutput1_PinNumber>> dout1;
extern gpioDigitalOutputPin<OutputType<OUTPUT2_PWM, Motate::kOutput2_PinNumber>> dout2;
extern gpioDigitalOutputPin<OutputType<OUTPUT3_PWM, Motate::kOutput3_PinNumber>> dout3;
extern gpioDigitalOutputPin<OutputType<OUTPUT4_PWM, Motate::kOutput4_PinNumber>> dout4;
extern gpioDigitalOutputPin<OutputType<OUTPUT5_PWM, Motate::kOutput5_PinNumber>> dout5;
extern gpioDigitalOutputPin<OutputType<OUTPUT6_PWM, Motate::kOutput6_PinNumber>> dout6;
extern gpioDigitalOutputPin<OutputType<OUTPUT7_PWM, Motate::kOutput7_PinNumber>> dout7;
extern gpioDigitalOutputPin<OutputType<OUTPUT8_PWM, Motate::kOutput8_PinNumber>> dout8;
extern gpioDigitalOutputPin<OutputType<OUTPUT9_PWM, Motate::kOutput9_PinNumber>> dout9;
extern gpioDigitalOutputPin<OutputType<OUTPUT10_PWM, Motate::kOutput10_PinNumber>> dout10;
extern gpioDigitalOutputPin<OutputType<OUTPUT11_PWM, Motate::kOutput11_PinNumber>> dout11;
extern gpioDigitalOutputPin<OutputType<OUTPUT12_PWM, Motate::kOutput12_PinNumber>> dout12;
extern gpioDigitalOutputPin<OutputType<OUTPUT13_PWM, Motate::kOutput13_PinNumber>> dout13;
#endif // End of include guard: BOARD_GPIO_H_ONCE
+1
View File
@@ -71,6 +71,7 @@ void board_hardware_init(void) // called 1st
#if XIO_HAS_USB
// Init USB
usb.attach();
usb.handleVbusChange(true);
#endif // XIO_HAS_USB
}
+1 -1
View File
@@ -36,7 +36,7 @@
#include "MotateUSB.h"
#include "MotateUSBCDC.h"
typedef Motate::USBDeviceHardwareBus<Motate::IRQPin<Motate::kUSBVBUS_PinNumber>> USBDeviceHardware_t;
typedef Motate::USBDeviceHardwareVBus<Motate::IRQPin<Motate::kUSBVBUS_PinNumber>> USBDeviceHardware_t;
#if USB_SERIAL_PORTS_EXPOSED == 1
typedef Motate::USBDevice< USBDeviceHardware_t, Motate::USBCDC > XIOUSBDevice_t;
@@ -2,8 +2,8 @@
* gquadratic-b-pinout.h - board pinout specification
* This file is part of the g2core project
*
* Copyright (c) 2016 Robert Giseburt
* Copyright (c) 2016 Alden S. Hart Jr.
* Copyright (c) 2016-2018 Robert Giseburt
* Copyright (c) 2016-2018 Alden S. Hart Jr.
*
* This file is part of the Motate Library.
*
@@ -108,6 +108,8 @@
#define OUTPUT12_PWM 0 // Unused
#define OUTPUT13_PWM 0 // Unused
#define QUADRATIC_REVISION 'B'
namespace Motate {
// Arduino pin name & function
@@ -0,0 +1,205 @@
/*
* gquadratic-c-pinout.h - board pinout specification
* This file is part of the g2core project
*
* Copyright (c) 2018 Robert Giseburt
* Copyright (c) 2018 Alden S. Hart Jr.
*
* This file is part of the Motate Library.
*
* This file ("the software") is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2 as published by the
* Free Software Foundation. You should have received a copy of the GNU General Public
* License, version 2 along with the software. If not, see <http://www.gnu.org/licenses/>.
*
* As a special exception, you may use this file as part of a software library without
* restriction. Specifically, if other files instantiate templates or use macros or
* inline functions from this file, or you compile this file and link it with other
* files to produce an executable, this file does not by itself cause the resulting
* executable to be covered by the GNU General Public License. This exception does not
* however invalidate any other reasons why the executable file might be covered by the
* GNU General Public License.
*
* THE SOFTWARE IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY
* WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
* SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#ifndef GQUADRATIC_C_PINOUT_H
#define GQUADRATIC_C_PINOUT_H
/*
* USAGE NOTES
*
* Read this first:
* https://github.com/synthetos/g2/wiki/Adding-a-new-G2-board-(or-revision)-to-G2#making-a-new-pin-assignment
*
* USAGE:
*
* This file is lays out all the pin capabilities of the SAM3X8C organized by pin number.
* Each pin has its associated functions listed at the bottom of the file, and is essentially
* immutable for each processor.
*
* To use, assign Motate pin numbers to the first value in the _MAKE_MOTATE_PIN() macro.
* ALL PINS MUST BE ASSIGNED A NUMBER, even if they are not used. There will NOT be a
* code-size or speed penalty for unused pins, but the WILL be a compiler-failure for
* unassigned pins. This new restriction allows for simplification of linkages deep in
* Motate.
*/
/* See motate_pin_assignments.h for pin names to be used int he rest of the G2 code.
* EXAMPLES:
*
* *** Vanilla pin example ***
*
* _MAKE_MOTATE_PIN(4, A, 'A', 27); // SPI0_SCKPinNumber
*
* This assigns Motate pin 4 to Port A, pin 27 (A27)
* Look in motate_pin_assignments.h to see that this is kSPI_SCKPinNumber
*
* ** Other pin functions ***
*
* Please look in <Motate>/platform/atmel_sam/motate_chip_pin_functions.h
*/
#include <MotateTimers.h>
// We don't have all of the inputs, so we have to indicate as much:
#define INPUT1_AVAILABLE 1
#define INPUT2_AVAILABLE 1
#define INPUT3_AVAILABLE 1
#define INPUT4_AVAILABLE 1
#define INPUT5_AVAILABLE 0
#define INPUT6_AVAILABLE 0
#define INPUT7_AVAILABLE 0
#define INPUT8_AVAILABLE 0
#define INPUT9_AVAILABLE 0
#define INPUT10_AVAILABLE 0
#define INPUT11_AVAILABLE 0
#define INPUT12_AVAILABLE 0
#define INPUT13_AVAILABLE 0
#define XIO_HAS_USB 1
#define XIO_HAS_UART 1
#define XIO_HAS_SPI 0
#define XIO_HAS_I2C 0
#define TEMPERATURE_OUTPUT_ON 0 // NO ADC yet
// Some pins, if the PWM capability is turned on, it will cause timer conflicts.
// So we have to explicitly enable them as PWM pins.
// Generated with:
// perl -e 'for($i=1;$i<14;$i++) { print "#define OUTPUT${i}_PWM 0\n";}'
#define OUTPUT1_PWM 1 // TC0.0
#define OUTPUT2_PWM 1 // PWM0.0
#define OUTPUT3_PWM 1 // TC0.1
#define OUTPUT4_PWM 1 // PWM1.3
#define OUTPUT5_PWM 0 // unused
#define OUTPUT6_PWM 0 // unused
#define OUTPUT7_PWM 0 // unused
#define OUTPUT8_PWM 0 // unused
#define OUTPUT9_PWM 0 // unused
#define OUTPUT10_PWM 0 // unused
#define OUTPUT11_PWM 0 // unused
#define OUTPUT12_PWM 0 // Unused
#define OUTPUT13_PWM 0 // Unused
#define QUADRATIC_REVISION 'C'
namespace Motate {
// Arduino pin name & function
_MAKE_MOTATE_PIN(kOutput1_PinNumber, 'A', 0); // TC0.0 or PWM0
_MAKE_MOTATE_PIN(kOutput2_PinNumber, 'A', 1); // TC0.1 or PWM1
_MAKE_MOTATE_PIN(kUnassigned1, 'A', 2); // PWM1
_MAKE_MOTATE_PIN(kI2C1_SDAPinNumber, 'A', 3); //
_MAKE_MOTATE_PIN(kI2C1_SCLPinNumber, 'A', 4); //
_MAKE_MOTATE_PIN(kUnassigned2, 'A', 5); //
_MAKE_MOTATE_PIN(kUnassigned3, 'A', 6); // Missing in 100-pin package
_MAKE_MOTATE_PIN(kUnassigned4, 'A', 7); //
_MAKE_MOTATE_PIN(kUnassigned5, 'A', 8); //
_MAKE_MOTATE_PIN(kSerial_RXPinNumber, 'A', 9); //
_MAKE_MOTATE_PIN(kSerial_TXPinNumber, 'A', 10); //
_MAKE_MOTATE_PIN(kSocket1_StepPinNumber, 'A', 11); //
_MAKE_MOTATE_PIN(kUnassigned6, 'A', 12); //
_MAKE_MOTATE_PIN(kUnassigned7, 'A', 13); //
_MAKE_MOTATE_PIN(kUnassigned8, 'A', 14); //
_MAKE_MOTATE_PIN(kUnassigned9, 'A', 15); //
_MAKE_MOTATE_PIN(kUnassigned10, 'A', 16); //
_MAKE_MOTATE_PIN(kUnassigned11, 'A', 17); //
_MAKE_MOTATE_PIN(kUnassigned12, 'A', 18); //
_MAKE_MOTATE_PIN(kUnassigned13, 'A', 19); //
_MAKE_MOTATE_PIN(kUnassigned14, 'A', 20); //
_MAKE_MOTATE_PIN(kUnassigned15, 'A', 21); //
_MAKE_MOTATE_PIN(kUnassigned16, 'A', 22); //
_MAKE_MOTATE_PIN(kUnassigned17, 'A', 23); //
_MAKE_MOTATE_PIN(kUnassigned18, 'A', 24); // DIAG0
_MAKE_MOTATE_PIN(kUnassigned19, 'A', 25); //
_MAKE_MOTATE_PIN(kSocket1_DirPinNumber, 'A', 26); //
_MAKE_MOTATE_PIN(kUnassigned20, 'A', 27); // TC2.1
_MAKE_MOTATE_PIN(kSerial_CTSPinNumber, 'A', 28); //
_MAKE_MOTATE_PIN(kUnassigned21, 'A', 29); // Missing in 100-pin package
_MAKE_MOTATE_PIN(kServo1_PinNumber, 'A', 30); // PWM2 - kOutput3_PinNumber
_MAKE_MOTATE_PIN(kInput4_PinNumber, 'A', 31); //
_MAKE_MOTATE_PIN(kUnassigned22, 'B', 0); //
_MAKE_MOTATE_PIN(kUnassigned23, 'B', 1); //
_MAKE_MOTATE_PIN(kSocket3_SPISlaveSelectPinNumber, 'B', 2); //
_MAKE_MOTATE_PIN(kUnassigned24, 'B', 3); //
//_MAKE_MOTATE_PIN( , 'B', 4); // TDI
//_MAKE_MOTATE_PIN( , 'B', 5); // TRACESDO
//_MAKE_MOTATE_PIN( , 'B', 6); // SWDIO
//_MAKE_MOTATE_PIN( , 'B', 7); // SWDCLK
//_MAKE_MOTATE_PIN( , 'B', 8); // XOUT
//_MAKE_MOTATE_PIN( , 'B', 9); // XIN
//_MAKE_MOTATE_PIN( , 'B', 10); // USB_D-
//_MAKE_MOTATE_PIN( , 'B', 11); // USB_D+
//_MAKE_MOTATE_PIN( , 'B', 12); // ERASE
_MAKE_MOTATE_PIN(kUnassigned25, 'B', 13); //
_MAKE_MOTATE_PIN(kUSBVBUS_PinNumber, 'D', 0); // USB_VBUS
_MAKE_MOTATE_PIN(kInput1_PinNumber, 'D', 1); //
_MAKE_MOTATE_PIN(kInput2_PinNumber, 'D', 2); //
_MAKE_MOTATE_PIN(kUnassigned26, 'D', 3); //
_MAKE_MOTATE_PIN(kUnassigned27, 'D', 4); //
_MAKE_MOTATE_PIN(kUnassigned28, 'D', 5); //
_MAKE_MOTATE_PIN(kInput3_PinNumber, 'D', 6); //
_MAKE_MOTATE_PIN(kSerial_RTSPinNumber, 'D', 7); //
_MAKE_MOTATE_PIN(kUnassigned29, 'D', 8); // INTERRUPT_OUT
_MAKE_MOTATE_PIN(kUnassigned30, 'D', 9); //
_MAKE_MOTATE_PIN(kUnassigned31, 'D', 10); //
_MAKE_MOTATE_PIN(kLED_RGBWPixelPinNumber, 'D', 11); // PWM0 - kOutput4_PinNumber
_MAKE_MOTATE_PIN(kSocket4_SPISlaveSelectPinNumber, 'D', 12); //
_MAKE_MOTATE_PIN(kSocket2_EnablePinNumber, 'D', 13); //
_MAKE_MOTATE_PIN(kSocket2_StepPinNumber, 'D', 14); //
_MAKE_MOTATE_PIN(kOutputSAFE_PinNumber, 'D', 15); //
_MAKE_MOTATE_PIN(kSocket2_DirPinNumber, 'D', 16); //
_MAKE_MOTATE_PIN(kUnassigned32, 'D', 17); //
_MAKE_MOTATE_PIN(kUnassigned33, 'D', 18); //
_MAKE_MOTATE_PIN(kUnassigned34, 'D', 19); //
_MAKE_MOTATE_PIN(kSPI0_MISOPinNumber, 'D', 20); //
_MAKE_MOTATE_PIN(kSPI0_MOSIPinNumber, 'D', 21); //
_MAKE_MOTATE_PIN(kSPI0_SCKPinNumber, 'D', 22); //
_MAKE_MOTATE_PIN(kUnassigned35, 'D', 23); // Missing in 100-pin package
_MAKE_MOTATE_PIN(kUnassigned36, 'D', 24); // DIAG1
_MAKE_MOTATE_PIN(kSocket1_SPISlaveSelectPinNumber, 'D', 25); //
_MAKE_MOTATE_PIN(kSocket1_EnablePinNumber, 'D', 26); //
_MAKE_MOTATE_PIN(kSocket2_SPISlaveSelectPinNumber, 'D', 27); //
_MAKE_MOTATE_PIN(kUnassigned37, 'D', 28); //
_MAKE_MOTATE_PIN(kUnassigned38, 'D', 29); // Missing in 100-pin package
_MAKE_MOTATE_PIN(kLEDPWM_PinNumber, 'D', 30); //
_MAKE_MOTATE_PIN(kUnassigned39, 'D', 31); //
} // namespace Motate
// We then allow each chip-type to have it's onw function definitions
// that will refer to these pin assignments.
#include "motate_chip_pin_functions.h"
#endif
// GQUADRATIC_C_PINOUT_H
@@ -157,13 +157,14 @@ pin_number kDebug3_PinNumber = -1; // 116; //e Not the out-of-order numbering &
pin_number kDebug4_PinNumber = -1; // 114;
// END DEBUG PINS
pin_number kLED_USBRXPinNumber = 117;
pin_number kLED_USBTXPinNumber = 118;
pin_number kSD_CardDetectPinNumber = 119;
pin_number kSD_ChipSelectPinNumber = 120;
pin_number kInterlock_InPinNumber = 121;
pin_number kOutputSAFE_PinNumber = 122; // SAFE signal
pin_number kLEDPWM_PinNumber = 123;
pin_number kLED_USBRXPinNumber = 117;
pin_number kLED_USBTXPinNumber = 118;
pin_number kSD_CardDetectPinNumber = -1;
pin_number kSD_ChipSelectPinNumber = -1;
pin_number kUSBVBUS_PinNumber = 119;
pin_number kInterlock_InPinNumber = 121;
pin_number kOutputSAFE_PinNumber = 122; // SAFE signal
pin_number kLEDPWM_PinNumber = 123;
pin_number kOutputInterrupt_PinNumber = 124; // to-host interrupt signal
pin_number kLED_RGBWPixelPinNumber = 125; // 117;