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
|
#include "casio-get.h"
#include <string.h>
/*****************************************************************************
* Calculate the checksum of the data area of a packet
*****************************************************************************/
unsigned char calculate_checksum(const char *start, const char *stop)
{
unsigned char sum = 0;
while (start != stop)
sum += *(start++);
return 1 + ~(sum);
}
unsigned short calculate_checksum_word(const char *start, const char *stop)
{
unsigned short sum = 0;
while (start != stop)
sum += (unsigned char)(*(start++));
return 1 + ~(sum);
}
/*****************************************************************************
* Returns the type of packet as determined from the packet header
*****************************************************************************/
enum packet_types get_packet_type(const unsigned char* data)
{
if (strncmp((char*)data, ":END", 4) == 0)
return PKT_END;
if (strncmp((char*)data, ":VAL", 4) == 0)
return PKT_VALUE_HEADER;
if (strncmp((char*)data, ":DD", 3) == 0)
return PKT_SCREEN_HEADER_BW;
if (strncmp((char*)data, ":DC", 3) == 0)
return PKT_SCREEN_HEADER_COL;
if (strncmp((char*)data, ":MEM", 4) == 0)
return PKT_BACKUP_HEADER;
if (strncmp((char*)data, ":FNC", 4) == 0)
return PKT_FUNCTION_HEADER;
if (strncmp((char*)data, ":TXT", 4) == 0)
return PKT_PROGRAM_HEADER;
if (strncmp((char*)data, ":\x00\x01\x00\x01", 4) == 0)
return PKT_VAL;
return PKT_UNKNOWN;
}
|