System Management code
Dependencies: mbed CANBuffer Watchdog MODSERIAL mbed-rtos xbeeRelay IAP
Fork of SystemManagement by
Libs/xbeeRelay/PERMessage.cpp@31:7eaa5e881b56, 2014-11-14 (annotated)
- Committer:
- pspatel321
- Date:
- Fri Nov 14 06:05:59 2014 +0000
- Revision:
- 31:7eaa5e881b56
Mostly working. Wrote CAN in/out code. Xbee still needs work. My guess is that MODDMA breaks when used with RTOS.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pspatel321 | 31:7eaa5e881b56 | 1 | #include "PERMessage.h" |
pspatel321 | 31:7eaa5e881b56 | 2 | |
pspatel321 | 31:7eaa5e881b56 | 3 | PERMessage::PERMessage() { |
pspatel321 | 31:7eaa5e881b56 | 4 | |
pspatel321 | 31:7eaa5e881b56 | 5 | } |
pspatel321 | 31:7eaa5e881b56 | 6 | |
pspatel321 | 31:7eaa5e881b56 | 7 | PERMessage::PERMessage(char contentID, char deviceID, bool rtr, char length, unsigned char* data) { |
pspatel321 | 31:7eaa5e881b56 | 8 | dataArray[0] = contentID; |
pspatel321 | 31:7eaa5e881b56 | 9 | dataArray[1] = ((deviceID & 0x7) << 5) | (rtr << 4) | (length & 0xF); |
pspatel321 | 31:7eaa5e881b56 | 10 | for (int i = 0; i < (length & 0xF); i++) { |
pspatel321 | 31:7eaa5e881b56 | 11 | dataArray[i+2] = data[i]; |
pspatel321 | 31:7eaa5e881b56 | 12 | } |
pspatel321 | 31:7eaa5e881b56 | 13 | } |
pspatel321 | 31:7eaa5e881b56 | 14 | |
pspatel321 | 31:7eaa5e881b56 | 15 | char PERMessage::getContentID() { |
pspatel321 | 31:7eaa5e881b56 | 16 | return dataArray[0]; |
pspatel321 | 31:7eaa5e881b56 | 17 | } |
pspatel321 | 31:7eaa5e881b56 | 18 | |
pspatel321 | 31:7eaa5e881b56 | 19 | char PERMessage::getDeviceID() { |
pspatel321 | 31:7eaa5e881b56 | 20 | return (dataArray[1] >> 5) & 0x7; |
pspatel321 | 31:7eaa5e881b56 | 21 | } |
pspatel321 | 31:7eaa5e881b56 | 22 | |
pspatel321 | 31:7eaa5e881b56 | 23 | bool PERMessage::getRTR() { |
pspatel321 | 31:7eaa5e881b56 | 24 | return dataArray[1] & 0x1F; |
pspatel321 | 31:7eaa5e881b56 | 25 | } |
pspatel321 | 31:7eaa5e881b56 | 26 | |
pspatel321 | 31:7eaa5e881b56 | 27 | char PERMessage::getLength() { |
pspatel321 | 31:7eaa5e881b56 | 28 | return dataArray[1] & 0xF; |
pspatel321 | 31:7eaa5e881b56 | 29 | } |
pspatel321 | 31:7eaa5e881b56 | 30 | |
pspatel321 | 31:7eaa5e881b56 | 31 | void PERMessage::getDataArray(char* buffer) { |
pspatel321 | 31:7eaa5e881b56 | 32 | for (int i = 0; i < getLength() + 2; i++) { |
pspatel321 | 31:7eaa5e881b56 | 33 | buffer[i] = dataArray[i]; |
pspatel321 | 31:7eaa5e881b56 | 34 | } |
pspatel321 | 31:7eaa5e881b56 | 35 | } |
pspatel321 | 31:7eaa5e881b56 | 36 | bool PERMessage::setContentID(char contentID) { |
pspatel321 | 31:7eaa5e881b56 | 37 | dataArray[0] = contentID; |
pspatel321 | 31:7eaa5e881b56 | 38 | return true; |
pspatel321 | 31:7eaa5e881b56 | 39 | } |
pspatel321 | 31:7eaa5e881b56 | 40 | |
pspatel321 | 31:7eaa5e881b56 | 41 | bool PERMessage::setDeviceID(char deviceID) { |
pspatel321 | 31:7eaa5e881b56 | 42 | dataArray[1] = dataArray[1] | (deviceID & 0x7) << 5; |
pspatel321 | 31:7eaa5e881b56 | 43 | return true; |
pspatel321 | 31:7eaa5e881b56 | 44 | } |
pspatel321 | 31:7eaa5e881b56 | 45 | |
pspatel321 | 31:7eaa5e881b56 | 46 | bool PERMessage::setRTR(bool RTR) { |
pspatel321 | 31:7eaa5e881b56 | 47 | dataArray[1] = dataArray[1] | RTR << 4; |
pspatel321 | 31:7eaa5e881b56 | 48 | return true; |
pspatel321 | 31:7eaa5e881b56 | 49 | } |
pspatel321 | 31:7eaa5e881b56 | 50 | |
pspatel321 | 31:7eaa5e881b56 | 51 | bool PERMessage::setLength(char length) { |
pspatel321 | 31:7eaa5e881b56 | 52 | dataArray[1] = dataArray[1] | length & 0xF; |
pspatel321 | 31:7eaa5e881b56 | 53 | return true; |
pspatel321 | 31:7eaa5e881b56 | 54 | } |