-
Notifications
You must be signed in to change notification settings - Fork 6
/
MessageReceiver.cpp
64 lines (57 loc) · 1.68 KB
/
MessageReceiver.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "MessageReceiver.h"
// #define MAX_MESSAGE_LENGTH 3
// uint8_t messagedata[MAX_MESSAGE_LENGTH];
bool MessageReceiver::receiveMessage(){
// one byte is read per iteration,
// and true is only returned once a full message is read.
// otherwise return false to read another byte on the next call
if(serialAvailable()){
messagedata[pos++] = serialRead();
switch(getMessageType()){
// 3 byte messages
case SET_LED_MESSAGE:
if(pos == 3)
pos = 0;
break;
// 2 byte messages
case SET_LED_ROW_MESSAGE:
case SET_LED_COL_MESSAGE:
case WRITE_CHARACTER_MESSAGE:
case SET_PARAMETER_MESSAGE:
if(pos == 2)
pos = 0;
break;
// 1 byte messages
case FILL_MESSAGE:
case SHIFT_LEDS_MESSAGE:
case DISPLAY_EFFECT_MESSAGE:
pos = 0;
break;
default:
pos = 0;
// serialFlush();
error(MESSAGE_READ_ERROR);
return false;
}
// pos == 0 iff a full message has been read
return pos == 0;
}
return false;
}
uint8_t MessageReceiver::getMessageType(){
return messagedata[0] & MESSAGE_ID_MASK;
}
/* extract 12 bits of data from the first two message bytes as a 16 bit value */
uint16_t MessageReceiver::getTwelveBitValue(){
return ((messagedata[0] & MESSAGE_VALUE_MASK) << 8) | messagedata[1];
}
/* extract 10 bits of data from the first two message bytes as a 16 bit value */
uint16_t MessageReceiver::getTenBitValue(){
return ((messagedata[0] & PARAMETER_VALUE_MASK) << 8) | messagedata[1];
}
uint8_t MessageReceiver::getFourBitValue(){
return messagedata[0] & MESSAGE_VALUE_MASK;
}
// uint8_t* MessageReceiver::getMessageData(){
// return messagedata;
// }