From de061e4f7317dbacc206ef5f038d35a17e8ef0e7 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Thu, 21 Mar 2024 13:56:36 -0700 Subject: [PATCH] remove rest of gmlan (#1908) * remove rest of gmlan * fix * update struct * update --- board/boards/board_declarations.h | 4 +- board/boards/white.h | 69 ++---- board/can_definitions.h | 2 +- board/drivers/can_common.h | 19 +- board/drivers/gmlan_alt.h | 270 ----------------------- board/faults.h | 2 +- board/health.h | 3 +- board/jungle/boards/board_declarations.h | 2 - board/jungle/main.c | 1 - board/main.c | 1 - board/main_comms.h | 5 +- board/safety/safety_gm.h | 3 +- board/stm32f4/peripherals.h | 1 - python/__init__.py | 54 ++--- tests/black_white_loopback_test.py | 2 +- tests/black_white_relay_endurance.py | 2 +- tests/black_white_relay_test.py | 2 +- tests/gmbitbang/recv.py | 18 -- tests/gmbitbang/rigol.py | 36 --- tests/gmbitbang/test.py | 32 --- tests/gmbitbang/test_one.py | 22 -- tests/gmbitbang/test_packer.c | 28 --- tests/gmlan_harness_test.py | 78 ------- tests/hitl/3_usb_to_can.py | 41 ---- tests/hitl/conftest.py | 6 +- tests/libpanda/libpanda_py.py | 2 - tests/libpanda/panda.c | 2 - tests/loopback_test.py | 12 +- tests/safety/common.py | 3 +- tests/safety/test_gm.py | 3 +- tests/tucan_loopback.py | 92 -------- tests/usbprotocol/test_comms.py | 4 +- 32 files changed, 62 insertions(+), 759 deletions(-) delete mode 100644 board/drivers/gmlan_alt.h delete mode 100755 tests/gmbitbang/recv.py delete mode 100755 tests/gmbitbang/rigol.py delete mode 100755 tests/gmbitbang/test.py delete mode 100755 tests/gmbitbang/test_one.py delete mode 100644 tests/gmbitbang/test_packer.c delete mode 100755 tests/gmlan_harness_test.py delete mode 100755 tests/tucan_loopback.py diff --git a/board/boards/board_declarations.h b/board/boards/board_declarations.h index f30216a0..ac0c1413 100644 --- a/board/boards/board_declarations.h +++ b/board/boards/board_declarations.h @@ -72,6 +72,4 @@ struct board { // CAN modes #define CAN_MODE_NORMAL 0U -#define CAN_MODE_GMLAN_CAN2 1U -#define CAN_MODE_GMLAN_CAN3 2U -#define CAN_MODE_OBD_CAN2 3U +#define CAN_MODE_OBD_CAN2 1U diff --git a/board/boards/white.h b/board/boards/white.h index 362f525a..69033456 100644 --- a/board/boards/white.h +++ b/board/boards/white.h @@ -66,61 +66,22 @@ void white_set_usb_power_mode(uint8_t mode){ } void white_set_can_mode(uint8_t mode){ - switch (mode) { - case CAN_MODE_NORMAL: - // B12,B13: disable GMLAN mode - set_gpio_mode(GPIOB, 12, MODE_INPUT); - set_gpio_mode(GPIOB, 13, MODE_INPUT); + if (mode == CAN_MODE_NORMAL) { + // B12,B13: disable GMLAN mode + set_gpio_mode(GPIOB, 12, MODE_INPUT); + set_gpio_mode(GPIOB, 13, MODE_INPUT); - // B3,B4: disable GMLAN mode - set_gpio_mode(GPIOB, 3, MODE_INPUT); - set_gpio_mode(GPIOB, 4, MODE_INPUT); + // B3,B4: disable GMLAN mode + set_gpio_mode(GPIOB, 3, MODE_INPUT); + set_gpio_mode(GPIOB, 4, MODE_INPUT); - // B5,B6: normal CAN2 mode - set_gpio_alternate(GPIOB, 5, GPIO_AF9_CAN2); - set_gpio_alternate(GPIOB, 6, GPIO_AF9_CAN2); + // B5,B6: normal CAN2 mode + set_gpio_alternate(GPIOB, 5, GPIO_AF9_CAN2); + set_gpio_alternate(GPIOB, 6, GPIO_AF9_CAN2); - // A8,A15: normal CAN3 mode - set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3); - set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3); - break; - case CAN_MODE_GMLAN_CAN2: - // B5,B6: disable CAN2 mode - set_gpio_mode(GPIOB, 5, MODE_INPUT); - set_gpio_mode(GPIOB, 6, MODE_INPUT); - - // B3,B4: disable GMLAN mode - set_gpio_mode(GPIOB, 3, MODE_INPUT); - set_gpio_mode(GPIOB, 4, MODE_INPUT); - - // B12,B13: GMLAN mode - set_gpio_alternate(GPIOB, 12, GPIO_AF9_CAN2); - set_gpio_alternate(GPIOB, 13, GPIO_AF9_CAN2); - - // A8,A15: normal CAN3 mode - set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3); - set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3); - break; - case CAN_MODE_GMLAN_CAN3: - // A8,A15: disable CAN3 mode - set_gpio_mode(GPIOA, 8, MODE_INPUT); - set_gpio_mode(GPIOA, 15, MODE_INPUT); - - // B12,B13: disable GMLAN mode - set_gpio_mode(GPIOB, 12, MODE_INPUT); - set_gpio_mode(GPIOB, 13, MODE_INPUT); - - // B3,B4: GMLAN mode - set_gpio_alternate(GPIOB, 3, GPIO_AF11_CAN3); - set_gpio_alternate(GPIOB, 4, GPIO_AF11_CAN3); - - // B5,B6: normal CAN2 mode - set_gpio_alternate(GPIOB, 5, GPIO_AF9_CAN2); - set_gpio_alternate(GPIOB, 6, GPIO_AF9_CAN2); - break; - default: - print("Tried to set unsupported CAN mode: "); puth(mode); print("\n"); - break; + // A8,A15: normal CAN3 mode + set_gpio_alternate(GPIOA, 8, GPIO_AF11_CAN3); + set_gpio_alternate(GPIOA, 15, GPIO_AF11_CAN3); } } @@ -168,8 +129,8 @@ void white_grey_init(void) { 0 1 high voltage wakeup 1 1 33kbit (normal) */ - set_gpio_output(GPIOB, 14, 1); - set_gpio_output(GPIOB, 15, 1); + set_gpio_output(GPIOB, 14, 0); + set_gpio_output(GPIOB, 15, 0); // B7: K-line enable set_gpio_output(GPIOB, 7, 1); diff --git a/board/can_definitions.h b/board/can_definitions.h index b3631d80..f3ce4378 100644 --- a/board/can_definitions.h +++ b/board/can_definitions.h @@ -1,7 +1,7 @@ #pragma once const uint8_t PANDA_CAN_CNT = 3U; -const uint8_t PANDA_BUS_CNT = 4U; +const uint8_t PANDA_BUS_CNT = 3U; // bump this when changing the CAN packet #define CAN_PACKET_VERSION 4 diff --git a/board/drivers/can_common.h b/board/drivers/can_common.h index bc9adde7..57d2508c 100644 --- a/board/drivers/can_common.h +++ b/board/drivers/can_common.h @@ -20,7 +20,6 @@ uint32_t safety_tx_blocked = 0; uint32_t safety_rx_invalid = 0; uint32_t tx_buffer_overflow = 0; uint32_t rx_buffer_overflow = 0; -uint32_t gmlan_send_errs = 0; can_health_t can_health[] = {{0}, {0}, {0}}; @@ -54,7 +53,6 @@ void process_can(uint8_t can_number); #define CAN_RX_BUFFER_SIZE 4096U #define CAN_TX_BUFFER_SIZE 416U -#define GMLAN_TX_BUFFER_SIZE 416U #ifdef STM32H7 // ITCM RAM and DTCM RAM are the fastest for Cortex-M7 core access @@ -67,10 +65,10 @@ can_buffer(tx1_q, CAN_TX_BUFFER_SIZE) can_buffer(tx2_q, CAN_TX_BUFFER_SIZE) #endif can_buffer(tx3_q, CAN_TX_BUFFER_SIZE) -can_buffer(txgmlan_q, GMLAN_TX_BUFFER_SIZE) + // FIXME: // cppcheck-suppress misra-c2012-9.3 -can_ring *can_queues[] = {&can_tx1_q, &can_tx2_q, &can_tx3_q, &can_txgmlan_q}; +can_ring *can_queues[] = {&can_tx1_q, &can_tx2_q, &can_tx3_q}; // helpers #define WORD_TO_BYTE_ARRAY(dst8, src32) 0[dst8] = ((src32) & 0xFFU); 1[dst8] = (((src32) >> 8U) & 0xFFU); 2[dst8] = (((src32) >> 16U) & 0xFFU); 3[dst8] = (((src32) >> 24U) & 0xFFU) @@ -122,8 +120,6 @@ bool can_push(can_ring *q, const CANPacket_t *elem) { print("can_tx2_q"); } else if (q == &can_tx3_q) { print("can_tx3_q"); - } else if (q == &can_txgmlan_q) { - print("can_txgmlan_q"); } else { print("unknown"); } @@ -234,8 +230,7 @@ bool can_tx_check_min_slots_free(uint32_t min) { return (can_slots_empty(&can_tx1_q) >= min) && (can_slots_empty(&can_tx2_q) >= min) && - (can_slots_empty(&can_tx3_q) >= min) && - (can_slots_empty(&can_txgmlan_q) >= min); + (can_slots_empty(&can_tx3_q) >= min); } uint8_t calculate_checksum(const uint8_t *dat, uint32_t len) { @@ -259,12 +254,8 @@ void can_send(CANPacket_t *to_push, uint8_t bus_number, bool skip_tx_hook) { if (skip_tx_hook || safety_tx_hook(to_push) != 0) { if (bus_number < PANDA_BUS_CNT) { // add CAN packet to send queue - if ((bus_number == 3U) && (bus_config[3].can_num_lookup == 0xFFU)) { - gmlan_send_errs += bitbang_gmlan(to_push) ? 0U : 1U; - } else { - tx_buffer_overflow += can_push(can_queues[bus_number], to_push) ? 0U : 1U; - process_can(CAN_NUM_FROM_BUS_NUM(bus_number)); - } + tx_buffer_overflow += can_push(can_queues[bus_number], to_push) ? 0U : 1U; + process_can(CAN_NUM_FROM_BUS_NUM(bus_number)); } } else { safety_tx_blocked += 1U; diff --git a/board/drivers/gmlan_alt.h b/board/drivers/gmlan_alt.h deleted file mode 100644 index 2dbc381b..00000000 --- a/board/drivers/gmlan_alt.h +++ /dev/null @@ -1,270 +0,0 @@ -#define GMLAN_TICKS_PER_SECOND 33300 //1sec @ 33.3kbps -#define GMLAN_TICKS_PER_TIMEOUT_TICKLE 500 //15ms @ 33.3kbps -#define GMLAN_HIGH 0 //0 is high on bus (dominant) -#define GMLAN_LOW 1 //1 is low on bus - -#define DISABLED -1 -#define BITBANG 0 -#define GPIO_SWITCH 1 - -#define MAX_BITS_CAN_PACKET (200) - -int gmlan_alt_mode = DISABLED; - -// returns out_len -int do_bitstuff(char *out, const char *in, int in_len) { - int last_bit = -1; - int bit_cnt = 0; - int j = 0; - for (int i = 0; i < in_len; i++) { - char bit = in[i]; - out[j] = bit; - j++; - - // do the stuffing - if (bit == (char)last_bit) { - bit_cnt++; - if (bit_cnt == 5) { - // 5 in a row the same, do stuff - last_bit = !bit ? 1 : 0; - out[j] = last_bit; - j++; - bit_cnt = 1; - } - } else { - // this is a new bit - last_bit = (int)bit; - bit_cnt = 1; - } - } - return j; -} - -int append_crc(char *in, int in_len) { - unsigned int crc = 0; - for (int i = 0; i < in_len; i++) { - crc <<= 1; - if (((unsigned int)(in[i]) ^ ((crc >> 15) & 1U)) != 0U) { - crc = crc ^ 0x4599U; - } - crc &= 0x7fffU; - } - int in_len_copy = in_len; - for (int i = 14; i >= 0; i--) { - in[in_len_copy] = (crc >> (unsigned int)(i)) & 1U; - in_len_copy++; - } - return in_len_copy; -} - -int append_bits(char *in, int in_len, const char *app, int app_len) { - int in_len_copy = in_len; - for (int i = 0; i < app_len; i++) { - in[in_len_copy] = app[i]; - in_len_copy++; - } - return in_len_copy; -} - -int append_int(char *in, int in_len, int val, int val_len) { - int in_len_copy = in_len; - for (int i = val_len - 1; i >= 0; i--) { - in[in_len_copy] = ((unsigned int)(val) & (1U << (unsigned int)(i))) != 0U; - in_len_copy++; - } - return in_len_copy; -} - -int get_bit_message(char *out, const CANPacket_t *to_bang) { - char pkt[MAX_BITS_CAN_PACKET]; - char footer[] = { - 1, // CRC delimiter - 1, // ACK - 1, // ACK delimiter - 1,1,1,1,1,1,1, // EOF - 1,1,1, // IFS - }; - - int len = 0; - - // test packet - int dlc_len = GET_LEN(to_bang); - len = append_int(pkt, len, 0, 1); // Start-of-frame - - if (to_bang->extended != 0U) { - // extended identifier - len = append_int(pkt, len, GET_ADDR(to_bang) >> 18, 11); // Identifier - len = append_int(pkt, len, 3, 2); // SRR+IDE - len = append_int(pkt, len, (GET_ADDR(to_bang)) & ((1UL << 18) - 1U), 18); // Identifier - len = append_int(pkt, len, 0, 3); // RTR+r1+r0 - } else { - // standard identifier - len = append_int(pkt, len, GET_ADDR(to_bang), 11); // Identifier - len = append_int(pkt, len, 0, 3); // RTR+IDE+reserved - } - - len = append_int(pkt, len, dlc_len, 4); // Data length code - - // append data - for (int i = 0; i < dlc_len; i++) { - len = append_int(pkt, len, to_bang->data[i], 8); - } - - // append crc - len = append_crc(pkt, len); - - // do bitstuffing - len = do_bitstuff(out, pkt, len); - - // append footer - len = append_bits(out, len, footer, sizeof(footer)); - return len; -} - -void TIM12_IRQ_Handler(void); - -void setup_timer(void) { - // register interrupt - REGISTER_INTERRUPT(TIM8_BRK_TIM12_IRQn, TIM12_IRQ_Handler, 40000U, FAULT_INTERRUPT_RATE_GMLAN) - - // setup - register_set(&(TIM12->PSC), (APB1_TIMER_FREQ-1U), 0xFFFFU); // Tick on 1 us - register_set(&(TIM12->CR1), TIM_CR1_CEN, 0x3FU); // Enable - register_set(&(TIM12->ARR), (30U-1U), 0xFFFFU); // 33.3 kbps - - // in case it's disabled - NVIC_EnableIRQ(TIM8_BRK_TIM12_IRQn); - - // run the interrupt - register_set(&(TIM12->DIER), TIM_DIER_UIE, 0x5F5FU); // Update interrupt - TIM12->SR = 0; -} - -int gmlan_timeout_counter = GMLAN_TICKS_PER_TIMEOUT_TICKLE; //GMLAN transceiver times out every 17ms held high; tickle every 15ms -int can_timeout_counter = GMLAN_TICKS_PER_SECOND; //1 second - -int inverted_bit_to_send = GMLAN_HIGH; -int gmlan_switch_below_timeout = -1; -int gmlan_switch_timeout_enable = 0; - -void set_bitbanged_gmlan(int val) { - if (val != 0) { - register_set_bits(&(GPIOB->ODR), (1UL << 13)); - } else { - register_clear_bits(&(GPIOB->ODR), (1UL << 13)); - } -} - -char pkt_stuffed[MAX_BITS_CAN_PACKET]; -int gmlan_sending = -1; -int gmlan_sendmax = -1; -bool gmlan_send_ok = true; - -int gmlan_silent_count = 0; -int gmlan_fail_count = 0; -#define REQUIRED_SILENT_TIME 10 -#define MAX_FAIL_COUNT 10 - -void TIM12_IRQ_Handler(void) { - if (gmlan_alt_mode == BITBANG) { - if ((TIM12->SR & TIM_SR_UIF) && (gmlan_sendmax != -1)) { - int read = get_gpio_input(GPIOB, 12); - if (gmlan_silent_count < REQUIRED_SILENT_TIME) { - if (read == 0) { - gmlan_silent_count = 0; - } else { - gmlan_silent_count++; - } - } else { - bool retry = 0; - // in send loop - if ((gmlan_sending > 0) && // not first bit - ((read == 0) && (pkt_stuffed[gmlan_sending-1] == (char)1)) && // bus wrongly dominant - (gmlan_sending != (gmlan_sendmax - 11))) { //not ack bit - print("GMLAN ERR: bus driven at "); - puth(gmlan_sending); - print("\n"); - retry = 1; - } else if ((read == 1) && (gmlan_sending == (gmlan_sendmax - 11))) { // recessive during ACK - print("GMLAN ERR: didn't recv ACK\n"); - retry = 1; - } else { - // do not retry - } - if (retry) { - // reset sender (retry after 7 silent) - set_bitbanged_gmlan(1); // recessive - gmlan_silent_count = 0; - gmlan_sending = 0; - gmlan_fail_count++; - if (gmlan_fail_count == MAX_FAIL_COUNT) { - print("GMLAN ERR: giving up send\n"); - gmlan_send_ok = false; - } - } else { - set_bitbanged_gmlan(pkt_stuffed[gmlan_sending]); - gmlan_sending++; - } - } - if ((gmlan_sending == gmlan_sendmax) || (gmlan_fail_count == MAX_FAIL_COUNT)) { - set_bitbanged_gmlan(1); // recessive - set_gpio_mode(GPIOB, 13, MODE_INPUT); - register_clear_bits(&(TIM12->DIER), TIM_DIER_UIE); // No update interrupt - register_set(&(TIM12->CR1), 0U, 0x3FU); // Disable timer - gmlan_sendmax = -1; // exit - } - } - } else if (gmlan_alt_mode == GPIO_SWITCH) { - if ((TIM12->SR & TIM_SR_UIF) && (gmlan_switch_below_timeout != -1)) { - if ((can_timeout_counter == 0) && gmlan_switch_timeout_enable) { - //it has been more than 1 second since timeout was reset; disable timer and restore the GMLAN output - set_gpio_output(GPIOB, 13, GMLAN_LOW); - gmlan_switch_below_timeout = -1; - gmlan_timeout_counter = GMLAN_TICKS_PER_TIMEOUT_TICKLE; - gmlan_alt_mode = DISABLED; - } - else { - can_timeout_counter--; - if (gmlan_timeout_counter == 0) { - //Send a 1 (bus low) every 15ms to reset the GMLAN transceivers timeout - gmlan_timeout_counter = GMLAN_TICKS_PER_TIMEOUT_TICKLE; - set_gpio_output(GPIOB, 13, GMLAN_LOW); - } - else { - set_gpio_output(GPIOB, 13, inverted_bit_to_send); - gmlan_timeout_counter--; - } - } - } - } else { - // Invalid GMLAN mode. Do not put a print statement here, way too fast to keep up with - } - TIM12->SR = 0; -} - -bool bitbang_gmlan(const CANPacket_t *to_bang) { - gmlan_send_ok = true; - gmlan_alt_mode = BITBANG; - -#ifdef HW_TYPE_DOS - if (hw_type == HW_TYPE_DOS) { - if (gmlan_sendmax == -1) { - int len = get_bit_message(pkt_stuffed, to_bang); - gmlan_fail_count = 0; - gmlan_silent_count = 0; - gmlan_sending = 0; - gmlan_sendmax = len; - // setup for bitbang loop - set_bitbanged_gmlan(1); // recessive - set_gpio_mode(GPIOB, 13, MODE_OUTPUT); - - // 33kbps - setup_timer(); - } - } -#else - UNUSED(to_bang); -#endif - - return gmlan_send_ok; -} diff --git a/board/faults.h b/board/faults.h index a7f437de..dc6c1f2a 100644 --- a/board/faults.h +++ b/board/faults.h @@ -9,7 +9,7 @@ #define FAULT_INTERRUPT_RATE_CAN_2 (1UL << 3) #define FAULT_INTERRUPT_RATE_CAN_3 (1UL << 4) #define FAULT_INTERRUPT_RATE_TACH (1UL << 5) -#define FAULT_INTERRUPT_RATE_GMLAN (1UL << 6) +#define FAULT_INTERRUPT_RATE_GMLAN (1UL << 6) // deprecated #define FAULT_INTERRUPT_RATE_INTERRUPTS (1UL << 7) #define FAULT_INTERRUPT_RATE_SPI_DMA (1UL << 8) #define FAULT_INTERRUPT_RATE_SPI_CS (1UL << 9) diff --git a/board/health.h b/board/health.h index fc7661ca..74d822dc 100644 --- a/board/health.h +++ b/board/health.h @@ -1,6 +1,6 @@ // When changing these structs, python/__init__.py needs to be kept up to date! -#define HEALTH_PACKET_VERSION 15 +#define HEALTH_PACKET_VERSION 16 struct __attribute__((packed)) health_t { uint32_t uptime_pkt; uint32_t voltage_pkt; @@ -9,7 +9,6 @@ struct __attribute__((packed)) health_t { uint32_t safety_rx_invalid_pkt; uint32_t tx_buffer_overflow_pkt; uint32_t rx_buffer_overflow_pkt; - uint32_t gmlan_send_errs_pkt; uint32_t faults_pkt; uint8_t ignition_line_pkt; uint8_t ignition_can_pkt; diff --git a/board/jungle/boards/board_declarations.h b/board/jungle/boards/board_declarations.h index 92591892..2f65ff4a 100644 --- a/board/jungle/boards/board_declarations.h +++ b/board/jungle/boards/board_declarations.h @@ -49,8 +49,6 @@ struct board { // CAN modes #define CAN_MODE_NORMAL 0U -#define CAN_MODE_GMLAN_CAN2 1U -#define CAN_MODE_GMLAN_CAN3 2U #define CAN_MODE_OBD_CAN2 3U // Harness states diff --git a/board/jungle/main.c b/board/jungle/main.c index f0a09dfb..0359be96 100644 --- a/board/jungle/main.c +++ b/board/jungle/main.c @@ -2,7 +2,6 @@ #include "board/config.h" #include "board/safety.h" -#include "board/drivers/gmlan_alt.h" #include "board/drivers/pwm.h" #include "board/drivers/usb.h" diff --git a/board/main.c b/board/main.c index 00429e32..3649cc92 100644 --- a/board/main.c +++ b/board/main.c @@ -3,7 +3,6 @@ #include "drivers/pwm.h" #include "drivers/usb.h" -#include "drivers/gmlan_alt.h" #include "drivers/simple_watchdog.h" #include "drivers/bootkick.h" diff --git a/board/main_comms.h b/board/main_comms.h index 2c8bf165..830ef83b 100644 --- a/board/main_comms.h +++ b/board/main_comms.h @@ -21,7 +21,6 @@ int get_health_pkt(void *dat) { health->safety_rx_invalid_pkt = safety_rx_invalid; health->tx_buffer_overflow_pkt = tx_buffer_overflow; health->rx_buffer_overflow_pkt = rx_buffer_overflow; - health->gmlan_send_errs_pkt = gmlan_send_errs; health->car_harness_status_pkt = harness.status; health->safety_mode_pkt = (uint8_t)(current_safety_mode); health->safety_param_pkt = current_safety_param; @@ -211,9 +210,9 @@ int comms_control_handler(ControlPacket_t *req, uint8_t *resp) { case 0xd8: NVIC_SystemReset(); break; - // **** 0xdb: set GMLAN (white/grey) or OBD CAN (black) multiplexing mode + // **** 0xdb: set OBD CAN multiplexing mode case 0xdb: - if(current_board->has_obd){ + if (current_board->has_obd) { if (req->param1 == 1U) { // Enable OBD CAN current_board->set_can_mode(CAN_MODE_OBD_CAN2); diff --git a/board/safety/safety_gm.h b/board/safety/safety_gm.h index 82a5d9cd..7f8ad72c 100644 --- a/board/safety/safety_gm.h +++ b/board/safety/safety_gm.h @@ -29,8 +29,7 @@ const int GM_STANDSTILL_THRSLD = 10; // 0.311kph const CanMsg GM_ASCM_TX_MSGS[] = {{0x180, 0, 4}, {0x409, 0, 7}, {0x40A, 0, 7}, {0x2CB, 0, 8}, {0x370, 0, 6}, // pt bus {0xA1, 1, 7}, {0x306, 1, 8}, {0x308, 1, 7}, {0x310, 1, 2}, // obs bus - {0x315, 2, 5}, // ch bus - {0x104c006c, 3, 3}, {0x10400060, 3, 5}}; // gmlan + {0x315, 2, 5}}; // ch bus const CanMsg GM_CAM_TX_MSGS[] = {{0x180, 0, 4}, // pt bus {0x1E1, 2, 7}, {0x184, 2, 8}}; // camera bus diff --git a/board/stm32f4/peripherals.h b/board/stm32f4/peripherals.h index 79ac3c6e..711f1b82 100644 --- a/board/stm32f4/peripherals.h +++ b/board/stm32f4/peripherals.h @@ -83,7 +83,6 @@ void peripherals_init(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM5EN; // k-line init RCC->APB1ENR |= RCC_APB1ENR_TIM6EN; // interrupt timer RCC->APB2ENR |= RCC_APB2ENR_TIM9EN; // slow loop - RCC->APB1ENR |= RCC_APB1ENR_TIM12EN; // gmlan_alt } void enable_interrupt_timer(void) { diff --git a/python/__init__.py b/python/__init__.py index 97c967f2..c2bfa5a0 100644 --- a/python/__init__.py +++ b/python/__init__.py @@ -148,9 +148,6 @@ class Panda: SERIAL_LIN2 = 3 SERIAL_SOM_DEBUG = 4 - GMLAN_CAN2 = 1 - GMLAN_CAN3 = 2 - USB_PIDS = (0xddee, 0xddcc) REQUEST_IN = usb1.ENDPOINT_IN | usb1.TYPE_VENDOR | usb1.RECIPIENT_DEVICE REQUEST_OUT = usb1.ENDPOINT_OUT | usb1.TYPE_VENDOR | usb1.RECIPIENT_DEVICE @@ -168,9 +165,9 @@ class Panda: HW_TYPE_CUATRO = b'\x0a' CAN_PACKET_VERSION = 4 - HEALTH_PACKET_VERSION = 15 + HEALTH_PACKET_VERSION = 16 CAN_HEALTH_PACKET_VERSION = 5 - HEALTH_STRUCT = struct.Struct(" 0: - add = ret[0][0] - if last_add is not None and add != last_add + 1: - print("MISS: ", last_add, add) - last_add = add - print(ret) diff --git a/tests/gmbitbang/rigol.py b/tests/gmbitbang/rigol.py deleted file mode 100755 index 818df748..00000000 --- a/tests/gmbitbang/rigol.py +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env python3 -# pylint: skip-file -# type: ignore -import numpy as np -import visa -import matplotlib.pyplot as plt - -resources = visa.ResourceManager() -print(resources.list_resources()) - -scope = resources.open_resource('USB0::0x1AB1::0x04CE::DS1ZA184652242::INSTR', timeout=2000, chunk_size=1024000) -print(scope.query('*IDN?').strip()) - -#voltscale = scope.ask_for_values(':CHAN1:SCAL?')[0] -#voltoffset = scope.ask_for_values(":CHAN1:OFFS?")[0] - -#scope.write(":STOP") -scope.write(":WAV:POIN:MODE RAW") -scope.write(":WAV:DATA? CHAN1")[10:] -rawdata = scope.read_raw() -data = np.frombuffer(rawdata, 'B') -print(data.shape) - -s1 = data[0:650] -s2 = data[650:] -s1i = np.argmax(s1 > 100) -s2i = np.argmax(s2 > 100) -s1 = s1[s1i:] -s2 = s2[s2i:] - -plt.plot(s1) -plt.plot(s2) -plt.show() -#data = (data - 130.0 - voltoffset/voltscale*25) / 25 * voltscale - -print(data) diff --git a/tests/gmbitbang/test.py b/tests/gmbitbang/test.py deleted file mode 100755 index b8041136..00000000 --- a/tests/gmbitbang/test.py +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env python3 -import time -from panda import Panda - -p1 = Panda('380016000551363338383037') -p2 = Panda('430026000951363338383037') - -# this is a test, no safety -p1.set_safety_mode(Panda.SAFETY_ALLOUTPUT) -p2.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - -# get versions -print(p1.get_version()) -print(p2.get_version()) - -# this sets bus 2 to actually be GMLAN -p2.set_gmlan(bus=2) - -# send w bitbang then without -#iden = 123 -iden = 18000 -#dat = "\x01\x02" -dat = "\x01\x02\x03\x04\x05\x06\x07\x08" -while 1: - iden += 1 - p1.set_gmlan(bus=None) - p1.can_send(iden, dat, bus=3) - #p1.set_gmlan(bus=2) - #p1.can_send(iden, dat, bus=3) - time.sleep(0.01) - print(p2.can_recv()) - #exit(0) diff --git a/tests/gmbitbang/test_one.py b/tests/gmbitbang/test_one.py deleted file mode 100755 index 981edc52..00000000 --- a/tests/gmbitbang/test_one.py +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env python3 -import time -from panda import Panda - -p = Panda() -p.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - -# hack anything on bus -p.set_gmlan(bus=2) -time.sleep(0.1) -while len(p.can_recv()) > 0: - print("clearing") - time.sleep(0.1) -print("cleared") -p.set_gmlan(bus=None) - -iden = 18000 -dat = "\x01\x02\x03\x04\x05\x06\x07\x08" -while 1: - iden += 1 - p.can_send(iden, dat, bus=3) - time.sleep(0.01) diff --git a/tests/gmbitbang/test_packer.c b/tests/gmbitbang/test_packer.c deleted file mode 100644 index 63c01310..00000000 --- a/tests/gmbitbang/test_packer.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include - -#define CANPACKET_DATA_SIZE_MAX 8 -#include "../../board/can_definitions.h" - -#include "../../board/drivers/canbitbang.h" - -int main() { - char out[300]; - CANPacket_t to_bang = {0}; - to_bang.addr = 20 << 18; - to_bang.data_len_code = 1; - to_bang.data[0] = 1; - - int len = get_bit_message(out, &to_bang); - printf("T:"); - for (int i = 0; i < len; i++) { - printf("%d", out[i]); - } - printf("\n"); - printf("R:0000010010100000100010000010011110111010100111111111111111"); - printf("\n"); - return 0; -} - - - diff --git a/tests/gmlan_harness_test.py b/tests/gmlan_harness_test.py deleted file mode 100755 index 950918cf..00000000 --- a/tests/gmlan_harness_test.py +++ /dev/null @@ -1,78 +0,0 @@ -#!/usr/bin/env python3 - -import time - -from panda import Panda - -WHITE_GMLAN_BUS = 3 -OTHER_GMLAN_BUS = 1 - -def set_gmlan(p): - if p.get_type() == Panda.HW_TYPE_WHITE_PANDA: - p.set_gmlan(2) - else: - p.set_obd(True) - -def set_speed_kbps(p, speed): - if p.get_type() == Panda.HW_TYPE_WHITE_PANDA: - p.set_can_speed_kbps(WHITE_GMLAN_BUS, speed) - else: - p.set_can_speed_kbps(OTHER_GMLAN_BUS, speed) - -def send(p, id_, msg): - if p.get_type() == Panda.HW_TYPE_WHITE_PANDA: - p.can_send(id_, msg, WHITE_GMLAN_BUS) - else: - p.can_send(id_, msg, OTHER_GMLAN_BUS) - -if __name__ == "__main__": - pl = Panda.list() - assert(len(pl) == 2) - p0 = Panda(pl[1]) - p1 = Panda(pl[0]) - - p0.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - p1.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - - print("0: ", p0.get_type()) - print("1: ", p1.get_type()) - - set_gmlan(p0) - set_gmlan(p1) - - p0.can_clear(0xFFFF) - p1.can_clear(0xFFFF) - - try: - loops = 0 - while True: - for speed in [33.3, 83.3]: - set_speed_kbps(p0, speed) - set_speed_kbps(p1, speed) - p0.can_clear(0xFFFF) - p1.can_clear(0xFFFF) - - print(f"Speed: {speed}") - time.sleep(0.1) - - print("Send 1 -> 0") - send(p1, 1, b"1to0:" + bytes(str(loops%100), "utf-8")) - time.sleep(0.05) - rx = list(filter(lambda x: x[3] < 128, p0.can_recv())) - print(rx) - assert(len(rx) == 1) - - print("Send 0 -> 1") - send(p0, 1, b"0to1:" + bytes(str(loops%100), "utf-8")) - time.sleep(0.05) - rx = list(filter(lambda x: x[3] < 128, p1.can_recv())) - print(rx) - assert(len(rx) == 1) - - time.sleep(0.5) - - - loops += 1 - print(f"Completed {loops} loops") - except Exception: - print("Test failed somehow. Did you power the black panda using the GMLAN harness?") diff --git a/tests/hitl/3_usb_to_can.py b/tests/hitl/3_usb_to_can.py index 9321eb4e..c0a9035f 100644 --- a/tests/hitl/3_usb_to_can.py +++ b/tests/hitl/3_usb_to_can.py @@ -1,9 +1,7 @@ import time -import pytest from flaky import flaky from panda import Panda -from panda.tests.hitl.conftest import SPEED_NORMAL, SPEED_GMLAN, PandaGroup from panda.tests.hitl.helpers import time_many_sends def test_can_loopback(p): @@ -81,45 +79,6 @@ def test_throughput(p): print("loopback 100 messages at speed %d, comp speed is %.2f, percent %.2f" % (speed, comp_kbps, saturation_pct)) -@pytest.mark.test_panda_types(PandaGroup.GMLAN) -def test_gmlan(p): - p.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - p.set_can_loopback(True) - - # set gmlan on CAN2 - for bus in [Panda.GMLAN_CAN2, Panda.GMLAN_CAN3, Panda.GMLAN_CAN2, Panda.GMLAN_CAN3]: - p.set_gmlan(bus) - comp_kbps_gmlan = time_many_sends(p, 3) - assert comp_kbps_gmlan > (0.8 * SPEED_GMLAN) - assert comp_kbps_gmlan < (1.0 * SPEED_GMLAN) - - p.set_gmlan(None) - comp_kbps_normal = time_many_sends(p, bus) - assert comp_kbps_normal > (0.8 * SPEED_NORMAL) - assert comp_kbps_normal < (1.0 * SPEED_NORMAL) - - print("%d: %.2f kbps vs %.2f kbps" % (bus, comp_kbps_gmlan, comp_kbps_normal)) - -@pytest.mark.test_panda_types(PandaGroup.GMLAN) -def test_gmlan_bad_toggle(p): - p.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - p.set_can_loopback(True) - - # GMLAN_CAN2 - for bus in [Panda.GMLAN_CAN2, Panda.GMLAN_CAN3]: - p.set_gmlan(bus) - comp_kbps_gmlan = time_many_sends(p, 3) - assert comp_kbps_gmlan > (0.6 * SPEED_GMLAN) - assert comp_kbps_gmlan < (1.0 * SPEED_GMLAN) - - # normal - for bus in [Panda.GMLAN_CAN2, Panda.GMLAN_CAN3]: - p.set_gmlan(None) - comp_kbps_normal = time_many_sends(p, bus) - assert comp_kbps_normal > (0.6 * SPEED_NORMAL) - assert comp_kbps_normal < (1.0 * SPEED_NORMAL) - - # this will fail if you have hardware serial connected def test_serial_debug(p): _ = p.serial_read(Panda.SERIAL_DEBUG) # junk diff --git a/tests/hitl/conftest.py b/tests/hitl/conftest.py index b7844354..7a6e1b10 100644 --- a/tests/hitl/conftest.py +++ b/tests/hitl/conftest.py @@ -11,8 +11,7 @@ if "DEBUG" in os.environ: sys.stdout = sys.stderr SPEED_NORMAL = 500 -SPEED_GMLAN = 33.3 -BUS_SPEEDS = [(0, SPEED_NORMAL), (1, SPEED_NORMAL), (2, SPEED_NORMAL), (3, SPEED_GMLAN)] +BUS_SPEEDS = [(0, SPEED_NORMAL), (1, SPEED_NORMAL), (2, SPEED_NORMAL)] JUNGLE_SERIAL = os.getenv("PANDAS_JUNGLE") @@ -28,8 +27,6 @@ if PARALLEL: class PandaGroup: H7 = (Panda.HW_TYPE_RED_PANDA, Panda.HW_TYPE_RED_PANDA_V2, Panda.HW_TYPE_TRES) GEN2 = (Panda.HW_TYPE_BLACK_PANDA, Panda.HW_TYPE_UNO, Panda.HW_TYPE_DOS) + H7 - GMLAN = (Panda.HW_TYPE_WHITE_PANDA, Panda.HW_TYPE_GREY_PANDA) - TESTED = (Panda.HW_TYPE_WHITE_PANDA, Panda.HW_TYPE_BLACK_PANDA, Panda.HW_TYPE_RED_PANDA, Panda.HW_TYPE_RED_PANDA_V2, Panda.HW_TYPE_UNO) if HW_TYPES is not None: @@ -201,7 +198,6 @@ def fixture_panda_setup(request): p.reset(reconnect=True) p.set_can_loopback(False) - p.set_gmlan(None) p.set_power_save(False) for bus, speed in BUS_SPEEDS: p.set_can_speed_kbps(bus, speed) diff --git a/tests/libpanda/libpanda_py.py b/tests/libpanda/libpanda_py.py index 8f876c55..6f888ac6 100644 --- a/tests/libpanda/libpanda_py.py +++ b/tests/libpanda/libpanda_py.py @@ -40,7 +40,6 @@ typedef struct { } can_ring; extern can_ring *rx_q; -extern can_ring *txgmlan_q; extern can_ring *tx1_q; extern can_ring *tx2_q; extern can_ring *tx3_q; @@ -71,7 +70,6 @@ class Panda(PandaSafety, Protocol): tx1_q: Any tx2_q: Any tx3_q: Any - txgmlan_q: Any def can_set_checksum(self, p: CANPacket) -> None: ... # safety diff --git a/tests/libpanda/panda.c b/tests/libpanda/panda.c index 8efb6de4..f34c0280 100644 --- a/tests/libpanda/panda.c +++ b/tests/libpanda/panda.c @@ -2,7 +2,6 @@ #include "config.h" #include "can_definitions.h" -bool bitbang_gmlan(CANPacket_t *to_bang) { return true; } bool can_init(uint8_t can_number) { return true; } void process_can(uint8_t can_number) { } //int safety_tx_hook(CANPacket_t *to_send) { return 1; } @@ -21,7 +20,6 @@ void can_tx_comms_resume_spi(void) { }; #include "drivers/can_common.h" can_ring *rx_q = &can_rx_q; -can_ring *txgmlan_q = &can_txgmlan_q; can_ring *tx1_q = &can_tx1_q; can_ring *tx2_q = &can_tx2_q; can_ring *tx3_q = &can_tx3_q; diff --git a/tests/loopback_test.py b/tests/loopback_test.py index d4f8bebf..a95c2ea2 100755 --- a/tests/loopback_test.py +++ b/tests/loopback_test.py @@ -37,18 +37,18 @@ def run_test_w_pandas(pandas, sleep_duration): print("health", ho[0], h[ho[0]].health()) # **** test can line loopback **** - for bus, gmlan in [(0, False), (1, False), (2, False), (1, True), (2, True)]: + for bus, obd in [(0, False), (1, False), (2, False), (1, True), (2, True)]: print("\ntest can", bus) # flush cans_echo = panda0.can_recv() cans_loop = panda1.can_recv() - panda0.set_gmlan(None) - panda1.set_gmlan(None) + panda0.set_obd(None) + panda1.set_obd(None) - if gmlan is True: - panda0.set_gmlan(bus) - panda1.set_gmlan(bus) + if obd is True: + panda0.set_obd(bus) + panda1.set_obd(bus) bus = 3 # send the characters diff --git a/tests/safety/common.py b/tests/safety/common.py index 8179cff1..e111ff7e 100644 --- a/tests/safety/common.py +++ b/tests/safety/common.py @@ -690,8 +690,7 @@ class PandaSafetyTest(PandaSafetyTestBase): SCANNED_ADDRS = [*range(0x800), # Entire 11-bit CAN address space *range(0x18DA00F1, 0x18DB00F1, 0x100), # 29-bit UDS physical addressing *range(0x18DB00F1, 0x18DC00F1, 0x100), # 29-bit UDS functional addressing - *range(0x3300, 0x3400), # Honda - 0x10400060, 0x104c006c] # GMLAN (exceptions, range/format unclear) + *range(0x3300, 0x3400)] # Honda FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {} # {bus: [addr]} FWD_BUS_LOOKUP: dict[int, int] = {} diff --git a/tests/safety/test_gm.py b/tests/safety/test_gm.py index 28b2ad50..c6c5ac6b 100755 --- a/tests/safety/test_gm.py +++ b/tests/safety/test_gm.py @@ -144,8 +144,7 @@ class TestGmSafetyBase(common.PandaCarSafetyTest, common.DriverTorqueSteeringSaf class TestGmAscmSafety(GmLongitudinalBase, TestGmSafetyBase): TX_MSGS = [[0x180, 0], [0x409, 0], [0x40A, 0], [0x2CB, 0], [0x370, 0], # pt bus [0xA1, 1], [0x306, 1], [0x308, 1], [0x310, 1], # obs bus - [0x315, 2], # ch bus - [0x104c006c, 3], [0x10400060, 3]] # gmlan + [0x315, 2]] # ch bus FWD_BLACKLISTED_ADDRS: dict[int, list[int]] = {} FWD_BUS_LOOKUP: dict[int, int] = {} BRAKE_BUS = 2 diff --git a/tests/tucan_loopback.py b/tests/tucan_loopback.py deleted file mode 100755 index 457facdf..00000000 --- a/tests/tucan_loopback.py +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/env python3 - -import os -import time -import random -import argparse -from itertools import permutations - -from panda import Panda - -def get_test_string(): - return b"test" + os.urandom(10) - -def run_test(sleep_duration): - pandas = Panda.list() - print(pandas) - - if len(pandas) < 2: - raise Exception("Two pandas are needed for test") - - run_test_w_pandas(pandas, sleep_duration) - -def run_test_w_pandas(pandas, sleep_duration): - h = [Panda(x) for x in pandas] - print("H", h) - - for hh in h: - hh.set_safety_mode(Panda.SAFETY_ALLOUTPUT) - - # test both directions - for ho in permutations(list(range(len(h))), r=2): - print("***************** TESTING", ho) - - panda0, panda1 = h[ho[0]], h[ho[1]] - - # **** test health packet **** - print("health", ho[0], h[ho[0]].health()) - - # **** test can line loopback **** - # for bus, gmlan in [(0, None), (1, False), (2, False), (1, True), (2, True)]: - for bus, gmlan in [(0, None), (1, None)]: - print("\ntest can", bus) - # flush - cans_echo = panda0.can_recv() - cans_loop = panda1.can_recv() - - if gmlan is not None: - panda0.set_gmlan(gmlan, bus) - panda1.set_gmlan(gmlan, bus) - - # send the characters - # pick addresses high enough to not conflict with honda code - at = random.randint(1024, 2000) - st = get_test_string()[0:8] - panda0.can_send(at, st, bus) - time.sleep(0.1) - - # check for receive - cans_echo = panda0.can_recv() - cans_loop = panda1.can_recv() - - print("Bus", bus, "echo", cans_echo, "loop", cans_loop) - - assert len(cans_echo) == 1 - assert len(cans_loop) == 1 - - assert cans_echo[0][0] == at - assert cans_loop[0][0] == at - - assert cans_echo[0][2] == st - assert cans_loop[0][2] == st - - assert cans_echo[0][3] == 0x80 | bus - if cans_loop[0][3] != bus: - print("EXPECTED %d GOT %d" % (bus, cans_loop[0][3])) - assert cans_loop[0][3] == bus - - print("CAN pass", bus, ho) - time.sleep(sleep_duration) - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("-n", type=int, help="Number of test iterations to run") - parser.add_argument("-sleep", type=int, help="Sleep time between tests", default=0) - args = parser.parse_args() - - if args.n is None: - while True: - run_test(sleep_duration=args.sleep) - else: - for _ in range(args.n): - run_test(sleep_duration=args.sleep) diff --git a/tests/usbprotocol/test_comms.py b/tests/usbprotocol/test_comms.py index c08551b7..8efefef7 100755 --- a/tests/usbprotocol/test_comms.py +++ b/tests/usbprotocol/test_comms.py @@ -8,7 +8,7 @@ from panda.tests.libpanda import libpanda_py lpp = libpanda_py.libpanda CHUNK_SIZE = USBPACKET_MAX_SIZE -TX_QUEUES = (lpp.tx1_q, lpp.tx2_q, lpp.tx3_q, lpp.txgmlan_q) +TX_QUEUES = (lpp.tx1_q, lpp.tx2_q, lpp.tx3_q) def unpackage_can_msg(pkt): @@ -33,7 +33,7 @@ class TestPandaComms(unittest.TestCase): lpp.comms_can_reset() def test_tx_queues(self): - for bus in range(4): + for bus in range(len(TX_QUEUES)): message = (0x100, 0, b"test", bus) can_pkt_tx = libpanda_py.make_CANPacket(message[0], message[3], message[2])