diff --git a/workspace/TS100/Core/BSP/Pine64/Pins.h b/workspace/TS100/Core/BSP/Pine64/Pins.h index 42cae4c3..88b27d7f 100644 --- a/workspace/TS100/Core/BSP/Pine64/Pins.h +++ b/workspace/TS100/Core/BSP/Pine64/Pins.h @@ -35,6 +35,19 @@ #define SDA_Pin BIT(7) #define SDA_GPIO_Port GPIOB + +#define USB_DM_Pin BIT(11) +#define USB_DM_LOW_GPIO_Port GPIOA + +#define QC_DP_LOW_Pin BIT(7) +#define QC_DP_LOW_GPIO_Port GPIOA + +// LOW = low resistance, HIGH = high resistance +#define QC_DM_LOW_Pin BIT(8) +#define QC_DM_LOW_GPIO_Port GPIOA +#define QC_DM_HIGH_Pin BIT(10) +#define QC_DM_HIGH_GPIO_Port GPIOA + #define FUSB302_IRQ_Pin BIT(5) #define FUSB302_IRQ_GPIO_Port GPIOB diff --git a/workspace/TS100/Core/BSP/Pine64/QC_GPIO.cpp b/workspace/TS100/Core/BSP/Pine64/QC_GPIO.cpp index dfb78715..6194add0 100644 --- a/workspace/TS100/Core/BSP/Pine64/QC_GPIO.cpp +++ b/workspace/TS100/Core/BSP/Pine64/QC_GPIO.cpp @@ -9,25 +9,50 @@ #include "QC3.h" #include "Settings.h" #include "gd32vf103.h" +#ifdef POW_QC void QC_DPlusZero_Six() { + // pull down D+ + gpio_bit_reset(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin); } void QC_DNegZero_Six() { + gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin); + gpio_bit_reset(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin); + } void QC_DPlusThree_Three() { + // pull up D+ + gpio_bit_set(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin); } void QC_DNegThree_Three() { + gpio_bit_set(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin); + gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin); } void QC_DM_PullDown() { + gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, USB_DM_Pin); } void QC_DM_No_PullDown() { + gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, USB_DM_Pin); } void QC_Init_GPIO() { + // Setup any GPIO into the right states for QC + //D+ pulldown as output + gpio_init(QC_DP_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DP_LOW_Pin); + //Make two D- pins floating + QC_DM_PullDown(); } void QC_Post_Probe_En() { + //Make two D- pins outputs + gpio_init(QC_DM_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_LOW_Pin); + gpio_init(QC_DM_HIGH_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_HIGH_Pin); + } -uint8_t QC_DM_PulledDown() { return 0; } - +uint8_t QC_DM_PulledDown() { + return gpio_input_bit_get(USB_DM_LOW_GPIO_Port, USB_DM_Pin) == RESET ? 1 : 0; +} +#endif void QC_resync() { - //Any ongoing adjustments -} \ No newline at end of file +#ifdef POW_QC + seekQC((systemSettings.cutoutSetting) ? 120 : 90, systemSettings.voltageDiv); // Run the QC seek again if we have drifted too much +#endif +}