root / logic / trunk / measurement_reader / src / drv_comm / dev01 / drv_comm.c @ 72
History | View | Annotate | Download (2.98 KB)
1 |
/*
|
---|---|
2 |
* ioctl.c − the process to use ioctl's to control the kernel module
|
3 |
*
|
4 |
* Until now we could have used cat for input and output. But now
|
5 |
* we need to do ioctl's, which require writing our own process.
|
6 |
*/
|
7 |
/*
|
8 |
* device specifics, such as ioctl numbers and the
|
9 |
* major device file.
|
10 |
*/
|
11 |
#include "drv_comm.h" |
12 |
#include "generator.h" |
13 |
#include <stdio.h> |
14 |
#include <stdlib.h> |
15 |
#include <syslog.h> |
16 |
#include <fcntl.h> /* open */ |
17 |
#include <unistd.h> /* exit */ |
18 |
//#include <sys/ioctl.h> /* ioctl */
|
19 |
/*
|
20 |
* Functions for the ioctl calls
|
21 |
*/
|
22 |
ioctl_set_msg_1(int file_desc, char *message) |
23 |
{ |
24 |
int ret_val;
|
25 |
ret_val = ioctl(file_desc, IOCTL_SET_MSG_1, message); |
26 |
if (ret_val < 0) { |
27 |
printf("ioctl_set_msg failed:%d\n", ret_val);
|
28 |
exit(-1);
|
29 |
} |
30 |
} |
31 |
|
32 |
ioctl_set_msg_2(int file_desc, char *message) |
33 |
{ |
34 |
int ret_val;
|
35 |
ret_val = ioctl(file_desc, IOCTL_SET_MSG_2, message); |
36 |
if (ret_val < 0) { |
37 |
printf("ioctl_set_msg failed:%d\n", ret_val);
|
38 |
exit(-1);
|
39 |
} |
40 |
} |
41 |
|
42 |
ioctl_set_msg_3(int file_desc, char *message) |
43 |
{ |
44 |
int ret_val;
|
45 |
ret_val = ioctl(file_desc, IOCTL_SET_MSG_3, message); |
46 |
if (ret_val < 0) { |
47 |
printf("ioctl_set_msg failed:%d\n", ret_val);
|
48 |
exit(-1);
|
49 |
} |
50 |
} |
51 |
|
52 |
ioctl_set_msg_4(int file_desc, char *message) |
53 |
{ |
54 |
int ret_val;
|
55 |
ret_val = ioctl(file_desc, IOCTL_SET_MSG_4, message); |
56 |
if (ret_val < 0) { |
57 |
printf("ioctl_set_msg failed:%d\n", ret_val);
|
58 |
exit(-1);
|
59 |
} |
60 |
} |
61 |
|
62 |
ioctl_set_msg_5(int file_desc, char *message) |
63 |
{ |
64 |
int ret_val;
|
65 |
ret_val = ioctl(file_desc, IOCTL_SET_MSG_5, message); |
66 |
if (ret_val < 0) { |
67 |
printf("ioctl_set_msg failed:%d\n", ret_val);
|
68 |
exit(-1);
|
69 |
} |
70 |
} |
71 |
|
72 |
ioctl_set_msg_6(int file_desc, char *message) |
73 |
{ |
74 |
int ret_val;
|
75 |
ret_val = ioctl(file_desc, IOCTL_SET_MSG_6, message); |
76 |
if (ret_val < 0) { |
77 |
printf("ioctl_set_msg failed:%d\n", ret_val);
|
78 |
exit(-1);
|
79 |
} |
80 |
} |
81 |
|
82 |
void set_device_value(const char *dev, int devIdx) |
83 |
{ |
84 |
//TODO use mutex?
|
85 |
int file_desc;
|
86 |
|
87 |
char *msg = int_to_str(generate_value());
|
88 |
|
89 |
file_desc = open(dev, 0);
|
90 |
|
91 |
if (file_desc < 0) { |
92 |
printf("Can't open device file: %s\n", dev);
|
93 |
} |
94 |
else{
|
95 |
//printf("Open device file: %s\n", dev);
|
96 |
switch(devIdx)
|
97 |
{ |
98 |
case 1: |
99 |
//printf("Setting message dev %d\n", devIdx);
|
100 |
ioctl_set_msg_1(file_desc, msg); |
101 |
break;
|
102 |
case 2: |
103 |
//printf("Setting message dev %d\n", devIdx);
|
104 |
ioctl_set_msg_2(file_desc, msg); |
105 |
break;
|
106 |
case 3: |
107 |
//printf("Setting message dev %d\n", devIdx);
|
108 |
ioctl_set_msg_3(file_desc, msg); |
109 |
break;
|
110 |
case 4: |
111 |
//printf("Setting message dev %d\n", devIdx);
|
112 |
ioctl_set_msg_4(file_desc, msg); |
113 |
break;
|
114 |
case 5: |
115 |
//printf("Setting message dev %d\n", devIdx);
|
116 |
ioctl_set_msg_5(file_desc, msg); |
117 |
break;
|
118 |
case 6: |
119 |
//printf("Setting message dev %d\n", devIdx);
|
120 |
ioctl_set_msg_6(file_desc, msg); |
121 |
break;
|
122 |
|
123 |
} |
124 |
syslog(LOG_MAIL, "%s:%s", dev, msg);
|
125 |
// TODO syslog
|
126 |
} |
127 |
|
128 |
close(file_desc); |
129 |
} |
130 |
|