}
*/
-void Q931Api_InitTrunk(Q931_TrunkInfo *pTrunk)
+L3INT Q931Api_InitTrunk(Q931_TrunkInfo *pTrunk, Q931Dialect_t Dialect, Q931NetUser_t NetUser, Q931_TrunkType_t TrunkType)
{
- int y;
+ int y, dchannel, maxchans;
+
+ switch(TrunkType)
+ {
+ case Q931_TrType_E1:
+ dchannel = 16;
+ maxchans = 31;
+ break;
+
+ case Q931_TrType_T1:
+ case Q931_TrType_J1:
+ dchannel = 24;
+ maxchans = 24;
+ break;
+
+ case Q931_TrType_BRI:
+ dchannel = 3;
+ maxchans = 3;
+ break;
+
+ default:
+ return 0;
+ }
+
pTrunk->LastCRV = 0;
- pTrunk->Dialect = 0;
+ pTrunk->Dialect = Dialect;
pTrunk->Enabled = 0;
- pTrunk->TrunkType = Q931_TrType_E1;
- pTrunk->NetUser = Q931_TE;
+ pTrunk->TrunkType = TrunkType;
+ pTrunk->NetUser = NetUser;
pTrunk->TrunkState = 0;
for(y=0; y < Q931MAXCHPERTRUNK; y++)
{
pTrunk->ch[y].Available = 1;
- /* Set up E1 scheme by default */
- if(y==0)
+ if(y == 0)
{
pTrunk->ch[y].ChanType = Q931_ChType_Sync;
}
- else if(y==16)
+ else if(y == dchannel)
{
pTrunk->ch[y].ChanType = Q931_ChType_D;
}
+ else if(y > maxchans)
+ {
+ pTrunk->ch[y].ChanType = Q931_ChType_NotUsed;
+ }
else
{
pTrunk->ch[y].ChanType = Q931_ChType_B;
pTrunk->call[y].InUse = 0;
}
+ return 1;
}
void Q931SetMesProc(L3UCHAR mes, L3UCHAR dialect,
\r
*****************************************************************************/\r
\r
+typedef enum /* Network/User Mode. */\r
+{\r
+ Q931_TE=0, /* 0 : User Mode */\r
+ Q931_NT=1 /* 1 : Network Mode */\r
+} Q931NetUser_t;\r
+\r
+typedef enum /* Dialect enum */\r
+{\r
+ Q931_Dialect_Q931 = 0,\r
+\r
+ Q931_Dialect_Count\r
+} Q931Dialect_t;\r
+\r
+typedef enum /* Trunk Line Type. */\r
+{\r
+ Q931_TrType_E1=0, /* 0 : E1 Trunk */\r
+ Q931_TrType_T1=1, /* 1 : T1 Trunk */\r
+ Q931_TrType_J1=2, /* 2 : J1 Trunk */\r
+ Q931_TrType_BRI=3 /* 3 : BRI Trunk */\r
+} Q931_TrunkType_t;\r
+\r
+typedef enum /* Trunk State */\r
+{\r
+ Q931_TrState_NoAlignment=0, /* Trunk not aligned */\r
+ Q931_TrState_Aligning=1, /* Aligning in progress */\r
+ Q931_TrState_Aligned=2 /* Trunk Aligned */\r
+} Q931_TrunkState_t;\r
+\r
+typedef enum {\r
+ Q931_ChType_NotUsed=0, /* Unused Channel */\r
+ Q931_ChType_B=1, /* B Channel (Voice) */ \r
+ Q931_ChType_D=2, /* D Channel (Signalling) */\r
+ Q931_ChType_Sync=3 /* Sync Channel */\r
+} Q931_ChanType_t;\r
+\r
typedef struct\r
{\r
- enum _NetUser /* Network/User Mode. */\r
- {\r
- Q931_TE=0, /* 0 : User Mode */\r
- Q931_NT=1 /* 1 : Network Mode */\r
- }NetUser;\r
+ Q931NetUser_t NetUser; /* Network/User Mode. */\r
\r
- L3UCHAR Dialect; /* Q.931 Based dielact index. */\r
+ Q931Dialect_t Dialect; /* Q.931 Based dielact index. */\r
\r
- enum _TrunkType /* Trunk Line Type. */\r
- {\r
- Q931_TrType_E1=0, /* 0 : E1 Trunk */\r
- Q931_TrType_T1=1, /* 1 : T1 Trunk */\r
- Q931_TrType_J1=2, /* 2 : J1 Trunk */\r
- Q931_TrType_BRI=3 /* 3 : BRI Trunk */\r
- }TrunkType;\r
+ Q931_TrunkType_t TrunkType; /* Trunk Line Type. */\r
\r
L3UCHAR Enabled; /* Enabled/Disabled */\r
/* 0 = Disabled */\r
/* 1 = Enabled */\r
\r
- enum _TrState /* Trunk State */\r
- {\r
- Q931_TrState_NoAlignment=0, /* Trunk not aligned */\r
- Q931_TrState_Aligning=1, /* Aligning in progress */\r
- Q931_TrState_Aligned=2 /* Trunk Aligned */\r
- }TrunkState;\r
+ Q931_TrunkState_t TrunkState;\r
\r
L3INT LastCRV; /* Last used crv for the trunk. */\r
\r
/* channels to fit an E1 since T1/J1 and BRI will fit inside a E1. */\r
struct _charray\r
{\r
- enum _ChanType{\r
- Q931_ChType_NotUsed=0, /* Unused Channel */\r
- Q931_ChType_B=1, /* B Channel (Voice) */ \r
- Q931_ChType_D=2, /* D Channel (Signalling) */\r
- Q931_ChType_Sync=3 /* Sync Channel */\r
- }ChanType;\r
+ Q931_ChanType_t ChanType; /* Unused, B, D, Sync */\r
\r
L3UCHAR Available; /* Channel Available Flag */\r
/* 0 : Avaiabled */\r
L3INT Q931Disconnect(Q931_TrunkInfo *pTrunk, L3INT iTo, L3INT iCRV, L3INT iCause);\r
L3INT Q931ReleaseComplete(Q931_TrunkInfo *pTrunk, L3INT iTo);\r
\r
+L3INT Q931Api_InitTrunk(Q931_TrunkInfo *pTrunk, Q931Dialect_t Dialect, Q931NetUser_t NetUser, Q931_TrunkType_t TrunkType);
+\r
#endif /* _Q931_NL */\r