Murata RF modules are designed to simplify wireless development and certification by minimizing the amount of RF expertise you need to wirelessly enable a wide range of applications.
UARTFrame.h@9:0ce800923eda, 2016-03-16 (annotated)
- Committer:
- yangcq88517
- Date:
- Wed Mar 16 15:04:46 2016 +0000
- Revision:
- 9:0ce800923eda
- Parent:
- 0:8e83b9448758
bug fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yangcq88517 | 0:8e83b9448758 | 1 | #ifndef SmartLab_MuRata_UARTFrame |
yangcq88517 | 0:8e83b9448758 | 2 | #define SmartLab_MuRata_UARTFrame |
yangcq88517 | 0:8e83b9448758 | 3 | |
yangcq88517 | 0:8e83b9448758 | 4 | #include "Payload.h" |
yangcq88517 | 0:8e83b9448758 | 5 | #include "CommandID.h" |
yangcq88517 | 0:8e83b9448758 | 6 | |
yangcq88517 | 0:8e83b9448758 | 7 | namespace SmartLabMuRata |
yangcq88517 | 0:8e83b9448758 | 8 | { |
yangcq88517 | 0:8e83b9448758 | 9 | /* |
yangcq88517 | 0:8e83b9448758 | 10 | * 7 | 6 | 5 4 3 2 1 0 |
yangcq88517 | 0:8e83b9448758 | 11 | * SOM(0x02) |
yangcq88517 | 0:8e83b9448758 | 12 | * 1 | L0 |
yangcq88517 | 0:8e83b9448758 | 13 | * 1 | A | L1 |
yangcq88517 | 0:8e83b9448758 | 14 | * 1 | Command ID |
yangcq88517 | 0:8e83b9448758 | 15 | * Payload |
yangcq88517 | 0:8e83b9448758 | 16 | * ... |
yangcq88517 | 0:8e83b9448758 | 17 | * ... |
yangcq88517 | 0:8e83b9448758 | 18 | * 1 | Checksum |
yangcq88517 | 0:8e83b9448758 | 19 | * EOM(0x04) |
yangcq88517 | 0:8e83b9448758 | 20 | */ |
yangcq88517 | 0:8e83b9448758 | 21 | |
yangcq88517 | 0:8e83b9448758 | 22 | /* |
yangcq88517 | 0:8e83b9448758 | 23 | * Each frame is delineated by a Start of Message (SOM) and End of Message (EOM) byte. The rest of the |
yangcq88517 | 0:8e83b9448758 | 24 | * fields are as follows: |
yangcq88517 | 0:8e83b9448758 | 25 | * The frame starts with a SOM (0x02) and ends with an EOM (0x04). The SOM and EOM values |
yangcq88517 | 0:8e83b9448758 | 26 | * may also appear in application payload. |
yangcq88517 | 0:8e83b9448758 | 27 | * Payload length (L1:L0): octet length of application payload including any escape characters. L0 |
yangcq88517 | 0:8e83b9448758 | 28 | * stands for bit0 to bit6, and L1 stands for bit7 to bit12 of the payload length. |
yangcq88517 | 0:8e83b9448758 | 29 | * Command ID: specifies types of payload |
yangcq88517 | 0:8e83b9448758 | 30 | * A: 1 if ACK required, 0 if no ACK is required. If A=1, then the receiver must send ACK upon a |
yangcq88517 | 0:8e83b9448758 | 31 | * successful validation of the frame. A frame requiring acknowledgement must be acknowledged |
yangcq88517 | 0:8e83b9448758 | 32 | * Murata SW Design |
yangcq88517 | 0:8e83b9448758 | 33 | * Murata Proprietary Page 11 of 101 |
yangcq88517 | 0:8e83b9448758 | 34 | * before any other non-response frame may be transmitted, i.e., a command response is always permitted. |
yangcq88517 | 0:8e83b9448758 | 35 | * Checksum: sum of L0, A | L1 and command ID. |
yangcq88517 | 0:8e83b9448758 | 36 | */ |
yangcq88517 | 0:8e83b9448758 | 37 | class UARTFrame |
yangcq88517 | 0:8e83b9448758 | 38 | { |
yangcq88517 | 0:8e83b9448758 | 39 | |
yangcq88517 | 0:8e83b9448758 | 40 | private : |
yangcq88517 | 0:8e83b9448758 | 41 | char l0; |
yangcq88517 | 0:8e83b9448758 | 42 | char l1; |
yangcq88517 | 0:8e83b9448758 | 43 | |
yangcq88517 | 0:8e83b9448758 | 44 | bool needACK; |
yangcq88517 | 0:8e83b9448758 | 45 | |
yangcq88517 | 0:8e83b9448758 | 46 | CommandID commandid; |
yangcq88517 | 0:8e83b9448758 | 47 | |
yangcq88517 | 0:8e83b9448758 | 48 | Payload * payload; |
yangcq88517 | 0:8e83b9448758 | 49 | |
yangcq88517 | 0:8e83b9448758 | 50 | char checksum; |
yangcq88517 | 0:8e83b9448758 | 51 | |
yangcq88517 | 0:8e83b9448758 | 52 | public : |
yangcq88517 | 0:8e83b9448758 | 53 | |
yangcq88517 | 0:8e83b9448758 | 54 | static const char SOM = 0x02; |
yangcq88517 | 0:8e83b9448758 | 55 | static const char EOM = 0x04; |
yangcq88517 | 0:8e83b9448758 | 56 | |
yangcq88517 | 0:8e83b9448758 | 57 | // length |
yangcq88517 | 0:8e83b9448758 | 58 | char GetL0(); |
yangcq88517 | 0:8e83b9448758 | 59 | |
yangcq88517 | 0:8e83b9448758 | 60 | void SetL0(const int value); |
yangcq88517 | 0:8e83b9448758 | 61 | |
yangcq88517 | 0:8e83b9448758 | 62 | char GetL1(); |
yangcq88517 | 0:8e83b9448758 | 63 | |
yangcq88517 | 0:8e83b9448758 | 64 | void SetL1(const int value); |
yangcq88517 | 0:8e83b9448758 | 65 | |
yangcq88517 | 0:8e83b9448758 | 66 | int GetPayloadLength(); |
yangcq88517 | 0:8e83b9448758 | 67 | |
yangcq88517 | 0:8e83b9448758 | 68 | void SetPayloadLength(const int length); |
yangcq88517 | 0:8e83b9448758 | 69 | |
yangcq88517 | 0:8e83b9448758 | 70 | // ack |
yangcq88517 | 0:8e83b9448758 | 71 | bool GetACKRequired(); |
yangcq88517 | 0:8e83b9448758 | 72 | |
yangcq88517 | 0:8e83b9448758 | 73 | void SetACKRequired(const bool ack); |
yangcq88517 | 0:8e83b9448758 | 74 | |
yangcq88517 | 0:8e83b9448758 | 75 | //command id |
yangcq88517 | 0:8e83b9448758 | 76 | CommandID GetCommandID(); |
yangcq88517 | 0:8e83b9448758 | 77 | |
yangcq88517 | 0:8e83b9448758 | 78 | void SetCommandID(const CommandID id); |
yangcq88517 | 0:8e83b9448758 | 79 | |
yangcq88517 | 0:8e83b9448758 | 80 | void SetCommandID(const int value); |
yangcq88517 | 0:8e83b9448758 | 81 | |
yangcq88517 | 0:8e83b9448758 | 82 | // payload |
yangcq88517 | 0:8e83b9448758 | 83 | void SetPayload(Payload * payload); |
yangcq88517 | 0:8e83b9448758 | 84 | |
yangcq88517 | 0:8e83b9448758 | 85 | Payload * GetPayload(); |
yangcq88517 | 0:8e83b9448758 | 86 | |
yangcq88517 | 0:8e83b9448758 | 87 | // checksum |
yangcq88517 | 0:8e83b9448758 | 88 | char GetChecksum(); |
yangcq88517 | 0:8e83b9448758 | 89 | |
yangcq88517 | 0:8e83b9448758 | 90 | void SetChecksum(const int checksum); |
yangcq88517 | 0:8e83b9448758 | 91 | |
yangcq88517 | 0:8e83b9448758 | 92 | bool VerifyChecksum(); |
yangcq88517 | 0:8e83b9448758 | 93 | }; |
yangcq88517 | 0:8e83b9448758 | 94 | } |
yangcq88517 | 0:8e83b9448758 | 95 | |
yangcq88517 | 0:8e83b9448758 | 96 | #endif |