fome-fw/firmware/console/binary/tunerstudio_io.h

80 lines
2.0 KiB
C
Raw Normal View History

2015-07-10 06:01:56 -07:00
/**
* @file tunerstudio_io.h
2020-05-25 09:55:26 -07:00
* @file TS protocol commands and methods are here
2015-07-10 06:01:56 -07:00
*
* @date Mar 8, 2015
2020-01-13 18:57:43 -08:00
* @author Andrey Belomutskiy, (c) 2012-2020
2015-07-10 06:01:56 -07:00
*/
2020-04-01 16:00:56 -07:00
#pragma once
2018-09-16 19:25:17 -07:00
#include "global.h"
2015-07-10 06:01:56 -07:00
#if EFI_USB_SERIAL
2015-07-10 06:01:56 -07:00
#include "usbconsole.h"
#endif // EFI_USB_SERIAL
2020-09-09 11:35:01 -07:00
#if EFI_PROD_CODE
2015-07-10 06:01:56 -07:00
#include "pin_repository.h"
#endif
typedef enum {
TS_PLAIN = 0,
TS_CRC = 1
} ts_response_format_e;
class TsChannelBase {
public:
// Virtual functions - implement these for your underlying transport
virtual void write(const uint8_t* buffer, size_t size) = 0;
virtual size_t readTimeout(uint8_t* buffer, size_t size, int timeout) = 0;
virtual void flush() = 0;
virtual bool isReady() = 0;
// Base functions that use the above virtual implementation
size_t read(uint8_t* buffer, size_t size);
void writeCrcPacket(uint8_t responseCode, const uint8_t* buf, size_t size);
void sendResponse(ts_response_format_e mode, const uint8_t * buffer, int size);
2015-08-22 10:01:35 -07:00
/**
2017-06-20 21:16:19 -07:00
* See 'blockingFactor' in rusefi.ini
2015-08-22 10:01:35 -07:00
*/
char scratchBuffer[BLOCKING_FACTOR + 30];
2020-06-21 13:37:33 -07:00
bool wasReady = false;
private:
void writeCrcPacketSmall(uint8_t responseCode, const uint8_t* buf, size_t size);
void writeCrcPacketLarge(uint8_t responseCode, const uint8_t* buf, size_t size);
2020-06-21 13:37:33 -07:00
};
2015-07-10 06:01:56 -07:00
struct ts_channel_s : public TsChannelBase {
void write(const uint8_t* buffer, size_t size) override;
size_t readTimeout(uint8_t* buffer, size_t size, int timeout) override;
void flush() override;
bool isReady() override;
#if !EFI_UNIT_TEST
BaseChannel * channel = nullptr;
#endif
#if TS_UART_DMA_MODE || PRIMARY_UART_DMA_MODE || TS_UART_MODE
UARTDriver *uartp = nullptr;
#endif // TS_UART_DMA_MODE
};
2015-07-10 06:01:56 -07:00
#define CRC_VALUE_SIZE 4
// todo: double-check this
#define CRC_WRAPPING_SIZE (CRC_VALUE_SIZE + 3)
2017-05-23 10:10:43 -07:00
void startTsPort(ts_channel_s *tsChannel);
bool stopTsPort(ts_channel_s *tsChannel);
2017-05-23 10:10:43 -07:00
// that's 1 second
2019-01-28 17:00:17 -08:00
#define BINARY_IO_TIMEOUT TIME_MS2I(1000)
2015-07-10 06:01:56 -07:00
2017-05-23 11:54:40 -07:00
// that's 1 second
2019-01-28 17:00:17 -08:00
#define SR5_READ_TIMEOUT TIME_MS2I(1000)
void sendOkResponse(TsChannelBase *tsChannel, ts_response_format_e mode);