Overview¶
The Gramophone is a Raw-HID (Human Interface Device). It can send and receive 64 byte long packets (byte arrays). Numbers that take up multiple bytes are encoded in a little endian manner.
If you are implementing communication in Python you can use the GramophoneTools.Comms.Gramophone.Packet class to construct a packet.
Note: Some communication modules require a 65 byte long packet. In this case the extra byte should be in the begining and equal to 0.
Packet structure¶
Each of the sent and received packets have a the following structure:
- packet[0:2] - Target
- The 2 byte adress of the target of the packet. Can be anything. The response packet will have this as its Source
- packet[2:4] - Source
- The 2 byte adress of the source of the packet. Can be anything. The response packet will have this as its Target
- packet[4] - MSN
- A single byte that can be used for identification. The response packet will have the same MSN.
- packet[5] - CMD
- The 1 byte ID of the command. See commands below.
- packet[6] - Payload length
- A single byte that holds the length of the payload. The payload will only be evaluated to whis length.
- packet[7:64] - Payload
- The payload of the packet.
Commands¶
The possible user commands (values for packet[6]) are the following:
- 0x00 - Ping
- Whatever payload is sent with this command will be sent back as a response.
- 0x01 - OK response
- This is the command sent back after writing a parameter successfuly.
- 0x02 - FAILED response
- This is the command sent back after writing a parameter failed. The payload is the errorcode (see below).
- 0x04 - Get firmware info
- Get information about the firmware. The structure of the reply is explained below.
- 0x05 - Device state
- Check the state of the device. The device should be in 0x01 state for usage. The 0x00 state is for setup.
- 0x06 - Store
- Save persistent variables into the FLASH.
- 0x07 - Restore
- Load persistent variables from the FLASH.
- 0x08 - Get product info
- Get information about the product. The structure of the reply is explained below.
- 0x0B - Read parameter(s)
- Read the value of the parameters given in the payload. The list of parameters are given below. More that one parameter can be read in one command. The order of the values in the response will be the same as the order of the parameters in the payload of this command.
- 0x0C - Write parameter
- Write the parameter given by the first byte of the payload with the value that follows it.
Error codes¶
The codes received in the payload of a FAILED response packet can be the following:
- 0x00 - PACKET_FAIL_UNKNOWNCMD
- Unknown command.
- 0x01 - PACKET_FAIL_INVALIDCMDSYNTAX
- Invalid syntax.
- 0x04 - PACKET_FAIL_INVALIDPARAMSYNTAX
- Invaid parameter syntax.
- 0x05 - PACKET_FAIL_RANGEERROR
- Parameter out of range.
- 0x06 - PACKET_FAIL_PARAMNOTFOUND
- Parameter not found.
- 0x07 - PACKET_FAIL_VALIDFAIL
- Packet validation failed.
- 0x08 - PACKET_FAIL_ACCESSVIOLATION
- Access to the parameter was violated (writing read only parameter).
Parameters¶
The following parameters can be read or written with the 0x0B and 0x0C commands:
- 0x01 - VSEN3V3 (float)
- Voltage on 3.3V rail.
- 0x02 - VSEN5V (float)
- Voltage on 5V rail.
- 0x03 - TSENMCU (float)
- Internal teperature of the MCU.
- 0x04 - TSENEXT (float)
- External temperature sensor on the board.
- 0x05 - TIME (uint64)
- The time of the internal clock of the device in 0.1 ms steps.
- 0x10 - ENCPOS (int32)
- Encoder position.
- 0x11 - ENCVEL (float + uint8)
- Encoder velocity. The float part is the velocity of the disk, the integer is 1 if the disk is moving or 0 if it is not.
- 0x12 - ENCVELWIN (uint16)
- Encoder velocity window size.
- 0x13 - ENCHOME (uint8)
- Encoder homing. 0 if the encoder is not trying to find the home position, 1 if it is homing and 2 if the home position was found.
- 0x14 - ENCHOMEPOS (int32)
- Encoder home position.
- 0x20 - DI-1 (uint8)
- Digital input 1.
- 0x21 - DI-2 (uint8)
- Digital input 2.
- 0x30 - DO-1 (uint8)
- Digital output 1.
- 0x31 - DO-2 (uint8)
- Digital output 2.
- 0x32 - DO-3 (uint8)
- Digital output 3.
- 0x33 - DO-4 (uint8)
- Digital output 4.
- 0x40 - AO (float)
- Analogue output.
- 0xFF - LED (uint8)
- On board LED state. 0 is off, 1 is on.
Firmware info structure¶
The firmware information received after sending the 0x04 command has the following structure.
- payload[0] (uint8)
- Release
- payload[1] (uint8)
- Subrelease
- payload[2:4] (uint16)
- Build
- payload[4:6] (uint16)
- Year
- payload[6] (uint8)
- Month
- payload[7] (uint8)
- Day
- payload[8] (uint8)
- Hour
- payload[9] (uint8)
- Minute
- payload[10] (uint8)
- Second
Product info structure¶
The product information received after sending the 0x08 command has the following structure:
- payload[0:18] (char[18])
- Name
- payload[18:24] (char[6])
- Revision
- payload[24:28] (uint32)
- Serial
- payload[28:30] (uint16)
- Product year
- payload[30] (uint8)
- Product month
- payload[31] (uint8)
- Product day