]> rtime.felk.cvut.cz Git - can-usb1.git/blob - ulan/embedded/libs4c/ulan/uloi_lt/uloi_base.h
Initializing repo
[can-usb1.git] / ulan / embedded / libs4c / ulan / uloi_lt / uloi_base.h
1 #ifndef _ULOI_BASE_H
2 #define _ULOI_BASE_H
3
4 #include <stdlib.h>
5 #include <ul_lib/ulan.h>
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 #ifndef UL_ARGPTRTYPE
12 #define UL_ARGPTRTYPE
13 #endif
14
15 #ifndef NULL_FNC
16 #ifndef SDCC
17   #define ULOI_CODE
18   #define NULL_CODE NULL
19 #else /*SDCC*/
20   #define ULOI_CODE code
21   #define NULL_CODE (0)
22 #endif /*SDCC*/
23 #endif /*NULL_FNC*/
24
25 #ifndef ULOI_GENOBJIDTAG
26   #ifdef CONFIG_ULOI_GENOBJIDTAG
27     #define ULOI_GENOBJIDTAG(_name,_oid) \
28       void uloid_objidtag_note_##_name () __attribute__ ((alias (#_oid)));
29       /*__NUM2ASM(uloid_objidtag_##_name,_oid)*/
30   #endif /*CONFIG_ULOI_GENOBJIDTAG*/
31 #endif /*ULOI_GENOBJIDTAG*/
32
33 #ifndef ULOI_GENOBJIDTAG
34   #define ULOI_GENOBJIDTAG(_name,_oid)
35 #endif /*ULOI_GENOBJIDTAG*/
36
37
38 #define ULOI_TMBUF_LEN 30
39
40 #ifdef UL_WITHOUT_HANDLE
41   #define ULOI_ARG_coninfo
42   #define ULOI_ARG1_coninfo
43   #define ULOI_PARAM_coninfo
44   #define ULOI_PARAM1_coninfo
45   #define coninfo (&uloi_coninfo_global)
46   extern uloi_coninfo_t uloi_coninfo_global;
47   extern UL_ARGPTRTYPE uchar uloi_tmpbuf[ULOI_TMBUF_LEN];
48 #else  /*UL_WITHOUT_HANDLE*/
49   #define ul_ssize_t ssize_t
50   #define ULOI_ARG_coninfo coninfo,
51   #define ULOI_ARG1_coninfo coninfo
52   #define ULOI_PARAM_coninfo uloi_coninfo_t *coninfo,
53   #define ULOI_PARAM1_coninfo uloi_coninfo_t *coninfo
54 #endif /*UL_WITHOUT_HANDLE*/
55
56 #define ULOI_CONINFO_OUTOPEN 1
57
58 typedef unsigned uloi_oid_t;
59
60 typedef struct uloi_objdes_t {
61   uloi_oid_t oid;
62   const ULOI_CODE void *aoid;
63   int (*rdfnc)(ULOI_PARAM_coninfo void *context);
64   void *rdcontext;
65   int (*wrfnc)(ULOI_PARAM_coninfo void *context);
66   void *wrcontext;
67 } uloi_objdes_t;
68
69 #define ULOI_GENAOID2(_name,_type) \
70   const ULOI_CODE struct {char len_all; \
71           char len_name; \
72           char val_name[sizeof(#_name)-1]; \
73           char len_type; \
74           char val_type[sizeof(_type)-1]; \
75   } uloi_aoid_##_name={ \
76     sizeof(#_name)+sizeof(_type), \
77     sizeof(#_name)-1, \
78     #_name, \
79     sizeof(_type)-1, \
80     _type \
81   };
82
83 #define ULOI_GENOBJDES_RAW(_oid,_aoid,_rdfnc,_rdcontext,_wrfnc,_wrcontext) \
84 { \
85   _oid, \
86   _aoid, \
87   _rdfnc, \
88   _rdcontext, \
89   _wrfnc, \
90   _wrcontext \
91 };
92
93 #define ULOI_GENOBJDES(_name,_oid,_type,_rdfnc,_rdcontext,_wrfnc,_wrcontext) \
94 ULOI_GENAOID2(_name,_type) \
95 const ULOI_CODE uloi_objdes_t uloid_objdes_##_name = \
96 ULOI_GENOBJDES_RAW(_oid,&uloi_aoid_##_name,_rdfnc,_rdcontext,_wrfnc,_wrcontext) \
97 ULOI_GENOBJIDTAG(_name,_oid)
98
99 #define ULOI_GENOBJDES_STD(_name,_oid,_type,_rdfnc,_rdcontext,_wrfnc,_wrcontext) \
100
101
102 typedef struct uloi_objdes_array_t {
103   /*gsa_array_field_t;*/
104   struct {
105     uloi_objdes_t **items;
106     unsigned count;
107     unsigned alloc_count;
108   } array;
109 } uloi_objdes_array_t;
110
111
112 uloi_objdes_t *
113 uloi_objdes_array_at (const uloi_objdes_array_t * array, unsigned indx);
114
115 uloi_objdes_t *
116 uloi_objdes_array_find (const uloi_objdes_array_t * array, uloi_oid_t * key);
117
118 unsigned
119 uloi_objdes_array_find_indx (const uloi_objdes_array_t * array,
120                                    uloi_oid_t * key);
121
122 unsigned
123 uloi_objdes_array_find_after_indx (const uloi_objdes_array_t * array,
124                                    uloi_oid_t * key);
125
126
127 int uloi_i_open(ULOI_PARAM_coninfo UL_ARGPTRTYPE ul_msginfo *imsginfo);
128 int uloi_o_open(ULOI_PARAM1_coninfo);
129 int uloi_i_close(ULOI_PARAM1_coninfo);
130 int uloi_o_close(ULOI_PARAM1_coninfo);
131 ul_ssize_t uloi_i_read(ULOI_PARAM_coninfo void *buffer, size_t size);
132 ul_ssize_t uloi_o_write(ULOI_PARAM_coninfo const void *buffer, size_t size);
133
134 int uloi_process_msg(ULOI_PARAM_coninfo uloi_objdes_array_t *objdes_array, UL_ARGPTRTYPE ul_msginfo *imsginfo);
135
136 int uloi_doii_fnc(ULOI_PARAM_coninfo void *context);
137 int uloi_doio_fnc(ULOI_PARAM_coninfo void *context);
138 int uloi_qoii_fnc(ULOI_PARAM_coninfo void *context);
139 int uloi_qoio_fnc(ULOI_PARAM_coninfo void *context);
140 int uloi_rdrq_fnc(ULOI_PARAM_coninfo void *context);
141
142 int uloi_char_rdfnc(ULOI_PARAM_coninfo void *context);
143 int uloi_char_wrfnc(ULOI_PARAM_coninfo void *context);
144 int uloi_uchar_rdfnc(ULOI_PARAM_coninfo void *context);
145 int uloi_uchar_wrfnc(ULOI_PARAM_coninfo void *context);
146 int uloi_int_rdfnc(ULOI_PARAM_coninfo void *context);
147 int uloi_int_wrfnc(ULOI_PARAM_coninfo void *context);
148 int uloi_uint_rdfnc(ULOI_PARAM_coninfo void *context);
149 int uloi_uint_wrfnc(ULOI_PARAM_coninfo void *context);
150 int uloi_long_rdfnc(ULOI_PARAM_coninfo void *context);
151 int uloi_long_wrfnc(ULOI_PARAM_coninfo void *context);
152 int uloi_ulong_rdfnc(ULOI_PARAM_coninfo void *context);
153 int uloi_ulong_wrfnc(ULOI_PARAM_coninfo void *context);
154
155 #ifdef __cplusplus
156 } /* extern "C"*/
157 #endif
158
159 #endif /*_ULOI_BASE_H*/