-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcp56time2a.c
More file actions
59 lines (47 loc) · 1.47 KB
/
cp56time2a.c
File metadata and controls
59 lines (47 loc) · 1.47 KB
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
#include "cp56time2a.h"
#include <stdio.h>
void CP56Time2a(unsigned char *data, SYSTEMTIME *st)
{
CP56Time2aToTime(data, st);
}
void CP56Time2aToTime(unsigned char *data, SYSTEMTIME *st)
{
unsigned int mili = data[0] | data[1]<<8;
st->wSecond = mili / 1000;
st->wMilliseconds = mili - st->wSecond*1000;
if(data[2] & 0x40)
st->genuine = true;
else
st->genuine = false;
if(data[2] & 0x80)
st->valid = true;
else
st->valid = false;
st->wMinute = data[2] & 0x3F;;
st->wHour = data[3] & 0x1F;
if(data[3] & 0x80)
st->summer = true;
else
st->summer = false;
st->wDay = data[4] & 0x1F;
st->wDayOfWeek = (data[4] & 0xE0 ) >> 5;
if(st->wDayOfWeek) // if zero day of week not used.
st->wDayOfWeek = (st->wDayOfWeek + 1)%7;
st->wMonth = data[5] & 0x0F;
st->wYear = 2000 + (data[6] & 0x7F);
}
// convert SYSTEMTIME to CP56Time2a
//
void TimeToCP56Time2a(SYSTEMTIME *st, unsigned char *data)
{
unsigned int m;
m = st->wMilliseconds + 1000 * st->wSecond;
data[0] = m & 0xFF;
data[1] = (m & 0xFF00)>>8;
data[2] = st->wMinute & 0x00FF; // add valid flag and genuine flag
data[3] = st->wHour & 0x00FF; // add summer flag
/* data[4] = ((st->wDayOfWeek%7)&0x03)<<5 | (st->wDay&0x1F); */
data[4] = (st->wDay);
data[5] = st->wMonth & 0x0F;
data[6] = st->wYear - 2000;
}