28 #include "tmscallserver.h" |
28 #include "tmscallserver.h" |
29 #include "tmscallclisrv.h" |
29 #include "tmscallclisrv.h" |
30 #include "tmsglobaleffectssettings.h" |
30 #include "tmsglobaleffectssettings.h" |
31 #include "tmstareventhandler.h" |
31 #include "tmstareventhandler.h" |
32 #include "tmscenrepaudiohandler.h" |
32 #include "tmscenrepaudiohandler.h" |
|
33 #include "tmsdtmftoneplayer.h" |
|
34 #include "tmsdtmfprovider.h" |
|
35 #include "tmsdtmfnotifier.h" |
33 #include "tmsdtmfeventhandler.h" |
36 #include "tmsdtmfeventhandler.h" |
34 #include "tmsrtparam.h" |
37 #include "tmsrtparam.h" |
35 #include "tmsserver.h" |
38 #include "tmsserver.h" |
36 |
39 |
37 using namespace TMS; |
40 using namespace TMS; |
134 iEffectSettings = TMSGlobalEffectsSettings::NewL(); |
141 iEffectSettings = TMSGlobalEffectsSettings::NewL(); |
135 iTarHandler = NULL; |
142 iTarHandler = NULL; |
136 iAudioCenRepHandler = NULL; |
143 iAudioCenRepHandler = NULL; |
137 iDTMFHandler = NULL; |
144 iDTMFHandler = NULL; |
138 iCurrentRouting = TMS_AUDIO_OUTPUT_PRIVATE; |
145 iCurrentRouting = TMS_AUDIO_OUTPUT_PRIVATE; |
|
146 iDTMFDnlinkPlayer = NULL; |
|
147 iDTMFUplinkPlayer = NULL; |
|
148 iDTMFUplinkPlayerEtel = NULL; |
|
149 iDTMFNotifier = NULL; |
139 |
150 |
140 //TODO: EUnit fails to initialize ProfileEngine in RT in eshell mode |
151 //TODO: EUnit fails to initialize ProfileEngine in RT in eshell mode |
141 TRAP_IGNORE(InitRingTonePlayerL()); |
152 TRAP_IGNORE(InitRingTonePlayerL()); |
142 |
153 |
143 // We need it running for global volume change updates |
154 // We need it running for global volume change updates |
188 { |
199 { |
189 return iSession; |
200 return iSession; |
190 } |
201 } |
191 |
202 |
192 // ----------------------------------------------------------------------------- |
203 // ----------------------------------------------------------------------------- |
193 // TMSServer::SetDnLinkSession |
|
194 // |
|
195 // ----------------------------------------------------------------------------- |
|
196 // |
|
197 void TMSServer::SetDnLinkSession(const TBool aSession) |
|
198 { |
|
199 iDnlinkSession = aSession; |
|
200 } |
|
201 |
|
202 // ----------------------------------------------------------------------------- |
|
203 // TMSServer::SetUpLinkSession |
|
204 // |
|
205 // ----------------------------------------------------------------------------- |
|
206 // |
|
207 void TMSServer::SetUpLinkSession(const TBool aSession) |
|
208 { |
|
209 iUplinkSession = aSession; |
|
210 } |
|
211 |
|
212 // ----------------------------------------------------------------------------- |
|
213 // TMSServer::HasDnLinkSession |
|
214 // |
|
215 // ----------------------------------------------------------------------------- |
|
216 // |
|
217 TBool TMSServer::HasDnLinkSession() const |
|
218 { |
|
219 return iDnlinkSession; |
|
220 } |
|
221 |
|
222 // ----------------------------------------------------------------------------- |
|
223 // TMSServer::HasUpLinkSession |
|
224 // |
|
225 // ----------------------------------------------------------------------------- |
|
226 // |
|
227 TBool TMSServer::HasUpLinkSession() const |
|
228 { |
|
229 return iUplinkSession; |
|
230 } |
|
231 |
|
232 // ----------------------------------------------------------------------------- |
|
233 // TMSServer::GetNewTMSCallSessionHandleL |
204 // TMSServer::GetNewTMSCallSessionHandleL |
234 // |
205 // |
235 // ----------------------------------------------------------------------------- |
206 // ----------------------------------------------------------------------------- |
236 // |
207 // |
237 void TMSServer::GetNewTMSCallSessionHandleL(RHandleBase& aHandle) |
208 void TMSServer::GetNewTMSCallSessionHandleL(RHandleBase& aHandle) |
742 if (status == TMS_RESULT_SUCCESS) |
709 if (status == TMS_RESULT_SUCCESS) |
743 { |
710 { |
744 iAudioCenRepHandler->SetMuteState(level); |
711 iAudioCenRepHandler->SetMuteState(level); |
745 iEffectSettings->SetGain(level); |
712 iEffectSettings->SetGain(level); |
746 iSessionIter.SetToFirst(); |
713 iSessionIter.SetToFirst(); |
747 |
714 TMSServerSession* ss = static_cast<TMSServerSession*> (iSessionIter++); |
748 TMSServerSession* serverSession = |
715 while (ss != NULL) |
749 static_cast<TMSServerSession*> (iSessionIter++); |
716 { |
750 |
717 ss->HandleGlobalEffectChange(TMS_EVENT_EFFECT_GAIN_CHANGED, level); |
751 while (serverSession != NULL) |
718 ss = static_cast<TMSServerSession*> (iSessionIter++); |
752 { |
|
753 serverSession->HandleGlobalEffectChange( |
|
754 TMS_EVENT_EFFECT_GAIN_CHANGED, level); |
|
755 serverSession = static_cast<TMSServerSession*> (iSessionIter++); |
|
756 } |
719 } |
757 } |
720 } |
758 |
721 |
759 TRACE_PRN_FN_EXT; |
722 TRACE_PRN_FN_EXT; |
760 return status; |
723 return status; |
883 } |
846 } |
884 |
847 |
885 TInt status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_VOL_SET, vol); |
848 TInt status = SendMessageToCallServ(TMS_EFFECT_GLOBAL_VOL_SET, vol); |
886 |
849 |
887 iSessionIter.SetToFirst(); |
850 iSessionIter.SetToFirst(); |
888 TMSServerSession* serverSession = |
851 TMSServerSession* ss = static_cast<TMSServerSession*> (iSessionIter++); |
889 static_cast<TMSServerSession*> (iSessionIter++); |
852 while (ss != NULL) |
890 while (serverSession != NULL) |
|
891 { |
853 { |
892 // Send only if there is a subscriber to TMS routing notifications. |
854 // Send only if there is a subscriber to TMS routing notifications. |
893 if (iTarHandlerCount > 1) |
855 if (iTarHandlerCount > 1) |
894 { |
856 { |
895 serverSession->HandleRoutingChange(routingpckg); |
857 ss->HandleRoutingChange(routingpckg); |
896 } |
858 } |
897 serverSession->HandleGlobalEffectChange(TMS_EVENT_EFFECT_VOL_CHANGED, |
859 ss->HandleGlobalEffectChange(TMS_EVENT_EFFECT_VOL_CHANGED, vol, ETrue, |
898 vol, ETrue, iCurrentRouting); |
860 iCurrentRouting); |
899 serverSession = static_cast<TMSServerSession*> (iSessionIter++); |
861 ss = static_cast<TMSServerSession*> (iSessionIter++); |
900 } |
862 } |
901 |
863 |
|
864 TRACE_PRN_FN_EXT; |
|
865 return status; |
|
866 } |
|
867 |
|
868 // ----------------------------------------------------------------------------- |
|
869 // TMSServer::InitDTMF |
|
870 // |
|
871 // ----------------------------------------------------------------------------- |
|
872 // |
|
873 TInt TMSServer::InitDTMF(const RMessage2& aMessage) |
|
874 { |
|
875 TRACE_PRN_FN_ENT; |
|
876 TInt status(TMS_RESULT_SUCCESS); |
|
877 TMSStreamType strmtype; |
|
878 strmtype = (TMSStreamType) aMessage.Int0(); |
|
879 |
|
880 if (strmtype == TMS_STREAM_UPLINK) |
|
881 { |
|
882 if (!iDTMFUplinkPlayerEtel) //CS call |
|
883 { |
|
884 // Uses ETel for uplink |
|
885 TRAP(status, iDTMFUplinkPlayerEtel = TMSDTMFProvider::NewL()); |
|
886 if (iDTMFUplinkPlayerEtel && status == TMS_RESULT_SUCCESS) |
|
887 { |
|
888 iDTMFUplinkPlayerEtel->AddObserver(*this); |
|
889 } |
|
890 } |
|
891 if (!iDTMFUplinkPlayer) //IP call |
|
892 { |
|
893 TRAP(status, iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this, |
|
894 // KAudioPrefVoipAudioUplinkNonSignal, |
|
895 // KAudioPrefVoipAudioUplink, |
|
896 // KAudioPrefUnknownVoipAudioUplink |
|
897 // KAudioPriorityDTMFString)); |
|
898 KAudioDTMFString, KAudioPriorityDTMFString)); |
|
899 } |
|
900 } |
|
901 else if (strmtype == TMS_STREAM_DOWNLINK) |
|
902 { |
|
903 if (!iDTMFDnlinkPlayer) //CS or IP call |
|
904 { |
|
905 TRAP(status, iDTMFDnlinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this, |
|
906 KAudioDTMFString, KAudioPriorityDTMFString)); |
|
907 } |
|
908 } |
|
909 if (!iDTMFNotifier && status == TMS_RESULT_SUCCESS) |
|
910 { |
|
911 TRAP(status, iDTMFNotifier = TMSDtmfNotifier::NewL()); |
|
912 } |
|
913 |
|
914 aMessage.Complete(status); |
902 TRACE_PRN_FN_EXT; |
915 TRACE_PRN_FN_EXT; |
903 return status; |
916 return status; |
904 } |
917 } |
905 |
918 |
906 // ----------------------------------------------------------------------------- |
919 // ----------------------------------------------------------------------------- |
913 TRACE_PRN_FN_ENT; |
926 TRACE_PRN_FN_ENT; |
914 |
927 |
915 TInt status(TMS_RESULT_SUCCESS); |
928 TInt status(TMS_RESULT_SUCCESS); |
916 TInt len(0); |
929 TInt len(0); |
917 TMSStreamType strmtype; |
930 TMSStreamType strmtype; |
918 |
|
919 strmtype = (TMSStreamType) aMessage.Int0(); |
931 strmtype = (TMSStreamType) aMessage.Int0(); |
920 len = aMessage.GetDesLength(1); |
932 len = aMessage.GetDesLength(1); |
921 HBufC* tone(NULL); |
|
922 if (len > 0) |
933 if (len > 0) |
923 { |
934 { |
924 delete tone; |
935 HBufC* tone(NULL); |
925 tone = NULL; |
936 TRAP(status, tone = HBufC::NewL(len)); |
926 TRAP(status,tone = HBufC::NewL(len)); |
|
927 if (status == TMS_RESULT_SUCCESS) |
937 if (status == TMS_RESULT_SUCCESS) |
928 { |
938 { |
929 TPtr ptr = tone->Des(); |
939 TPtr ptr = tone->Des(); |
930 status = aMessage.Read(1, ptr); |
940 status = aMessage.Read(1, ptr); |
931 TRACE_PRN_N(ptr); |
941 TRACE_PRN_N(ptr); |
932 |
942 TmsMsgBufPckg dtmfpckg; |
933 TIpcArgs args; |
943 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
934 args.Set(0, strmtype); |
944 |
935 args.Set(1, &ptr); |
945 if (strmtype == TMS_STREAM_UPLINK) |
936 status = SendMessageToCallServ(TMS_DTMF_START, args); |
946 { |
937 delete tone; |
947 //#ifdef __WINSCW__ |
938 tone = NULL; |
948 // Just to test playback in wins |
939 } |
949 // iActiveCallType = TMS_CALL_IP; |
940 } |
950 //#else |
|
951 FindActiveCallType(); |
|
952 //#endif |
|
953 if (iActiveCallType == TMS_CALL_IP && iDTMFUplinkPlayer) |
|
954 { |
|
955 iDTMFUplinkPlayer->PlayDtmfTone(ptr); |
|
956 status = TMS_RESULT_SUCCESS; |
|
957 dtmfpckg().iRequest = ECmdDTMFToneUplPlayStarted; |
|
958 } |
|
959 else if (iActiveCallType == TMS_CALL_CS && |
|
960 iDTMFUplinkPlayerEtel) |
|
961 { |
|
962 status = iDTMFUplinkPlayerEtel->SendDtmfToneString(ptr); |
|
963 dtmfpckg().iRequest = ECmdDTMFToneUplPlayStarted; |
|
964 } |
|
965 else |
|
966 { |
|
967 status = TMS_RESULT_INVALID_STATE; |
|
968 } |
|
969 } |
|
970 else if (strmtype == TMS_STREAM_DOWNLINK) |
|
971 { |
|
972 //status = TMS_RESULT_UNINITIALIZED_OBJECT; |
|
973 if (iDTMFDnlinkPlayer) |
|
974 { |
|
975 iDTMFDnlinkPlayer->PlayDtmfTone(ptr); |
|
976 status = TMS_RESULT_SUCCESS; |
|
977 dtmfpckg().iRequest = ECmdDTMFToneDnlPlayStarted; |
|
978 } |
|
979 } |
|
980 else |
|
981 { |
|
982 status = TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED; |
|
983 } |
|
984 |
|
985 if (iDTMFNotifier) |
|
986 { |
|
987 dtmfpckg().iStatus = TMSUtility::EtelToTMSResult(status); |
|
988 iDTMFNotifier->SetDtmf(dtmfpckg); |
|
989 } |
|
990 } |
|
991 delete tone; |
|
992 tone = NULL; |
|
993 } |
|
994 |
941 aMessage.Complete(status); |
995 aMessage.Complete(status); |
942 |
|
943 TRACE_PRN_FN_EXT; |
996 TRACE_PRN_FN_EXT; |
944 return status; |
997 return status; |
945 } |
998 } |
946 |
999 |
947 // ----------------------------------------------------------------------------- |
1000 // ----------------------------------------------------------------------------- |
951 // |
1004 // |
952 TInt TMSServer::StopDTMF(const RMessage2& aMessage) |
1005 TInt TMSServer::StopDTMF(const RMessage2& aMessage) |
953 { |
1006 { |
954 TRACE_PRN_FN_ENT; |
1007 TRACE_PRN_FN_ENT; |
955 |
1008 |
956 TInt status(TMS_RESULT_SUCCESS); |
1009 TInt status(TMS_RESULT_INVALID_STATE); |
957 TMSStreamType streamtype; |
1010 TMSStreamType streamtype; |
958 streamtype = (TMSStreamType) aMessage.Int0(); |
1011 streamtype = (TMSStreamType) aMessage.Int0(); |
959 status = SendMessageToCallServ(TMS_DTMF_STOP, streamtype); |
1012 |
|
1013 if (streamtype == TMS_STREAM_UPLINK) |
|
1014 { |
|
1015 if (iActiveCallType == TMS_CALL_IP && iDTMFUplinkPlayer) |
|
1016 { |
|
1017 iDTMFUplinkPlayer->Cancel(); |
|
1018 status = TMS_RESULT_SUCCESS; |
|
1019 } |
|
1020 else if (iActiveCallType == TMS_CALL_CS && |
|
1021 iDTMFUplinkPlayerEtel) |
|
1022 { |
|
1023 status = iDTMFUplinkPlayerEtel->StopDtmfTone(); |
|
1024 status = TMSUtility::EtelToTMSResult(status); |
|
1025 } |
|
1026 } |
|
1027 else if (streamtype == TMS_STREAM_DOWNLINK) |
|
1028 { |
|
1029 if (iDTMFDnlinkPlayer) |
|
1030 { |
|
1031 iDTMFDnlinkPlayer->Cancel(); |
|
1032 status = TMS_RESULT_SUCCESS; |
|
1033 } |
|
1034 } |
|
1035 if (iDTMFNotifier) |
|
1036 { |
|
1037 TmsMsgBufPckg dtmfpckg; |
|
1038 dtmfpckg().iStatus = status; |
|
1039 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
|
1040 iDTMFNotifier->SetDtmf(dtmfpckg); |
|
1041 } |
|
1042 |
960 aMessage.Complete(status); |
1043 aMessage.Complete(status); |
961 |
|
962 TRACE_PRN_FN_EXT; |
1044 TRACE_PRN_FN_EXT; |
963 return status; |
1045 return status; |
964 } |
1046 } |
965 |
1047 |
966 // ----------------------------------------------------------------------------- |
1048 // ----------------------------------------------------------------------------- |
970 // |
1052 // |
971 TInt TMSServer::ContinueSendingDTMF(const RMessage2& aMessage) |
1053 TInt TMSServer::ContinueSendingDTMF(const RMessage2& aMessage) |
972 { |
1054 { |
973 TRACE_PRN_FN_ENT; |
1055 TRACE_PRN_FN_ENT; |
974 |
1056 |
975 TInt status(TMS_RESULT_SUCCESS); |
1057 TInt status(TMS_RESULT_INVALID_STATE); |
976 TBool continuesending; |
1058 TBool continuesnd; |
977 continuesending = (TBool) aMessage.Int0(); |
1059 continuesnd = (TBool) aMessage.Int0(); |
978 status = SendMessageToCallServ(TMS_DTMF_CONTINUE, continuesending); |
1060 if (iActiveCallType == TMS_CALL_CS && iDTMFUplinkPlayerEtel) |
|
1061 { |
|
1062 status = iDTMFUplinkPlayerEtel->ContinueDtmfStringSending(continuesnd); |
|
1063 status = TMSUtility::EtelToTMSResult(status); |
|
1064 } |
|
1065 |
979 aMessage.Complete(status); |
1066 aMessage.Complete(status); |
980 |
|
981 TRACE_PRN_FN_EXT; |
1067 TRACE_PRN_FN_EXT; |
982 return status; |
1068 return status; |
983 } |
1069 } |
984 |
1070 |
985 // ----------------------------------------------------------------------------- |
1071 // ----------------------------------------------------------------------------- |
988 // ----------------------------------------------------------------------------- |
1074 // ----------------------------------------------------------------------------- |
989 // |
1075 // |
990 TInt TMSServer::NotifyDtmfClients(TmsMsgBufPckg dtmfpckg) |
1076 TInt TMSServer::NotifyDtmfClients(TmsMsgBufPckg dtmfpckg) |
991 { |
1077 { |
992 TRACE_PRN_FN_ENT; |
1078 TRACE_PRN_FN_ENT; |
993 |
|
994 iSessionIter.SetToFirst(); |
1079 iSessionIter.SetToFirst(); |
995 TMSServerSession* serverSession = |
1080 TMSServerSession* ss = static_cast<TMSServerSession*> (iSessionIter++); |
996 static_cast<TMSServerSession*> (iSessionIter++); |
1081 while (ss != NULL) |
997 |
1082 { |
998 while (serverSession != NULL) |
1083 ss->NotifyClient(dtmfpckg().iRequest, dtmfpckg().iStatus); |
999 { |
1084 ss = static_cast<TMSServerSession*> (iSessionIter++); |
1000 serverSession->NotifyClient(dtmfpckg().iRequest, dtmfpckg().iStatus); |
1085 } |
1001 serverSession = static_cast<TMSServerSession*> (iSessionIter++); |
|
1002 } |
|
1003 |
|
1004 TRACE_PRN_FN_EXT; |
1086 TRACE_PRN_FN_EXT; |
1005 return TMS_RESULT_SUCCESS; |
1087 return TMS_RESULT_SUCCESS; |
|
1088 } |
|
1089 |
|
1090 //From DTMFTonePlayerObserver |
|
1091 // ----------------------------------------------------------------------------- |
|
1092 // TMSServer::DTMFInitCompleted |
|
1093 // |
|
1094 // ----------------------------------------------------------------------------- |
|
1095 // |
|
1096 void TMSServer::DTMFInitCompleted(gint /*status*/) |
|
1097 { |
|
1098 TRACE_PRN_FN_ENT; |
|
1099 // TODO: process error |
|
1100 TRACE_PRN_FN_EXT; |
|
1101 } |
|
1102 |
|
1103 // ----------------------------------------------------------------------------- |
|
1104 // TMSServer::DTMFToneFinished |
|
1105 // |
|
1106 // ----------------------------------------------------------------------------- |
|
1107 // |
|
1108 void TMSServer::DTMFToneFinished(gint status) |
|
1109 { |
|
1110 TRACE_PRN_FN_ENT; |
|
1111 TRACE_PRN_IF_ERR(status); |
|
1112 TmsMsgBufPckg dtmfpckg; |
|
1113 |
|
1114 // KErrUnderflow indicates end of DTMF playback. |
|
1115 if (status == KErrUnderflow /*|| status == KErrInUse*/) |
|
1116 { |
|
1117 status = TMS_RESULT_SUCCESS; |
|
1118 } |
|
1119 dtmfpckg().iStatus = TMSRESULT(status); |
|
1120 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
|
1121 if (iDTMFNotifier) |
|
1122 { |
|
1123 iDTMFNotifier->SetDtmf(dtmfpckg); |
|
1124 } |
|
1125 TRACE_PRN_FN_EXT; |
|
1126 } |
|
1127 |
|
1128 // ----------------------------------------------------------------------------- |
|
1129 // TMSServer::FindActiveCallType |
|
1130 // |
|
1131 // ----------------------------------------------------------------------------- |
|
1132 // |
|
1133 gint TMSServer::FindActiveCallType() |
|
1134 { |
|
1135 TInt status(TMS_RESULT_INVALID_STATE); |
|
1136 iActiveCallType = -1; |
|
1137 TInt i = 0; |
|
1138 while (i < iTMSCallServList.Count()) |
|
1139 { |
|
1140 TMSStartAndMonitorTMSCallThread* callThread = iTMSCallServList[i]; |
|
1141 if (callThread) |
|
1142 { |
|
1143 TmsCallMsgBufPckg pckg; |
|
1144 TIpcArgs args(&pckg); |
|
1145 status = callThread->iTMSCallProxyLocal.ReceiveFromCallServer( |
|
1146 TMS_GET_ACTIVE_CALL_PARAMS, args); |
|
1147 if (pckg().iBool || status != TMS_RESULT_SUCCESS) |
|
1148 { |
|
1149 iActiveCallType = static_cast<TMSCallType> (pckg().iInt); |
|
1150 break; |
|
1151 } |
|
1152 } |
|
1153 i++; |
|
1154 } |
|
1155 return status; |
|
1156 } |
|
1157 |
|
1158 // ----------------------------------------------------------------------------- |
|
1159 // TMSServer::HandleDTMFEvent |
|
1160 // |
|
1161 // ----------------------------------------------------------------------------- |
|
1162 // |
|
1163 void TMSServer::HandleDTMFEvent(const TMSDTMFObserver::TCCPDtmfEvent event, |
|
1164 const gint status, const TChar /*tone*/) |
|
1165 { |
|
1166 TRACE_PRN_FN_ENT; |
|
1167 TRACE_PRN_IF_ERR(status); |
|
1168 TmsMsgBufPckg dtmfpckg; |
|
1169 dtmfpckg().iStatus = TMSUtility::EtelToTMSResult(status); |
|
1170 |
|
1171 switch (event) |
|
1172 { |
|
1173 case ECCPDtmfUnknown: //Unknown |
|
1174 break; |
|
1175 case ECCPDtmfManualStart: //DTMF sending started manually |
|
1176 case ECCPDtmfSequenceStart: //Automatic DTMF sending initialized |
|
1177 dtmfpckg().iRequest = ECmdDTMFToneUplPlayStarted; |
|
1178 break; |
|
1179 case ECCPDtmfManualStop: //DTMF sending stopped manually |
|
1180 case ECCPDtmfManualAbort: //DTMF sending aborted manually |
|
1181 case ECCPDtmfSequenceStop: //Automatic DTMF sending stopped |
|
1182 case ECCPDtmfSequenceAbort: //Automatic DTMF sending aborted |
|
1183 case ECCPDtmfStopInDtmfString: //There was stop mark in DTMF string |
|
1184 case ECCPDtmfStringSendingCompleted://DTMF sending success |
|
1185 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
|
1186 break; |
|
1187 default: |
|
1188 break; |
|
1189 } |
|
1190 |
|
1191 if (iDTMFNotifier) |
|
1192 { |
|
1193 iDTMFNotifier->SetDtmf(dtmfpckg); |
|
1194 } |
|
1195 TRACE_PRN_FN_EXT; |
1006 } |
1196 } |
1007 |
1197 |
1008 // ----------------------------------------------------------------------------- |
1198 // ----------------------------------------------------------------------------- |
1009 // TMSServer::InitRingTonePlayerL |
1199 // TMSServer::InitRingTonePlayerL |
1010 // |
1200 // |