speeduino/speeduino/comms_legacy.h

86 lines
3.2 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 COMMS_H
#define COMMS_H
/** \enum SerialStatus
* @brief The current state of serial communication
* */
enum SerialStatus {
/** No serial comms is in progress */
SERIAL_INACTIVE,
/** A partial write is in progress. */
SERIAL_TRANSMIT_INPROGRESS,
/** A partial write is in progress (legacy send). */
SERIAL_TRANSMIT_INPROGRESS_LEGACY,
/** We are part way through transmitting the tooth log */
SERIAL_TRANSMIT_TOOTH_INPROGRESS,
/** We are part way through transmitting the tooth log (legacy send) */
SERIAL_TRANSMIT_TOOTH_INPROGRESS_LEGACY,
/** We are part way through transmitting the composite log */
SERIAL_TRANSMIT_COMPOSITE_INPROGRESS,
/** We are part way through transmitting the composite log (legacy send) */
SERIAL_TRANSMIT_COMPOSITE_INPROGRESS_LEGACY,
/** 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.
*
* Expectation is that ::serialReceive is called until the status reverts
* to SERIAL_INACTIVE
*/
SERIAL_RECEIVE_INPROGRESS,
/** We are part way through processing a legacy serial commang: call ::serialReceive */
SERIAL_COMMAND_INPROGRESS_LEGACY,
};
/** @brief Current status of serial comms. */
extern SerialStatus serialStatusFlag;
/**
* @brief Is a serial write in progress?
*
* Expectation is that ::serialTransmit is called until this
* returns false
*/
inline bool serialTransmitInProgress(void) {
return serialStatusFlag==SERIAL_TRANSMIT_INPROGRESS
|| serialStatusFlag==SERIAL_TRANSMIT_INPROGRESS_LEGACY
|| serialStatusFlag==SERIAL_TRANSMIT_TOOTH_INPROGRESS
|| serialStatusFlag==SERIAL_TRANSMIT_TOOTH_INPROGRESS_LEGACY
|| serialStatusFlag==SERIAL_TRANSMIT_COMPOSITE_INPROGRESS
|| serialStatusFlag==SERIAL_TRANSMIT_COMPOSITE_INPROGRESS_LEGACY;
}
/**
* @brief Is a non-blocking serial receive operation in progress?
*
* Expectation is the ::serialReceive is called until this
* returns false.
*/
inline bool serialRecieveInProgress(void) {
return serialStatusFlag==SERIAL_RECEIVE_INPROGRESS
|| serialStatusFlag==SERIAL_COMMAND_INPROGRESS_LEGACY;
}
extern bool firstCommsRequest; /**< The number of times the A command has been issued. This is used to track whether a reset has recently been performed on the controller */
extern byte logItemsTransmitted;
extern byte inProgressLength;
void legacySerialCommand(void);//This is the heart of the Command Line Interpreter. All that needed to be done was to make it human readable.
void sendValues(uint16_t offset, uint16_t packetLength, byte cmd, byte portNum);
void sendValuesLegacy(void);
void sendPage(void);
void sendPageASCII(void);
void receiveCalibration(byte tableID);
void testComm(void);
void sendToothLog_legacy(byte startOffset);
void sendCompositeLog_legacy(byte startOffset);
#endif // COMMS_H