-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathemuc_parse.c
132 lines (100 loc) · 2.85 KB
/
emuc_parse.c
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <linux/string.h>
#include <linux/module.h>
#include "emuc_parse.h"
#if _DBG_FUNC
extern void print_func_trace (int line, const char *func);
#endif
static void chk_sum_end_byte (unsigned char *frame, int size);
/*---------------------------------------------------------------------------------------*/
void EMUCSendHex (EMUC_CAN_FRAME *frame)
{
unsigned char *p;
unsigned char func = 0x00;
#if _DBG_FUNC
print_func_trace(__LINE__, __FUNCTION__);
#endif
p = frame->com_buf;
memset(p, 0, sizeof(frame->com_buf));
/* head - byte 0 */
*p = CMD_HEAD_SEND;
/* func - byte 1 */
func += frame->CAN_port + 1;
func += ((frame->id_type - 1) << 2);
func += frame->rtr << 3;
func += frame->dlc << 4;
*(p+1) = func;
/* id - byte 2 ~ byte 5 */
memcpy(p+2, frame->id, ID_LEN);
/* data - byte 6 ~ byte 13 */
memcpy(p+6, frame->data, DATA_LEN);
/* chk sum & end byte - byte 14 ~ byte 16 */
chk_sum_end_byte(p, COM_BUF_LEN);
}
/*---------------------------------------------------------------------------------------*/
int EMUCRevHex (EMUC_CAN_FRAME *frame)
{
int i;
unsigned char chk_sum = 0x00;
unsigned char *p;
#if _DBG_FUNC
print_func_trace(__LINE__, __FUNCTION__);
#endif
p = frame->com_buf;
#if _DBG_RECV_HEX
/*--------------------------------------*/
for(i=0; i<COM_BUF_LEN; i++)
printk("%02X ", *(p + i));
printk("\n");
/*--------------------------------------*/
#endif
/* check sum - byte 14 */
for(i=0; i<COM_BUF_LEN-3; i++)
chk_sum = chk_sum + *(p + i);
if(chk_sum != *(p+14))
return -2;
/* head - byte 0 */
if(*p == CMD_HEAD_RECV)
{
/* func - byte 1 */
frame->CAN_port = ((int) ( *(p+1) & 0x03)) - 1;
frame->id_type = ((int) ((*(p+1) & 0x04) >> 2)) + 1;
frame->rtr = (int) ((*(p+1) & 0x08) >> 3);
frame->dlc = (int) ((*(p+1) & 0xF0) >> 4);
/* id - byte 2 ~ byte 5 */
memcpy(frame->id, p+2, ID_LEN);
/* data - byte 6 ~ byte 13 */
memcpy(frame->data, p+6, DATA_LEN);
return 0;
}
else if(*p == CMD_HEAD_ERROR)
{
return 1;
}
else
return -1;
} /* END: EMUCRevHex() */
/*---------------------------------------------------------------------------------------*/
void EMUCInitHex (int sts, unsigned char *cmd)
{
#if _DBG_FUNC
print_func_trace(__LINE__, __FUNCTION__);
#endif
*(cmd+1) = sts;
*(cmd+2) = sts;
*(cmd+3) = *(cmd+0) + *(cmd+1) + *(cmd+2);
return;
} /* END: EMUCInitHex() */
/*---------------------------------------------------------------------------------------*/
static void chk_sum_end_byte (unsigned char *frame, int size)
{
int i;
unsigned char chk_sum = 0x00;
#if _DBG_FUNC
print_func_trace(__LINE__, __FUNCTION__);
#endif
for(i=0; i<size-3; i++)
chk_sum = chk_sum + *(frame + i);
*(frame + size - 3) = chk_sum;
*(frame + size - 2) = 0x0D;
*(frame + size - 1) = 0x0A;
}