PIC24 Support Libraries
|
Implementation of the uC data transfer protocol. More...
Go to the source code of this file.
Functions | |
const char * | getReceiveErrorString () |
Returns an error string matching the last error code. | |
Variables | |
XFER_VAR | xferVar [NUM_XFER_VARS] |
A table to hold the state of transfer variables. | |
uint8_t | au8_xferVarWriteable [NUM_XFER_VARS/8+((NUM_XFER_VARS % 8) > 0)] |
static const char * | apsz_errorDesc [NUM_ERROR_CODES] |
Command-finding state machine | |
static CMD_STATE | cmdState |
The current state of the command-finding state machine. | |
static CMD_OUTPUT | cmdOutput |
The current output of the command-finding state machine. | |
void | resetCommandFindMachine () |
CMD_OUTPUT | stepCommandFindMachine (char c_inChar, char *c_outChar) |
Implementation of the uC data transfer protocol.
Definition in file dataXferImpl.c.
Assign a bit in the au8_xferVarWriteable bit field.
u_index | The index of the variable to set. |
b_bitVal | Bit value to set at this index. |
Definition at line 267 of file dataXferImpl.c.
Referenced by specifyVar(), and stepReceiveMachine().
void clearReceiveMachineError | ( | ) |
Clear the current receive machine error status; the caller should therefore handle or report this error to a higher level of the program.
Definition at line 169 of file dataXferImpl.c.
void clearReceiveStruct | ( | ) |
Clear the received data structure, so that no variables are specified.
Definition at line 188 of file dataXferImpl.c.
Referenced by initDataXfer().
|
static |
Free memory associted with a variable.
u_index | A value from 0-NUM_XFER_VARS, unique for each var. |
Definition at line 178 of file dataXferImpl.c.
Referenced by clearReceiveStruct(), and parseVarSpec().
RECEIVE_ERROR getReceiveMachineError | ( | ) |
Return the error last encountered by the receive state machine. See stepReceiveMachine for more information. This also clears the error status.
Definition at line 146 of file dataXferImpl.c.
uint getReceiveMachineIndex | ( | ) |
Return the index output by the receive state machine. See stepReceiveMachine for more information.
Definition at line 141 of file dataXferImpl.c.
BOOL getReceiveMachineIsSpec | ( | ) |
Determine if the last data found by the receive state machine was a specification; if not, it was data. See stepReceiveMachine for more information. PC only.
Definition at line 154 of file dataXferImpl.c.
char getReceiveMachineOutChar | ( | ) |
Return the character output by the receive state machine. See stepReceiveMachine for more information.
Definition at line 137 of file dataXferImpl.c.
RECEIVE_STATE getReceiveMachineState | ( | ) |
Return the current receive machine state. See stepReceiveMachine for more information.
Definition at line 133 of file dataXferImpl.c.
uint getVarIndex | ( | char | c_cmd | ) |
Return the index of a variable in a command byte.
c_cmd | Command byte. |
Definition at line 220 of file dataXferImpl.c.
Referenced by stepReceiveMachine().
uint getVarLength | ( | char | c_cmd | ) |
Return the number of bytes of a variable in a command byte.
c_cmd | Command byte. |
Definition at line 224 of file dataXferImpl.c.
Referenced by stepReceiveMachine().
BOOL isReceiveMachineChar | ( | ) |
Determines if the receive state machine just received a character.
Definition at line 200 of file dataXferImpl.c.
BOOL isReceiveMachineData | ( | ) |
Determines if the receive state machine just received some data.
Definition at line 206 of file dataXferImpl.c.
BOOL isReceiveMachineSpec | ( | ) |
Determines if the receive state machine just received an updated specification. PC only.
Definition at line 213 of file dataXferImpl.c.
Read a bit in the au8_xferVarWriteable bit field.
u_index | The index of the variable to set. |
Definition at line 279 of file dataXferImpl.c.
Referenced by sendVar(), and validateIndex().
RECEIVE_ERROR notifyOfTimeout | ( | ) |
Notify the state machine that a timeout occurred between receiving the previous and next character. A timeout may not lead to an error; for example, between two received data packets or two received characters, timeout are allowed.
Definition at line 361 of file dataXferImpl.c.
|
static |
Parses a received variable spec, stored in au8_varSpecData, assigns fields in xferVar, and reports any errors.
Definition at line 315 of file dataXferImpl.c.
Referenced by stepReceiveMachine().
void resetCommandFindMachine | ( | ) |
Resets the command-finding state machine; see stepCommandFindMachine for more information.
Definition at line 17 of file dataXferImpl.c.
Referenced by resetReceiveMachine().
void resetReceiveMachine | ( | ) |
Reset the receive state machine to its initial state and clear the error status. The outputs are not reset, because they will not be valid until after an invocation of the state machine.
Definition at line 160 of file dataXferImpl.c.
Referenced by initDataXfer(), and notifyOfTimeout().
CMD_OUTPUT stepCommandFindMachine | ( | char | c_inChar, |
char * | c_outChar | ||
) |
The command-finding state machine looks for commands in the data passed to it. Sequences it recognizes:
case START : if (c == CMD_TOKEN) state = WAIT1 else output c as a character case WAIT1 : if (c == CMD_TOKEN) state = WAIT2 if (c == ESCAPED_CMD) state = START, output CMD_TOKEN as a character else output c as a command case WAIT2 : if (c == ESCAPED_CMD) state = START, output command CMD_TOKEN if (c == CMD_TOKEN) output repeated command, remain in this state else output repeated command c
c_inChar | A character input to the machine. |
c_outChar | The character/command output by the machine when the returned state is not CMD_WAIT. |
Definition at line 22 of file dataXferImpl.c.
Referenced by stepReceiveMachine().
RECEIVE_ERROR stepReceiveMachine | ( | char | c_inChar | ) |
This state machine receives data from the microcontroller. It takes a character received plus an indication if a timeout occurred since the last invocation of this function and advances the machine. The machine produces outputs when the returned state is STATE_RECV_START. Outputs:
c_inChar | A character for the state machine to process. |
Definition at line 374 of file dataXferImpl.c.
|
static |
Check that the given index is valid. The index is specified by u_index. On error, the receiveError and receiveState variables are updated.
Definition at line 234 of file dataXferImpl.c.
Referenced by stepReceiveMachine().
Verify that the length of the variable matches the specified length. Otherwise, issue an error. On error, receiveError and receiveState are set.
u_varLength | The length of the variable, in bytes. |
Definition at line 294 of file dataXferImpl.c.
Referenced by stepReceiveMachine().
|
static |
Strings which provide a user-readable version of the error codes in RECEIVE_ERROR.
Definition at line 600 of file dataXferImpl.c.
Referenced by getReceiveErrorString().
|
static |
Temporary storage for a variable spec being received, with enough additional space to terminate 3 unterminated strings for safety.
Definition at line 307 of file dataXferImpl.c.
Referenced by parseVarSpec(), and stepReceiveMachine().
uint8_t au8_xferVarWriteable[NUM_XFER_VARS/8+((NUM_XFER_VARS % 8) > 0)] |
An array of isWriteable bits for each var. Each bit is true if the PC is allowed to change this variable; false otherwise. This does NOT restrict the microcontroller to read-only access to this variable.
Definition at line 101 of file dataXferImpl.c.
Referenced by assignBit(), clearReceiveStruct(), and isVarWriteable().
|
static |
True if the data just received by the receive state machine was a specification. See stepReceiveMachine for more information.
Definition at line 126 of file dataXferImpl.c.
Referenced by getReceiveMachineIsSpec(), and stepReceiveMachine().
|
static |
A character output by the receive state machine. See stepReceiveMachine for more information.
Definition at line 112 of file dataXferImpl.c.
Referenced by getReceiveMachineOutChar(), and stepReceiveMachine().
|
static |
An error code produced by the receive state machine. See stepReceiveMachine for more information.
Definition at line 121 of file dataXferImpl.c.
Referenced by clearReceiveMachineError(), getReceiveErrorString(), getReceiveMachineError(), isReceiveMachineChar(), isReceiveMachineData(), isReceiveMachineSpec(), notifyOfTimeout(), resetReceiveMachine(), stepReceiveMachine(), validateIndex(), and validateLength().
|
static |
The index of a data item; updated by the receive state machine, or CHAR_RECEIVED_INDEX if a character was received. See stepReceiveMachine for more information.
Definition at line 117 of file dataXferImpl.c.
Referenced by clearReceiveStruct(), getReceiveMachineIndex(), isReceiveMachineChar(), isReceiveMachineData(), isReceiveMachineSpec(), parseVarSpec(), stepReceiveMachine(), validateIndex(), and validateLength().