90 lines
3.1 KiB
C
90 lines
3.1 KiB
C
/** \file comms.h
|
|
* @brief File for handling all serial requests
|
|
* @author Josh Stewart
|
|
*
|
|
* This file contains all the functions associated with serial comms.
|
|
* This includes sending of live data, sending/receiving current page data, sending CRC values of pages, receiving sensor calibration data etc
|
|
*
|
|
*/
|
|
|
|
#ifndef NEW_COMMS_H
|
|
#define NEW_COMMS_H
|
|
|
|
//Hardcoded TunerStudio addresses/commands for various SD/RTC commands
|
|
#define SD_READWRITE_PAGE 0x11
|
|
#define SD_READFILE_PAGE 0x14
|
|
#define SD_RTC_PAGE 0x07
|
|
|
|
#define SD_READ_STAT_ARG1 0x0000
|
|
#define SD_READ_STAT_ARG2 0x0010
|
|
#define SD_READ_DIR_ARG1 0x0000
|
|
#define SD_READ_DIR_ARG2 0x0202
|
|
#define SD_READ_SEC_ARG1 0x0002
|
|
#define SD_READ_SEC_ARG2 0x0004
|
|
#define SD_READ_STRM_ARG1 0x0004
|
|
#define SD_READ_STRM_ARG2 0x0001
|
|
#define SD_READ_COMP_ARG1 0x0000 //Not used for anything
|
|
#define SD_READ_COMP_ARG2 0x0800
|
|
#define SD_RTC_READ_ARG1 0x024D
|
|
#define SD_RTC_READ_ARG2 0x0008
|
|
|
|
#define SD_WRITE_DO_ARG1 0x0000
|
|
#define SD_WRITE_DO_ARG2 0x0001
|
|
#define SD_WRITE_DIR_ARG1 0x0001
|
|
#define SD_WRITE_DIR_ARG2 0x0002
|
|
#define SD_WRITE_SEC_ARG1 0x0003
|
|
#define SD_WRITE_SEC_ARG2 0x0204
|
|
#define SD_WRITE_COMP_ARG1 0x0005
|
|
#define SD_WRITE_COMP_ARG2 0x0008
|
|
#define SD_ERASEFILE_ARG1 0x0006
|
|
#define SD_ERASEFILE_ARG2 0x0006
|
|
#define SD_SPD_TEST_ARG1 0x0007
|
|
#define SD_SPD_TEST_ARG2 0x0004
|
|
#define SD_RTC_WRITE_ARG1 0x027E
|
|
#define SD_RTC_WRITE_ARG2 0x0009
|
|
|
|
#define SERIAL_CRC_LENGTH 4
|
|
#define SERIAL_LEN_SIZE 2
|
|
#define SERIAL_OVERHEAD_SIZE (SERIAL_LEN_SIZE + SERIAL_CRC_LENGTH) //The overhead for each serial command is 6 bytes. 2 bytes for the length and 4 bytes for the CRC
|
|
#define SERIAL_TIMEOUT 3000 //ms
|
|
|
|
#ifdef RTC_ENABLED
|
|
#define SD_FILE_TRANSMIT_BUFFER_SIZE (2048 + 3)
|
|
extern uint16_t SDcurrentDirChunk;
|
|
extern uint32_t SDreadStartSector;
|
|
extern uint32_t SDreadNumSectors; //Number of sectors to read
|
|
extern uint32_t SDreadCompletedSectors; //Number of sectors that have been read
|
|
#endif
|
|
|
|
//Serial return codes
|
|
#define SERIAL_RC_OK 0x00
|
|
#define SERIAL_RC_REALTIME 0x01
|
|
#define SERIAL_RC_PAGE 0x02
|
|
|
|
#define SERIAL_RC_BURN_OK 0x04
|
|
|
|
#define SERIAL_RC_TIMEOUT 0x80 //Timeout error
|
|
#define SERIAL_RC_CRC_ERR 0x82
|
|
#define SERIAL_RC_UKWN_ERR 0x83 //Unknown command
|
|
#define SERIAL_RC_RANGE_ERR 0x84 //Incorrect range. TS will not retry command
|
|
#define SERIAL_RC_BUSY_ERR 0x85 //TS will wait and retry
|
|
|
|
extern bool serialWriteInProgress;
|
|
extern bool serialReceivePending; /**< Whether or not a serial request has only been partially received. This occurs when a the length has been received in the serial buffer, but not all of the payload or CRC has yet been received. */
|
|
|
|
|
|
void parseSerial();//This is the heart of the Command Line Interpreter. All that needed to be done was to make it human readable.
|
|
void processSerialCommand();
|
|
void sendSerialReturnCode(byte returnCode);
|
|
void sendSerialPayload(void*, uint16_t payloadLength);
|
|
|
|
void generateLiveValues(uint16_t, uint16_t);
|
|
void saveConfig();
|
|
void flushRXbuffer();
|
|
void sendToothLog(uint8_t);
|
|
void commandButtons(int16_t);
|
|
void sendCompositeLog(uint8_t);
|
|
void continueSerialTransmission();
|
|
|
|
#endif // COMMS_H
|