182 { |
180 { |
183 status = TMS_RESULT_DOES_NOT_EXIST; |
181 status = TMS_RESULT_DOES_NOT_EXIST; |
184 if (strmId == iUplinkStreamId) |
182 if (strmId == iUplinkStreamId) |
185 { |
183 { |
186 SetFormat(iUplinkStreamId, fourCC); |
184 SetFormat(iUplinkStreamId, fourCC); |
187 status = OpenUplinkL(aMessage); |
185 status = OpenUplinkL(message); |
188 |
186 if (status == TMS_RESULT_SUCCESS) |
189 iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this, |
|
190 KAudioPrefUnknownVoipAudioUplink, |
|
191 KAudioPriorityUnknownVoipAudioUplink); |
|
192 |
|
193 if (!iDTMFNotifier) |
|
194 { |
187 { |
195 iDTMFNotifier = TMSDtmfNotifier::NewL(); |
188 status = InitDTMF(TMS_STREAM_UPLINK); |
196 } |
189 } |
197 |
|
198 NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status); |
190 NotifyClient(iUplinkStreamId, ECmdUplinkInitComplete, status); |
199 } |
191 } |
200 break; |
192 break; |
201 } |
193 } |
202 case TMS_STREAM_DOWNLINK: |
194 case TMS_STREAM_DOWNLINK: |
203 { |
195 { |
204 status = TMS_RESULT_DOES_NOT_EXIST; |
196 status = TMS_RESULT_DOES_NOT_EXIST; |
205 if (strmId == iDnlinkStreamId) |
197 if (strmId == iDnlinkStreamId) |
206 { |
198 { |
207 SetFormat(iDnlinkStreamId, fourCC); |
199 SetFormat(iDnlinkStreamId, fourCC); |
208 status = OpenDownlinkL(aMessage); |
200 status = OpenDownlinkL(message); |
209 |
201 if (status == TMS_RESULT_SUCCESS) |
210 iDTMFDnlinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this, |
|
211 KAudioPrefUnknownVoipAudioDownlink, |
|
212 KAudioPriorityUnknownVoipAudioDownlink); |
|
213 |
|
214 if (!iDTMFNotifier) |
|
215 { |
202 { |
216 iDTMFNotifier = TMSDtmfNotifier::NewL(); |
203 status = InitDTMF(TMS_STREAM_DOWNLINK); |
217 } |
204 } |
218 |
|
219 NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status); |
205 NotifyClient(iDnlinkStreamId, ECmdDownlinkInitComplete, status); |
220 } |
206 } |
221 break; |
207 break; |
222 } |
208 } |
223 default: |
209 default: |
1033 { |
1026 { |
1034 // Open message queue for handling server notifications to the client |
1027 // Open message queue for handling server notifications to the client |
1035 if (iMsgQueueDn.Handle() <= 0) |
1028 if (iMsgQueueDn.Handle() <= 0) |
1036 { |
1029 { |
1037 // Second argument in TMSCallProxy::InitStream |
1030 // Second argument in TMSCallProxy::InitStream |
1038 status = iMsgQueueDn.Open(aMessage, 1); |
1031 status = iMsgQueueDn.Open(message, 1); |
1039 } |
1032 } |
1040 |
1033 |
1041 if (status == TMS_RESULT_SUCCESS) |
1034 if (status == TMS_RESULT_SUCCESS) |
1042 { |
1035 { |
1043 // For transfer data buffer processing |
1036 // For transfer data buffer processing |
1044 iIPDownlink->SetMsgQueue(iMsgQueueDn); |
1037 iIPDownlink->SetMsgQueue(iMsgQueueDn); |
1045 } |
1038 } |
1046 } |
1039 } |
1047 |
|
1048 TRACE_PRN_IF_ERR(status); |
1040 TRACE_PRN_IF_ERR(status); |
1049 TRACE_PRN_FN_EXT; |
1041 TRACE_PRN_FN_EXT; |
1050 return status; |
1042 return status; |
1051 } |
1043 } |
1052 |
1044 |
1053 // ----------------------------------------------------------------------------- |
1045 // ----------------------------------------------------------------------------- |
1054 // TMSCallIPAdpt::OpenUplinkL |
1046 // TMSCallIPAdpt::OpenUplinkL |
1055 // Method for recorder initialization. |
1047 // Method for recorder initialization. |
1056 // ----------------------------------------------------------------------------- |
1048 // ----------------------------------------------------------------------------- |
1057 // |
1049 // |
1058 gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& aMessage) |
1050 gint TMSCallIPAdpt::OpenUplinkL(const RMessage2& message) |
1059 { |
1051 { |
1060 TRACE_PRN_FN_ENT; |
1052 TRACE_PRN_FN_ENT; |
1061 gint status(TMS_RESULT_SUCCESS); |
1053 gint status(TMS_RESULT_UNINITIALIZED_OBJECT); |
1062 |
1054 |
1063 // Ensure clients have MultimediaDD capability to use this priority/pref |
1055 // Clients must have MultimediaDD capability to use this priority/pref |
|
1056 |
|
1057 /* Clarify with adaptation team which prio/pref values should be used. |
|
1058 * 1) KAudioPrefUnknownVoipAudioUplink -3rd party VoIP? |
|
1059 * KAudioPriorityUnknownVoipAudioUplink -3rd party VoIP? |
|
1060 * 2) KAudioPrefVoipAudioUplink -NOK native VoIP? |
|
1061 * KAudioPriorityVoipAudioUplink -NOK native VoIP? |
|
1062 */ |
1064 iPriority.iPref = KAudioPrefVoipAudioUplink; |
1063 iPriority.iPref = KAudioPrefVoipAudioUplink; |
1065 iPriority.iPriority = KAudioPriorityVoipAudioUplink; |
1064 iPriority.iPriority = KAudioPriorityVoipAudioUplink; |
1066 |
1065 |
1067 if (!iIPUplink) |
1066 if (!iIPUplink) |
1068 { |
1067 { |
1403 { |
1401 { |
1404 return TMS_RESULT_FEATURE_NOT_SUPPORTED; |
1402 return TMS_RESULT_FEATURE_NOT_SUPPORTED; |
1405 } |
1403 } |
1406 |
1404 |
1407 // ----------------------------------------------------------------------------- |
1405 // ----------------------------------------------------------------------------- |
|
1406 // TMSCallIPAdpt::InitDTMF |
|
1407 // |
|
1408 // ----------------------------------------------------------------------------- |
|
1409 // |
|
1410 gint TMSCallIPAdpt::InitDTMF(TMSStreamType strmtype) |
|
1411 { |
|
1412 TRACE_PRN_FN_ENT; |
|
1413 gint status(TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED); |
|
1414 |
|
1415 if (strmtype == TMS_STREAM_DOWNLINK) |
|
1416 { |
|
1417 delete iDTMFDnlinkPlayer; |
|
1418 iDTMFDnlinkPlayer = NULL; |
|
1419 |
|
1420 /* Clarify with adaptation team which prio/pref values should be used. |
|
1421 * 1) KAudioDTMFString -local play, no mixing |
|
1422 * KAudioPriorityDTMFString -local play, no mixing |
|
1423 * 2) KAudioPrefUnknownVoipAudioDownlink -3rd party VoIP? |
|
1424 * KAudioPriorityUnknownVoipAudioDownlink -3rd party VoIP? |
|
1425 * 3) KAudioPrefVoipAudioDownlink -NOK native VoIP? |
|
1426 * KAudioPriorityVoipAudioDownlink -NOK native VoIP? |
|
1427 */ |
|
1428 TRAP(status, iDTMFDnlinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this, |
|
1429 KAudioPrefVoipAudioDownlink, KAudioPriorityVoipAudioDownlink)); |
|
1430 } |
|
1431 else if (strmtype == TMS_STREAM_UPLINK) |
|
1432 { |
|
1433 delete iDTMFUplinkPlayer; |
|
1434 iDTMFUplinkPlayer = NULL; |
|
1435 |
|
1436 /* Clarify with adaptation team which prio/pref values should be used. |
|
1437 * Currently the audio policy blocks DTMF mixing with the UPL stream. |
|
1438 * 1) KAudioPrefUnknownVoipAudioUplink -3rd party VoIP? |
|
1439 * KAudioPriorityUnknownVoipAudioUplink -3rd party VoIP? |
|
1440 * KAudioPriorityUnknownVoipAudioUplinkNonSignal -??? |
|
1441 * 2) KAudioPrefVoipAudioUplink -NOK native VoIP? |
|
1442 * KAudioPrefUnknownVoipAudioUplinkNonSignal -??? |
|
1443 * KAudioPrefVoipAudioUplinkNonSignal -??? |
|
1444 * KAudioPriorityVoipAudioUplink -NOK native VoIP? |
|
1445 */ |
|
1446 TRAP(status, iDTMFUplinkPlayer = TMSAudioDtmfTonePlayer::NewL(*this, |
|
1447 KAudioPrefVoipAudioUplink, KAudioPriorityVoipAudioUplink)); |
|
1448 } |
|
1449 |
|
1450 if (!iDTMFNotifier && status == TMS_RESULT_SUCCESS) |
|
1451 { |
|
1452 TRAP(status, iDTMFNotifier = TMSDtmfNotifier::NewL()); |
|
1453 } |
|
1454 |
|
1455 TRACE_PRN_FN_EXT; |
|
1456 return status; |
|
1457 } |
|
1458 |
|
1459 // ----------------------------------------------------------------------------- |
1408 // TMSCallIPAdpt::StartDTMF |
1460 // TMSCallIPAdpt::StartDTMF |
1409 // |
1461 // |
1410 // ----------------------------------------------------------------------------- |
1462 // ----------------------------------------------------------------------------- |
1411 // |
1463 // |
1412 gint TMSCallIPAdpt::StartDTMF(TMSStreamType strmtype, TDes& dtmfstring) |
1464 gint TMSCallIPAdpt::StartDTMF(TMSStreamType strmtype, TDes& dtmfstring) |
1413 { |
1465 { |
1414 TRACE_PRN_FN_ENT; |
1466 TRACE_PRN_FN_ENT; |
|
1467 gint status(TMS_RESULT_STREAM_TYPE_NOT_SUPPORTED); |
1415 TmsMsgBufPckg dtmfpckg; |
1468 TmsMsgBufPckg dtmfpckg; |
|
1469 dtmfpckg().iStatus = status; |
|
1470 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
|
1471 |
1416 if (strmtype == TMS_STREAM_DOWNLINK) |
1472 if (strmtype == TMS_STREAM_DOWNLINK) |
1417 { |
1473 { |
1418 if (iDTMFDnlinkPlayer /*&& iDTMFDnlinkStatus*/) |
1474 status = TMS_RESULT_UNINITIALIZED_OBJECT; |
|
1475 if (iDTMFDnlinkPlayer) |
1419 { |
1476 { |
1420 iDTMFDnlinkPlayer->PlayDtmfTone(dtmfstring); |
1477 iDTMFDnlinkPlayer->PlayDtmfTone(dtmfstring); |
1421 dtmfpckg().iStatus = TMS_RESULT_SUCCESS; |
1478 status = TMS_RESULT_SUCCESS; |
1422 //TMS_EVENT_DTMF_TONE_STARTED |
1479 } |
1423 dtmfpckg().iRequest = ECmdDTMFOpenDnlinkComplete; |
1480 dtmfpckg().iStatus = status; |
1424 } |
1481 dtmfpckg().iRequest = ECmdDTMFToneDnlPlayStarted; |
1425 } |
1482 } |
1426 else if (strmtype == TMS_STREAM_UPLINK) |
1483 else if (strmtype == TMS_STREAM_UPLINK) |
1427 { |
1484 { |
1428 if (iDTMFUplinkPlayer /*&& iDTMFUplinkStatus*/) |
1485 status = TMS_RESULT_UNINITIALIZED_OBJECT; |
|
1486 if (iDTMFUplinkPlayer) |
1429 { |
1487 { |
1430 iDTMFUplinkPlayer->PlayDtmfTone(dtmfstring); |
1488 iDTMFUplinkPlayer->PlayDtmfTone(dtmfstring); |
1431 dtmfpckg().iStatus = TMS_RESULT_SUCCESS; |
1489 status = TMS_RESULT_SUCCESS; |
1432 //TMS_EVENT_DTMF_TONE_STARTED |
1490 } |
1433 dtmfpckg().iRequest = ECmdDTMFOpenUplinkComplete; |
1491 dtmfpckg().iStatus = status; |
1434 } |
1492 dtmfpckg().iRequest = ECmdDTMFToneUplPlayStarted; |
1435 } |
1493 } |
1436 |
1494 |
1437 if (iDTMFNotifier) |
1495 if (iDTMFNotifier) |
1438 { |
1496 { |
1439 iDTMFNotifier->SetDtmf(dtmfpckg, TRUE); |
1497 iDTMFNotifier->SetDtmf(dtmfpckg); |
1440 } |
1498 } |
|
1499 |
|
1500 TRACE_PRN_IF_ERR(status); |
|
1501 TRACE_PRN_FN_EXT; |
|
1502 return status; |
|
1503 } |
|
1504 |
|
1505 // ----------------------------------------------------------------------------- |
|
1506 // TMSCallIPAdpt::StopDTMF |
|
1507 // |
|
1508 // ----------------------------------------------------------------------------- |
|
1509 // |
|
1510 gint TMSCallIPAdpt::StopDTMF(TMSStreamType streamtype) |
|
1511 { |
|
1512 TRACE_PRN_FN_ENT; |
|
1513 |
|
1514 if (streamtype == TMS_STREAM_DOWNLINK) |
|
1515 { |
|
1516 iDTMFDnlinkPlayer->Cancel(); |
|
1517 } |
|
1518 else if (streamtype == TMS_STREAM_UPLINK) |
|
1519 { |
|
1520 iDTMFUplinkPlayer->Cancel(); |
|
1521 } |
|
1522 |
1441 TRACE_PRN_FN_EXT; |
1523 TRACE_PRN_FN_EXT; |
1442 return TMS_RESULT_SUCCESS; |
1524 return TMS_RESULT_SUCCESS; |
1443 } |
1525 } |
1444 // ----------------------------------------------------------------------------- |
|
1445 // TMSCallIPAdpt::StopDTMF |
|
1446 // |
|
1447 // ----------------------------------------------------------------------------- |
|
1448 // |
|
1449 gint TMSCallIPAdpt::StopDTMF(TMSStreamType streamtype) |
|
1450 { |
|
1451 TRACE_PRN_FN_ENT; |
|
1452 |
|
1453 if (streamtype == TMS_STREAM_DOWNLINK) |
|
1454 { |
|
1455 iDTMFDnlinkPlayer->Cancel(); |
|
1456 } |
|
1457 else |
|
1458 { |
|
1459 iDTMFUplinkPlayer->Cancel(); |
|
1460 } |
|
1461 |
|
1462 TRACE_PRN_FN_EXT; |
|
1463 return TMS_RESULT_SUCCESS; |
|
1464 } |
|
1465 |
1526 |
1466 // ----------------------------------------------------------------------------- |
1527 // ----------------------------------------------------------------------------- |
1467 // TMSCallIPAdpt::ContinueDTMF |
1528 // TMSCallIPAdpt::ContinueDTMF |
1468 // |
1529 // |
1469 // ----------------------------------------------------------------------------- |
1530 // ----------------------------------------------------------------------------- |
1470 // |
1531 // |
1471 gint TMSCallIPAdpt::ContinueDTMF(TBool /*continuesending*/) |
1532 gint TMSCallIPAdpt::ContinueDTMF(gboolean /*continuesending*/) |
1472 { |
1533 { |
1473 TRACE_PRN_FN_ENT; |
|
1474 TRACE_PRN_FN_EXT; |
|
1475 return TMS_RESULT_FEATURE_NOT_SUPPORTED; |
1534 return TMS_RESULT_FEATURE_NOT_SUPPORTED; |
1476 } |
1535 } |
1477 |
1536 |
1478 //From DTMFTonePlayerObserver |
1537 //From DTMFTonePlayerObserver |
1479 // ----------------------------------------------------------------------------- |
1538 // ----------------------------------------------------------------------------- |
1480 // TMSCallIPAdpt::DTMFInitCompleted |
1539 // TMSCallIPAdpt::DTMFInitCompleted |
1481 // |
1540 // |
1482 // ----------------------------------------------------------------------------- |
1541 // ----------------------------------------------------------------------------- |
1483 // |
1542 // |
1484 void TMSCallIPAdpt::DTMFInitCompleted(TInt /*error*/) |
1543 void TMSCallIPAdpt::DTMFInitCompleted(gint /*error*/) |
1485 { |
1544 { |
1486 //DTMF init status |
1545 TRACE_PRN_FN_ENT; |
1487 TRACE_PRN_FN_ENT; |
1546 //TRACE_PRN_IF_ERR(error); |
1488 TRACE_PRN_FN_EXT; |
1547 TRACE_PRN_FN_EXT; |
1489 } |
1548 } |
1490 |
1549 |
1491 // ----------------------------------------------------------------------------- |
1550 // ----------------------------------------------------------------------------- |
1492 // TMSCallIPAdpt::DTMFToneFinished |
1551 // TMSCallIPAdpt::DTMFToneFinished |
1493 // |
1552 // |
1494 // ----------------------------------------------------------------------------- |
1553 // ----------------------------------------------------------------------------- |
1495 // |
1554 // |
1496 void TMSCallIPAdpt::DTMFToneFinished(TInt error) |
1555 void TMSCallIPAdpt::DTMFToneFinished(gint error) |
1497 { |
1556 { |
1498 TRACE_PRN_FN_ENT; |
1557 TRACE_PRN_FN_ENT; |
|
1558 TRACE_PRN_IF_ERR(error); |
1499 TmsMsgBufPckg dtmfpckg; |
1559 TmsMsgBufPckg dtmfpckg; |
1500 |
1560 |
1501 if(error == KErrUnderflow || error == KErrInUse) |
1561 // Ignore KErrUnderflow - end of DTMF playback. |
|
1562 if(error == KErrUnderflow /*|| error == KErrInUse*/) |
1502 { |
1563 { |
1503 error = TMS_RESULT_SUCCESS; |
1564 error = TMS_RESULT_SUCCESS; |
1504 } |
1565 } |
1505 |
|
1506 dtmfpckg().iStatus = error; |
1566 dtmfpckg().iStatus = error; |
1507 //TMS_EVENT_DTMF_TONE_STOPPED |
|
1508 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
1567 dtmfpckg().iRequest = ECmdDTMFTonePlayFinished; |
1509 if (iDTMFNotifier) |
1568 if (iDTMFNotifier) |
1510 { |
1569 { |
1511 iDTMFNotifier->SetDtmf(dtmfpckg, TRUE); |
1570 iDTMFNotifier->SetDtmf(dtmfpckg); |
1512 } |
1571 } |
1513 TRACE_PRN_FN_EXT; |
1572 TRACE_PRN_FN_EXT; |
1514 } |
1573 } |
1515 |
1574 |
1516 // ----------------------------------------------------------------------------- |
1575 // ----------------------------------------------------------------------------- |
1517 // TMSCallIPAdpt::NotifyClient |
1576 // TMSCallIPAdpt::NotifyClient |
1518 // ----------------------------------------------------------------------------- |
1577 // ----------------------------------------------------------------------------- |
1519 // |
1578 // |
1520 void TMSCallIPAdpt::NotifyClient(const gint strmId, const TInt aCommand, |
1579 void TMSCallIPAdpt::NotifyClient(const gint strmId, const gint aCommand, |
1521 const TInt aStatus, const TInt64 /*aInt64*/) |
1580 const gint aStatus, const gint64 /*aInt64*/) |
1522 { |
1581 { |
1523 iMsgBuffer.iRequest = aCommand; |
1582 iMsgBuffer.iRequest = aCommand; |
1524 iMsgBuffer.iStatus = aStatus; |
1583 iMsgBuffer.iStatus = aStatus; |
1525 |
1584 |
1526 if (strmId == iUplinkStreamId) |
1585 if (strmId == iUplinkStreamId) |