-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcapiutils.h
1513 lines (1402 loc) · 53.9 KB
/
capiutils.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#ifndef __CAPIUTILS_H__
#define __CAPIUTILS_H__
/*
* This program is free software and may be modified and
* distributed under the terms of the GNU Public License.
*/
#include <sys/types.h>
#include <sys/time.h>
#include <time.h>
#include "capicmd.h"
#ifdef __cplusplus
extern "C" {
#endif
/*----- errornumbers -----*/
#define CapiToManyAppls 0x1001
#define CapiLogBlkSizeToSmall 0x1002
#define CapiBuffExeceeds64k 0x1003
#define CapiMsgBufSizeToSmall 0x1004
#define CapiAnzLogConnNotSupported 0x1005
#define CapiRegReserved 0x1006
#define CapiRegBusy 0x1007
#define CapiRegOSResourceErr 0x1008
#define CapiRegNotInstalled 0x1009
#define CapiRegCtrlerNotSupportExtEquip 0x100a
#define CapiRegCtrlerOnlySupportExtEquip 0x100b
#define CapiNoError 0x0000
#define CapiIllAppNr 0x1101
#define CapiIllCmdOrSubcmdOrMsgToSmall 0x1102
#define CapiSendQueueFull 0x1103
#define CapiReceiveQueueEmpty 0x1104
#define CapiReceiveOverflow 0x1105
#define CapiUnknownNotPar 0x1106
#define CapiMsgBusy 0x1107
#define CapiMsgOSResourceErr 0x1108
#define CapiMsgNotInstalled 0x1109
#define CapiMsgCtrlerNotSupportExtEquip 0x110a
#define CapiMsgCtrlerOnlySupportExtEquip 0x110b
/* standard CAPI2.0 function aliases */
#define CAPI20_REGISTER capi20_register
#define CAPI20_RELEASE capi20_release
#define CAPI20_PUT_MESSAGE capi20_put_message
#define CAPI20_GET_MESSAGE capi20_get_message
#define CAPI20_WaitforMessage capi20_waitformessage
#define CAPI20_GET_MANUFACTURER capi20_get_manufacturer
#define CAPI20_GET_VERSION capi20_get_version
#define CAPI20_GET_SERIAL_NUMBER capi20_get_serial_number
#define CAPI20_GET_PROFILE capi20_get_profile
#define CAPI20_ISINSTALLED capi20_isinstalled
#define CAPI_REGISTER_ERROR unsigned
#define MESSAGE_EXCHANGE_ERROR unsigned
typedef unsigned char *CAPI_MESSAGE;
#if defined(__GLIBC__) && defined(__GLIBC_MINOR__)
#if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || __GLIBC__ > 2
#define HAS_UINT8_T
#include <stdint.h>
#endif
#endif
#ifdef HAS_UINT8_T
typedef uint8_t _cbyte;
typedef uint16_t _cword;
typedef uint32_t _cdword;
typedef uint64_t _cqword;
#else
typedef unsigned char _cbyte;
typedef unsigned short _cword;
typedef unsigned long _cdword;
typedef unsigned long long _cqword;
#endif
typedef CAPI_MESSAGE _cstruct;
typedef enum { CAPI_COMPOSE = 0, CAPI_DEFAULT = 1 } _cmstruct;
/*----- CAPI commands -----*/
#define CAPI_ALERT 0x01
#define CAPI_CONNECT 0x02
#define CAPI_CONNECT_ACTIVE 0x03
#define CAPI_CONNECT_B3_ACTIVE 0x83
#define CAPI_CONNECT_B3 0x82
#define CAPI_CONNECT_B3_T90_ACTIVE 0x88
#define CAPI_DATA_B3 0x86
#define CAPI_DISCONNECT_B3 0x84
#define CAPI_DISCONNECT 0x04
#define CAPI_FACILITY 0x80
#define CAPI_INFO 0x08
#define CAPI_LISTEN 0x05
#define CAPI_MANUFACTURER 0xff
#define CAPI_RESET_B3 0x87
#define CAPI_SELECT_B_PROTOCOL 0x41
/*----- CAPI subcommands -----*/
#define CAPI_REQ 0x80
#define CAPI_CONF 0x81
#define CAPI_IND 0x82
#define CAPI_RESP 0x83
/*-----------------------------------------------------------------------*/
static inline _cword _capimsg_getu16(void *m, int off)
{
_cword r = 0;
_cbyte *p;
p = (_cbyte *)m;
p += off;
r = p[1];
r <<= 8;
r |= *p;
return r;
}
static inline _cdword _capimsg_getu32(void *m, int off)
{
_cdword r = 0;
_cbyte *p, i;
p = (_cbyte *)m;
p += off + 3;
for (i = 0; i < 3; i++) {
r |= *p--;
r <<= 8;
}
r |= *p;
return r;
}
static inline _cqword _capimsg_getu64(void *m, int off)
{
_cqword r = 0;
_cbyte *p, i;
p = (_cbyte *)m;
p += off + 7;
for (i = 0; i < 7; i++) {
r |= *p--;
r <<= 8;
}
r |= *p;
return r;
}
#define CAPIMSG_BASELEN 8
#define CAPIMSG_U8(m, off) (*((_cbyte *)(m + off)))
#define CAPIMSG_U16(m, off) _capimsg_getu16(m, off)
#define CAPIMSG_U32(m, off) _capimsg_getu32(m, off)
#define CAPIMSG_U64(m, off) _capimsg_getu64(m, off)
#define CAPIMSG_LEN(m) CAPIMSG_U16(m,0)
#define CAPIMSG_APPID(m) CAPIMSG_U16(m,2)
#define CAPIMSG_COMMAND(m) CAPIMSG_U8(m,4)
#define CAPIMSG_SUBCOMMAND(m) CAPIMSG_U8(m,5)
#define CAPIMSG_CMD(m) (((m[4])<<8)|(m[5]))
#define CAPIMSG_MSGID(m) CAPIMSG_U16(m,6)
#define CAPIMSG_CONTROLLER(m) (m[8] & 0x7f)
#define CAPIMSG_CONTROL(m) CAPIMSG_U32(m, 8)
#define CAPIMSG_NCCI(m) CAPIMSG_CONTROL(m)
#define CAPIMSG_DATALEN(m) CAPIMSG_U16(m,16) /* DATA_B3_REQ */
static inline void capimsg_setu8(void *m, int off, _cbyte val)
{
((_cbyte *)m)[off] = val;
}
static inline void capimsg_setu16(void *m, int off, _cword val)
{
((_cbyte *)m)[off] = val & 0xff;
((_cbyte *)m)[off+1] = (val >> 8) & 0xff;
}
static inline void capimsg_setu32(void *m, int off, _cdword val)
{
((_cbyte *)m)[off] = val & 0xff;
((_cbyte *)m)[off+1] = (val >> 8) & 0xff;
((_cbyte *)m)[off+2] = (val >> 16) & 0xff;
((_cbyte *)m)[off+3] = (val >> 24) & 0xff;
}
static inline void capimsg_setu64(void *m, int off, _cqword val)
{
((_cbyte *)m)[off] = val & 0xff;
((_cbyte *)m)[off+1] = (val >> 8) & 0xff;
((_cbyte *)m)[off+2] = (val >> 16) & 0xff;
((_cbyte *)m)[off+3] = (val >> 24) & 0xff;
((_cbyte *)m)[off+4] = (val >> 32) & 0xff;
((_cbyte *)m)[off+5] = (val >> 40) & 0xff;
((_cbyte *)m)[off+6] = (val >> 48) & 0xff;
((_cbyte *)m)[off+7] = (val >> 56) & 0xff;
}
#define CAPIMSG_SETLEN(m, len) capimsg_setu16(m, 0, len)
#define CAPIMSG_SETAPPID(m, applid) capimsg_setu16(m, 2, applid)
#define CAPIMSG_SETCOMMAND(m,cmd) capimsg_setu8(m, 4, cmd)
#define CAPIMSG_SETSUBCOMMAND(m, cmd) capimsg_setu8(m, 5, cmd)
#define CAPIMSG_SETMSGID(m, msgid) capimsg_setu16(m, 6, msgid)
#define CAPIMSG_SETCONTROL(m, contr) capimsg_setu32(m, 8, contr)
#define CAPIMSG_SETDATALEN(m, len) capimsg_setu16(m, 16, len)
/*
* The _cmsg structure contains all possible CAPI 2.0 parameter.
* All parameters are stored here first. The function capi_cmsg2message()
* assembles the parameter and builds CAPI2.0 conform messages.
* capi_message2cmsg disassembles CAPI 2.0 messages and stores the
* parameter in the _cmsg structure
*/
typedef struct {
/* Header */
_cword ApplId;
_cbyte Command;
_cbyte Subcommand;
_cword Messagenumber;
/* Parameter */
union {
_cdword adrController;
_cdword adrPLCI;
_cdword adrNCCI;
} adr;
_cmstruct AdditionalInfo;
_cstruct B1configuration;
_cword B1protocol;
_cstruct B2configuration;
_cword B2protocol;
_cstruct B3configuration;
_cword B3protocol;
_cstruct BC;
_cstruct BChannelinformation;
_cmstruct BProtocol;
_cstruct CalledPartyNumber;
_cstruct CalledPartySubaddress;
_cstruct CallingPartyNumber;
_cstruct CallingPartySubaddress;
_cdword CIPmask;
_cdword CIPmask2;
_cword CIPValue;
_cdword Class;
_cstruct ConnectedNumber;
_cstruct ConnectedSubaddress;
_cdword Data32;
_cqword Data64;
_cword DataHandle;
_cword DataLength;
_cstruct FacilityConfirmationParameter;
_cstruct Facilitydataarray;
_cstruct FacilityIndicationParameter;
_cstruct FacilityRequestParameter;
_cstruct FacilityResponseParameters;
_cword FacilitySelector;
_cword Flags;
_cdword Function;
#ifndef CAPI_LIBRARY_V2
_cstruct Globalconfiguration;
#endif
_cstruct HLC;
_cword Info;
_cstruct InfoElement;
_cdword InfoMask;
_cword InfoNumber;
_cstruct Keypadfacility;
_cstruct LLC;
_cstruct ManuData;
_cdword ManuID;
_cstruct NCPI;
_cword Reason;
_cword Reason_B3;
_cword Reject;
_cstruct Useruserdata;
#ifndef CAPI_LIBRARY_V2
_cstruct SendingComplete;
#endif
unsigned char *Data;
/* intern */
_cword l;
unsigned p;
unsigned char *par;
_cbyte *m;
/* buffer to construct message */
_cbyte buf[180];
} _cmsg;
/*
* capi_cmsg2message() assembles the parameter from _cmsg to a CAPI 2.0
* conform message
*/
#define capi20_cmsg2message capi_cmsg2message
unsigned capi_cmsg2message(_cmsg *cmsg, unsigned char *msg);
/*
* capi20_message2cmsg disassembles a CAPI message an writes the parameter
* into _cmsg for easy access
*/
#define capi20_message2cmsg capi_message2cmsg
unsigned capi_message2cmsg (_cmsg *cmsg, unsigned char *msg);
/*
* capi20_cmsg_header() fills the _cmsg structure with default values,
* so only parameter with non default values must be changed before
* sending the message.
*/
#define CAPI_CMSG_HEADER capi_cmsg_header
#define capi20_cmsg_header capi_cmsg_header
unsigned capi_cmsg_header (_cmsg *cmsg, unsigned _ApplId, _cbyte _Command, _cbyte _Subcommand, _cword _Messagenumber, _cdword _Controller);
/*
* capi_cmsg_answer() is used to answer indications. It changes the header
* of an indication to a response, and leaves all other parameters the same
*/
#define capi20_cmsg_answer capi_cmsg_answer
static inline void capi_cmsg_answer(_cmsg * cmsg)
{
cmsg->Subcommand |= 0x01;
}
/*
* capi_get_cmsg() works like capi20_get_message() and converts the
* CAPI message * to a _cmsg with capi_message2cmsg().
* Possible errors from capi20_get_message() will be returned.
*/
#define CAPI_GET_CMSG capi_get_cmsg
#define capi20_get_cmsg capi_get_cmsg
unsigned capi_get_cmsg(_cmsg *cmsg, unsigned applid);
/*
* capi_put_cmsg() works like capi20_put_message() but it converts the
* _cmsg * first with capi_cmsg2message(). Possible errors from
* capi_put_message() will be returned.
*/
#define CAPI_PUT_CMSG capi_put_cmsg
#define capi20_put_cmsg capi_put_cmsg
unsigned capi_put_cmsg(_cmsg *cmsg);
/*-----------------------------------------------------------------------*/
/*
* Debugging / Tracing functions
*/
/*
* capi_info2str generated a readable string for Capi2.0 reasons.
*/
#define capi20_info2str capi_info2str
char *capi_info2str(_cword reason);
#define capi20_cmd2str capi_cmd2str
char *capi_cmd2str(_cbyte cmd, _cbyte subcmd);
/*
* WARNING: The following two functions use a single static buffer and
* are not thread-safe.
*/
#define capi20_cmsg2str capi_cmsg2str
char *capi_cmsg2str(_cmsg * cmsg);
#define capi20_message2str capi_message2str
char *capi_message2str(_cbyte * msg);
/*-----------------------------------------------------------------------*/
#define ALERT_REQ_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define ALERT_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
/* Additional info elements */
#define ALERT_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
#define ALERT_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
/* coded according to ETS 300 102-1 / Q.931 */
#define ALERT_REQ_USERUSERDATA(x) ((x)->Useruserdata)
/* coded according to ETS 300 102-1 / Q.931 */
#define ALERT_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
/* which is used to transfer additional parameters coded */
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
/* This field is used to transport one or more complete facility */
/* data information elements. */
#define ALERT_CONF_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define ALERT_CONF_INFO(x) ((x)->Info)
/* 0: alert initiated */
/* 0x0003: alert already sent by another application */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal PLCI */
/* 0x2007: illegal message parameter coding */
#define CONNECT_REQ_CONTROLLER(x) ((x)->adr.adrController)
#define CONNECT_REQ_CIPVALUE(x) ((x)->CIPValue)
/* Compatibility Information Profile */
#define CONNECT_REQ_CALLEDPARTYNUMBER(x) ((x)->CalledPartyNumber)
/* Called party number */
#define CONNECT_REQ_CALLINGPARTYNUMBER(x) ((x)->CallingPartyNumber)
/* Calling party number */
#define CONNECT_REQ_CALLEDPARTYSUBADDRESS(x) ((x)->CalledPartySubaddress)
/* Called party subaddress */
#define CONNECT_REQ_CALLINGPARTYSUBADDRESS(x) ((x)->CallingPartySubaddress)
/* Calling party subaddress */
#define CONNECT_REQ_BPROTOCOL(x) ((x)->BProtocol)
/* B protocol to be used */
#define CONNECT_REQ_B1PROTOCOL(x) ((x)->B1protocol)
/* Physical layer and framing */
#define CONNECT_REQ_B2PROTOCOL(x) ((x)->B2protocol)
/* Data link layer */
#define CONNECT_REQ_B3PROTOCOL(x) ((x)->B3protocol)
/* Network layer */
#define CONNECT_REQ_B1CONFIGURATION(x) ((x)->B1configuration)
/* Physical layer and framing parameter */
#define CONNECT_REQ_B2CONFIGURATION(x) ((x)->B2configuration)
/* Data link layer parameter */
#define CONNECT_REQ_B3CONFIGURATION(x) ((x)->B3configuration)
/* Network layer parameter */
#ifndef CAPI_LIBRARY_V2
#define CONNECT_REQ_GLOBALCONFIGURATION(x) ((x)->Globalconfiguration)
/* all layer parameter */
#endif
#define CONNECT_REQ_BC(x) ((x)->BC)
/* Bearer Capability */
#define CONNECT_REQ_LLC(x) ((x)->LLC)
/* Low Layer Compatibility */
#define CONNECT_REQ_HLC(x) ((x)->HLC)
/* High Layer Compatibility */
#define CONNECT_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
/* Additional information elements */
#define CONNECT_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
#define CONNECT_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
/* coded according to ETS 300 102-1 / Q.931 */
#define CONNECT_REQ_USERUSERDATA(x) ((x)->Useruserdata)
/* coded according to ETS 300 102-1 / Q.931 */
#define CONNECT_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
/* which is used to transfer additional parameters coded */
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
/* This field is used to transport one or more complete facility */
/* data information elements. */
#define CONNECT_CONF_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define CONNECT_CONF_INFO(x) ((x)->Info)
/* 0: connect initiated */
/* 0x2002: illegal controller */
/* 0x2003: out of PLCI */
/* 0x2007: illegal message parameter coding */
/* 0x3001: B1 protocol not supported */
/* 0x3002: B2 protocol not supported */
/* 0x3003: B3 protocol not supported */
/* 0x3004: B1 protocol parameter not supported */
/* 0x3005: B2 protocol parameter not supported */
/* 0x3006: B3 protocol parameter not supported */
/* 0x3007: B protocol combination not supported */
/* 0x300A: CIP Value unknown */
#define CONNECT_IND_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define CONNECT_IND_CIPVALUE(x) ((x)->CIPValue)
/* Compatibility Information Profile */
#define CONNECT_IND_CALLEDPARTYNUMBER(x) ((x)->CalledPartyNumber)
/* Called party number */
#define CONNECT_IND_CALLINGPARTYNUMBER(x) ((x)->CallingPartyNumber)
/* Calling party number */
#define CONNECT_IND_CALLEDPARTYSUBADDRESS(x) ((x)->CalledPartySubaddress)
/* Called party subaddress */
#define CONNECT_IND_CALLINGPARTYSUBADDRESS(x) ((x)->CallingPartySubaddress)
/* Calling party subaddress */
#define CONNECT_IND_BC(x) ((x)->BC)
/* Bearer compatibility */
#define CONNECT_IND_LLC(x) ((x)->LLC)
/* Low Layer Compatibility */
#define CONNECT_IND_HLC(x) ((x)->HLC)
/* High Layer Compatibility */
#define CONNECT_IND_ADDITIONALINFO(x) ((x)->AdditionalInfo)
/* Additional information elements */
#define CONNECT_IND_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
#define CONNECT_IND_KEYPADFACILITY(x) ((x)->Keypadfacility)
/* coded according to ETS 300 102-1 / Q.931 */
#define CONNECT_IND_USERUSERDATA(x) ((x)->Useruserdata)
/* coded according to ETS 300 102-1 / Q.931 */
#define CONNECT_IND_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
/* which is used to transfer additional parameters coded */
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
/* This field is used to transport one or more complete facility */
/* data information elements. */
#define CONNECT_RESP_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define CONNECT_RESP_REJECT(x) ((x)->Reject)
/* 0: accept call */
/* 1: ignore call */
/* 2: reject call, normal call clearing */
/* 3: reject call, user busy */
/* 4: reject call, requestet circuit/channel not available */
/* 5: reject call, facility rejected */
/* 6: reject call, channel unacceptable */
/* 7: reject call, incompatible destination */
/* 8: reject call, destination out of order */
#define CONNECT_RESP_BPROTOCOL(x) ((x)->BProtocol)
/* B protocol to be used */
#define CONNECT_RESP_B1PROTOCOL(x) ((x)->B1protocol)
/* Physical layer and framing */
#define CONNECT_RESP_B2PROTOCOL(x) ((x)->B2protocol)
/* Data link layer */
#define CONNECT_RESP_B3PROTOCOL(x) ((x)->B3protocol)
/* Network layer */
#define CONNECT_RESP_B1CONFIGURATION(x) ((x)->B1configuration)
/* Physical layer and framing parameter */
#define CONNECT_RESP_B2CONFIGURATION(x) ((x)->B2configuration)
/* Data link layer parameter */
#define CONNECT_RESP_B3CONFIGURATION(x) ((x)->B3configuration)
/* Network layer parameter */
#ifndef CAPI_LIBRARY_V2
#define CONNECT_RESP_GLOBALCONFIGURATION(x) ((x)->Globalconfiguration)
/* all layer parameter */
#endif
#define CONNECT_RESP_CONNECTEDNUMBER(x) ((x)->ConnectedNumber)
/* Connected number */
#define CONNECT_RESP_CONNECTEDSUBADDRESS(x) ((x)->ConnectedSubaddress)
/* Connected subaddress */
#define CONNECT_RESP_LLC(x) ((x)->LLC)
/* Low Layer Compatibility */
#define CONNECT_RESP_ADDITIONALINFO(x) ((x)->AdditionalInfo)
/* Additional information elements */
#define CONNECT_RESP_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
#define CONNECT_RESP_KEYPADFACILITY(x) ((x)->Keypadfacility)
/* coded according to ETS 300 102-1 / Q.931 */
#define CONNECT_RESP_USERUSERDATA(x) ((x)->Useruserdata)
/* coded according to ETS 300 102-1 / Q.931 */
#define CONNECT_RESP_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
/* which is used to transfer additional parameters coded */
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
/* This field is used to transport one or more complete facility */
/* data information elements. */
#define CONNECT_ACTIVE_IND_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define CONNECT_ACTIVE_IND_CONNECTEDNUMBER(x) ((x)->ConnectedNumber)
/* Connected number */
#define CONNECT_ACTIVE_IND_CONNECTEDSUBADDRESS(x) ((x)->ConnectedSubaddress)
/* Connected subaddress */
#define CONNECT_ACTIVE_IND_LLC(x) ((x)->LLC)
/* Low Layer Compatibility */
#define CONNECT_ACTIVE_RESP_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define CONNECT_B3_ACTIVE_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define CONNECT_B3_ACTIVE_IND_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define CONNECT_B3_ACTIVE_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define CONNECT_B3_REQ_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define CONNECT_B3_REQ_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define CONNECT_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define CONNECT_B3_CONF_INFO(x) ((x)->Info)
/* 0: connect initiated */
/* 0x0001: NCPI not supported by current protocol, NCPI ignored */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal PLCI */
/* 0x2004: out of NCCI */
/* 0x3008: NCPI not supported */
#define CONNECT_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define CONNECT_B3_IND_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define CONNECT_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define CONNECT_B3_RESP_REJECT(x) ((x)->Reject)
/* 0: accept call */
/* 2: reject call, normal call clearing */
#define CONNECT_B3_RESP_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define CONNECT_B3_T90_ACTIVE_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define CONNECT_B3_T90_ACTIVE_IND_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define CONNECT_B3_T90_ACTIVE_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DATA_B3_REQ_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DATA_B3_REQ_DATA(x) ((x)->Data)
/* Pointer to the data to be sent */
#define DATA_B3_REQ_DATALENGTH(x) ((x)->DataLength)
/* Size of data area to be sent */
#define DATA_B3_REQ_DATAHANDLE(x) ((x)->DataHandle)
/* Referenced in DATA_B3_CONF */
#define DATA_B3_REQ_FLAGS(x) ((x)->Flags)
/* [0]: qualifier bit */
/* [1]: more data bit */
/* [2]: delivery confirmation bit */
/* [3]: expedited data */
/* [4] to [15]: reserved */
#define DATA_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DATA_B3_CONF_DATAHANDLE(x) ((x)->DataHandle)
/* Identifies the data area of corresponding DATA_B3_REQ */
#define DATA_B3_CONF_INFO(x) ((x)->Info)
/* 0: data transmission initiated */
/* 0x0002: flags not supported by current protocol, flags ignored */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal NCCI */
/* 0x2007: illegal message parameter coding */
/* 0x300A: flags not supported (reserved bits) */
/* 0x300C: data length not supported by current protocol */
#define DATA_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DATA_B3_IND_DATA(x) ((x)->Data)
/* Pointer to data received */
#define DATA_B3_IND_DATALENGTH(x) ((x)->DataLength)
/* Size of data area received */
#define DATA_B3_IND_DATAHANDLE(x) ((x)->DataHandle)
/* handle to data area, referenced in DATA_B3_RESP */
#define DATA_B3_IND_FLAGS(x) ((x)->Flags)
/* 0: qualifier bit */
/* 1: more-data bit */
/* 2: delivery confirmation bit */
/* 3: expedited data */
/* 4 to 14: reserved */
/* [15]: framing error bit, data may be invalid (only with corresponding B2 protocol) */
#define DATA_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DATA_B3_RESP_DATAHANDLE(x) ((x)->DataHandle)
/* Data area reference in corresponding DATA_B3_IND */
#define DISCONNECT_B3_REQ_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DISCONNECT_B3_REQ_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define DISCONNECT_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DISCONNECT_B3_CONF_INFO(x) ((x)->Info)
/* 0: disconnect initiated */
/* 0x0001: NCPI not supported by current protocol, NCPI ignored */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal NCCI */
/* 0x2007: illegal message parameter coding */
/* 0x3008: NCPI not supported */
#define DISCONNECT_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DISCONNECT_B3_IND_REASON_B3(x) ((x)->Reason_B3)
/* 0: clearing according to protocol */
/* 0x3301: protocol error layer 1 */
/* 0x3302: protocol error layer 2 */
/* 0x3303: protocol error layer 3 */
/* protocol dependent values are described in chapter 6 */
#define DISCONNECT_B3_IND_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define DISCONNECT_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define DISCONNECT_REQ_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define DISCONNECT_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
/* Additional information elements */
#define DISCONNECT_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
#define DISCONNECT_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
/* coded according to ETS 300 102-1 / Q.931 */
#define DISCONNECT_REQ_USERUSERDATA(x) ((x)->Useruserdata)
/* coded according to ETS 300 102-1 / Q.931 */
#define DISCONNECT_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
/* which is used to transfer additional parameters coded */
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
/* This field is used to transport one or more complete facility */
/* data information elements. */
#define DISCONNECT_CONF_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define DISCONNECT_CONF_INFO(x) ((x)->Info)
/* 0: disconnect initiated */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal PLCI */
/* 0x2007: illegal message parameter coding */
#define DISCONNECT_IND_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define DISCONNECT_IND_REASON(x) ((x)->Reason)
/* 0: no cause available */
/* 0x3301: protocol error layer 1 */
/* 0x3302: protocol error layer 2 */
/* 0x3303: protocol error layer 3 */
/* 0x3304: another application got that call */
/* 0x34xx: disconnect cause from the network according to Q.931/ETS 300 102-1. In the field 'xx' the cause value received within a cause information element (octet 4) from the network is indicated. */
#define DISCONNECT_RESP_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define FACILITY_REQ_CONTROLLER(x) ((x)->adr.adrController)
#define FACILITY_REQ_PLCI(x) ((x)->adr.adrPLCI)
#define FACILITY_REQ_NCCI(x) ((x)->adr.adrNCCI)
/* Depending on the facility selector */
#define FACILITY_REQ_FACILITYSELECTOR(x) ((x)->FacilitySelector)
/* 0: Handset Support */
/* 1: DTMF */
/* 2 to n: reserved */
#define FACILITY_REQ_FACILITYREQUESTPARAMETER(x) ((x)->FacilityRequestParameter)
/* Facility depending parameters */
#define FACILITY_CONF_CONTROLLER(x) ((x)->adr.adrController)
#define FACILITY_CONF_PLCI(x) ((x)->adr.adrPLCI)
#define FACILITY_CONF_NCCI(x) ((x)->adr.adrNCCI)
/* Depending on the facility selector */
#define FACILITY_CONF_INFO(x) ((x)->Info)
/* 0: request accepted */
/* 0x2001: message not supported in current state */
/* 0x2002: incorrect Controller/PLCI/NCCI */
/* 0x2007: illegal message parameter coding */
/* 0x300B: facility not supported */
#define FACILITY_CONF_FACILITYSELECTOR(x) ((x)->FacilitySelector)
/* 0: Handset Support */
/* 1: DTMF */
/* 2 to n: reserved */
#define FACILITY_CONF_FACILITYCONFIRMATIONPARAMETER(x) ((x)->FacilityConfirmationParameter)
/* Facility-depending parameters */
#define FACILITY_IND_CONTROLLER(x) ((x)->adr.adrController)
#define FACILITY_IND_PLCI(x) ((x)->adr.adrPLCI)
#define FACILITY_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Depending on the facility selector */
#define FACILITY_IND_FACILITYSELECTOR(x) ((x)->FacilitySelector)
/* 0: Handset Support */
/* 1: DTMF */
/* 2 to n: reserved */
#define FACILITY_IND_FACILITYINDICATIONPARAMETER(x) ((x)->FacilityIndicationParameter)
/* Facility-depending parameters */
#define FACILITY_RESP_CONTROLLER(x) ((x)->adr.adrController)
#define FACILITY_RESP_PLCI(x) ((x)->adr.adrPLCI)
#define FACILITY_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Depending on the facility selector */
#define FACILITY_RESP_FACILITYSELECTOR(x) ((x)->FacilitySelector)
/* 0: Handset Support */
/* 1: DTMF */
/* 2 to n: reserved */
/* Facility response parameters */
/* struct */
/* Facility-depending parameters */
#define INFO_REQ_CONTROLLER(x) ((x)->adr.adrController)
#define INFO_REQ_PLCI(x) ((x)->adr.adrPLCI)
/* See note */
#define INFO_REQ_CALLEDPARTYNUMBER(x) ((x)->CalledPartyNumber)
/* Called party number */
#define INFO_REQ_ADDITIONALINFO(x) ((x)->AdditionalInfo)
/* Additional information elements */
#define INFO_REQ_BCHANNELINFORMATION(x) ((x)->BChannelinformation)
#define INFO_REQ_KEYPADFACILITY(x) ((x)->Keypadfacility)
/* coded according to ETS 300 102-1 / Q.931 */
#define INFO_REQ_USERUSERDATA(x) ((x)->Useruserdata)
/* coded according to ETS 300 102-1 / Q.931 */
#define INFO_REQ_FACILITYDATAARRAY(x) ((x)->Facilitydataarray)
/* which is used to transfer additional parameters coded */
/* according to ETS 300 102-1 / Q.931 starting from octet 1. */
/* This field is used to transport one or more complete facility */
/* data information elements. */
#define INFO_CONF_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define INFO_CONF_INFO(x) ((x)->Info)
/* 0: transmission of information initiated */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal Controller/PLCI */
/* 0x2003: out of PLCI */
/* 0x2007: illegal message parameter coding */
#define INFO_IND_CONTROLLER(x) ((x)->adr.adrController)
#define INFO_IND_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define INFO_IND_INFONUMBER(x) ((x)->InfoNumber)
/* Information element identifier */
#define INFO_IND_INFOELEMENT(x) ((x)->InfoElement)
/* Information element dependent structure */
#define INFO_RESP_CONTROLLER(x) ((x)->adr.adrController)
#define INFO_RESP_PLCI(x) ((x)->adr.adrPLCI)
/* As in INFO_IND */
#define LISTEN_REQ_CONTROLLER(x) ((x)->adr.adrController)
#define LISTEN_REQ_INFOMASK(x) ((x)->InfoMask)
/* Bit field, coding as follows: */
/* 0: cause */
/* 1: date/Time */
/* 2: display */
/* 3: user-user information */
/* 4: call progression */
/* 5: facility */
/* 6: charging */
/* 7 to 31: reserved */
#define LISTEN_REQ_CIPMASK(x) ((x)->CIPmask)
/* Bit field, coding as follows: */
/* 0: any match */
/* 1: speech */
/* 2: unrestricted digital information */
/* 3: restricted digital information */
/* 4: 3.1 kHz audio */
/* 5: 7.0 kHz audio */
/* 6: video */
/* 7: packet mode */
/* 8: 56 kBit/s rate adaptation */
/* 9: unrestricted digital information with tones/announcements */
/* 10..15: reserved */
/* 16: telephony */
/* 17: fax group 2/3 */
/* 18: fax group 4 class 1 */
/* 19: Teletex service (basic and mixed), fax group 4 class 2 */
/* 20: Teletex service (basic and processable) */
/* 21: Teletex service (basic) */
/* 22: Videotex */
/* 23: Telex */
/* reserved for additional services */
/* 25: OSI applications according X.200 */
/* 26: 7 kHz Telephony */
/* 27: Video Telephony F.721, first connection */
/* 28: Video Telephony F.721, second connection */
/* 29 to 31: reserved */
#define LISTEN_REQ_CIPMASK2(x) ((x)->CIPmask2)
/* reserved for additional services */
#define LISTEN_REQ_CALLINGPARTYNUMBER(x) ((x)->CallingPartyNumber)
/* Calling party number */
#define LISTEN_REQ_CALLINGPARTYSUBADDRESS(x) ((x)->CallingPartySubaddress)
/* Calling party subaddress */
#define LISTEN_CONF_CONTROLLER(x) ((x)->adr.adrController)
#define LISTEN_CONF_INFO(x) ((x)->Info)
/* 0: listen is active */
/* 0x2002: illegal controller */
/* 0x2005: out of LISTEN-Resources */
/* 0x2007: illegal message parameter coding */
#define MANUFACTURER_REQ_CONTROLLER(x) ((x)->adr.adrController)
#define MANUFACTURER_REQ_MANUID(x) ((x)->ManuID)
/* Manufacturer specific ID (should be unique) */
/* Manufacturer specific */
#define MANUFACTURER_REQ_CLASS(x) ((x)->Class)
#define MANUFACTURER_REQ_FUNCTION(x) ((x)->Function)
#define MANUFACTURER_REQ_MANUDATA(x) ((x)->ManuData)
/* Manufacturer specific data */
#define MANUFACTURER_CONF_CONTROLLER(x) ((x)->adr.adrController)
#define MANUFACTURER_CONF_MANUID(x) ((x)->ManuID)
/* Manufacturer specific ID (should be unique) */
/* Manufacturer specific */
#define MANUFACTURER_CONF_CLASS(x) ((x)->Class)
#define MANUFACTURER_CONF_FUNCTION(x) ((x)->Function)
#define MANUFACTURER_CONF_MANUDATA(x) ((x)->ManuData)
/* Manufacturer specific data */
#define MANUFACTURER_IND_CONTROLLER(x) ((x)->adr.adrController)
#define MANUFACTURER_IND_MANUID(x) ((x)->ManuID)
/* Manufacturer specific ID (should be unique) */
/* Manufacturer specific */
#define MANUFACTURER_IND_CLASS(x) ((x)->Class)
#define MANUFACTURER_IND_FUNCTION(x) ((x)->Function)
#define MANUFACTURER_IND_MANUDATA(x) ((x)->ManuData)
/* Manufacturer specific data */
#define MANUFACTURER_RESP_CONTROLLER(x) ((x)->adr.adrController)
#define MANUFACTURER_RESP_MANUID(x) ((x)->ManuID)
/* Manufacturer specific ID (should be unique) */
/* Manufacturer specific */
#define MANUFACTURER_RESP_CLASS(x) ((x)->Class)
#define MANUFACTURER_RESP_FUNCTION(x) ((x)->Function)
#define MANUFACTURER_RESP_MANUDATA(x) ((x)->ManuData)
/* Manufacturer specific data */
#define RESET_B3_REQ_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define RESET_B3_REQ_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define RESET_B3_CONF_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define RESET_B3_CONF_INFO(x) ((x)->Info)
/* 0: reset initiated */
/* 0x0001: NCPI not supported by current protocol, NCPI ignored */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal NCCI */
/* 0x2007: illegal message parameter coding */
/* 0x3008: NCPI not supported */
/* 0x300D: reset procedure not supported by current protocol */
#define RESET_B3_IND_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define RESET_B3_IND_NCPI(x) ((x)->NCPI)
/* Network Control Protocol Information */
#define RESET_B3_RESP_NCCI(x) ((x)->adr.adrNCCI)
/* Network Control Connection Identifier */
#define SELECT_B_PROTOCOL_REQ_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define SELECT_B_PROTOCOL_REQ_BPROTOCOL(x) ((x)->BProtocol)
/* Protocol definition */
#define SELECT_B_PROTOCOL_REQ_B1PROTOCOL(x) ((x)->B1protocol)
/* Physical layer and framing */
#define SELECT_B_PROTOCOL_REQ_B2PROTOCOL(x) ((x)->B2protocol)
/* Data link layer */
#define SELECT_B_PROTOCOL_REQ_B3PROTOCOL(x) ((x)->B3protocol)
/* Network layer */
#define SELECT_B_PROTOCOL_REQ_B1CONFIGURATION(x) ((x)->B1configuration)
/* Physical layer and framing parameter */
#define SELECT_B_PROTOCOL_REQ_B2CONFIGURATION(x) ((x)->B2configuration)
/* Data link layer parameter */
#define SELECT_B_PROTOCOL_REQ_B3CONFIGURATION(x) ((x)->B3configuration)
/* Network layer parameter */
#ifndef CAPI_LIBRARY_V2
#define SELECT_B_PROTOCOL_REQ_GLOBALCONFIGURATION(x) ((x)->Globalconfiguration)
/* all layer parameter */
#endif
#define SELECT_B_PROTOCOL_CONF_PLCI(x) ((x)->adr.adrPLCI)
/* Physical Link Connection Identifier */
#define SELECT_B_PROTOCOL_CONF_INFO(x) ((x)->Info)
/* 0: protocol switch successful */
/* 0x2001: message not supported in current state */
/* 0x2002: illegal PLCI */
/* 0x2007: illegal message parameter coding */
/* 0x3001: B1 protocol not supported */
/* 0x3002: B2 protocol not supported */
/* 0x3003: B3 protocol not supported */
/* 0x3004: B1 protocol parameter not supported */
/* 0x3005: B2 protocol parameter not supported */
/* 0x3006: B3 protocol parameter not supported */
/* 0x3007: B protocol combination not supported */
/*----- tests for specific commands -----*/
#define IS_CONNECT_IND(m) ((m)->Command==0x02 && (m)->Subcommand==0x82)
#define IS_CONNECT_ACTIVE_IND(m) ((m)->Command==0x03 && (m)->Subcommand==0x82)
#define IS_CONNECT_B3_ACTIVE_IND(m) ((m)->Command==0x83 && (m)->Subcommand==0x82)
#define IS_CONNECT_B3_IND(m) ((m)->Command==0x82 && (m)->Subcommand==0x82)
#define IS_CONNECT_B3_T90_ACTIVE_IND(m) ((m)->Command==0x88 && (m)->Subcommand==0x82)
#define IS_DATA_B3_IND(m) ((m)->Command==0x86 && (m)->Subcommand==0x82)
#define IS_DISCONNECT_B3_IND(m) ((m)->Command==0x84 && (m)->Subcommand==0x82)
#define IS_DISCONNECT_IND(m) ((m)->Command==0x04 && (m)->Subcommand==0x82)
#define IS_FACILITY_IND(m) ((m)->Command==0x80 && (m)->Subcommand==0x82)
#define IS_INFO_IND(m) ((m)->Command==0x08 && (m)->Subcommand==0x82)
#define IS_MANUFACTURER_IND(m) ((m)->Command==0xff && (m)->Subcommand==0x82)
#define IS_RESET_B3_IND(m) ((m)->Command==0x87 && (m)->Subcommand==0x82)
#define IS_ALERT_CONF(m) ((m)->Command==0x01 && (m)->Subcommand==0x81)
#define IS_CONNECT_CONF(m) ((m)->Command==0x02 && (m)->Subcommand==0x81)
#define IS_CONNECT_B3_CONF(m) ((m)->Command==0x82 && (m)->Subcommand==0x81)
#define IS_DATA_B3_CONF(m) ((m)->Command==0x86 && (m)->Subcommand==0x81)
#define IS_DISCONNECT_B3_CONF(m) ((m)->Command==0x84 && (m)->Subcommand==0x81)
#define IS_DISCONNECT_CONF(m) ((m)->Command==0x04 && (m)->Subcommand==0x81)
#define IS_FACILITY_CONF(m) ((m)->Command==0x80 && (m)->Subcommand==0x81)
#define IS_INFO_CONF(m) ((m)->Command==0x08 && (m)->Subcommand==0x81)
#define IS_LISTEN_CONF(m) ((m)->Command==0x05 && (m)->Subcommand==0x81)
#define IS_MANUFACTURER_CONF(m) ((m)->Command==0xff && (m)->Subcommand==0x81)
#define IS_RESET_B3_CONF(m) ((m)->Command==0x87 && (m)->Subcommand==0x81)
#define IS_SELECT_B_PROTOCOL_CONF(m) ((m)->Command==0x41 && (m)->Subcommand==0x81)
/*----- header functions that fill the _cmsg structure with default -----*/
/*----- values. Only nonstandard parameter need to be changed -----*/
#define ALERT_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x01,0x80,Messagenumber,adr)
#define CONNECT_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x02,0x80,Messagenumber,adr)
#define CONNECT_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x82,0x80,Messagenumber,adr)
#define DATA_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x86,0x80,Messagenumber,adr)
#define DISCONNECT_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x84,0x80,Messagenumber,adr)
#define DISCONNECT_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x04,0x80,Messagenumber,adr)
#define FACILITY_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x80,0x80,Messagenumber,adr)
#define INFO_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x08,0x80,Messagenumber,adr)
#define LISTEN_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x05,0x80,Messagenumber,adr)
#define MANUFACTURER_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0xff,0x80,Messagenumber,adr)
#define RESET_B3_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x87,0x80,Messagenumber,adr)
#define SELECT_B_PROTOCOL_REQ_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x41,0x80,Messagenumber,adr)
#define CONNECT_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x02,0x83,Messagenumber,adr)
#define CONNECT_ACTIVE_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x03,0x83,Messagenumber,adr)
#define CONNECT_B3_ACTIVE_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x83,0x83,Messagenumber,adr)
#define CONNECT_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x82,0x83,Messagenumber,adr)
#define CONNECT_B3_T90_ACTIVE_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x88,0x83,Messagenumber,adr)
#define DATA_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x86,0x83,Messagenumber,adr)
#define DISCONNECT_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x84,0x83,Messagenumber,adr)
#define DISCONNECT_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x04,0x83,Messagenumber,adr)
#define FACILITY_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x80,0x83,Messagenumber,adr)
#define INFO_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x08,0x83,Messagenumber,adr)
#define MANUFACTURER_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0xff,0x83,Messagenumber,adr)
#define RESET_B3_RESP_HEADER(cmsg,ApplId,Messagenumber,adr) \
CAPI_CMSG_HEADER(cmsg,ApplId,0x87,0x83,Messagenumber,adr)
/*
* CAPI-functions that correspond to the CAPI messages specified in the
* CAPI 2.0 specification. All possible parameter have to be specified.
* The CAPI message is sent immediately when calling these functions,
* return values are the same as in capi_put_message()
*/
unsigned ALERT_REQ (_cmsg *cmsg, _cword ApplId, _cword Messagenumber