mirror of https://github.com/FOME-Tech/fome-fw.git
Hellen says merge #1772 TS
This commit is contained in:
parent
8831da2e3b
commit
58be12bf0e
|
@ -497,7 +497,6 @@ void runBinaryProtocolLoop(ts_channel_s *tsChannel) {
|
||||||
logMsg("received %d\r\n", received);
|
logMsg("received %d\r\n", received);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (received != 1) {
|
if (received != 1) {
|
||||||
// tunerStudioError("ERROR: no command");
|
// tunerStudioError("ERROR: no command");
|
||||||
#if EFI_BLUETOOTH_SETUP
|
#if EFI_BLUETOOTH_SETUP
|
||||||
|
|
|
@ -23,9 +23,19 @@ extern LoggingWithStorage tsLogger;
|
||||||
#include "usbconsole.h"
|
#include "usbconsole.h"
|
||||||
|
|
||||||
#if HAL_USE_SERIAL_USB
|
#if HAL_USE_SERIAL_USB
|
||||||
extern SerialUSBDriver SDU1;
|
#define SERIAL_USB_DRIVER SerialUSBDriver
|
||||||
|
#define TS_USB_DEVICE EFI_CONSOLE_USB_DEVICE // SDU1
|
||||||
#endif /* HAL_USE_SERIAL_USB */
|
#endif /* HAL_USE_SERIAL_USB */
|
||||||
|
|
||||||
|
#ifdef TS_USB_DEVICE
|
||||||
|
extern SERIAL_USB_DRIVER TS_USB_DEVICE;
|
||||||
|
#endif /* TS_USB_DEVICE */
|
||||||
|
|
||||||
|
#ifdef TS_CAN_DEVICE
|
||||||
|
#include "tunerstudio_can.h"
|
||||||
|
#endif /* TS_CAN_DEVICE */
|
||||||
|
|
||||||
|
|
||||||
#if TS_UART_DMA_MODE
|
#if TS_UART_DMA_MODE
|
||||||
// Async. FIFO buffer takes some RAM...
|
// Async. FIFO buffer takes some RAM...
|
||||||
static uart_dma_s tsUartDma;
|
static uart_dma_s tsUartDma;
|
||||||
|
@ -77,8 +87,10 @@ static UARTConfig tsUartConfig = {
|
||||||
.speed = 0, .cr1 = 0, .cr2 = 0/*USART_CR2_STOP1_BITS*/ | USART_CR2_LINEN, .cr3 = 0,
|
.speed = 0, .cr1 = 0, .cr2 = 0/*USART_CR2_STOP1_BITS*/ | USART_CR2_LINEN, .cr3 = 0,
|
||||||
.timeout_cb = NULL, .rxhalf_cb = NULL
|
.timeout_cb = NULL, .rxhalf_cb = NULL
|
||||||
};
|
};
|
||||||
#else
|
#elif defined(TS_SERIAL_DEVICE)
|
||||||
static SerialConfig tsSerialConfig = { .speed = 0, .cr1 = 0, .cr2 = USART_CR2_STOP1_BITS | USART_CR2_LINEN, .cr3 = 0 };
|
static SerialConfig tsSerialConfig = { .speed = 0, .cr1 = 0, .cr2 = USART_CR2_STOP1_BITS | USART_CR2_LINEN, .cr3 = 0 };
|
||||||
|
#elif defined(TS_CAN_DEVICE)
|
||||||
|
static CANConfig tsCanConfig = { CAN_MCR_ABOM | CAN_MCR_AWUM | CAN_MCR_TXFP, CAN_BTR_500 };
|
||||||
#endif /* TS_UART_DMA_MODE */
|
#endif /* TS_UART_DMA_MODE */
|
||||||
#endif /* EFI_PROD_CODE */
|
#endif /* EFI_PROD_CODE */
|
||||||
|
|
||||||
|
@ -87,7 +99,7 @@ void startTsPort(ts_channel_s *tsChannel) {
|
||||||
tsChannel->channel = (BaseChannel *) NULL;
|
tsChannel->channel = (BaseChannel *) NULL;
|
||||||
|
|
||||||
#if EFI_PROD_CODE
|
#if EFI_PROD_CODE
|
||||||
#if defined(CONSOLE_USB_DEVICE)
|
#if defined(TS_USB_DEVICE)
|
||||||
print("TunerStudio over USB serial");
|
print("TunerStudio over USB serial");
|
||||||
/**
|
/**
|
||||||
* This method contains a long delay, that's the reason why this is not done on the main thread
|
* This method contains a long delay, that's the reason why this is not done on the main thread
|
||||||
|
@ -95,9 +107,9 @@ void startTsPort(ts_channel_s *tsChannel) {
|
||||||
*/
|
*/
|
||||||
usb_serial_start();
|
usb_serial_start();
|
||||||
// if console uses UART then TS uses USB
|
// if console uses UART then TS uses USB
|
||||||
tsChannel->channel = (BaseChannel *) &CONSOLE_USB_DEVICE;
|
tsChannel->channel = (BaseChannel *) &TS_USB_DEVICE;
|
||||||
return;
|
return;
|
||||||
#endif /* CONSOLE_USB_DEVICE */
|
#endif /* TS_USB_DEVICE */
|
||||||
#if defined(TS_UART_DEVICE) || defined(TS_SERIAL_DEVICE)
|
#if defined(TS_UART_DEVICE) || defined(TS_SERIAL_DEVICE)
|
||||||
if (CONFIG(useSerialPort)) {
|
if (CONFIG(useSerialPort)) {
|
||||||
|
|
||||||
|
@ -136,6 +148,19 @@ void startTsPort(ts_channel_s *tsChannel) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* TS_UART_DMA_MODE || TS_UART_MODE */
|
#endif /* TS_UART_DMA_MODE || TS_UART_MODE */
|
||||||
|
#if defined(TS_CAN_DEVICE)
|
||||||
|
/*if (CONFIG(useCanForTs))*/ {
|
||||||
|
print("TunerStudio over CAN");
|
||||||
|
|
||||||
|
efiSetPadMode("ts can rx", GPIOG_13/*CONFIG(canRxPin)*/, PAL_MODE_ALTERNATE(TS_CAN_AF)); // CAN2_RX2_0
|
||||||
|
efiSetPadMode("ts can tx", GPIOG_14/*CONFIG(canTxPin)*/, PAL_MODE_ALTERNATE(TS_CAN_AF)); // CAN2_TX2_0
|
||||||
|
|
||||||
|
canStart(&TS_CAN_DEVICE, &tsCanConfig);
|
||||||
|
canInit(&TS_CAN_DEVICE);
|
||||||
|
|
||||||
|
//tsChannel->channel = (BaseChannel *) &TS_CAN_DEVICE;
|
||||||
|
}
|
||||||
|
#endif /* TS_CAN_DEVICE */
|
||||||
#else /* EFI_PROD_CODE */
|
#else /* EFI_PROD_CODE */
|
||||||
tsChannel->channel = (BaseChannel *) TS_SIMULATOR_PORT;
|
tsChannel->channel = (BaseChannel *) TS_SIMULATOR_PORT;
|
||||||
#endif /* EFI_PROD_CODE */
|
#endif /* EFI_PROD_CODE */
|
||||||
|
@ -157,6 +182,11 @@ bool stopTsPort(ts_channel_s *tsChannel) {
|
||||||
sdStop(TS_SERIAL_DEVICE);
|
sdStop(TS_SERIAL_DEVICE);
|
||||||
#endif /* TS_SERIAL_DEVICE */
|
#endif /* TS_SERIAL_DEVICE */
|
||||||
}
|
}
|
||||||
|
#if defined(TS_CAN_DEVICE)
|
||||||
|
/*if (CONFIG(useCanForTs))*/ {
|
||||||
|
canStop(&TS_CAN_DEVICE);
|
||||||
|
}
|
||||||
|
#endif /* TS_CAN_DEVICE */
|
||||||
tsChannel->channel = (BaseChannel *) NULL;
|
tsChannel->channel = (BaseChannel *) NULL;
|
||||||
return true;
|
return true;
|
||||||
#else /* EFI_PROD_CODE */
|
#else /* EFI_PROD_CODE */
|
||||||
|
@ -175,6 +205,10 @@ void sr5WriteData(ts_channel_s *tsChannel, const uint8_t * buffer, int size) {
|
||||||
UNUSED(tsChannel);
|
UNUSED(tsChannel);
|
||||||
int transferred = size;
|
int transferred = size;
|
||||||
uartSendTimeout(TS_UART_DEVICE, (size_t *)&transferred, buffer, BINARY_IO_TIMEOUT);
|
uartSendTimeout(TS_UART_DEVICE, (size_t *)&transferred, buffer, BINARY_IO_TIMEOUT);
|
||||||
|
#elif defined(TS_CAN_DEVICE)
|
||||||
|
UNUSED(tsChannel);
|
||||||
|
int transferred = size;
|
||||||
|
canAddToTxStreamTimeout(&TS_CAN_DEVICE, (size_t *)&transferred, buffer, BINARY_IO_TIMEOUT);
|
||||||
#else
|
#else
|
||||||
if (tsChannel->channel == nullptr)
|
if (tsChannel->channel == nullptr)
|
||||||
return;
|
return;
|
||||||
|
@ -213,6 +247,11 @@ int sr5ReadDataTimeout(ts_channel_s *tsChannel, uint8_t * buffer, int size, int
|
||||||
size_t received = (size_t)size;
|
size_t received = (size_t)size;
|
||||||
uartReceiveTimeout(TS_UART_DEVICE, &received, buffer, timeout);
|
uartReceiveTimeout(TS_UART_DEVICE, &received, buffer, timeout);
|
||||||
return (int)received;
|
return (int)received;
|
||||||
|
#elif defined(TS_CAN_DEVICE)
|
||||||
|
UNUSED(tsChannel);
|
||||||
|
size_t received = (size_t)size;
|
||||||
|
canStreamReceiveTimeout(&TS_CAN_DEVICE, &received, buffer, timeout);
|
||||||
|
return (int)received;
|
||||||
#else /* TS_UART_DMA_MODE */
|
#else /* TS_UART_DMA_MODE */
|
||||||
if (tsChannel->channel == nullptr)
|
if (tsChannel->channel == nullptr)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -232,6 +271,19 @@ void sr5WriteCrcPacket(ts_channel_s *tsChannel, const uint8_t responseCode, cons
|
||||||
uint8_t *writeBuffer = tsChannel->writeBuffer;
|
uint8_t *writeBuffer = tsChannel->writeBuffer;
|
||||||
uint8_t *crcBuffer = &tsChannel->writeBuffer[3];
|
uint8_t *crcBuffer = &tsChannel->writeBuffer[3];
|
||||||
|
|
||||||
|
#if defined(TS_CAN_DEVICE) && defined(TS_CAN_DEVICE_SHORT_PACKETS_IN_ONE_FRAME)
|
||||||
|
// a special case for short packets: we can sent them in 1 frame, without CRC & size,
|
||||||
|
// because the CAN protocol is already protected by its own checksum.
|
||||||
|
if ((size + 1) <= 7) {
|
||||||
|
sr5WriteData(tsChannel, &responseCode, 1); // header without size
|
||||||
|
if (size > 0) {
|
||||||
|
sr5WriteData(tsChannel, (const uint8_t*)buf, size); // body
|
||||||
|
}
|
||||||
|
sr5FlushData(tsChannel);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif /* TS_CAN_DEVICE */
|
||||||
|
|
||||||
*(uint16_t *) writeBuffer = SWAP_UINT16(size + 1); // packet size including command
|
*(uint16_t *) writeBuffer = SWAP_UINT16(size + 1); // packet size including command
|
||||||
*(uint8_t *) (writeBuffer + 2) = responseCode;
|
*(uint8_t *) (writeBuffer + 2) = responseCode;
|
||||||
|
|
||||||
|
@ -246,14 +298,17 @@ void sr5WriteCrcPacket(ts_channel_s *tsChannel, const uint8_t responseCode, cons
|
||||||
sr5WriteData(tsChannel, (const uint8_t*)buf, size); // body
|
sr5WriteData(tsChannel, (const uint8_t*)buf, size); // body
|
||||||
}
|
}
|
||||||
sr5WriteData(tsChannel, crcBuffer, 4); // CRC footer
|
sr5WriteData(tsChannel, crcBuffer, 4); // CRC footer
|
||||||
|
sr5FlushData(tsChannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sr5SendResponse(ts_channel_s *tsChannel, ts_response_format_e mode, const uint8_t * buffer, int size) {
|
void sr5SendResponse(ts_channel_s *tsChannel, ts_response_format_e mode, const uint8_t * buffer, int size) {
|
||||||
if (mode == TS_CRC) {
|
if (mode == TS_CRC) {
|
||||||
sr5WriteCrcPacket(tsChannel, TS_RESPONSE_OK, buffer, size);
|
sr5WriteCrcPacket(tsChannel, TS_RESPONSE_OK, buffer, size);
|
||||||
} else {
|
} else {
|
||||||
if (size > 0)
|
if (size > 0) {
|
||||||
sr5WriteData(tsChannel, buffer, size);
|
sr5WriteData(tsChannel, buffer, size);
|
||||||
|
sr5FlushData(tsChannel);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,3 +322,10 @@ bool sr5IsReady(ts_channel_s *tsChannel) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void sr5FlushData(ts_channel_s *tsChannel) {
|
||||||
|
#if defined(TS_CAN_DEVICE)
|
||||||
|
UNUSED(tsChannel);
|
||||||
|
canFlushTxStream(&TS_CAN_DEVICE);
|
||||||
|
#endif /* TS_CAN_DEVICE */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -88,10 +88,6 @@ typedef struct {
|
||||||
// todo: double-check this
|
// todo: double-check this
|
||||||
#define CRC_WRAPPING_SIZE (CRC_VALUE_SIZE + 3)
|
#define CRC_WRAPPING_SIZE (CRC_VALUE_SIZE + 3)
|
||||||
|
|
||||||
#if HAL_USE_SERIAL_USB
|
|
||||||
#define CONSOLE_USB_DEVICE SDU1
|
|
||||||
#endif /* HAL_USE_SERIAL_USB */
|
|
||||||
|
|
||||||
void startTsPort(ts_channel_s *tsChannel);
|
void startTsPort(ts_channel_s *tsChannel);
|
||||||
bool stopTsPort(ts_channel_s *tsChannel);
|
bool stopTsPort(ts_channel_s *tsChannel);
|
||||||
|
|
||||||
|
@ -107,5 +103,6 @@ void sr5SendResponse(ts_channel_s *tsChannel, ts_response_format_e mode, const u
|
||||||
int sr5ReadData(ts_channel_s *tsChannel, uint8_t * buffer, int size);
|
int sr5ReadData(ts_channel_s *tsChannel, uint8_t * buffer, int size);
|
||||||
int sr5ReadDataTimeout(ts_channel_s *tsChannel, uint8_t * buffer, int size, int timeout);
|
int sr5ReadDataTimeout(ts_channel_s *tsChannel, uint8_t * buffer, int size, int timeout);
|
||||||
bool sr5IsReady(ts_channel_s *tsChannel);
|
bool sr5IsReady(ts_channel_s *tsChannel);
|
||||||
|
void sr5FlushData(ts_channel_s *tsChannel);
|
||||||
|
|
||||||
#endif /* CONSOLE_TUNERSTUDIO_TUNERSTUDIO_IO_H_ */
|
#endif /* CONSOLE_TUNERSTUDIO_TUNERSTUDIO_IO_H_ */
|
||||||
|
|
|
@ -33,9 +33,15 @@ EXTERN_ENGINE;
|
||||||
#if HAL_USE_SERIAL_USB
|
#if HAL_USE_SERIAL_USB
|
||||||
#include "usbcfg.h"
|
#include "usbcfg.h"
|
||||||
#include "usbconsole.h"
|
#include "usbconsole.h"
|
||||||
extern SerialUSBDriver SDU1;
|
#define EFI_CONSOLE_USB_DEVICE SDU1
|
||||||
|
#define SERIAL_USB_DRIVER SerialUSBDriver
|
||||||
#endif /* HAL_USE_SERIAL_USB */
|
#endif /* HAL_USE_SERIAL_USB */
|
||||||
|
|
||||||
|
#ifdef EFI_CONSOLE_USB_DEVICE
|
||||||
|
extern SERIAL_USB_DRIVER EFI_CONSOLE_USB_DEVICE;
|
||||||
|
#endif /* EFI_CONSOLE_USB_DEVICE */
|
||||||
|
|
||||||
|
|
||||||
// 10 seconds
|
// 10 seconds
|
||||||
#define CONSOLE_WRITE_TIMEOUT 10000
|
#define CONSOLE_WRITE_TIMEOUT 10000
|
||||||
|
|
||||||
|
@ -201,11 +207,11 @@ static const BaseChannel uartChannel = { .vmt = &uartChannelVmt };
|
||||||
#if EFI_PROD_CODE || EFI_EGT
|
#if EFI_PROD_CODE || EFI_EGT
|
||||||
|
|
||||||
bool isUsbSerial(BaseChannel * channel) {
|
bool isUsbSerial(BaseChannel * channel) {
|
||||||
#if HAL_USE_SERIAL_USB
|
#if defined(EFI_CONSOLE_USB_DEVICE)
|
||||||
return channel == (BaseChannel *) &CONSOLE_USB_DEVICE;
|
return channel == (BaseChannel *) &EFI_CONSOLE_USB_DEVICE;
|
||||||
#else
|
#else
|
||||||
return false;
|
return false;
|
||||||
#endif
|
#endif /* EFI_CONSOLE_USB_DEVICE */
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseChannel * getConsoleChannel(void) {
|
BaseChannel * getConsoleChannel(void) {
|
||||||
|
@ -217,11 +223,11 @@ BaseChannel * getConsoleChannel(void) {
|
||||||
return (BaseChannel *) &uartChannel;
|
return (BaseChannel *) &uartChannel;
|
||||||
#endif /* EFI_CONSOLE_UART_DEVICE */
|
#endif /* EFI_CONSOLE_UART_DEVICE */
|
||||||
|
|
||||||
#if HAL_USE_SERIAL_USB
|
#if defined(EFI_CONSOLE_USB_DEVICE)
|
||||||
return (BaseChannel *) &CONSOLE_USB_DEVICE;
|
return (BaseChannel *) &EFI_CONSOLE_USB_DEVICE;
|
||||||
#else
|
#else
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif /* HAL_USE_SERIAL_USB */
|
#endif /* EFI_CONSOLE_USB_DEVICE */
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isCommandLineConsoleReady(void) {
|
bool isCommandLineConsoleReady(void) {
|
||||||
|
@ -266,6 +272,16 @@ static Logging *logger;
|
||||||
void startConsole(Logging *sharedLogger, CommandHandler console_line_callback_p) {
|
void startConsole(Logging *sharedLogger, CommandHandler console_line_callback_p) {
|
||||||
logger = sharedLogger;
|
logger = sharedLogger;
|
||||||
console_line_callback = console_line_callback_p;
|
console_line_callback = console_line_callback_p;
|
||||||
|
#if 0
|
||||||
|
#if (defined(EFI_CONSOLE_USB_DEVICE) && ! EFI_SIMULATOR)
|
||||||
|
/**
|
||||||
|
* This method contains a long delay, that's the reason why this is not done on the main thread
|
||||||
|
* TODO: actually now with some refactoring this IS on the main thread :(
|
||||||
|
*/
|
||||||
|
usb_serial_start();
|
||||||
|
isSerialConsoleStarted = true;
|
||||||
|
#endif /* EFI_CONSOLE_USB_DEVICE */
|
||||||
|
#endif
|
||||||
|
|
||||||
#if (defined(EFI_CONSOLE_SERIAL_DEVICE) && ! EFI_SIMULATOR)
|
#if (defined(EFI_CONSOLE_SERIAL_DEVICE) && ! EFI_SIMULATOR)
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue