10,29 → 10,28 |
* in data |
*/ |
void Parser::create_frame(char cmd, int address, char * data, unsigned int length) { |
//if # is cmd we do not touch anything, because |
// the command is already encoded in data |
if (cmd != '#') { |
/* |
//calculate buffer length |
//(4 Bytes for 1-byte '#', 1-byte address, and 2-byte crc) |
//(the rest for the data length - see encode how this is calculated) |
int buff_len = 4+(length/3 + (length%3==0?0:1) )*4; |
//if # is cmd we do not touch anything, because |
// the command is already encoded in data |
if (cmd != '#') { |
/* |
//calculate buffer length |
//(4 Bytes for 1-byte '#', 1-byte address, and 2-byte crc) |
//(the rest for the data length - see encode how this is calculated) |
int buff_len = 4+(length/3 + (length%3==0?0:1) )*4; |
|
//allociate memory for the data we want to send |
char * send_data = (char *)malloc(buf_len); |
*/ |
char send_data[150]; |
send_data[0]='#'; |
send_data[1]=(char)address; |
send_data[2]=cmd; |
for (int i = 0; i < length; i++) |
send_data[i+3] = data[i]; |
//TODO: abgleich mit MKCommunication::send_command |
Parser::encode64(send_data, length); |
address = 'a' + address; |
|
} |
//allociate memory for the data we want to send |
char * send_data = (char *)malloc(buf_len); |
*/ |
Parser::encode64(data, length); |
char send_data[150]; |
send_data[0]='#'; |
send_data[1]=(char)address+'a'; |
send_data[2]=cmd; |
for (int i = 0; i < length; i++) |
send_data[i+3] = data[i]; |
add_CRC(send_data, length+3); |
data = send_data; |
} |
} |
|
|
130,7 → 129,7 |
} |
|
// Datensatz nach 8bit Integer |
int Parser::dataToChar(int *data , int start, bool is_signed) { |
int Parser::dataToChar(char *data , int start, bool is_signed) { |
int out = (data[start]); |
|
if ((out > 128) && (is_signed)) |
151,7 → 150,7 |
/** |
* convert data to 16bit Integer |
*/ |
int Parser::dataToInt(int *Data , int Start, bool is_signed) |
int Parser::dataToInt(char *Data , int Start, bool is_signed) |
{ |
int Out = (Data[Start+1]<<8) | (Data[Start+0]); |
|
165,7 → 164,7 |
/** |
* convert data to 32bit Long |
*/ |
long Parser::dataToLong(int *Data , int Start, bool is_signed) |
long Parser::dataToLong(char *Data , int Start, bool is_signed) |
{ |
long Out = (Data[Start+3]<<24) | (Data[Start+2]<<16) | (Data[Start+1]<<8) | (Data[Start+0]); |
|
175,6 → 174,14 |
return Out; |
} |
|
std::string Parser::dataToString(char * data, int start, int end) |
{ |
char tmp[MAX_DATA_SIZE]; |
for (int i = start; i < end; i++) |
tmp[i-start] = data[i]; |
return std::string(tmp); |
} |
|
float Parser::getFloat(long value, int count) |
{ |
long num = pow(10, count); |
230,8 → 237,8 |
|
tmpCRC %= 4096; |
|
tx[length-2] = '=' + tmpCRC / 64; |
tx[length-1] = '=' + tmpCRC % 64; |
tx[length] = '\0'; |
tx[length] = '=' + tmpCRC / 64; |
tx[length+1] = '=' + tmpCRC % 64; |
tx[length+2] = '\0'; |
} |
|