1 /* $Id: capiutil.h,v 1.5.6.2 2001/09/23 22:24:33 kai Exp $
3 * CAPI 2.0 defines & types
5 * From CAPI 2.0 Development Kit AVM 1995 (msg.c)
6 * Rewritten for Linux 1996 by Carsten Paeth <calle@calle.de>
8 * This software may be used and distributed according to the terms
9 * of the GNU General Public License, incorporated herein by reference.
13 #ifndef __CAPIUTIL_H__
14 #define __CAPIUTIL_H__
16 #include <asm/types.h>
18 #define CAPIMSG_BASELEN 8
19 #define CAPIMSG_U8(m, off) (m[off])
20 #define CAPIMSG_U16(m, off) (m[off]|(m[(off)+1]<<8))
21 #define CAPIMSG_U32(m, off) (m[off]|(m[(off)+1]<<8)|(m[(off)+2]<<16)|(m[(off)+3]<<24))
22 #define CAPIMSG_LEN(m) CAPIMSG_U16(m,0)
23 #define CAPIMSG_APPID(m) CAPIMSG_U16(m,2)
24 #define CAPIMSG_COMMAND(m) CAPIMSG_U8(m,4)
25 #define CAPIMSG_SUBCOMMAND(m) CAPIMSG_U8(m,5)
26 #define CAPIMSG_CMD(m) (((m[4])<<8)|(m[5]))
27 #define CAPIMSG_MSGID(m) CAPIMSG_U16(m,6)
28 #define CAPIMSG_CONTROLLER(m) (m[8] & 0x7f)
29 #define CAPIMSG_CONTROL(m) CAPIMSG_U32(m, 8)
30 #define CAPIMSG_NCCI(m) CAPIMSG_CONTROL(m)
31 #define CAPIMSG_DATALEN(m) CAPIMSG_U16(m,16) /* DATA_B3_REQ */
33 static inline void capimsg_setu8(void *m
, int off
, __u8 val
)
35 ((__u8
*)m
)[off
] = val
;
38 static inline void capimsg_setu16(void *m
, int off
, __u16 val
)
40 ((__u8
*)m
)[off
] = val
& 0xff;
41 ((__u8
*)m
)[off
+1] = (val
>> 8) & 0xff;
44 static inline void capimsg_setu32(void *m
, int off
, __u32 val
)
46 ((__u8
*)m
)[off
] = val
& 0xff;
47 ((__u8
*)m
)[off
+1] = (val
>> 8) & 0xff;
48 ((__u8
*)m
)[off
+2] = (val
>> 16) & 0xff;
49 ((__u8
*)m
)[off
+3] = (val
>> 24) & 0xff;
52 #define CAPIMSG_SETLEN(m, len) capimsg_setu16(m, 0, len)
53 #define CAPIMSG_SETAPPID(m, applid) capimsg_setu16(m, 2, applid)
54 #define CAPIMSG_SETCOMMAND(m,cmd) capimsg_setu8(m, 4, cmd)
55 #define CAPIMSG_SETSUBCOMMAND(m, cmd) capimsg_setu8(m, 5, cmd)
56 #define CAPIMSG_SETMSGID(m, msgid) capimsg_setu16(m, 6, msgid)
57 #define CAPIMSG_SETCONTROL(m, contr) capimsg_setu32(m, 8, contr)
58 #define CAPIMSG_SETDATALEN(m, len) capimsg_setu16(m, 16, len)
60 /*----- basic-type definitions -----*/
62 typedef __u8
*_cstruct
;
70 The _cmsg structure contains all possible CAPI 2.0 parameter.
71 All parameters are stored here first. The function CAPI_CMSG_2_MESSAGE
72 assembles the parameter and builds CAPI2.0 conform messages.
73 CAPI_MESSAGE_2_CMSG disassembles CAPI 2.0 messages and stores the
74 parameter in the _cmsg structure
91 _cmstruct AdditionalInfo
;
92 _cstruct B1configuration
;
94 _cstruct B2configuration
;
96 _cstruct B3configuration
;
99 _cstruct BChannelinformation
;
101 _cstruct CalledPartyNumber
;
102 _cstruct CalledPartySubaddress
;
103 _cstruct CallingPartyNumber
;
104 _cstruct CallingPartySubaddress
;
109 _cstruct ConnectedNumber
;
110 _cstruct ConnectedSubaddress
;
114 _cstruct FacilityConfirmationParameter
;
115 _cstruct Facilitydataarray
;
116 _cstruct FacilityIndicationParameter
;
117 _cstruct FacilityRequestParameter
;
118 __u16 FacilitySelector
;
123 _cstruct InfoElement
;
126 _cstruct Keypadfacility
;
134 _cstruct Useruserdata
;
141 /* buffer to construct message */
147 * capi_cmsg2message() assembles the parameter from _cmsg to a CAPI 2.0
150 unsigned capi_cmsg2message(_cmsg
* cmsg
, __u8
* msg
);
153 * capi_message2cmsg disassembles a CAPI message an writes the parameter
154 * into _cmsg for easy access
156 unsigned capi_message2cmsg(_cmsg
* cmsg
, __u8
* msg
);
159 * capi_cmsg_header() fills the _cmsg structure with default values, so only
160 * parameter with non default values must be changed before sending the
163 unsigned capi_cmsg_header(_cmsg
* cmsg
, __u16 _ApplId
,
164 __u8 _Command
, __u8 _Subcommand
,
165 __u16 _Messagenumber
, __u32 _Controller
);
168 * capi_info2str generated a readable string for Capi2.0 reasons.
170 char *capi_info2str(__u16 reason
);
172 /*-----------------------------------------------------------------------*/
175 * Debugging / Tracing functions
178 char *capi_cmd2str(__u8 cmd
, __u8 subcmd
);
187 #define CDEBUG_SIZE 1024
188 #define CDEBUG_GSIZE 4096
190 void cdebbuf_free(_cdebbuf
*cdb
);
191 int cdebug_init(void);
192 void cdebug_exit(void);
194 _cdebbuf
*capi_cmsg2str(_cmsg
*cmsg
);
195 _cdebbuf
*capi_message2str(__u8
*msg
);
197 /*-----------------------------------------------------------------------*/
199 static inline void capi_cmsg_answer(_cmsg
* cmsg
)
201 cmsg
->Subcommand
|= 0x01;
204 /*-----------------------------------------------------------------------*/
206 static inline void capi_fill_CONNECT_B3_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
210 capi_cmsg_header(cmsg
, ApplId
, 0x82, 0x80, Messagenumber
, adr
);
214 static inline void capi_fill_FACILITY_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
216 __u16 FacilitySelector
,
217 _cstruct FacilityRequestParameter
)
219 capi_cmsg_header(cmsg
, ApplId
, 0x80, 0x80, Messagenumber
, adr
);
220 cmsg
->FacilitySelector
= FacilitySelector
;
221 cmsg
->FacilityRequestParameter
= FacilityRequestParameter
;
224 static inline void capi_fill_INFO_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
226 _cstruct CalledPartyNumber
,
227 _cstruct BChannelinformation
,
228 _cstruct Keypadfacility
,
229 _cstruct Useruserdata
,
230 _cstruct Facilitydataarray
)
232 capi_cmsg_header(cmsg
, ApplId
, 0x08, 0x80, Messagenumber
, adr
);
233 cmsg
->CalledPartyNumber
= CalledPartyNumber
;
234 cmsg
->BChannelinformation
= BChannelinformation
;
235 cmsg
->Keypadfacility
= Keypadfacility
;
236 cmsg
->Useruserdata
= Useruserdata
;
237 cmsg
->Facilitydataarray
= Facilitydataarray
;
240 static inline void capi_fill_LISTEN_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
245 _cstruct CallingPartyNumber
,
246 _cstruct CallingPartySubaddress
)
248 capi_cmsg_header(cmsg
, ApplId
, 0x05, 0x80, Messagenumber
, adr
);
249 cmsg
->InfoMask
= InfoMask
;
250 cmsg
->CIPmask
= CIPmask
;
251 cmsg
->CIPmask2
= CIPmask2
;
252 cmsg
->CallingPartyNumber
= CallingPartyNumber
;
253 cmsg
->CallingPartySubaddress
= CallingPartySubaddress
;
256 static inline void capi_fill_ALERT_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
258 _cstruct BChannelinformation
,
259 _cstruct Keypadfacility
,
260 _cstruct Useruserdata
,
261 _cstruct Facilitydataarray
)
263 capi_cmsg_header(cmsg
, ApplId
, 0x01, 0x80, Messagenumber
, adr
);
264 cmsg
->BChannelinformation
= BChannelinformation
;
265 cmsg
->Keypadfacility
= Keypadfacility
;
266 cmsg
->Useruserdata
= Useruserdata
;
267 cmsg
->Facilitydataarray
= Facilitydataarray
;
270 static inline void capi_fill_CONNECT_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
273 _cstruct CalledPartyNumber
,
274 _cstruct CallingPartyNumber
,
275 _cstruct CalledPartySubaddress
,
276 _cstruct CallingPartySubaddress
,
280 _cstruct B1configuration
,
281 _cstruct B2configuration
,
282 _cstruct B3configuration
,
286 _cstruct BChannelinformation
,
287 _cstruct Keypadfacility
,
288 _cstruct Useruserdata
,
289 _cstruct Facilitydataarray
)
292 capi_cmsg_header(cmsg
, ApplId
, 0x02, 0x80, Messagenumber
, adr
);
293 cmsg
->CIPValue
= CIPValue
;
294 cmsg
->CalledPartyNumber
= CalledPartyNumber
;
295 cmsg
->CallingPartyNumber
= CallingPartyNumber
;
296 cmsg
->CalledPartySubaddress
= CalledPartySubaddress
;
297 cmsg
->CallingPartySubaddress
= CallingPartySubaddress
;
298 cmsg
->B1protocol
= B1protocol
;
299 cmsg
->B2protocol
= B2protocol
;
300 cmsg
->B3protocol
= B3protocol
;
301 cmsg
->B1configuration
= B1configuration
;
302 cmsg
->B2configuration
= B2configuration
;
303 cmsg
->B3configuration
= B3configuration
;
307 cmsg
->BChannelinformation
= BChannelinformation
;
308 cmsg
->Keypadfacility
= Keypadfacility
;
309 cmsg
->Useruserdata
= Useruserdata
;
310 cmsg
->Facilitydataarray
= Facilitydataarray
;
313 static inline void capi_fill_DATA_B3_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
321 capi_cmsg_header(cmsg
, ApplId
, 0x86, 0x80, Messagenumber
, adr
);
323 cmsg
->DataLength
= DataLength
;
324 cmsg
->DataHandle
= DataHandle
;
328 static inline void capi_fill_DISCONNECT_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
330 _cstruct BChannelinformation
,
331 _cstruct Keypadfacility
,
332 _cstruct Useruserdata
,
333 _cstruct Facilitydataarray
)
336 capi_cmsg_header(cmsg
, ApplId
, 0x04, 0x80, Messagenumber
, adr
);
337 cmsg
->BChannelinformation
= BChannelinformation
;
338 cmsg
->Keypadfacility
= Keypadfacility
;
339 cmsg
->Useruserdata
= Useruserdata
;
340 cmsg
->Facilitydataarray
= Facilitydataarray
;
343 static inline void capi_fill_DISCONNECT_B3_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
348 capi_cmsg_header(cmsg
, ApplId
, 0x84, 0x80, Messagenumber
, adr
);
352 static inline void capi_fill_MANUFACTURER_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
360 capi_cmsg_header(cmsg
, ApplId
, 0xff, 0x80, Messagenumber
, adr
);
361 cmsg
->ManuID
= ManuID
;
363 cmsg
->Function
= Function
;
364 cmsg
->ManuData
= ManuData
;
367 static inline void capi_fill_RESET_B3_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
372 capi_cmsg_header(cmsg
, ApplId
, 0x87, 0x80, Messagenumber
, adr
);
376 static inline void capi_fill_SELECT_B_PROTOCOL_REQ(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
381 _cstruct B1configuration
,
382 _cstruct B2configuration
,
383 _cstruct B3configuration
)
386 capi_cmsg_header(cmsg
, ApplId
, 0x41, 0x80, Messagenumber
, adr
);
387 cmsg
->B1protocol
= B1protocol
;
388 cmsg
->B2protocol
= B2protocol
;
389 cmsg
->B3protocol
= B3protocol
;
390 cmsg
->B1configuration
= B1configuration
;
391 cmsg
->B2configuration
= B2configuration
;
392 cmsg
->B3configuration
= B3configuration
;
395 static inline void capi_fill_CONNECT_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
401 _cstruct B1configuration
,
402 _cstruct B2configuration
,
403 _cstruct B3configuration
,
404 _cstruct ConnectedNumber
,
405 _cstruct ConnectedSubaddress
,
407 _cstruct BChannelinformation
,
408 _cstruct Keypadfacility
,
409 _cstruct Useruserdata
,
410 _cstruct Facilitydataarray
)
412 capi_cmsg_header(cmsg
, ApplId
, 0x02, 0x83, Messagenumber
, adr
);
413 cmsg
->Reject
= Reject
;
414 cmsg
->B1protocol
= B1protocol
;
415 cmsg
->B2protocol
= B2protocol
;
416 cmsg
->B3protocol
= B3protocol
;
417 cmsg
->B1configuration
= B1configuration
;
418 cmsg
->B2configuration
= B2configuration
;
419 cmsg
->B3configuration
= B3configuration
;
420 cmsg
->ConnectedNumber
= ConnectedNumber
;
421 cmsg
->ConnectedSubaddress
= ConnectedSubaddress
;
423 cmsg
->BChannelinformation
= BChannelinformation
;
424 cmsg
->Keypadfacility
= Keypadfacility
;
425 cmsg
->Useruserdata
= Useruserdata
;
426 cmsg
->Facilitydataarray
= Facilitydataarray
;
429 static inline void capi_fill_CONNECT_ACTIVE_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
433 capi_cmsg_header(cmsg
, ApplId
, 0x03, 0x83, Messagenumber
, adr
);
436 static inline void capi_fill_CONNECT_B3_ACTIVE_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
440 capi_cmsg_header(cmsg
, ApplId
, 0x83, 0x83, Messagenumber
, adr
);
443 static inline void capi_fill_CONNECT_B3_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
448 capi_cmsg_header(cmsg
, ApplId
, 0x82, 0x83, Messagenumber
, adr
);
449 cmsg
->Reject
= Reject
;
453 static inline void capi_fill_CONNECT_B3_T90_ACTIVE_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
457 capi_cmsg_header(cmsg
, ApplId
, 0x88, 0x83, Messagenumber
, adr
);
460 static inline void capi_fill_DATA_B3_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
465 capi_cmsg_header(cmsg
, ApplId
, 0x86, 0x83, Messagenumber
, adr
);
466 cmsg
->DataHandle
= DataHandle
;
469 static inline void capi_fill_DISCONNECT_B3_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
473 capi_cmsg_header(cmsg
, ApplId
, 0x84, 0x83, Messagenumber
, adr
);
476 static inline void capi_fill_DISCONNECT_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
480 capi_cmsg_header(cmsg
, ApplId
, 0x04, 0x83, Messagenumber
, adr
);
483 static inline void capi_fill_FACILITY_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
485 __u16 FacilitySelector
)
488 capi_cmsg_header(cmsg
, ApplId
, 0x80, 0x83, Messagenumber
, adr
);
489 cmsg
->FacilitySelector
= FacilitySelector
;
492 static inline void capi_fill_INFO_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
496 capi_cmsg_header(cmsg
, ApplId
, 0x08, 0x83, Messagenumber
, adr
);
499 static inline void capi_fill_MANUFACTURER_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
507 capi_cmsg_header(cmsg
, ApplId
, 0xff, 0x83, Messagenumber
, adr
);
508 cmsg
->ManuID
= ManuID
;
510 cmsg
->Function
= Function
;
511 cmsg
->ManuData
= ManuData
;
514 static inline void capi_fill_RESET_B3_RESP(_cmsg
* cmsg
, __u16 ApplId
, __u16 Messagenumber
,
518 capi_cmsg_header(cmsg
, ApplId
, 0x87, 0x83, Messagenumber
, adr
);
521 #endif /* __CAPIUTIL_H__ */