lhiggs CSUM
/
UM6_IMU_AHRS_2012
Communication program for the chrobotics UM6 9-DOF IMU AHRS.
UM6_usart/UM6_usart.h@0:03c649c76388, 2012-09-28 (annotated)
- Committer:
- lhiggs
- Date:
- Fri Sep 28 00:40:29 2012 +0000
- Revision:
- 0:03c649c76388
A UM6 IMU AHRS INTERFACE
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lhiggs | 0:03c649c76388 | 1 | /* ______________________________________________________________________________________ |
lhiggs | 0:03c649c76388 | 2 | File: UM6_usart.h |
lhiggs | 0:03c649c76388 | 3 | Author: CH Robotics, adapted for mbed by lhiggs |
lhiggs | 0:03c649c76388 | 4 | Version: 1.0 |
lhiggs | 0:03c649c76388 | 5 | |
lhiggs | 0:03c649c76388 | 6 | Description: Function declarations for USART communucation |
lhiggs | 0:03c649c76388 | 7 | -------------------------------------------------------------------------------------- */ |
lhiggs | 0:03c649c76388 | 8 | |
lhiggs | 0:03c649c76388 | 9 | #ifndef _CHR_USART_H |
lhiggs | 0:03c649c76388 | 10 | #define _CHR_USART_H |
lhiggs | 0:03c649c76388 | 11 | |
lhiggs | 0:03c649c76388 | 12 | #define MAX_PACKET_DATA 40 |
lhiggs | 0:03c649c76388 | 13 | |
lhiggs | 0:03c649c76388 | 14 | // Definitions of states for USART receiver state machine (for receiving packets) |
lhiggs | 0:03c649c76388 | 15 | #define USART_STATE_WAIT 1 |
lhiggs | 0:03c649c76388 | 16 | #define USART_STATE_TYPE 2 |
lhiggs | 0:03c649c76388 | 17 | #define USART_STATE_ADDRESS 3 |
lhiggs | 0:03c649c76388 | 18 | #define USART_STATE_DATA 4 |
lhiggs | 0:03c649c76388 | 19 | #define USART_STATE_CHECKSUM 5 |
lhiggs | 0:03c649c76388 | 20 | |
lhiggs | 0:03c649c76388 | 21 | // Flags for interpreting the packet type byte in communication packets |
lhiggs | 0:03c649c76388 | 22 | #define PACKET_HAS_DATA (1 << 7) |
lhiggs | 0:03c649c76388 | 23 | #define PACKET_IS_BATCH (1 << 6) |
lhiggs | 0:03c649c76388 | 24 | #define PACKET_BATCH_LENGTH_MASK ( 0x0F ) |
lhiggs | 0:03c649c76388 | 25 | |
lhiggs | 0:03c649c76388 | 26 | #define PACKET_BATCH_LENGTH_OFFSET 2 |
lhiggs | 0:03c649c76388 | 27 | |
lhiggs | 0:03c649c76388 | 28 | #define BATCH_SIZE_2 2 |
lhiggs | 0:03c649c76388 | 29 | #define BATCH_SIZE_3 3 |
lhiggs | 0:03c649c76388 | 30 | |
lhiggs | 0:03c649c76388 | 31 | #define PACKET_NO_DATA 0 |
lhiggs | 0:03c649c76388 | 32 | #define PACKET_COMMAND_FAILED (1 << 0) |
lhiggs | 0:03c649c76388 | 33 | |
lhiggs | 0:03c649c76388 | 34 | |
lhiggs | 0:03c649c76388 | 35 | // Define flags for identifying the type of packet address received |
lhiggs | 0:03c649c76388 | 36 | #define ADDRESS_TYPE_CONFIG 0 |
lhiggs | 0:03c649c76388 | 37 | #define ADDRESS_TYPE_DATA 1 |
lhiggs | 0:03c649c76388 | 38 | #define ADDRESS_TYPE_COMMAND 2 |
lhiggs | 0:03c649c76388 | 39 | |
lhiggs | 0:03c649c76388 | 40 | |
lhiggs | 0:03c649c76388 | 41 | extern uint8_t gUSART_State; |
lhiggs | 0:03c649c76388 | 42 | |
lhiggs | 0:03c649c76388 | 43 | // Structure for storing TX and RX packet data |
lhiggs | 0:03c649c76388 | 44 | typedef struct _USARTPacket |
lhiggs | 0:03c649c76388 | 45 | { |
lhiggs | 0:03c649c76388 | 46 | uint8_t PT; // Packet type |
lhiggs | 0:03c649c76388 | 47 | uint8_t address; // Packet address |
lhiggs | 0:03c649c76388 | 48 | uint16_t checksum; // Checksum |
lhiggs | 0:03c649c76388 | 49 | |
lhiggs | 0:03c649c76388 | 50 | // Data included for convenience, but that isn't stored in the packet itself |
lhiggs | 0:03c649c76388 | 51 | uint8_t data_length; // Number of bytes in data section |
lhiggs | 0:03c649c76388 | 52 | uint8_t address_type; // Specified the address type (DATA, CONFIG, OR COMMAND) |
lhiggs | 0:03c649c76388 | 53 | |
lhiggs | 0:03c649c76388 | 54 | uint8_t packet_data[MAX_PACKET_DATA]; |
lhiggs | 0:03c649c76388 | 55 | |
lhiggs | 0:03c649c76388 | 56 | } USARTPacket; |
lhiggs | 0:03c649c76388 | 57 | |
lhiggs | 0:03c649c76388 | 58 | uint16_t ComputeChecksum( USARTPacket* new_packet ); |
lhiggs | 0:03c649c76388 | 59 | |
lhiggs | 0:03c649c76388 | 60 | #endif |