Added first documentation
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
# USB Command Handler
|
||||
|
||||
Implementation of command handler for this project.
|
||||
|
||||
|
||||
### ACK
|
||||
|
||||
Every command returns either an ACK or NACK.
|
||||
|
||||
### Commands
|
||||
```c
|
||||
typedef enum {
|
||||
COMMAND_ACK,
|
||||
COMMAND_NACK,
|
||||
LED_TOGGLE,
|
||||
LED_SET,
|
||||
SERVO_SET,
|
||||
SERVO_SET_ALL,
|
||||
ADC_READ_RAW,
|
||||
ADC_READ_RAW_ALL,
|
||||
ADC_READ,
|
||||
ADC_READ_ALL,
|
||||
ADC_SET_READ,
|
||||
DIGITAL_IN,
|
||||
DIGITAL_LEG_OUT,
|
||||
POWER_MONITOR_SET_READ,
|
||||
POWER_MONITOR_READ,
|
||||
SETTINGS_TEST_SAVE,
|
||||
SETTINGS_TEST_READ,
|
||||
|
||||
MOVE_COMMAND_START,
|
||||
// All the commands going to robot thread go here
|
||||
TEST_COMMAND, // 16
|
||||
|
||||
MOVE_COMMAND_END
|
||||
|
||||
} commands_e;
|
||||
```
|
||||
|
||||
### Command Structure
|
||||
|
||||
```c
|
||||
#define COMMAND_PREFIX 0x69
|
||||
#define COMMAND_ID 0x00
|
||||
#define COMMAND_DATA_SIZE 160
|
||||
#define COMMAND_HEADER_SIZE 13
|
||||
|
||||
struct command_message_t {
|
||||
uint8_t prefix;
|
||||
uint8_t length;
|
||||
uint8_t id;
|
||||
uint8_t command;
|
||||
int64_t tick;
|
||||
uint8_t crc;
|
||||
uint8_t data[COMMAND_DATA_SIZE];
|
||||
} __attribute__((packed));
|
||||
```
|
||||
|
||||
### CRC Calculation Function
|
||||
|
||||
```c
|
||||
uint8_t command_calculate_crc(struct command_message_t *msg) {
|
||||
uint32_t sum = 0;
|
||||
uint8_t crc = 0;
|
||||
|
||||
uint8_t *byte_ptr = (uint8_t *)msg;
|
||||
int loop_length = (sizeof(struct command_message_t) - sizeof(msg->data) + msg->length);
|
||||
|
||||
for (int i = 0; i < loop_length; i++) {
|
||||
if (i == (COMMAND_HEADER_SIZE - 1)) { continue; }
|
||||
sum += byte_ptr[i];
|
||||
}
|
||||
|
||||
crc = 0x100 - (sum & 0xff);
|
||||
|
||||
return crc;
|
||||
}
|
||||
```
|
||||
|
||||
### Python test script (AI generated)
|
||||
|
||||
**Command Usage:**
|
||||
|
||||
```bash
|
||||
python3 scripts/send_cmd.py --help
|
||||
```
|
||||
|
||||
This script sends/reads commands
|
||||
Reference in New Issue
Block a user