1.7.12. Send a Non-Call State Related ISDN Message
The GCIS_EXID_SNDMSG extension ID is supported when using Springware boards only. When using DM3 boards, a non-call state related ISDN message can be sent using the gc_SndMsg( ) function.
The GCIS_EXID_SNDMSG extension ID is used to send a non-Call State related ISDN message to the network over the D channel, while a call exists. The data is sent transparently over the D channel data link using the LAPD (Layer 2) protocol.
For BRI, this extension function is used to invoke supplemental services, such as Called/Calling Party Identification, Call Transfer, and Message Waiting. The services are invoked by sending Facility Messages or Notify Messages to the switch. Upon receipt of the message, the network may return a NOTIFY message to the user. The NOTIFY messages can be retrieved by calling the gc_GetCallInfo( ) function. For more information on invoking supplemental services, see Appendix C, "BRI Supplemental Services".
- Note: The message must be sent over a channel that has a call reference number assigned to it.
target_type GCTGT_GCLIB_CRN target_id call reference number (CRN) of the call ext_id GCIS_EXID_SNDMSG parmblkp pstruct member of parmblkp should point to the memory block containing integer (msg_type) followed by the IE_BLK data structure. Table 4, below, provides a list of possible values for msg_type. For a description of the IE_BLK data structure, please refer to Section 5.1, IE_BLK. Also see the example code for details. set_id - GCIS_SET_SNDMSG parm_id - GCIS_PARM_SNDMSGTYPE set_id - GCIS_SET_IE parm_id - GCIS_PARM_IEDATA value_type - char array, length should not exceed MAXLEN_IEDATA
mode EV_SYNC
Descriptions of the message types for DPNSS are provided in Appendix D, "IEs and ISDN Message Types for DPNSS".
Example
int extSndMsg (CRN crn) { GC_PARM_BLKP parm_blkp = NULL, ret_blkp = NULL; unsigned long mode; int ret_val = 0; GC_INFO t_Info; unsigned char ie_data[255]; int msg; unsigned char length; msg = SndMsg_Notify; gc_util_insert_parm_ref( &parm_blkp, GCIS_SET_SNDMSG, GCIS_PARM_SNDMSGTYPE, sizeof( int ), &msg); InitSndMsgBlk (ie_data, msg, &length); gc_util_insert_parm_ref( &parm_blkp, GCIS_SET_IE, GCIS_PARM_IEDATA, length, ie_data); mode = EV_SYNC; ret_val = gc_Extension( GCTGT_GCLIB_CRN, crn, GCIS_EXID_SNDMSG, parm_blkp, &ret_blkp, mode); if ( ret_val ) { ret_val = gc_ErrorInfo(&t_Info); if (ret_val == GC_SUCCESS) { printf("gc_ErrorInfo() successfully called\n"); PrintGC_INFO(&t_Info); } else { printf("gc_ErrorInfo() call failed\n"); } } gc_util_delete_parm_blk( ret_blkp ); gc_util_delete_parm_blk( parm_blkp ); return ret_val; } static void InitSndMsgBlk (unsigned char *ie_blk_ptr, int msgtype, unsigned char *lenp) { switch (msgtype) { case SndMsg_Notify: /* Notify */ *lenp = 3; ie_blk_ptr[0] = 0x27; /* Notify Indicator IE (0x27) */ ie_blk_ptr[1] = 0x01; /* IE Length */ ie_blk_ptr[2] = 0x81; /* user resumed */ break; case SndMsg_Status: *lenp = 0x07; ie_blk_ptr[0] = 0x08; /*cause IE*/ ie_blk_ptr[1] = 0x02; /*length*/ ie_blk_ptr[2] = 0x80; /**/ ie_blk_ptr[3] = 0x1F; /*cause value*/ ie_blk_ptr[4] = 0x14; /*call state IE*/ ie_blk_ptr[5] = 0x01; /*length*/ ie_blk_ptr[6] = 0x0A; /*call state*/ break; default: break; } return; }
Click here to contact Telecom Support Resources
Copyright 2003, Intel Corporation