UDI/incldue - Update UDI headers for implementation of attributes/DMA
[tpg/acess2.git] / UDI / include / udi / attr.h
1 /**
2  * Acess2 UDI Layer
3  * - By John Hodge (thePowersGang)
4  *
5  * udi/attr.h
6  * - Instance Attribute Management
7  */
8 #ifndef _UDI__ATTR_H_
9 #define _UDI__ATTR_H_
10
11 typedef struct udi_instance_attr_list_s udi_instance_attr_list_t;
12 typedef udi_ubit8_t     udi_instance_attr_type_t;
13
14 /* Instance attribute limits */
15 #define UDI_MAX_ATTR_NAMELEN    32
16 #define UDI_MAX_ATTR_SIZE               64
17
18 #define UDI_ATTR32_SET(aval, v) \
19         { udi_ubit32_t vtmp = (v); \
20         (aval)[0] = (vtmp) & 0xff; \
21         (aval)[1] = ((vtmp) >> 8) & 0xff; \
22         (aval)[2] = ((vtmp) >> 16) & 0xff; \
23         (aval)[3] = ((vtmp) >> 24) & 0xff; }
24 #define UDI_ATTR32_GET(aval) \
25         ((aval)[0] + ((aval)[1] << 8) + \
26         ((aval)[2] << 16) + ((aval)[3] << 24))
27 #define UDI_ATTR32_INIT(v) \
28         { (v) & 0xff, ((v) >> 8) & 0xff, \
29         ((v) >> 16) & 0xff, ((v) >> 24) & 0xff }
30
31 /**
32  * \brief Instance Attribute
33  */
34 struct udi_instance_attr_list_s
35 {
36      char       attr_name[UDI_MAX_ATTR_NAMELEN];
37      udi_ubit8_t        attr_value[UDI_MAX_ATTR_SIZE];
38      udi_ubit8_t        attr_length;
39      udi_instance_attr_type_t   attr_type;
40 };
41
42
43 /**
44  * \brief Instance Attribute Types
45  * \see ::udi_instance_attr_type_t
46  */
47 enum
48 {
49         UDI_ATTR_NONE,
50         UDI_ATTR_STRING,
51         UDI_ATTR_ARRAY8,
52         UDI_ATTR_UBIT32,
53         UDI_ATTR_BOOLEAN,
54         UDI_ATTR_FILE
55 };
56
57 typedef void udi_instance_attr_get_call_t(udi_cb_t *gcb, udi_instance_attr_type_t attr_type, udi_size_t actual_length);
58
59 extern void udi_instance_attr_get(udi_instance_attr_get_call_t *callback, udi_cb_t *gcb,
60         const char *attr_name, udi_ubit32_t child_ID,
61         void *attr_value, udi_size_t attr_length
62         );
63
64 typedef void udi_instance_attr_set_call_t(udi_cb_t *gcb, udi_status_t status);
65
66 extern void udi_instance_attr_set(udi_instance_attr_set_call_t *callback, udi_cb_t *gcb,
67         const char *attr_name, udi_ubit32_t child_ID,
68         const void *attr_value, udi_size_t attr_length, udi_ubit8_t attr_type
69         );
70
71 #define UDI_INSTANCE_ATTR_DELETE(callback, gcb, attr_name) \
72         udi_instance_attr_set(callbac, gcb, attr_name, NULL, NULL, 0, UDI_ATTR_NONE)
73
74
75 #endif

UCC git Repository :: git.ucc.asn.au