Statistics
| Revision:

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
/**/