From 4f1661661b76eee3be0d12bf3c95332929e69397 Mon Sep 17 00:00:00 2001 From: Thomas Daede Date: Mon, 3 May 2021 18:12:47 -0700 Subject: [PATCH] Add JVS chaining support. Also fix DIP assignments. --- firmware/td-io.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/firmware/td-io.c b/firmware/td-io.c index 8f8b7f1..8429dc1 100644 --- a/firmware/td-io.c +++ b/firmware/td-io.c @@ -10,7 +10,8 @@ const uint PIN_JVS_SENSE_2_5V = 14; const uint PIN_JVS_SENSE_0V = 13; const uint PIN_JVS_TERMINATION = 15; -const uint PIN_JVS_SENSE_IN = 26; +const uint PIN_JVS_SENSE_IN_HIGH = 11; +const uint PIN_JVS_SENSE_IN_LOW = 12; const uint PIN_SR_DATA = 20; const uint PIN_SR_CLK = 18; @@ -22,8 +23,8 @@ const uint PIN_LOCKOUT1 = 10; const uint PIN_LOCKOUT2 = 9; const uint PIN_LED_ENUMERATED = PICO_DEFAULT_LED_PIN; -const uint PIN_DIP1 = 16; -const uint PIN_DIP2 = 17; +const uint PIN_DIP1 = 17; +const uint PIN_DIP2 = 16; const uint16_t JVS_TERMINATION_THRESHOLD = (uint16_t)(3.75/2.0/3.3*4096); const uint16_t JVS_0V_THRESHOLD = (uint16_t)(1.25/2.0/3.3*4096); @@ -75,7 +76,7 @@ uint8_t prev_coin_p2 = 0; #define SR_TILT 29 const uint8_t JVS_COMM_VER = 0x10; -const char id_str[] = "TD;TD-IO;v1.0;https://github.com/tdaede/td-io"; +const char id_str[] = "TD;TD-IO;v1.1;https://github.com/tdaede/td-io"; const uint8_t input_desc_1coin[] = { 0x01, 2, 12, 0, @@ -162,9 +163,7 @@ uint32_t read_switches() { } void update_termination() { - uint16_t v = adc_read(); - v = 4095; // FIXME: bad adc input - if (v >= JVS_TERMINATION_THRESHOLD) { + if (gpio_get(PIN_JVS_SENSE_IN_HIGH)) { gpio_put(PIN_JVS_TERMINATION, 0); } else { gpio_put(PIN_JVS_TERMINATION, 1); @@ -214,9 +213,12 @@ int main() { gpio_init(PIN_JVS_TERMINATION); gpio_put(PIN_JVS_TERMINATION, 1); // disable termination by default gpio_set_dir(PIN_JVS_TERMINATION, GPIO_OUT); - adc_init(); - adc_gpio_init(PIN_JVS_SENSE_IN); - adc_select_input(0); + gpio_init(PIN_JVS_SENSE_IN_LOW); + gpio_set_dir(PIN_JVS_SENSE_IN_LOW, GPIO_IN); + gpio_pull_up(PIN_JVS_SENSE_IN_LOW); + gpio_init(PIN_JVS_SENSE_IN_HIGH); + gpio_set_dir(PIN_JVS_SENSE_IN_HIGH, GPIO_IN); + gpio_pull_up(PIN_JVS_SENSE_IN_HIGH); // sr gpio_init(PIN_SR_DATA); @@ -287,10 +289,9 @@ int main() { uint8_t node_id = message[i+1]; i += 2; printf("Assign node id N: %02x\n", node_id); - uint16_t v = adc_read(); - printf("Reading ADC: %d\n", v); - v = 4095; // FIXME: adc circuit is bad - if ((v >= JVS_TERMINATION_THRESHOLD) || (v < JVS_0V_THRESHOLD)) { + if ((our_address == 0) + && (gpio_get(PIN_JVS_SENSE_IN_HIGH) + || !gpio_get(PIN_JVS_SENSE_IN_LOW))) { printf("Assigning our address\n"); our_address = node_id; msg_send[o] = JVS_REPORT_GOOD; @@ -333,7 +334,7 @@ int main() { printf("Got input descriptor request\n"); msg_send[o] = JVS_REPORT_GOOD; o++; - if (gpio_get(PIN_DIP1)) { + if (!gpio_get(PIN_DIP1)) { memcpy(&msg_send[o], input_desc_1coin, sizeof(input_desc_1coin)); o += sizeof(input_desc_1coin); } else {