Statistics
| Revision:

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