root / logic / trunk / src / init / devicelist.c @ 36
History | View | Annotate | Download (3.47 KB)
1 | 10 | Janez1 | #include "devicelist.h" |
---|---|---|---|
2 | #include <string.h> |
||
3 | #include <mxml.h> |
||
4 | |||
5 | device *hDevice; //device list
|
||
6 | 34 | Janez1 | short NUMBER_OF_DEVICES = 0; |
7 | 10 | Janez1 | |
8 | 34 | Janez1 | device *setDeviceList() |
9 | 10 | Janez1 | { |
10 | device *curr, *head; |
||
11 | head = NULL;
|
||
12 | |||
13 | FILE *fp; |
||
14 | mxml_node_t *tree, *node; |
||
15 | |||
16 | 34 | Janez1 | if(fp = fopen("./devicetree.xml", "r")) //TODO !hardcoded |
17 | 19 | Janez1 | { |
18 | 34 | Janez1 | //printf("File read!\n");
|
19 | 19 | Janez1 | } |
20 | else
|
||
21 | printf("Error!");
|
||
22 | |||
23 | 10 | Janez1 | tree = mxmlLoadFile(NULL, fp, MXML_IGNORE_CALLBACK);
|
24 | node = tree; |
||
25 | fclose(fp); |
||
26 | |||
27 | 34 | Janez1 | /** //structure of XML tree
|
28 | 10 | Janez1 | ?xml
|
29 | |
|
||
30 | devicetree
|
||
31 | |
|
||
32 | dev1 - dev2 - ...
|
||
33 | | |
|
||
34 | | |
|
||
35 | | ID - name - minvalue - maxvalue - action - param
|
||
36 | ID - name - minvalue - maxvalue - action - param
|
||
37 | /**/
|
||
38 | 34 | Janez1 | |
39 | 10 | Janez1 | //getting to the correct level of the xml tree (descend 2 levels)
|
40 | node=node->child->child; |
||
41 | 19 | Janez1 | // printf("hDevice %d\n", hDevice);
|
42 | 10 | Janez1 | |
43 | // fill the list of known devices
|
||
44 | while(node!=NULL) |
||
45 | { |
||
46 | curr = (device *)malloc(sizeof(device));
|
||
47 | |||
48 | 27 | Janez1 | curr->id = (char *)malloc(sizeof(node->value.element.attrs->value)*strlen(node->value.element.attrs->value)); |
49 | 10 | Janez1 | strcpy(curr->id, node->value.element.attrs->value); |
50 | 34 | Janez1 | //printf("id:\t %s\n", curr->id );
|
51 | |||
52 | 10 | Janez1 | // getting data for individual device
|
53 | mxml_node_t *mxml_deviceNode; |
||
54 | mxml_deviceNode=node->child; |
||
55 | //TODO malloc()
|
||
56 | 28 | Janez1 | curr->name = (char *)malloc(sizeof(mxml_deviceNode->value.element.attrs->value)*strlen(node->value.element.attrs->value)); |
57 | 10 | Janez1 | strcpy(curr->name, mxml_deviceNode->value.element.attrs->value); |
58 | mxml_deviceNode= mxml_deviceNode->next; |
||
59 | 34 | Janez1 | //printf("name:\t %s\n", curr->name );
|
60 | 10 | Janez1 | |
61 | 19 | Janez1 | curr->readitv = atoi(mxml_deviceNode->value.element.attrs->value); |
62 | 10 | Janez1 | mxml_deviceNode= mxml_deviceNode->next; |
63 | 34 | Janez1 | //printf("readitv:\t %d s\n", curr->readitv );
|
64 | 10 | Janez1 | |
65 | 28 | Janez1 | curr->action = (char *)malloc(sizeof(mxml_deviceNode->value.element.attrs->value)*strlen(node->value.element.attrs->value)); |
66 | 10 | Janez1 | strcpy(curr->action, mxml_deviceNode->value.element.attrs->value); |
67 | mxml_deviceNode= mxml_deviceNode->next; |
||
68 | 34 | Janez1 | //printf("action:\t %s\n", curr->action );
|
69 | 10 | Janez1 | |
70 | 28 | Janez1 | curr->param = (char *)malloc(sizeof(mxml_deviceNode->value.element.attrs->value)*strlen(node->value.element.attrs->value)); |
71 | 10 | Janez1 | strcpy(curr->param, mxml_deviceNode->value.element.attrs->value); |
72 | 34 | Janez1 | //printf("param:\t %s\n", curr->param );
|
73 | 24 | Janez1 | |
74 | 34 | Janez1 | curr->running = 0;
|
75 | 10 | Janez1 | // moving to the next XML node
|
76 | node=node->next; |
||
77 | |||
78 | curr->nxt = head; |
||
79 | head = curr; |
||
80 | 34 | Janez1 | |
81 | NUMBER_OF_DEVICES++; |
||
82 | 10 | Janez1 | } |
83 | 34 | Janez1 | |
84 | 10 | Janez1 | //delete obsolete xml tree
|
85 | mxmlDelete(tree); |
||
86 | mxmlDelete(node); |
||
87 | 34 | Janez1 | |
88 | return head;
|
||
89 | } |
||
90 | |||
91 | int getNumberOfDevices()
|
||
92 | { |
||
93 | return NUMBER_OF_DEVICES;
|
||
94 | } |
||
95 | |||
96 | // TODO add this func
|
||
97 | device *getDevice(device *dev, char *devName)
|
||
98 | { |
||
99 | printf("getDevice(device *dev, char *devName)\n");
|
||
100 | printf("%s\n",devName);
|
||
101 | while(dev)
|
||
102 | 10 | Janez1 | { |
103 | 34 | Janez1 | printf("loop\n");
|
104 | printf("dev->id %s\n", dev->id);
|
||
105 | if(0==strcmp(dev->id,devName)) |
||
106 | { |
||
107 | printf("hooking device %s with status %d\n", dev->id, dev->running);
|
||
108 | return dev;
|
||
109 | } |
||
110 | dev=dev->nxt; |
||
111 | 10 | Janez1 | } |
112 | 34 | Janez1 | printf("Device not found!\n");
|
113 | return NULL; |
||
114 | 10 | Janez1 | } |
115 | |||
116 | 34 | Janez1 | device *getAvailableDevice(device *dev) |
117 | { |
||
118 | while(dev)
|
||
119 | { |
||
120 | if(!dev->running)
|
||
121 | { |
||
122 | dev->running = 1;
|
||
123 | printf("activating device %s with status %d\n", dev->id, dev->running);
|
||
124 | return dev;
|
||
125 | } |
||
126 | dev=dev->nxt; |
||
127 | } |
||
128 | |||
129 | return NULL; |
||
130 | } |
||
131 | 10 | Janez1 | /*
|
132 | void updateDeviceList(device_d *deviceList)
|
||
133 | {
|
||
134 | |||
135 | }
|
||
136 | /**/ |