C hỷỳng 3: Xớy dỷơng gateway giỷụa maơng PSTN vađ maơng IP
3. Xớy dỷơng maõy traơng thaõi
Chỷỳng trũnh xỷờ lủ cuửơc goơi ặỳơc xớy dỷơng dỷơa trùn nùỡn taờng lađ cãc traơng thãi cuửơc goơi. Mửơt cuửơc goơi lađ sỷơ liùn laơc ăa phỷỳng tiùơn giỷụa hai ăiùớm cuửịi. Cuửơc goơi ặỳơc bựưt ăớỡu vỳõi thuờ tuơc thiùịt lớơp cuửơc goơi vađ kùịt thũc vỳõi thuờ tuơc giaời phõng cuửơc goơi. Traơng thãi cuửơc goơi lađ mửơt giai ăoaơn ặỳơc ắnh nghụa roụ rađng trong suửịt thỳđi gian xaờy ra cuửơc goơi.
Mửợi cuửơc goơi cõ xu hỷỳõng duy trũ traơng thãi hiùơn taơi vađ chú chuýớn sang traơng thãi mỳõi khi nhớơn ặỳơc nhỷụng baờn tin mong muửịn.
Mửợi traơng thãi cuờa cuửơc goơi seụ cõ tỷỳng ỷõng mửơt hađm state machine. Hađm nađy seụ ặỳơc goơi ăùớ xỷờ lủ sỷơ kiùơn nhớơn ặỳơc. Khi kùnh chuýớn sang traơng thãi mỳõi, hađm state machine cuờa nõ cuụng thay ăửới.
Cuửơc goơi tỷđ maơng PSTN vađo
GATE_INIT: Ăớy lađ traơng thãi mađ ỷõng duơng chỷa khỳời taơo cãc component vađ cãc thùớ hiùơn cuờa component cuờa cãc tađi nguýn.
WAIT_FOR_CALL: Ăớy lađ traơng thãi mađ ỷõng duơng ăaụ khỳời taơo xong cãc component vađ cãc thùớ hiùơn cuờa component, ăựng kủ cãc message vỳõi firmware. Lũc nađy kùnh ỳờ traơng thãi sựĩn sađng nhớơn cuửơc goơi. Khi cõ cuửơc goơi ăùịn tỷđ phủa PSTN, ỷõng duơng nhớơn ặỳơc sỷơ kiùơn DTI_OFF_HOOK, nõ seụ kiùớm tra traơng thãi hiùơn taơi cuờa kùnh:
Nùịu kùnh bớơn thũ nõ seụ tỷđ chửịi cuửơc goơi bựỡng cãch gỷời Tone bão bớơn cho maơng PSTN.
Nùịu kùnh rửợi, nõ mỳờ kùnh thửng tin ăùịn maơng PSTN, thỷơc hiùơn kùịt nửịi kùnh thửng tin thoaơi giỷụa PSTN vađ NetTSCCluster vađ gỷời message TSC_MsgMakeCall ăùịn NetTSC component ăùớ thiùịt lớơp cuửơc goơi sang phủa IP. Traơng thãi tiùịp theo lađ WAIT_FOR_CONNECT.
WAIT_FOR_CONNECT: Lũc nađy, kùnh ăang chỳđ phủa IP traờ lỳđi.
Nùịu ỷõng duơng nhớơn ặỳơc message
TSC_EvtCallState_Type_Failed cho biùịt viùơc kùịt nửịi cuửơc goơi phủa IP thớịt baơi (cõ thùớ do khửng ăũng ắa chú, hoựơc do chuớớn maụ hoã khửng phuđ hỳơp). Nõ thỷơc hiùơn viùơc giaời phõng cuửơc goơi bựỡng cãch gỷời ăi message TSC_MsgDropCall vađ kùnh chuýớn sang traơng thãi WAIT_FOR_IDLE.
Nùịu nhớơn ặỳơc message TSC_EvtCallState_Type_Connected cho biùịt ýu cớỡu kùịt nửịi ăaụ ặỳơc chớịp nhớơn, kùnh chuýớn sang traơng thãi kùịt nửịi WAIT_FOR_DISCONNECT.
WAIT_FOR_DISCONNECT: Ăớy lađ traơng thãi mađ cuửơc goơi ăaụ ặỳơc kùịt nửịi thađnh cửng, hai bùn ăang trao ăửới cãc thửng tin thoaơi vỳõi nhau. Lũc nađy, nùịu mửơt trong hai bùn thỷơc hiùơn thuờ tuơc kùịt thũc
WAIT_FOR_CALL GATE_INIT
WAIT_FOR_CONNECT
WAIT FOR IDL
WAIT_FOR_RELEAS PSTN_RELEASE WAIT_DONE NetTSC: TSC_EvtCallState_Type_Null PSTN đã gác máy PSTN: DIGITAL_ON_HOOK hoƯc NetTSC: PSTN: NetTSC: PSTN: DIGITAL_ON_HOOK hoƯc NetTSC: TSC_EvtCallState_Type_Failed NetTSC: TSC_EvtCallState_Type_Idled NetTSC: PSTN: DIGITAL_ON_HOOK NetTSC: TSC_EvtCallState_Type_Null PSTN đã gác máy NetTSC: NetTSC:
cuửơc goơi, ỷõng duơng nhớơn ặỳơc sỷơ kiùơn DTI_ON_HOOK tỷđ phủa PSTN hoựơc message tỷđ NetTSC, nõ seụ thỷơc hiùơn viùơc cựưt kùịt nửịi thoaơi giỷụa hai bùn, thiùịt lớơp traơng thãi kùnh PSTN lùn on hook (giaời phửng kùịt nửịi PSTN) vađ gỷời ăùịn NetTSC message TSC_MsgDropCall ăùớ huyờ boờ kùịt nửịi phủa IP. Traơng thãi tiùịp theo cuờa kùnh lađ WAIT_FOR_IDE.
WAIT_FOR_IDLE: Firmware ăang thỷơc hiùơn viùơc giaời phõng kùịt nửịi vỳõi bùn IP. Khi ăaụ thỷơc hiùơn xong viùơc huyờ boờ kùịt nửịi, NetTSC seụ bão cho ỷõng duơng bựỡng message TSC_EvtCallState_Type_Idled. Lũc nađy mựơc duđ kùịt nửịi vỳõi phủa IP ăaụ ặỳơc giaời phõng nhỷng cãc tađi nguýn trong firmware vớợn chỷa ặỳơc giaời phõng, cãc thửng tin vùỡ cuửơc goơi vớợn cõ thùớ ặỳc sỷờ duơng. Ăùớ thửịng kù cuửơc goơi baờn tin TSC_MsgGetCallInfo ặỳơc gỷời ăi ăùịn NetTSC. NetTSC traờ lỳđi bựỡng baờn tin TSC_MsgGetCallInfoCmplt cõ chỷõa cãc thửng tin thửịng kù cuửơc goơi nhỷ: thỳđi gian, sửị gõi tin truýỡn ăi, nhớơn ặỳơc, sửị gõi tin bừ mớịt...
Sau khi ăaụ lớịy thửng tin thửịng kù cuửơc goơi, ỷõng duơng gỷời ăùịn NetTSC message TSC_MsgReleaseCall ýu cớỡu firmware giaời phõng tađi nguýn, traơng thãi tiùịp theo lađ WAIT_FOR_RELEASE.
WAIT_FOR_RELEASE: Ăớy lađ traơng thãi mađ ỷõng duơng ăang chỳđ cho firmware giaời phõng tađi nguýn liùn quan ăùịn cuửơc goơi. Khi firmware giaời phõng xong tađi nguýn, nõ thửng bão cho ỷõng duơng biùịt bựỡng message TSC_EvtCallState_Type_Null. Lũc nađy cõ hai khaờ nựng xaờy ra:
Nùịu cuửơc goơi kùịt thũc lađ do phủa PSTN ýu cớỡu, do ăõ phủa PSTN lũc nađy ăaụ hoađn toađn ặỳơc giaời phõng, vũ vớơy ỷõng duơng thỷơc hiùơn thiùịt lớơp laơi cãc giã trừ ban ăớỡu cho cớịu trũc Dm3NetTSC vađ chuýớn sang traơng thãi WAIT_FOR_CALL sựĩng sađng nhớơn cuửơc goơi tiùịp theo.
Nùịu cuửơc goơi lađ do phủa IP ýu cớỡu kùịt thũc, lũc nađy kùnh phaời chỳđ cho phủa PSTN giaời phõng, traơng thãi tiùịp theo cuờa kùnh lađ PSTN_RELEASE.
PSTN_RELEASE: Nùịu kùnh nhớơn ặỳơc tủn hiùơu gãc mãy tỷđ phủa PSTN, nõ chuýớn sang traơng thãi WAIT_FOR_CALL chỳđ cuửơc goơi tiùịp theo. Tuy nhiùn trong traơng thãi nađy, kùnh cuụng cõ thùớ nhớơn
ặỳơc ýu cớỡu thiùịt lớơp cuửơc goơi tỷđ bùn IP. Lũc ăõ nõ phaời chuýớn tỷđ chửịi cuửơc goơi vađ chuýớn sang traơng thãi WAIT_DONE ăùớ chỳđ cho firmware giaời phõng tađi nguýn cuửơc goơi vỷđa mỳõi bừ tỷđ chửịi.
WAIT_DONE: Khi tađi nguýn cuửơc goơi ăaụ ặỳơc giaời phõng, kùnh seụ nhớơn ặỳơc baờn tin TSC_EvtCallState_Type_Null. Lũc ăõ nõ phaời kiùớm tra liùơu phủa PSTN ăaụ gãc mãy hay chỷa (sỷờ duơng mửơt biùịn waitOnHook kiùớu BOOL cho mửợi kùnh ăùớ kùớm tra), nùịu rửỡi thũ traơng thãi tiùịp theo lađ WAIT_FOR_CALL, ngỷỳơc laơi trỳờ vùỡ traơng thãi PSTN_RELEASE.
Cuửơc goơi tỷđ maơng IP vađo
GATE_INIT: Ăớy lađ traơng thãi mađ ỷõng duơng chỷa khỳời taơo cãc component vađ cãc thùớ hiùơn cuờa component cuờa cãc tađi nguýn.
WAIT_FOR_CALL: Ăớy lađ traơng thãi mađ ỷõng duơng ăaụ khỳời taơo xong cãc component vađ cãc thùớ hiùơn cuờa component, ăựng kủ cãc message vỳõi firmware. Lũc nađy kùnh ỳờ traơng thãi sựĩn sađng nhớơn cuửơc goơi. Khi cõ cuửơc goơi ăùịn tỷđ phủa IP, ỷõng duơng nhớơn ặỳơc message TSC_EvtCallState_Type_Offer, nõ seụ kiùớm tra traơng thãi hiùơn taơi cuờa kùnh:
Nùịu kùnh bớơn thũ nõ seụ tỷđ chửịi cuửơc goơi bựỡng cãch gỷời message TSC_MsgRejectCall ăùịn NetTSC component. Traơng thãi tiùịp theo cuờa kùnh lađ WAIT_FOR_IDLE.
Nùịu kùnh rửợi nõ gỷời message TSC_MsgGetCallInfo ăùịn NetTSC component ăùớ lớịy thửng tin vùỡ cuửơc goơi, sau ăõ nõ gỷời baờn tin TSC_MsgAnswerCall ăùớ chớịp nhớơn cuửơc goơi. Traơng thãi tiùịp theo lađ WAIT_FOR_PSTN_CONNECT.
WAIT_FOR_CONNECT: Lũc nađy, kùnh ăang chỳđ phủa IP xãc nhớơn kùịt nửịi thađnh cửng.
Nùịu nhớơn ặỳơc message TSC_EvtCallState_Type_Connected tỷđ NetTSC nõ thỷơc hiùơn thuờ tuơc quay sửị sang maơng PSTN, thỷơc hiùơn kùịt nửịi luửỡng thửng tin thoaơi giỷụa hai bùn (cho phẽp bùn IP cõ thùớ nghe ặỳơc cãc Tone cuờa PSTN) vađ chuýớn sang traơng thãi PSTN_INIT.
Trong lũc nađy kùnh cõ thùớ nhớơn ặỳơc message TSC_EvtCallState_Type_Idled cho biùịt cuửơc goơi phủa IP ặỳơc giaời phõng, nõ gỷời message TSC_MsgReleaseCall ăùịn NetTSC.
Ngoađi ra nõ cuụng cõ thùớ nhớơn ặỳơc message TSC_EvtCallState_Type_Failed cho biùịt viùơc kùịt nửịi cuửơc goơi phủa IP
PSTN: DIGITAL_OFFHOOK NetTSC: TSC_EvtCallState_Type_Connected
Quay sỉ sang PSTN
hoƯc NetTSC: TSC_EvtCallState_Type_Failed
Gửi TSC_MsgDropCall đến NetTSC
WAIT_FOR_CALL GATE_INIT WAIT_FOR_CONNECT WAIT_FOR_DISCONNECT WAIT_FOR_IDLE WAIT_FOR_RELEAS PSTN_RELEASE WAIT_DONE PSTN_INIT NetTSC: TSC_EvtCallState_Type_Null PSTN đã gác máy PSTN: DIGITAL_ON_HOOK
hoƯc NetTSC: TSC_EvtCallState_Type_Disconnected
Gửi TSC_MsgDropCall đến NetTSC
NetTSC: TSC_EvtCallState_Type_Offered Gửi TSC_MsgGetCallInfo đến NetTSC NetTSC: TSC_EvtCallState_Type_Idled Gửi TSC_MsgGetCallInfo đến NetTSC NetTSC: TSC_EvtCallState_Type_Null PSTN ch-a gác máy PSTN: DIGITAL_ON_HOOK NetTSC: TSC_EvtCallState_Type_Null PSTN đã gác máy NetTSC: Std_MsgDetectEvtsCmplt NetTSC:
hoƯc NetTSC: TSC_EvtCallStat e_Type_Idled
Gửi TSC_MsgReleaseCall đến
thớịt baơi (cõ thùớ do khửng ăũng ắa chú, hoựơc do chuớớn maụ hoã khửng phuđ hỳơp). Nõ thỷơc hiùơn viùơc giaời phõng cuửơc goơi bựỡng cãch gỷời ăi message TSC_MsgDropCall vađ kùnh chuýớn sang traơng thãi WAIT_FOR_IDLE.
PSTN_INIT: ỳờ traơng thãi nađy kùnh ăang chỳđ phủa PSTN traờ lỳđi, cãc message mađ kùnh cõ thùớ nhớơn ặỳơc lũc nađy lađ:
Kùnh nhớơn ặỳơc sỷơ kiùơn DTI_OFF_HOOK cho biùịt bùn PSTN traờ lỳđi cuửơc goơi, nõ chuýớn sang traơng thãi WAIT_FOR_DISCONNECT.
Kùnh nhớơn ặỳơc message TSC_EvtCallState_Type_Disconnected cho biùịt lađ phủa IP ăaụ huyờ boờ cuửơc goơi. Nõ gỷời message TSC_MsgDropCall ăùớ ýu cớỡu giaời phõng cuửơc goơi, traơng thãi tiùịp theo cuờa kùnh lađ WAIT_FOR_IDLE.
Cãc traơng thãi tiùịp theo cuờa trỷỳđng hỳơp nađy hoađn toađn giửịng vỳõi trỷỳđng hỳơp cuửơc goơi PSTN inbound (giai ăoaơn kùịt thũc cuửơc goơi).