From 5db97bceedead256e350dc18d87ad621ee7643de Mon Sep 17 00:00:00 2001 From: Lukasz Juranek Date: Mon, 20 Mar 2017 11:43:34 +0100 Subject: [PATCH] Terminator switch command addtiion --- .cproject | 212 ++++++++++++++++---------------- .settings/language.settings.xml | 2 +- Src/slcan/slcan.c | 59 +++++---- Src/slcan/slcan.h | 2 +- Src/slcan/slcan_additional.c | 4 +- 5 files changed, 146 insertions(+), 133 deletions(-) diff --git a/.cproject b/.cproject index 7bca21a..c061e40 100644 --- a/.cproject +++ b/.cproject @@ -1,178 +1,180 @@ - + - + - - - - + + + + - - + - - - - + + + + - - - + + + - + - + - + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - - + + diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index eae156a..8227c8f 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -4,7 +4,7 @@ - + diff --git a/Src/slcan/slcan.c b/Src/slcan/slcan.c index 1e2389b..449d795 100644 --- a/Src/slcan/slcan.c +++ b/Src/slcan/slcan.c @@ -29,6 +29,8 @@ static uint8_t state = STATE_CONFIG; static uint8_t timestamping = 0; +static uint8_t terminator = SLCAN_CR; + extern CAN_HandleTypeDef hcan; uint8_t sl_frame[32]; @@ -203,26 +205,35 @@ void slCanCheckCommand() return ; } switch (line[0]) { + case 'a': + { + if (terminator == SLCAN_CR) + terminator = SLCAN_LR; + else + terminator = SLCAN_CR; + result = terminator; + break; + } case 'S': // Setup with standard CAN bitrates if (state == STATE_CONFIG) { switch (line[1]) { - case '0': slcanSetCANBaudRate(CAN_BR_10K); result = SLCAN_CR; break; - case '1': slcanSetCANBaudRate(CAN_BR_20K); result = SLCAN_CR; break; - case '2': slcanSetCANBaudRate(CAN_BR_50K); result = SLCAN_CR; break; - case '3': slcanSetCANBaudRate(CAN_BR_100K); result = SLCAN_CR; break; - case '4': slcanSetCANBaudRate(CAN_BR_125K); result = SLCAN_CR; break; - case '5': slcanSetCANBaudRate(CAN_BR_250K); result = SLCAN_CR; break; - case '6': slcanSetCANBaudRate(CAN_BR_500K); result = SLCAN_CR; break; - case '7': slcanSetCANBaudRate(CAN_BR_800K); result = SLCAN_CR; break; - case '8': slcanSetCANBaudRate(CAN_BR_1M); result = SLCAN_CR; break; + case '0': slcanSetCANBaudRate(CAN_BR_10K); result = terminator; break; + case '1': slcanSetCANBaudRate(CAN_BR_20K); result = terminator; break; + case '2': slcanSetCANBaudRate(CAN_BR_50K); result = terminator; break; + case '3': slcanSetCANBaudRate(CAN_BR_100K); result = terminator; break; + case '4': slcanSetCANBaudRate(CAN_BR_125K); result = terminator; break; + case '5': slcanSetCANBaudRate(CAN_BR_250K); result = terminator; break; + case '6': slcanSetCANBaudRate(CAN_BR_500K); result = terminator; break; + case '7': slcanSetCANBaudRate(CAN_BR_800K); result = terminator; break; + case '8': slcanSetCANBaudRate(CAN_BR_1M); result = terminator; break; } } break; case 'G': // Read given MCP2515 register case 'W': - result = SLCAN_CR; + result = terminator; break; case 's': // Setup with user defined timing settings for CNF1/CNF2/CNF3 @@ -237,7 +248,7 @@ void slCanCheckCommand() hcan.Init.BS2 = bs2; hcan.Init.Prescaler = pre; CANInit(); - result = SLCAN_CR; + result = terminator; } } break; @@ -247,7 +258,7 @@ void slCanCheckCommand() slcanSetOutputChar('V'); slcanSetOutputAsHex(VERSION_HARDWARE_MAJOR); slcanSetOutputAsHex(VERSION_HARDWARE_MINOR); - result = SLCAN_CR; + result = terminator; } break; case 'v': // Get firmware version @@ -256,7 +267,7 @@ void slCanCheckCommand() slcanSetOutputChar('v'); slcanSetOutputAsHex(VERSION_FIRMWARE_MAJOR); slcanSetOutputAsHex(VERSION_FIRMWARE_MINOR); - result = SLCAN_CR; + result = terminator; } break; case 'N': // Get serial number @@ -266,7 +277,7 @@ void slCanCheckCommand() slcanSetOutputAsHex((uint8_t)(serialNumber>>8)); slcanSetOutputAsHex((uint8_t)(serialNumber>>16)); slcanSetOutputAsHex((uint8_t)(serialNumber>>24)); - result = SLCAN_CR; + result = terminator; } break; case 'o': @@ -280,7 +291,7 @@ void slCanCheckCommand() HAL_NVIC_EnableIRQ(CEC_CAN_IRQn); // clock_reset(); state = STATE_OPEN; - result = SLCAN_CR; + result = terminator; } } break; @@ -291,7 +302,7 @@ void slCanCheckCommand() HAL_NVIC_EnableIRQ(CEC_CAN_IRQn); CANInit(); state = STATE_OPEN; - result = SLCAN_CR; + result = terminator; } break; case 'L': // Open CAN channel in listen-only mode @@ -301,7 +312,7 @@ void slCanCheckCommand() HAL_NVIC_EnableIRQ(CEC_CAN_IRQn); CANInit(); state = STATE_LISTEN; - result = SLCAN_CR; + result = terminator; } break; case 'C': // Close CAN channel @@ -310,7 +321,7 @@ void slCanCheckCommand() HAL_NVIC_DisableIRQ(CEC_CAN_IRQn); // todo into slleep state = STATE_CONFIG; - result = SLCAN_CR; + result = terminator; } break; case 'r': // Transmit standard RTR (11 bit) frame @@ -322,7 +333,7 @@ void slCanCheckCommand() if (transmitStd(line) == HAL_OK) { if (line[0] < 'Z') slcanSetOutputChar('Z'); else slcanSetOutputChar('z'); - result = SLCAN_CR; + result = terminator; } } break; @@ -336,7 +347,7 @@ void slCanCheckCommand() // if (flags & 0x20) status |= 0x80; // bus error slcanSetOutputChar('F'); slcanSetOutputAsHex(status); - result = SLCAN_CR; + result = terminator; } break; case 'Z': // Set time stamping @@ -344,7 +355,7 @@ void slCanCheckCommand() unsigned long stamping; if (parseHex(&line[1], 1, &stamping)) { timestamping = (stamping != 0); - result = SLCAN_CR; + result = terminator; } } break; @@ -353,7 +364,7 @@ void slCanCheckCommand() if (line[1] == 'd') // disable all filtering { slcanClearAllFilters(); - result = SLCAN_CR; + result = terminator; slcanSetOutputChar('M'); } else { @@ -395,7 +406,7 @@ void slCanCheckCommand() slcanSetOutputChar('M'); if (HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) == HAL_OK) - result = SLCAN_CR; + result = terminator; } break; case 'b': @@ -461,7 +472,7 @@ uint8_t slcanReciveCanFrame(CanRxMsgTypeDef *pRxMsg) slcanSetOutputAsHex(pRxMsg->Data[i]); } } - slcanSetOutputChar(SLCAN_CR); + slcanSetOutputChar(terminator); slcanOutputFlush(); return 0; } diff --git a/Src/slcan/slcan.h b/Src/slcan/slcan.h index 6a35273..a57474d 100644 --- a/Src/slcan/slcan.h +++ b/Src/slcan/slcan.h @@ -15,7 +15,7 @@ #define VERSION_FIRMWARE_MAJOR 2 -#define VERSION_FIRMWARE_MINOR 0 +#define VERSION_FIRMWARE_MINOR 1 #define VERSION_HARDWARE_MAJOR 1 #define VERSION_HARDWARE_MINOR 1 diff --git a/Src/slcan/slcan_additional.c b/Src/slcan/slcan_additional.c index 77468ce..3899fb4 100644 --- a/Src/slcan/slcan_additional.c +++ b/Src/slcan/slcan_additional.c @@ -12,13 +12,13 @@ extern CAN_HandleTypeDef hcan; extern void Error_Handler(void); - +extern IWDG_HandleTypeDef hiwdg; HAL_StatusTypeDef CANInit(void) { int i = 0; while (HAL_CAN_Init(&hcan) == HAL_TIMEOUT) { - if ((i++) == 15) return HAL_BUSY; + HAL_IWDG_Refresh(&hiwdg); } return HAL_OK; }