Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* $Id: capiutil.h,v 1.5.6.2 2001/09/23 22:24:33 kai Exp $ |
| 2 | * |
| 3 | * CAPI 2.0 defines & types |
| 4 | * |
| 5 | * From CAPI 2.0 Development Kit AVM 1995 (msg.c) |
| 6 | * Rewritten for Linux 1996 by Carsten Paeth <calle@calle.de> |
| 7 | * |
| 8 | * This software may be used and distributed according to the terms |
| 9 | * of the GNU General Public License, incorporated herein by reference. |
| 10 | * |
| 11 | */ |
| 12 | |
| 13 | #ifndef __CAPIUTIL_H__ |
| 14 | #define __CAPIUTIL_H__ |
| 15 | |
| 16 | #include <asm/types.h> |
| 17 | |
| 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 */ |
| 32 | |
| 33 | static inline void capimsg_setu8(void *m, int off, __u8 val) |
| 34 | { |
| 35 | ((__u8 *)m)[off] = val; |
| 36 | } |
| 37 | |
| 38 | static inline void capimsg_setu16(void *m, int off, __u16 val) |
| 39 | { |
| 40 | ((__u8 *)m)[off] = val & 0xff; |
| 41 | ((__u8 *)m)[off+1] = (val >> 8) & 0xff; |
| 42 | } |
| 43 | |
| 44 | static inline void capimsg_setu32(void *m, int off, __u32 val) |
| 45 | { |
| 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; |
| 50 | } |
| 51 | |
| 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) |
| 59 | |
| 60 | /*----- basic-type definitions -----*/ |
| 61 | |
| 62 | typedef __u8 *_cstruct; |
| 63 | |
| 64 | typedef enum { |
| 65 | CAPI_COMPOSE, |
| 66 | CAPI_DEFAULT |
| 67 | } _cmstruct; |
| 68 | |
| 69 | /* |
| 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 |
| 75 | */ |
| 76 | |
| 77 | typedef struct { |
| 78 | /* Header */ |
| 79 | __u16 ApplId; |
| 80 | __u8 Command; |
| 81 | __u8 Subcommand; |
| 82 | __u16 Messagenumber; |
| 83 | |
| 84 | /* Parameter */ |
| 85 | union { |
| 86 | __u32 adrController; |
| 87 | __u32 adrPLCI; |
| 88 | __u32 adrNCCI; |
| 89 | } adr; |
| 90 | |
| 91 | _cmstruct AdditionalInfo; |
| 92 | _cstruct B1configuration; |
| 93 | __u16 B1protocol; |
| 94 | _cstruct B2configuration; |
| 95 | __u16 B2protocol; |
| 96 | _cstruct B3configuration; |
| 97 | __u16 B3protocol; |
| 98 | _cstruct BC; |
| 99 | _cstruct BChannelinformation; |
| 100 | _cmstruct BProtocol; |
| 101 | _cstruct CalledPartyNumber; |
| 102 | _cstruct CalledPartySubaddress; |
| 103 | _cstruct CallingPartyNumber; |
| 104 | _cstruct CallingPartySubaddress; |
| 105 | __u32 CIPmask; |
| 106 | __u32 CIPmask2; |
| 107 | __u16 CIPValue; |
| 108 | __u32 Class; |
| 109 | _cstruct ConnectedNumber; |
| 110 | _cstruct ConnectedSubaddress; |
| 111 | __u32 Data; |
| 112 | __u16 DataHandle; |
| 113 | __u16 DataLength; |
| 114 | _cstruct FacilityConfirmationParameter; |
| 115 | _cstruct Facilitydataarray; |
| 116 | _cstruct FacilityIndicationParameter; |
| 117 | _cstruct FacilityRequestParameter; |
| 118 | __u16 FacilitySelector; |
| 119 | __u16 Flags; |
| 120 | __u32 Function; |
| 121 | _cstruct HLC; |
| 122 | __u16 Info; |
| 123 | _cstruct InfoElement; |
| 124 | __u32 InfoMask; |
| 125 | __u16 InfoNumber; |
| 126 | _cstruct Keypadfacility; |
| 127 | _cstruct LLC; |
| 128 | _cstruct ManuData; |
| 129 | __u32 ManuID; |
| 130 | _cstruct NCPI; |
| 131 | __u16 Reason; |
| 132 | __u16 Reason_B3; |
| 133 | __u16 Reject; |
| 134 | _cstruct Useruserdata; |
| 135 | |
| 136 | /* intern */ |
| 137 | unsigned l, p; |
| 138 | unsigned char *par; |
| 139 | __u8 *m; |
| 140 | |
| 141 | /* buffer to construct message */ |
| 142 | __u8 buf[180]; |
| 143 | |
| 144 | } _cmsg; |
| 145 | |
| 146 | /* |
| 147 | * capi_cmsg2message() assembles the parameter from _cmsg to a CAPI 2.0 |
| 148 | * conform message |
| 149 | */ |
| 150 | unsigned capi_cmsg2message(_cmsg * cmsg, __u8 * msg); |
| 151 | |
| 152 | /* |
| 153 | * capi_message2cmsg disassembles a CAPI message an writes the parameter |
| 154 | * into _cmsg for easy access |
| 155 | */ |
| 156 | unsigned capi_message2cmsg(_cmsg * cmsg, __u8 * msg); |
| 157 | |
| 158 | /* |
| 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 |
| 161 | * message. |
| 162 | */ |
| 163 | unsigned capi_cmsg_header(_cmsg * cmsg, __u16 _ApplId, |
| 164 | __u8 _Command, __u8 _Subcommand, |
| 165 | __u16 _Messagenumber, __u32 _Controller); |
| 166 | |
| 167 | /* |
| 168 | * capi_info2str generated a readable string for Capi2.0 reasons. |
| 169 | */ |
| 170 | char *capi_info2str(__u16 reason); |
| 171 | |
| 172 | /*-----------------------------------------------------------------------*/ |
| 173 | |
| 174 | /* |
| 175 | * Debugging / Tracing functions |
| 176 | */ |
Karsten Keil | 17f0cd2 | 2007-02-28 20:13:50 -0800 | [diff] [blame] | 177 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 178 | char *capi_cmd2str(__u8 cmd, __u8 subcmd); |
Karsten Keil | 17f0cd2 | 2007-02-28 20:13:50 -0800 | [diff] [blame] | 179 | |
| 180 | typedef struct { |
| 181 | u_char *buf; |
| 182 | u_char *p; |
| 183 | size_t size; |
| 184 | size_t pos; |
| 185 | } _cdebbuf; |
| 186 | |
| 187 | #define CDEBUG_SIZE 1024 |
| 188 | #define CDEBUG_GSIZE 4096 |
| 189 | |
Karsten Keil | 17f0cd2 | 2007-02-28 20:13:50 -0800 | [diff] [blame] | 190 | void cdebbuf_free(_cdebbuf *cdb); |
| 191 | int cdebug_init(void); |
| 192 | void cdebug_exit(void); |
| 193 | |
| 194 | _cdebbuf *capi_cmsg2str(_cmsg *cmsg); |
| 195 | _cdebbuf *capi_message2str(__u8 *msg); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 196 | |
| 197 | /*-----------------------------------------------------------------------*/ |
| 198 | |
| 199 | static inline void capi_cmsg_answer(_cmsg * cmsg) |
| 200 | { |
| 201 | cmsg->Subcommand |= 0x01; |
| 202 | } |
| 203 | |
| 204 | /*-----------------------------------------------------------------------*/ |
| 205 | |
| 206 | static inline void capi_fill_CONNECT_B3_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 207 | __u32 adr, |
| 208 | _cstruct NCPI) |
| 209 | { |
| 210 | capi_cmsg_header(cmsg, ApplId, 0x82, 0x80, Messagenumber, adr); |
| 211 | cmsg->NCPI = NCPI; |
| 212 | } |
| 213 | |
| 214 | static inline void capi_fill_FACILITY_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 215 | __u32 adr, |
| 216 | __u16 FacilitySelector, |
| 217 | _cstruct FacilityRequestParameter) |
| 218 | { |
| 219 | capi_cmsg_header(cmsg, ApplId, 0x80, 0x80, Messagenumber, adr); |
| 220 | cmsg->FacilitySelector = FacilitySelector; |
| 221 | cmsg->FacilityRequestParameter = FacilityRequestParameter; |
| 222 | } |
| 223 | |
| 224 | static inline void capi_fill_INFO_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 225 | __u32 adr, |
| 226 | _cstruct CalledPartyNumber, |
| 227 | _cstruct BChannelinformation, |
| 228 | _cstruct Keypadfacility, |
| 229 | _cstruct Useruserdata, |
| 230 | _cstruct Facilitydataarray) |
| 231 | { |
| 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; |
| 238 | } |
| 239 | |
| 240 | static inline void capi_fill_LISTEN_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 241 | __u32 adr, |
| 242 | __u32 InfoMask, |
| 243 | __u32 CIPmask, |
| 244 | __u32 CIPmask2, |
| 245 | _cstruct CallingPartyNumber, |
| 246 | _cstruct CallingPartySubaddress) |
| 247 | { |
| 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; |
| 254 | } |
| 255 | |
| 256 | static inline void capi_fill_ALERT_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 257 | __u32 adr, |
| 258 | _cstruct BChannelinformation, |
| 259 | _cstruct Keypadfacility, |
| 260 | _cstruct Useruserdata, |
| 261 | _cstruct Facilitydataarray) |
| 262 | { |
| 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; |
| 268 | } |
| 269 | |
| 270 | static inline void capi_fill_CONNECT_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 271 | __u32 adr, |
| 272 | __u16 CIPValue, |
| 273 | _cstruct CalledPartyNumber, |
| 274 | _cstruct CallingPartyNumber, |
| 275 | _cstruct CalledPartySubaddress, |
| 276 | _cstruct CallingPartySubaddress, |
| 277 | __u16 B1protocol, |
| 278 | __u16 B2protocol, |
| 279 | __u16 B3protocol, |
| 280 | _cstruct B1configuration, |
| 281 | _cstruct B2configuration, |
| 282 | _cstruct B3configuration, |
| 283 | _cstruct BC, |
| 284 | _cstruct LLC, |
| 285 | _cstruct HLC, |
| 286 | _cstruct BChannelinformation, |
| 287 | _cstruct Keypadfacility, |
| 288 | _cstruct Useruserdata, |
| 289 | _cstruct Facilitydataarray) |
| 290 | { |
| 291 | |
| 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; |
| 304 | cmsg->BC = BC; |
| 305 | cmsg->LLC = LLC; |
| 306 | cmsg->HLC = HLC; |
| 307 | cmsg->BChannelinformation = BChannelinformation; |
| 308 | cmsg->Keypadfacility = Keypadfacility; |
| 309 | cmsg->Useruserdata = Useruserdata; |
| 310 | cmsg->Facilitydataarray = Facilitydataarray; |
| 311 | } |
| 312 | |
| 313 | static inline void capi_fill_DATA_B3_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 314 | __u32 adr, |
| 315 | __u32 Data, |
| 316 | __u16 DataLength, |
| 317 | __u16 DataHandle, |
| 318 | __u16 Flags) |
| 319 | { |
| 320 | |
| 321 | capi_cmsg_header(cmsg, ApplId, 0x86, 0x80, Messagenumber, adr); |
| 322 | cmsg->Data = Data; |
| 323 | cmsg->DataLength = DataLength; |
| 324 | cmsg->DataHandle = DataHandle; |
| 325 | cmsg->Flags = Flags; |
| 326 | } |
| 327 | |
| 328 | static inline void capi_fill_DISCONNECT_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 329 | __u32 adr, |
| 330 | _cstruct BChannelinformation, |
| 331 | _cstruct Keypadfacility, |
| 332 | _cstruct Useruserdata, |
| 333 | _cstruct Facilitydataarray) |
| 334 | { |
| 335 | |
| 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; |
| 341 | } |
| 342 | |
| 343 | static inline void capi_fill_DISCONNECT_B3_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 344 | __u32 adr, |
| 345 | _cstruct NCPI) |
| 346 | { |
| 347 | |
| 348 | capi_cmsg_header(cmsg, ApplId, 0x84, 0x80, Messagenumber, adr); |
| 349 | cmsg->NCPI = NCPI; |
| 350 | } |
| 351 | |
| 352 | static inline void capi_fill_MANUFACTURER_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 353 | __u32 adr, |
| 354 | __u32 ManuID, |
| 355 | __u32 Class, |
| 356 | __u32 Function, |
| 357 | _cstruct ManuData) |
| 358 | { |
| 359 | |
| 360 | capi_cmsg_header(cmsg, ApplId, 0xff, 0x80, Messagenumber, adr); |
| 361 | cmsg->ManuID = ManuID; |
| 362 | cmsg->Class = Class; |
| 363 | cmsg->Function = Function; |
| 364 | cmsg->ManuData = ManuData; |
| 365 | } |
| 366 | |
| 367 | static inline void capi_fill_RESET_B3_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 368 | __u32 adr, |
| 369 | _cstruct NCPI) |
| 370 | { |
| 371 | |
| 372 | capi_cmsg_header(cmsg, ApplId, 0x87, 0x80, Messagenumber, adr); |
| 373 | cmsg->NCPI = NCPI; |
| 374 | } |
| 375 | |
| 376 | static inline void capi_fill_SELECT_B_PROTOCOL_REQ(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 377 | __u32 adr, |
| 378 | __u16 B1protocol, |
| 379 | __u16 B2protocol, |
| 380 | __u16 B3protocol, |
| 381 | _cstruct B1configuration, |
| 382 | _cstruct B2configuration, |
| 383 | _cstruct B3configuration) |
| 384 | { |
| 385 | |
| 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; |
| 393 | } |
| 394 | |
| 395 | static inline void capi_fill_CONNECT_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 396 | __u32 adr, |
| 397 | __u16 Reject, |
| 398 | __u16 B1protocol, |
| 399 | __u16 B2protocol, |
| 400 | __u16 B3protocol, |
| 401 | _cstruct B1configuration, |
| 402 | _cstruct B2configuration, |
| 403 | _cstruct B3configuration, |
| 404 | _cstruct ConnectedNumber, |
| 405 | _cstruct ConnectedSubaddress, |
| 406 | _cstruct LLC, |
| 407 | _cstruct BChannelinformation, |
| 408 | _cstruct Keypadfacility, |
| 409 | _cstruct Useruserdata, |
| 410 | _cstruct Facilitydataarray) |
| 411 | { |
| 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; |
| 422 | cmsg->LLC = LLC; |
| 423 | cmsg->BChannelinformation = BChannelinformation; |
| 424 | cmsg->Keypadfacility = Keypadfacility; |
| 425 | cmsg->Useruserdata = Useruserdata; |
| 426 | cmsg->Facilitydataarray = Facilitydataarray; |
| 427 | } |
| 428 | |
| 429 | static inline void capi_fill_CONNECT_ACTIVE_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 430 | __u32 adr) |
| 431 | { |
| 432 | |
| 433 | capi_cmsg_header(cmsg, ApplId, 0x03, 0x83, Messagenumber, adr); |
| 434 | } |
| 435 | |
| 436 | static inline void capi_fill_CONNECT_B3_ACTIVE_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 437 | __u32 adr) |
| 438 | { |
| 439 | |
| 440 | capi_cmsg_header(cmsg, ApplId, 0x83, 0x83, Messagenumber, adr); |
| 441 | } |
| 442 | |
| 443 | static inline void capi_fill_CONNECT_B3_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 444 | __u32 adr, |
| 445 | __u16 Reject, |
| 446 | _cstruct NCPI) |
| 447 | { |
| 448 | capi_cmsg_header(cmsg, ApplId, 0x82, 0x83, Messagenumber, adr); |
| 449 | cmsg->Reject = Reject; |
| 450 | cmsg->NCPI = NCPI; |
| 451 | } |
| 452 | |
| 453 | static inline void capi_fill_CONNECT_B3_T90_ACTIVE_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 454 | __u32 adr) |
| 455 | { |
| 456 | |
| 457 | capi_cmsg_header(cmsg, ApplId, 0x88, 0x83, Messagenumber, adr); |
| 458 | } |
| 459 | |
| 460 | static inline void capi_fill_DATA_B3_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 461 | __u32 adr, |
| 462 | __u16 DataHandle) |
| 463 | { |
| 464 | |
| 465 | capi_cmsg_header(cmsg, ApplId, 0x86, 0x83, Messagenumber, adr); |
| 466 | cmsg->DataHandle = DataHandle; |
| 467 | } |
| 468 | |
| 469 | static inline void capi_fill_DISCONNECT_B3_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 470 | __u32 adr) |
| 471 | { |
| 472 | |
| 473 | capi_cmsg_header(cmsg, ApplId, 0x84, 0x83, Messagenumber, adr); |
| 474 | } |
| 475 | |
| 476 | static inline void capi_fill_DISCONNECT_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 477 | __u32 adr) |
| 478 | { |
| 479 | |
| 480 | capi_cmsg_header(cmsg, ApplId, 0x04, 0x83, Messagenumber, adr); |
| 481 | } |
| 482 | |
| 483 | static inline void capi_fill_FACILITY_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 484 | __u32 adr, |
| 485 | __u16 FacilitySelector) |
| 486 | { |
| 487 | |
| 488 | capi_cmsg_header(cmsg, ApplId, 0x80, 0x83, Messagenumber, adr); |
| 489 | cmsg->FacilitySelector = FacilitySelector; |
| 490 | } |
| 491 | |
| 492 | static inline void capi_fill_INFO_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 493 | __u32 adr) |
| 494 | { |
| 495 | |
| 496 | capi_cmsg_header(cmsg, ApplId, 0x08, 0x83, Messagenumber, adr); |
| 497 | } |
| 498 | |
| 499 | static inline void capi_fill_MANUFACTURER_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 500 | __u32 adr, |
| 501 | __u32 ManuID, |
| 502 | __u32 Class, |
| 503 | __u32 Function, |
| 504 | _cstruct ManuData) |
| 505 | { |
| 506 | |
| 507 | capi_cmsg_header(cmsg, ApplId, 0xff, 0x83, Messagenumber, adr); |
| 508 | cmsg->ManuID = ManuID; |
| 509 | cmsg->Class = Class; |
| 510 | cmsg->Function = Function; |
| 511 | cmsg->ManuData = ManuData; |
| 512 | } |
| 513 | |
| 514 | static inline void capi_fill_RESET_B3_RESP(_cmsg * cmsg, __u16 ApplId, __u16 Messagenumber, |
| 515 | __u32 adr) |
| 516 | { |
| 517 | |
| 518 | capi_cmsg_header(cmsg, ApplId, 0x87, 0x83, Messagenumber, adr); |
| 519 | } |
| 520 | |
| 521 | #endif /* __CAPIUTIL_H__ */ |