- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
#define COMMAND_MARKER '\x1B'
#define COMMAND_SET '='
#define COMMAND_XOR '^'
#define COMMAND_OR '|'
#define COMMAND_AND '&'
void usbWriteOut(uchar *data, int len)
{
while(len--) {
uchar c = *data;
buf[0] = buf[1];
buf[1] = buf[2];
buf[2] = buf[3];
buf[3] = c;
if(buf[0] == COMMAND_MARKER) {
uint8_t val = (hex2u(buf[2]) << 4) | hex2u(buf[3]);
if(buf[1] == COMMAND_SET) {
colorData = val;
}
else if(buf[1] == COMMAND_XOR) {
colorData ^= val;
}
else if(buf[1] == COMMAND_OR) {
colorData |= val;
}
else if(buf[1] == COMMAND_AND) {
colorData &= ~val;
}
}
}
}
defecate-plusplus 09.02.2012 11:05 # 0
ну, data не инкрементируется, это понятно
но buf - нечто циклическое, где [0] - tag, [1] - opcode, [2],[3] - типа аргументы, аргументы при следующих итерациях могут стать опкодами или маркерами? точно len -= 4 не подразумевалось?
ну и да, ваш компилятор не поддерживает конструкцию switch (buf[1])?
odmin 09.02.2012 13:48 # 0