Capstone project for Bachelor's in Mechanical Engineering 2011
Dependencies: FatFileSystem MAX3100 MODGPS MODSERIAL SDFileSystem mbed
UM6_usart.h@0:0529d2d7762f, 2013-05-29 (annotated)
- Committer:
- lhiggs
- Date:
- Wed May 29 00:45:41 2013 +0000
- Revision:
- 0:0529d2d7762f
Broken, after updating all the libraries. RPC has issues with new mbed libraries.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lhiggs | 0:0529d2d7762f | 1 | /* ______________________________________________________________________________________ |
lhiggs | 0:0529d2d7762f | 2 | File: UM6_usart.h |
lhiggs | 0:0529d2d7762f | 3 | Author: CH Robotics, adapted for mbed by lhiggs |
lhiggs | 0:0529d2d7762f | 4 | Version: 1.0 |
lhiggs | 0:0529d2d7762f | 5 | |
lhiggs | 0:0529d2d7762f | 6 | Description: Function declarations for USART communucation |
lhiggs | 0:0529d2d7762f | 7 | -------------------------------------------------------------------------------------- */ |
lhiggs | 0:0529d2d7762f | 8 | |
lhiggs | 0:0529d2d7762f | 9 | #include "mbed.h" |
lhiggs | 0:0529d2d7762f | 10 | |
lhiggs | 0:0529d2d7762f | 11 | #ifndef _CHR_USART_H |
lhiggs | 0:0529d2d7762f | 12 | #define _CHR_USART_H |
lhiggs | 0:0529d2d7762f | 13 | |
lhiggs | 0:0529d2d7762f | 14 | #define MAX_PACKET_DATA 40 |
lhiggs | 0:0529d2d7762f | 15 | |
lhiggs | 0:0529d2d7762f | 16 | |
lhiggs | 0:0529d2d7762f | 17 | // Definitions of states for USART receiver state machine (for receiving packets) |
lhiggs | 0:0529d2d7762f | 18 | #define USART_STATE_WAIT 1 |
lhiggs | 0:0529d2d7762f | 19 | #define USART_STATE_TYPE 2 |
lhiggs | 0:0529d2d7762f | 20 | #define USART_STATE_ADDRESS 3 |
lhiggs | 0:0529d2d7762f | 21 | #define USART_STATE_DATA 4 |
lhiggs | 0:0529d2d7762f | 22 | #define USART_STATE_CHECKSUM 5 |
lhiggs | 0:0529d2d7762f | 23 | |
lhiggs | 0:0529d2d7762f | 24 | |
lhiggs | 0:0529d2d7762f | 25 | |
lhiggs | 0:0529d2d7762f | 26 | // Flags for interpreting the packet type byte in communication packets |
lhiggs | 0:0529d2d7762f | 27 | #define PACKET_HAS_DATA (1 << 7) |
lhiggs | 0:0529d2d7762f | 28 | #define PACKET_IS_BATCH (1 << 6) |
lhiggs | 0:0529d2d7762f | 29 | #define PACKET_BATCH_LENGTH_MASK ( 0x0F ) |
lhiggs | 0:0529d2d7762f | 30 | |
lhiggs | 0:0529d2d7762f | 31 | #define PACKET_BATCH_LENGTH_OFFSET 2 |
lhiggs | 0:0529d2d7762f | 32 | |
lhiggs | 0:0529d2d7762f | 33 | #define BATCH_SIZE_2 2 |
lhiggs | 0:0529d2d7762f | 34 | #define BATCH_SIZE_3 3 |
lhiggs | 0:0529d2d7762f | 35 | |
lhiggs | 0:0529d2d7762f | 36 | #define PACKET_NO_DATA 0 |
lhiggs | 0:0529d2d7762f | 37 | #define PACKET_COMMAND_FAILED (1 << 0) |
lhiggs | 0:0529d2d7762f | 38 | |
lhiggs | 0:0529d2d7762f | 39 | |
lhiggs | 0:0529d2d7762f | 40 | // Define flags for identifying the type of packet address received |
lhiggs | 0:0529d2d7762f | 41 | #define ADDRESS_TYPE_CONFIG 0 |
lhiggs | 0:0529d2d7762f | 42 | #define ADDRESS_TYPE_DATA 1 |
lhiggs | 0:0529d2d7762f | 43 | #define ADDRESS_TYPE_COMMAND 2 |
lhiggs | 0:0529d2d7762f | 44 | |
lhiggs | 0:0529d2d7762f | 45 | |
lhiggs | 0:0529d2d7762f | 46 | // Union for working with floats at the byte level |
lhiggs | 0:0529d2d7762f | 47 | //typedef union _fconvert |
lhiggs | 0:0529d2d7762f | 48 | //{ |
lhiggs | 0:0529d2d7762f | 49 | // uint32_t uint32_val; |
lhiggs | 0:0529d2d7762f | 50 | // int32_t int32_val; |
lhiggs | 0:0529d2d7762f | 51 | // float float_val; |
lhiggs | 0:0529d2d7762f | 52 | // } fConvert; |
lhiggs | 0:0529d2d7762f | 53 | |
lhiggs | 0:0529d2d7762f | 54 | |
lhiggs | 0:0529d2d7762f | 55 | |
lhiggs | 0:0529d2d7762f | 56 | // Buffer, buffer index, and TX status flag for USART transmit |
lhiggs | 0:0529d2d7762f | 57 | |
lhiggs | 0:0529d2d7762f | 58 | extern uint8_t gUSART_State; |
lhiggs | 0:0529d2d7762f | 59 | |
lhiggs | 0:0529d2d7762f | 60 | // Structure for storing TX and RX packet data |
lhiggs | 0:0529d2d7762f | 61 | typedef struct _USARTPacket |
lhiggs | 0:0529d2d7762f | 62 | { |
lhiggs | 0:0529d2d7762f | 63 | uint8_t PT; // Packet type |
lhiggs | 0:0529d2d7762f | 64 | uint8_t address; // Packet address |
lhiggs | 0:0529d2d7762f | 65 | uint16_t checksum; // Checksum |
lhiggs | 0:0529d2d7762f | 66 | |
lhiggs | 0:0529d2d7762f | 67 | // Data included for convenience, but that isn't stored in the packet itself |
lhiggs | 0:0529d2d7762f | 68 | uint8_t data_length; // Number of bytes in data section |
lhiggs | 0:0529d2d7762f | 69 | uint8_t address_type; // Specified the address type (DATA, CONFIG, OR COMMAND) |
lhiggs | 0:0529d2d7762f | 70 | |
lhiggs | 0:0529d2d7762f | 71 | uint8_t packet_data[MAX_PACKET_DATA]; |
lhiggs | 0:0529d2d7762f | 72 | |
lhiggs | 0:0529d2d7762f | 73 | } USARTPacket; |
lhiggs | 0:0529d2d7762f | 74 | |
lhiggs | 0:0529d2d7762f | 75 | |
lhiggs | 0:0529d2d7762f | 76 | |
lhiggs | 0:0529d2d7762f | 77 | uint16_t ComputeChecksum( USARTPacket* new_packet ); |
lhiggs | 0:0529d2d7762f | 78 | |
lhiggs | 0:0529d2d7762f | 79 | |
lhiggs | 0:0529d2d7762f | 80 | |
lhiggs | 0:0529d2d7762f | 81 | #endif |