changeset 2 | 0b192a3a05a4 |
parent 1 | 6a1fe72036e3 |
child 10 | 0707dd69d236 |
1:6a1fe72036e3 | 2:0b192a3a05a4 |
---|---|
16 */ |
16 */ |
17 |
17 |
18 |
18 |
19 #include "atcodec.h" |
19 #include "atcodec.h" |
20 #include <mmtsy_names.h> // for etel |
20 #include <mmtsy_names.h> // for etel |
21 #include <btengconstants.h> |
21 #include <bttypes.h> |
22 #include <btengdiscovery.h> |
|
23 #include <badesca.h> |
22 #include <badesca.h> |
24 #include "btmcprotocol.h" |
23 #include "btmcprotocol.h" |
25 #include "btmccallinghandler.h" |
24 #include "btmccallinghandler.h" |
26 #include "btmcphonestatus.h" |
25 #include "btmcphonestatus.h" |
27 #include "btmccallstatus.h" |
26 #include "btmccallstatus.h" |
44 const TInt KSLC_3WayCalling = KChldFromHF | KChldFromAG; |
43 const TInt KSLC_3WayCalling = KChldFromHF | KChldFromAG; |
45 |
44 |
46 const TInt KBerUnknown = 99; |
45 const TInt KBerUnknown = 99; |
47 |
46 |
48 const TInt KServiceSlcTimer = 1; |
47 const TInt KServiceSlcTimer = 1; |
49 const TInt KServiceSdpQuery = 2; |
48 |
50 const TInt KServiceGetSubscriber = 3; |
49 const TInt KServiceGetSubscriber = 3; |
51 const TInt KServiceGetOperator = 4; |
50 const TInt KServiceGetOperator = 4; |
52 const TInt KServiceCmdHandling = 5; |
51 const TInt KServiceCmdHandling = 5; |
53 |
52 |
54 const TInt KQueryIMEI = 6; |
53 const TInt KQueryIMEI = 6; |
83 |
82 |
84 delete iNumber; |
83 delete iNumber; |
85 delete iOperator; |
84 delete iOperator; |
86 |
85 |
87 delete iEtelQuery; |
86 delete iEtelQuery; |
88 delete iBteng; |
|
89 |
87 |
90 iPhone.Close(); |
88 iPhone.Close(); |
91 iServer.UnloadPhoneModule(KMmTsyModuleName); |
89 iServer.UnloadPhoneModule(KMmTsyModuleName); |
92 iServer.Close(); |
90 iServer.Close(); |
93 delete iOutgoPacketQueue; |
91 delete iOutgoPacketQueue; |
213 TBool CBtmcProtocol::ActiveChldHandling() const |
211 TBool CBtmcProtocol::ActiveChldHandling() const |
214 { |
212 { |
215 return iCallingHandler->ActiveChldHandling(); |
213 return iCallingHandler->ActiveChldHandling(); |
216 } |
214 } |
217 |
215 |
216 void CBtmcProtocol::SetHspRvcSupported(TBool aSupported) |
|
217 { |
|
218 TRACE_FUNC |
|
219 // Only update the supported feature field if this |
|
220 // is for HSP controlling to avoid denial of |
|
221 // HFP service |
|
222 if ( iProtocolStatus->iProfile == EBtmcHSP ) |
|
223 { |
|
224 if ( aSupported ) |
|
225 { |
|
226 // volume control must be enabled now: |
|
227 if ( !iPhoneStatus) |
|
228 { |
|
229 TRAP_IGNORE( iPhoneStatus = |
|
230 CBtmcPhoneStatus::NewL(*this, iPhone, iProtocolStatus->iProfile) ); |
|
231 } |
|
232 if ( iPhoneStatus ) |
|
233 { |
|
234 // We just do the best effort. If enabling volume control fails, |
|
235 // other functionalities on the HSP will still work: |
|
236 TRAP_IGNORE( iPhoneStatus->SetVolumeControlFeatureL(ETrue) ); |
|
237 } |
|
238 } |
|
239 else |
|
240 { |
|
241 // When this serves the controlling of a HSP connection, iPhoneStatus is only |
|
242 // used for volume control, deleting it will disable volume control: |
|
243 delete iPhoneStatus; |
|
244 iPhoneStatus = NULL; |
|
245 } |
|
246 } |
|
247 } |
|
248 |
|
218 void CBtmcProtocol::RequestCompletedL(CBtmcActive& aActive, TInt aErr) |
249 void CBtmcProtocol::RequestCompletedL(CBtmcActive& aActive, TInt aErr) |
219 { |
250 { |
220 TRACE_FUNC_ENTRY |
251 TRACE_FUNC_ENTRY |
221 switch (aActive.ServiceId()) |
252 switch (aActive.ServiceId()) |
222 { |
253 { |
226 { |
257 { |
227 StopTimer(KServiceSlcTimer); |
258 StopTimer(KServiceSlcTimer); |
228 iObserver.SlcIndicateL(EFalse); |
259 iObserver.SlcIndicateL(EFalse); |
229 } |
260 } |
230 break; |
261 break; |
231 } |
|
232 case KServiceSdpQuery: |
|
233 { |
|
234 } |
262 } |
235 case KServiceGetSubscriber: |
263 case KServiceGetSubscriber: |
236 { |
264 { |
237 delete iNumber; |
265 delete iNumber; |
238 iNumber = NULL; |
266 iNumber = NULL; |
289 TRACE_FUNC_ENTRY |
317 TRACE_FUNC_ENTRY |
290 if (aServiceId == KServiceSlcTimer || aServiceId == KServiceFirstHspCkpdTrap ) |
318 if (aServiceId == KServiceSlcTimer || aServiceId == KServiceFirstHspCkpdTrap ) |
291 { |
319 { |
292 iTimer.Cancel(); |
320 iTimer.Cancel(); |
293 } |
321 } |
294 else if (aServiceId == KServiceSdpQuery) |
|
295 { |
|
296 iBteng->CancelRemoteSdpQuery(); |
|
297 } |
|
298 TRACE_FUNC_EXIT |
322 TRACE_FUNC_EXIT |
299 } |
323 } |
300 |
324 |
301 CBtmcProtocol::CBtmcProtocol(MBtmcObserver& aObserver) |
325 CBtmcProtocol::CBtmcProtocol(MBtmcObserver& aObserver) |
302 : iObserver(aObserver), |
326 : iObserver(aObserver), |
321 iCallStatus = CBtmcCallStatus::NewL(*this, iPhone, aProfile); |
345 iCallStatus = CBtmcCallStatus::NewL(*this, iPhone, aProfile); |
322 iProtocolStatus->iCallBits = iCallStatus->CallStatusL(); |
346 iProtocolStatus->iCallBits = iCallStatus->CallStatusL(); |
323 |
347 |
324 iEtelQuery = CBtmcActive::NewL(*this, CActive::EPriorityStandard, KQueryIMEI); |
348 iEtelQuery = CBtmcActive::NewL(*this, CActive::EPriorityStandard, KQueryIMEI); |
325 |
349 |
326 iPhone.GetPhoneId(iEtelQuery->iStatus, iIdentity); |
350 iPhone.GetPhoneId(iEtelQuery->iStatus, iIdentity); |
327 iEtelQuery->GoActive(); |
351 iEtelQuery->GoActive(); |
328 |
352 |
329 switch (aProfile) |
353 switch (aProfile) |
330 { |
354 { |
331 case EBtmcHFP0105: |
355 case EBtmcHFP0105: |
332 { |
356 { |
340 TRACE_INFO((_L("constructing option HSP"))) |
364 TRACE_INFO((_L("constructing option HSP"))) |
341 if (aBTDevAddr.Length() != KBTDevAddrSize) |
365 if (aBTDevAddr.Length() != KBTDevAddrSize) |
342 { |
366 { |
343 LEAVE(KErrBadDescriptor); |
367 LEAVE(KErrBadDescriptor); |
344 } |
368 } |
369 // HSP doesn't have an SLC protocol except the RFCOMM connection itself: |
|
345 iProtocolStatus->iSlc = ETrue; |
370 iProtocolStatus->iSlc = ETrue; |
346 iBteng = CBTEngDiscovery::NewL(this); |
|
347 iBteng->RemoteSdpQuery(TBTDevAddr(aBTDevAddr), TUUID(EBTProfileHSP), KBTHSRemoteAudioVolumeControl); |
|
348 if ( iAccessoryInitiated && ( iProtocolStatus->iCallBits & KCallConnectedBit ) ) |
371 if ( iAccessoryInitiated && ( iProtocolStatus->iCallBits & KCallConnectedBit ) ) |
349 { |
372 { |
350 TRACE_INFO((_L("Incoming HSP connected, start CKPD trapper"))); |
373 TRACE_INFO((_L("Incoming HSP connected, start CKPD trapper"))); |
351 // In case of incoming HSP connection during a voice call, |
374 // In case of incoming HSP connection during a voice call, |
352 // start timer to trap the CKPD command as part of the audio transfer of HSP. |
375 // start timer to trap the CKPD command as part of the audio transfer of HSP. |
606 // ----------------------------------------------------------------------------- |
629 // ----------------------------------------------------------------------------- |
607 // |
630 // |
608 void CBtmcProtocol::HandleReadCommandL(const CATCommand& aCmd) |
631 void CBtmcProtocol::HandleReadCommandL(const CATCommand& aCmd) |
609 { |
632 { |
610 TRACE_FUNC |
633 TRACE_FUNC |
634 RATResultPtrArray resarr; |
|
635 ATObjArrayCleanupResetAndDestroyPushL(resarr); |
|
611 CATResult* code = NULL; |
636 CATResult* code = NULL; |
612 RArray<TATParam> params; |
637 RATParamArray params; |
613 CleanupClosePushL(params); |
638 CleanupClosePushL(params); |
614 TBool response = EFalse; |
|
615 switch (aCmd.Id()) |
639 switch (aCmd.Id()) |
616 { |
640 { |
617 case EATCIND: |
641 case EATCIND: |
618 { |
642 { |
619 // Network status |
643 // Network status |
620 if(!iPhoneStatus) |
644 if(!iPhoneStatus) |
621 { |
645 { |
622 LEAVE(KErrNotSupported); |
646 LEAVE(KErrNotSupported); |
623 } |
647 } |
624 |
648 |
625 RMobilePhone::TMobilePhoneRegistrationStatus net = |
649 RMobilePhone::TMobilePhoneRegistrationStatus net = |
626 iPhoneStatus->NetworkStatus(); |
650 iPhoneStatus->NetworkStatus(); |
627 |
651 |
628 if (net == RMobilePhone::ERegisteredOnHomeNetwork || |
652 if (net == RMobilePhone::ERegisteredOnHomeNetwork || |
629 net == RMobilePhone::ERegisteredRoaming) |
653 net == RMobilePhone::ERegisteredRoaming) |
630 { |
654 { |
631 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNetworkAvailable))) |
655 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNetworkAvailable))) |
632 } |
656 } |
633 else |
657 else |
634 { |
658 { |
635 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNetworkUnavailable))) |
659 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNetworkUnavailable))) |
636 } |
660 } |
637 |
661 |
638 // call status |
662 // call status |
639 if ((iProtocolStatus->iCallBits & KCallConnectedBit) || |
663 if ((iProtocolStatus->iCallBits & KCallConnectedBit) || |
640 (iProtocolStatus->iCallBits & KCallHoldBit)) |
664 (iProtocolStatus->iCallBits & KCallHoldBit)) |
641 { |
665 { |
642 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATCallActive))) |
666 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATCallActive))) |
643 } |
667 } |
644 else |
668 else |
645 { |
669 { |
646 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNoCall))) |
670 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATNoCall))) |
647 } |
671 } |
648 |
672 |
649 // Call setup status |
673 // Call setup status |
650 TInt callSetupInd = EBTMonoATNoCallSetup; |
674 TInt callSetupInd = EBTMonoATNoCallSetup; |
651 |
675 |
652 if (iProtocolStatus->iCallBits & KCallRingingBit) |
676 if (iProtocolStatus->iCallBits & KCallRingingBit) |
653 { |
677 { |
662 callSetupInd = EBTMonoATCallConnecting; |
686 callSetupInd = EBTMonoATCallConnecting; |
663 } |
687 } |
664 LEAVE_IF_ERROR(params.Append(TATParam(callSetupInd))) |
688 LEAVE_IF_ERROR(params.Append(TATParam(callSetupInd))) |
665 // call_setup == callsetup |
689 // call_setup == callsetup |
666 LEAVE_IF_ERROR(params.Append(TATParam(callSetupInd))) |
690 LEAVE_IF_ERROR(params.Append(TATParam(callSetupInd))) |
667 |
691 |
668 // Call held status |
692 // Call held status |
669 TInt callHeldInd = EBTMonoATNoCallHeld; |
693 TInt callHeldInd = EBTMonoATNoCallHeld; |
670 if( (iProtocolStatus->iCallBits & KCallHoldBit) && (iProtocolStatus->iCallBits & KCallConnectedBit) ) |
694 if( (iProtocolStatus->iCallBits & KCallHoldBit) && (iProtocolStatus->iCallBits & KCallConnectedBit) ) |
671 { |
695 { |
672 callHeldInd = EBTMonoATCallHeldAndActive; |
696 callHeldInd = EBTMonoATCallHeldAndActive; |
677 } |
701 } |
678 LEAVE_IF_ERROR(params.Append(TATParam(callHeldInd))) |
702 LEAVE_IF_ERROR(params.Append(TATParam(callHeldInd))) |
679 // signal status |
703 // signal status |
680 LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetSignalStrength()))) |
704 LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetSignalStrength()))) |
681 // roaming status |
705 // roaming status |
682 if(net == RMobilePhone::ERegisteredRoaming) |
706 if(net == RMobilePhone::ERegisteredRoaming) |
683 { |
707 { |
684 LEAVE_IF_ERROR(params.Append(TATParam(1))) |
708 LEAVE_IF_ERROR(params.Append(TATParam(1))) |
685 } |
709 } |
686 else |
710 else |
687 { |
711 { |
688 LEAVE_IF_ERROR(params.Append(TATParam(0))) |
712 LEAVE_IF_ERROR(params.Append(TATParam(0))) |
689 } |
713 } |
690 // battery charge |
714 // battery charge |
691 LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetBatteryCharge()))) |
715 LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetBatteryCharge()))) |
692 |
716 |
693 code = CATResult::NewL(EATCIND, EATReadResult, ¶ms); |
717 code = CATResult::NewL(EATCIND, EATReadResult, ¶ms); |
694 response = ETrue; |
|
695 break; |
718 break; |
696 } |
719 } |
697 case EATCLIP: |
720 case EATCLIP: |
698 { |
721 { |
699 LEAVE_IF_ERROR(params.Append(TATParam(iProtocolStatus->iCallerIdNotif))) |
722 LEAVE_IF_ERROR(params.Append(TATParam(iProtocolStatus->iCallerIdNotif))) |
700 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATCallerIdNetworkServiceUnknown))) |
723 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoATCallerIdNetworkServiceUnknown))) |
701 code = CATResult::NewL(EATCLIP, EATReadResult, ¶ms); |
724 code = CATResult::NewL(EATCLIP, EATReadResult, ¶ms); |
702 response = ETrue; |
|
703 break; |
725 break; |
704 } |
726 } |
705 case EATCOPS: |
727 case EATCOPS: |
706 { |
728 { |
707 iOperator = CBtmcOperator::NewL(*this, *this, CActive::EPriorityStandard, KServiceGetOperator); |
729 iOperator = CBtmcOperator::NewL(*this, *this, CActive::EPriorityStandard, KServiceGetOperator); |
708 iOperator->GoActive(); |
730 iOperator->GoActive(); |
709 break; |
731 break; |
710 } |
732 } |
711 case EATCREG: |
733 case EATCREG: |
712 { |
734 { |
713 if(!iPhoneStatus) |
735 if(!iPhoneStatus) |
714 { |
736 { |
715 LEAVE(KErrNotSupported); |
737 LEAVE(KErrNotSupported); |
716 } |
738 } |
717 |
739 |
718 RMobilePhone::TMobilePhoneRegistrationStatus net = |
740 RMobilePhone::TMobilePhoneRegistrationStatus net = |
719 iPhoneStatus->NetworkStatus(); |
741 iPhoneStatus->NetworkStatus(); |
720 response = ETrue; |
742 switch(net) |
721 switch(net) |
743 { |
722 { |
744 case RMobilePhone::ERegistrationUnknown: |
723 case RMobilePhone::ERegistrationUnknown: |
745 { |
724 { |
746 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
725 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
747 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceUnknown))) |
726 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceUnknown))) |
748 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
727 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
749 break; |
728 break; |
750 } |
729 } |
751 case RMobilePhone::ENotRegisteredEmergencyOnly: |
730 case RMobilePhone::ENotRegisteredEmergencyOnly: |
752 case RMobilePhone::ENotRegisteredNoService: |
731 case RMobilePhone::ENotRegisteredNoService: |
753 { |
732 { |
754 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
733 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
755 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegistered))) |
734 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegistered))) |
756 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
735 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
757 break; |
736 break; |
758 } |
737 } |
759 case RMobilePhone::ENotRegisteredSearching: |
738 case RMobilePhone::ENotRegisteredSearching: |
760 case RMobilePhone::ERegisteredBusy: |
739 case RMobilePhone::ERegisteredBusy: |
761 { |
740 { |
762 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
741 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
763 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegisteredSearching))) |
742 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceNotRegisteredSearching))) |
764 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
743 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
765 break; |
744 break; |
766 } |
745 } |
767 case RMobilePhone::ERegisteredOnHomeNetwork: |
746 case RMobilePhone::ERegisteredOnHomeNetwork: |
768 { |
747 { |
769 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
748 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
770 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceHomeNetwork))) |
749 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceHomeNetwork))) |
771 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
750 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
772 break; |
751 break; |
773 } |
752 } |
774 case RMobilePhone::ERegistrationDenied: |
753 case RMobilePhone::ERegistrationDenied: |
775 { |
754 { |
776 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
755 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
777 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegistrationDenied))) |
756 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegistrationDenied))) |
778 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
757 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
779 break; |
758 break; |
780 } |
759 } |
781 case RMobilePhone::ERegisteredRoaming: |
760 case RMobilePhone::ERegisteredRoaming: |
782 { |
761 { |
783 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
762 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregEnableUnsolicited))) |
784 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegisteredRoaming))) |
763 LEAVE_IF_ERROR(params.Append(TATParam(EBTMonoCregNetworkServiceRegisteredRoaming))) |
785 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
764 code = CATResult::NewL(EATCREG, EATReadResult, ¶ms); |
786 break; |
765 break; |
787 } |
766 } |
788 default: |
767 default: |
789 TRACE_INFO(_L("Error: default in CREG")); |
768 TRACE_INFO(_L("Error: default in CREG")); |
790 break; |
769 break; |
791 }; |
770 }; |
792 break; |
771 break; |
793 } |
772 } |
794 case EATCSQ: |
773 case EATCSQ: |
795 { |
774 { |
796 TRACE_INFO(_L("Requesting Signal strength")); |
775 TRACE_INFO(_L("Requesting Signal strength")); |
797 LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetRssiStrength()))) |
776 response = ETrue; |
798 LEAVE_IF_ERROR(params.Append(TATParam(KBerUnknown))) |
777 LEAVE_IF_ERROR(params.Append(TATParam(iPhoneStatus->GetRssiStrength()))) |
799 code = CATResult::NewL(EATCSQ, EATReadResult, ¶ms); |
778 LEAVE_IF_ERROR(params.Append(TATParam(KBerUnknown))) |
800 TRACE_INFO(_L("done")); |
779 code = CATResult::NewL(EATCSQ, EATReadResult, ¶ms); |
801 break; |
780 TRACE_INFO(_L("done")); |
802 } |
781 break; |
803 |
782 } |
804 case EATCGSN: |
783 |
805 { |
784 case EATCGSN: |
806 TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf; |
785 { |
807 buf.Copy(iIdentity.iSerialNumber); |
786 response = ETrue; |
808 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
787 TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf; |
809 code = CATResult::NewL(EATCGSN, EATReadResult, ¶ms); |
788 buf.Copy(iIdentity.iSerialNumber); |
810 break; |
789 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
811 } |
790 code = CATResult::NewL(EATCGSN, EATReadResult, ¶ms); |
812 case EATCGMI: |
791 break; |
813 { |
792 } |
814 TBuf8<RMobilePhone::KPhoneManufacturerIdSize> buf; |
793 case EATCGMI: |
815 buf.Copy(iIdentity.iManufacturer); |
794 { |
816 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
795 response = ETrue; |
817 code = CATResult::NewL(EATCGMI, EATReadResult, ¶ms); |
796 TBuf8<RMobilePhone::KPhoneManufacturerIdSize> buf; |
818 break; |
797 buf.Copy(iIdentity.iManufacturer); |
819 } |
798 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
820 case EATCGMM: |
799 code = CATResult::NewL(EATCGMI, EATReadResult, ¶ms); |
821 { |
800 break; |
822 TBuf8<RMobilePhone::KPhoneModelIdSize> buf; |
801 } |
823 buf.Copy(iIdentity.iModel); |
802 case EATCGMM: |
824 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
803 { |
825 code = CATResult::NewL(EATCGMM, EATReadResult, ¶ms); |
804 response = ETrue; |
826 break; |
805 TBuf8<RMobilePhone::KPhoneModelIdSize> buf; |
827 } |
806 buf.Copy(iIdentity.iModel); |
828 case EATCGMR: |
807 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
829 { |
808 code = CATResult::NewL(EATCGMM, EATReadResult, ¶ms); |
830 TBuf8<RMobilePhone::KPhoneRevisionIdSize> buf; |
809 break; |
831 buf.Copy(iIdentity.iRevision); |
810 } |
832 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
811 case EATCGMR: |
833 code = CATResult::NewL(EATCGMR, EATReadResult, ¶ms); |
812 { |
834 break; |
813 response = ETrue; |
835 } |
814 TBuf8<RMobilePhone::KPhoneRevisionIdSize> buf; |
836 case EATCIMI: |
815 buf.Copy(iIdentity.iRevision); |
837 { |
816 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
838 iEtelQuery->SetServiceId(KQueryIMSI); |
817 code = CATResult::NewL(EATCGMR, EATReadResult, ¶ms); |
839 iPhone.GetSubscriberId(iEtelQuery->iStatus, iId); |
818 break; |
840 iEtelQuery->GoActive(); |
819 } |
841 break; |
820 case EATCIMI: |
842 } |
821 { |
843 case EATCOLP: |
822 iEtelQuery->SetServiceId(KQueryIMSI); |
844 { |
823 iPhone.GetSubscriberId(iEtelQuery->iStatus, iId); |
845 LEAVE_IF_ERROR(params.Append(TATParam(TInt(iProtocolStatus->iOutgoingCallNotif)))) |
824 iEtelQuery->GoActive(); |
846 code = CATResult::NewL(EATCOLP, EATReadResult, ¶ms); |
825 break; |
847 break; |
826 } |
848 } |
827 case EATCOLP: |
849 default: |
828 { |
850 LEAVE(KErrNotSupported); |
829 response = ETrue; |
851 } |
830 LEAVE_IF_ERROR(params.Append(TATParam(TInt(iProtocolStatus->iOutgoingCallNotif)))) |
|
831 code = CATResult::NewL(EATCOLP, EATReadResult, ¶ms); |
|
832 break; |
|
833 } |
|
834 default: |
|
835 LEAVE(KErrNotSupported); |
|
836 } |
|
837 CleanupStack::PopAndDestroy(¶ms); |
852 CleanupStack::PopAndDestroy(¶ms); |
838 if (response) |
853 if (code) |
839 { |
854 { |
840 RATResultPtrArray resarr; |
|
841 CleanupStack::PushL(code); |
855 CleanupStack::PushL(code); |
842 ATObjArrayCleanupResetAndDestroyPushL(resarr); |
|
843 resarr.AppendL(code); |
856 resarr.AppendL(code); |
844 CleanupStack::Pop(code); |
857 CleanupStack::Pop(code); |
845 CATResult* ok = CATResult::NewL(EATOK); |
858 CATResult* ok = CATResult::NewL(EATOK); |
846 CleanupStack::PushL(ok); |
859 CleanupStack::PushL(ok); |
847 resarr.AppendL(ok); |
860 resarr.AppendL(ok); |
848 CleanupStack::Pop(ok); |
861 CleanupStack::Pop(ok); |
849 SendResponseL(resarr); |
862 SendResponseL(resarr); |
850 CleanupStack::PopAndDestroy(&resarr); |
|
851 CmdHandlingCompletedL(); |
863 CmdHandlingCompletedL(); |
852 } |
864 } |
865 CleanupStack::PopAndDestroy(&resarr); |
|
853 } |
866 } |
854 |
867 |
855 // ----------------------------------------------------------------------------- |
868 // ----------------------------------------------------------------------------- |
856 // CBtmcProtocol::HandleWriteCommand |
869 // CBtmcProtocol::HandleWriteCommand |
857 // |
870 // |
1068 break; |
1081 break; |
1069 } |
1082 } |
1070 case EATCGSN: |
1083 case EATCGSN: |
1071 { |
1084 { |
1072 CATResult* code = NULL; |
1085 CATResult* code = NULL; |
1073 RArray<TATParam> params; |
1086 RATResultPtrArray resarr; |
1087 ATObjArrayCleanupResetAndDestroyPushL(resarr); |
|
1088 RATParamArray params; |
|
1074 CleanupClosePushL(params); |
1089 CleanupClosePushL(params); |
1075 TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf; |
1090 TBuf8<RMobilePhone::KPhoneSerialNumberSize> buf; |
1076 buf.Copy(iIdentity.iSerialNumber); |
1091 buf.Copy(iIdentity.iSerialNumber); |
1077 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
1092 LEAVE_IF_ERROR(params.Append(TATParam(buf))) |
1078 code = CATResult::NewL(EATCGSN, EATActionResult, ¶ms); |
1093 code = CATResult::NewL(EATCGSN, EATActionResult, ¶ms); |
1079 CleanupStack::PopAndDestroy(¶ms); |
1094 CleanupStack::PopAndDestroy(¶ms); |
1080 CleanupStack::PushL(code); |
1095 CleanupStack::PushL(code); |
1081 RATResultPtrArray resarr; |
|
1082 ATObjArrayCleanupResetAndDestroyPushL(resarr); |
|
1083 resarr.AppendL(code); |
1096 resarr.AppendL(code); |
1084 CleanupStack::Pop(code); |
1097 CleanupStack::Pop(code); |
1085 CATResult* ok = CATResult::NewL(EATOK); |
1098 CATResult* ok = CATResult::NewL(EATOK); |
1086 CleanupStack::PushL(ok); |
1099 CleanupStack::PushL(ok); |
1087 resarr.AppendL(ok); |
1100 resarr.AppendL(ok); |
1158 (iSlcMask == KSLC_No3WayCalling)) |
1171 (iSlcMask == KSLC_No3WayCalling)) |
1159 { |
1172 { |
1160 return ETrue; |
1173 return ETrue; |
1161 } |
1174 } |
1162 return EFalse; |
1175 return EFalse; |
1163 } |
|
1164 |
|
1165 // ----------------------------------------------------------------------------- |
|
1166 // CBtmcProtocol::ServiceAttributeSearchComplete |
|
1167 // ----------------------------------------------------------------------------- |
|
1168 // |
|
1169 void CBtmcProtocol::ServiceAttributeSearchComplete( TSdpServRecordHandle /*aHandle*/, |
|
1170 const RSdpResultArray& aAttr, |
|
1171 TInt aErr ) |
|
1172 { |
|
1173 TRACE_FUNC |
|
1174 if((aErr == KErrNone || aErr == KErrEof) && aAttr.Count() && aAttr[0].iAttrValue.iValNumeric) |
|
1175 { |
|
1176 TRACE_INFO((_L("Remote volume control supported"))) |
|
1177 TInt err = KErrNone; |
|
1178 if (!iPhoneStatus) |
|
1179 { |
|
1180 TRAP(err, iPhoneStatus = CBtmcPhoneStatus::NewL(*this, iPhone, iProtocolStatus->iProfile)); |
|
1181 } |
|
1182 |
|
1183 if (err == KErrNone) |
|
1184 { |
|
1185 TRAP_IGNORE(iPhoneStatus->SetVolumeControlFeatureL(ETrue)); |
|
1186 iPhoneStatus->ActivateRemoteVolumeControl(); |
|
1187 } |
|
1188 } |
|
1189 |
|
1190 if(aErr) |
|
1191 { |
|
1192 delete iBteng; |
|
1193 iBteng = NULL; |
|
1194 } |
|
1195 } |
1176 } |
1196 |
1177 |
1197 void CBtmcProtocol::SetIndicatorL(TInt aIndicator, TInt aValue) |
1178 void CBtmcProtocol::SetIndicatorL(TInt aIndicator, TInt aValue) |
1198 { |
1179 { |
1199 TInt indBit( 0 ); |
1180 TInt indBit( 0 ); |