serviceproviders/sapi_location/src/locationinterface.cpp
changeset 32 8d692d9f828f
parent 27 44bb89c96acb
child 33 50974a8b132e
equal deleted inserted replaced
27:44bb89c96acb 32:8d692d9f828f
    49  	 for(TInt iter = 0 ; iter < iHandleCB.Count() ; ++iter)
    49  	 for(TInt iter = 0 ; iter < iHandleCB.Count() ; ++iter)
    50  	 	{
    50  	 	{
    51  	 	 delete iHandleCB[iter] ;
    51  	 	 delete iHandleCB[iter] ;
    52  	 	}
    52  	 	}
    53  	 iHandleCB.Close();
    53  	 iHandleCB.Close();
    54 	 delete iGenericPosInfo ;
    54 	 delete iGenericPosition ;
    55  
    55  
    56  	
    56  	
    57     }
    57     }
    58 
    58 
    59 /**
    59 /**
    64     {
    64     {
    65     //No Implementation Required Here
    65     //No Implementation Required Here
    66     }
    66     }
    67 void CLocationInterface::ConstructL()
    67 void CLocationInterface::ConstructL()
    68     {
    68     {
    69     iGenericPosInfo = HPositionGenericInfo::NewL() ;
    69     iGenericPosition = HPositionGenericInfo::NewL() ;
    70 
    70 
    71     if ( !iGenericPosInfo )
    71     if ( !iGenericPosition )
    72         {
    72         {
    73         User::Leave( KErrNoMemory ) ;
    73         User::Leave( KErrNoMemory ) ;
    74         }
    74         }
    75 
    75 
    76     iLocationService = CLocationService::NewL() ;
    76     iLocationService = CLocationService::NewL() ;
    77     User::LeaveIfError( iLocationService->GetModuleInfo( iModuleInfo ) );
    77     //User::LeaveIfError( iLocationService->GetModuleInfo( iModuleInfo ) );
    78     User::LeaveIfError( this->SetSupportedFields() );
    78     //User::LeaveIfError( this->SetSupportedFields() );
    79     }
    79     }
    80 
    80 
    81 
    81 
    82 /**
    82 /**
    83  * This function is a static method to create iLocatinInterface object
    83  * This function is a static method to create iLocatinInterface object
   146 		case SErrMissingArgument:
   146 		case SErrMissingArgument:
   147 			{
   147 			{
   148 				sapiErr = SErrMissingArgument;
   148 				sapiErr = SErrMissingArgument;
   149 				break;
   149 				break;
   150 			}
   150 			}
       
   151 		case SErrServiceNotReady:
       
   152 		    {
       
   153                 sapiErr = SErrServiceNotReady;
       
   154 		        break;
       
   155 			}
   151 		default:
   156 		default:
   152 			{
   157 			{
   153 				sapiErr = SErrGeneralError;
   158 				sapiErr = SErrGeneralError;
   154 			}
   159 			}
   155     }
   160     }
   243         {
   248         {
   244         //Extract Update options from input List
   249         //Extract Update options from input List
   245         User::LeaveIfError(iLocationService->GetLastKnownLoc(iPosition)) ;            
   250         User::LeaveIfError(iLocationService->GetLastKnownLoc(iPosition)) ;            
   246         TUint category1 = EBasicInfo;
   251         TUint category1 = EBasicInfo;
   247 
   252 
   248         iGenericPosInfo->SetPosition(iPosition);
   253         iGenericPosition->SetPosition(iPosition);
   249         GetLocationInfo(aOutParamList, category1) ;
   254         GetLocationInfo(aOutParamList, category1) ;
   250 
   255 
   251         }
   256         }
   252 
   257 
   253     
   258     
   432                     User::Leave(KErrArgument);
   437                     User::Leave(KErrArgument);
   433                     }
   438                     }
   434                 }
   439                 }
   435             LocationInterfaceCB* callback =
   440             LocationInterfaceCB* callback =
   436             LocationInterfaceCB::NewL(aCallback,
   441             LocationInterfaceCB::NewL(aCallback,
   437                     &aInParamList, &iModuleInfo, transid) ;
   442                     &aInParamList, /*&iModuleInfo,*/ transid) ;
   438 
   443 
   439             CleanupStack :: PushL(callback) ;                   
   444             CleanupStack :: PushL(callback) ;                   
   440             callback->SetRequestType(KGetLocationCB) ;
   445             callback->SetRequestType(KGetLocationCB) ;
   441             
   446             
   442             iLocationService->GetLocationL(callback ,category,
   447             iLocationService->GetLocationL(callback ,category,
   443                     iFieldList,updateoptions,enableHighAcc) ;	                    
   448                     NULL,updateoptions,enableHighAcc) ;	                    
   444             //Store the allocatioed address 
   449             //Store the allocatioed address 
   445             iHandleCB.Append(callback);
   450             iHandleCB.Append(callback);
   446             //Append Transcationid to out list
   451             //Append Transcationid to out list
   447             aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant(transid)));
   452             aOutParamList.AppendL(TLiwGenericParam(KTransactionId, TLiwVariant(transid)));
   448             CleanupStack :: Pop(callback) ;
   453             CleanupStack :: Pop(callback) ;
   579                             TLiwVariant(KGetLocationBadEnableHighAcc) ) );                                       
   584                             TLiwVariant(KGetLocationBadEnableHighAcc) ) );                                       
   580                     User::Leave(KErrArgument);
   585                     User::Leave(KErrArgument);
   581                     }
   586                     }
   582                 }
   587                 }
   583 
   588 
   584             iLocationService->GetLocationL(iGenericPosInfo,
   589             iLocationService->GetLocationL(iGenericPosition,
   585                     updateOptions,enableHighAcc) ;
   590                     updateOptions,enableHighAcc) ;
   586             GetLocationInfo(aOutParamList,category) ; 
   591             GetLocationInfo(aOutParamList,category) ; 
   587             
   592             
   588             								                        
   593             								                        
   589 
   594 
   780                 }
   785                 }
   781             }       
   786             }       
   782 
   787 
   783         LocationInterfaceCB* callback =
   788         LocationInterfaceCB* callback =
   784         LocationInterfaceCB::NewL(aCallback,
   789         LocationInterfaceCB::NewL(aCallback,
   785                 &aOutParamList, &iModuleInfo, transid) ;
   790                 &aOutParamList,/* &iModuleInfo,*/ transid) ;
   786         CleanupStack :: PushL(callback) ;
   791         CleanupStack :: PushL(callback) ;
   787         callback->SetRequestType(KTraceCB) ;
   792         callback->SetRequestType(KTraceCB) ;
   788 
   793 
   789 
   794 
   790         iLocationService->TraceL( callback, catergory,iFieldList, 
   795         iLocationService->TraceL( callback, catergory,NULL, 
   791                 updateOption,enableHighAcc );
   796                 updateOption,enableHighAcc );
   792         iHandleCB.Append(callback);
   797         iHandleCB.Append(callback);
   793         aOutParamList.AppendL(TLiwGenericParam(KTransactionId,
   798         aOutParamList.AppendL(TLiwGenericParam(KTransactionId,
   794                 TLiwVariant(transid))) ; //Append Transcationid to out list
   799                 TLiwVariant(transid))) ; //Append Transcationid to out list
   795 
   800 
  1270 /**
  1275 /**
  1271  * CLocationInterface :: SetSupportedFields fills iGenericPosInfo  as per the capability of the 
  1276  * CLocationInterface :: SetSupportedFields fills iGenericPosInfo  as per the capability of the 
  1272  * positioning module used
  1277  * positioning module used
  1273  */ 
  1278  */ 
  1274 
  1279 
  1275 TInt CLocationInterface :: SetSupportedFields()
       
  1276     {
       
  1277 	//Extract all the information Accuracy, timestamp, satellite and course info and append 
       
  1278 	// to out parmlist
       
  1279 
       
  1280 	
       
  1281 	
       
  1282 	TUint fieldIter = 0 ;
       
  1283 
       
  1284 	TPositionModuleInfo :: TCapabilities  currCapability  = iModuleInfo.Capabilities() ;
       
  1285 
       
  1286 	if(currCapability & TPositionModuleInfo :: ECapabilitySpeed) //set horizontal,vertical speeds along with errros 
       
  1287         {   
       
  1288         iFieldList[fieldIter++] = EPositionFieldHorizontalSpeed ;
       
  1289         iFieldList[fieldIter++] = EPositionFieldHorizontalSpeedError ;
       
  1290         iFieldList[fieldIter++] = EPositionFieldVerticalSpeed ;
       
  1291         iFieldList[fieldIter++] = EPositionFieldVerticalSpeedError ;
       
  1292         }
       
  1293 
       
  1294 	if(currCapability & TPositionModuleInfo :: ECapabilitySatellite) //Set satellite info fields if positioning module supports
       
  1295 	    {                                                               //
       
  1296 		
       
  1297 		iFieldList[fieldIter++] = EPositionFieldSatelliteNumInView ;
       
  1298 		iFieldList[fieldIter++] = EPositionFieldSatelliteNumUsed ;
       
  1299         iFieldList[fieldIter++] = EPositionFieldSatelliteTime ;
       
  1300         iFieldList[fieldIter++] = EPositionFieldSatelliteHorizontalDoP ;
       
  1301         iFieldList[fieldIter++] = EPositionFieldSatelliteVerticalDoP ;
       
  1302         
       
  1303 	    }
       
  1304 
       
  1305 	if(currCapability & TPositionModuleInfo :: ECapabilityDirection) //Set Direction info fields if positioning module supports
       
  1306     	{
       
  1307 		
       
  1308 		iFieldList[fieldIter++] = EPositionFieldTrueCourse ;
       
  1309 		iFieldList[fieldIter++] = EPositionFieldTrueCourseError ;
       
  1310 		iFieldList[fieldIter++] = EPositionFieldMagneticCourse ;
       
  1311 		iFieldList[fieldIter++] = EPositionFieldMagneticCourseError ;
       
  1312 		
       
  1313     	}
       
  1314     
       
  1315 
       
  1316 	if(currCapability & TPositionModuleInfo :: ECapabilityCompass) //Set NMEA fields if positioning module supports 
       
  1317     	{
       
  1318 			
       
  1319 		iFieldList[fieldIter++] = EPositionFieldHeading ;
       
  1320 		iFieldList[fieldIter++] = EPositionFieldHeadingError ;
       
  1321 		iFieldList[fieldIter++] = EPositionFieldMagneticHeading ;
       
  1322 		iFieldList[fieldIter++] = EPositionFieldMagneticHeadingError ;
       
  1323 		
       
  1324     	}
       
  1325 	
       
  1326 	/*if(currCapability & TPositionModuleInfo :: ECapabilityNmea)
       
  1327     	{
       
  1328 		
       
  1329 		iFieldList[fieldIter++] = EPositionFieldNMEASentences ;
       
  1330 		iFieldList[fieldIter++] = EPositionFieldNMEASentencesStart ;
       
  1331 		
       
  1332     	}*/
       
  1333 	iFieldList[fieldIter] = EPositionFieldNone  ;   //Field Termination 
       
  1334    iGenericPosInfo->ClearRequestedFields() ;
       
  1335    iGenericPosInfo->SetRequestedFields(iFieldList) ;
       
  1336   
       
  1337   
       
  1338   return KErrNone ;
       
  1339     }
       
  1340 
  1280 
  1341 /**
  1281 /**
  1342  * CLocationInterface :: GetLocationInfo an internal utility funtionin, gets all the location information 
  1282  * CLocationInterface :: GetLocationInfo an internal utility funtionin, gets all the location information 
  1343  * which is supported by  this Module
  1283  * which is supported by  this Module
  1344  */
  1284  */
  1345  
  1285  
  1346  
  1286  
  1347 void CLocationInterface :: GetLocationInfo( CLiwGenericParamList& aOutParamList,TInt aPosInfoCategory)
  1287 void CLocationInterface :: GetLocationInfo( CLiwGenericParamList& aOutParamList,TInt aPosInfoCategory)
  1348     {
  1288     {
  1349     TPosition pos ;
  1289     TPosition pos ;
  1350     iGenericPosInfo->GetPosition(pos) ; //Now populate outparam list with latitude, longitude and altitude data
  1290     iGenericPosition->GetPosition(pos) ; //Now populate outparam list with latitude, longitude and altitude data
  1351 
  1291 
  1352     CLiwDefaultMap *Result = CLiwDefaultMap::NewL() ; 
  1292     CLiwDefaultMap *Result = CLiwDefaultMap::NewL() ; 
  1353     
  1293     
  1354     CleanupStack :: PushL(Result) ;
  1294     CleanupStack :: PushL(Result) ;
  1355     TReal64 Val = pos.Longitude() ;
  1295     TReal64 Val = pos.Longitude() ;
  1380         Result->InsertL(KVerAccuracy, TLiwVariant((TReal)Val1)) ;
  1320         Result->InsertL(KVerAccuracy, TLiwVariant((TReal)Val1)) ;
  1381         }
  1321         }
  1382     TLiwVariant MapVariant(Result) ;
  1322     TLiwVariant MapVariant(Result) ;
  1383      
  1323      
  1384    
  1324    
  1385      TPositionModuleInfo :: TCapabilities  currCapability  = iModuleInfo.Capabilities() ;
  1325      //TPositionModuleInfo :: TCapabilities  currCapability  = iModuleInfo.Capabilities() ;
  1386 
  1326 
  1387 	 if ( aPosInfoCategory == EGenericPositionInfo )
  1327 	 if ( aPosInfoCategory == EGenericPositionInfo )
  1388 	     {
  1328 	     {
  1389 	     if(currCapability & TPositionModuleInfo :: ECapabilitySpeed) //Populate output param with speed info
  1329 	     
  1390 		    {
       
  1391 		    TReal32 speedinfo = 0 ;
  1330 		    TReal32 speedinfo = 0 ;
  1392 
  1331 
  1393 		    if(!iGenericPosInfo->GetValue(EPositionFieldHorizontalSpeed , speedinfo))  //Extract speed 
  1332         if(!iGenericPosition->GetValue(EPositionFieldHorizontalSpeed , speedinfo))  //Extract speed 
  1394 		    	{
  1333 		    	{
  1395 		    	 Result->InsertL(KPositionFieldHorizontalSpeed ,TLiwVariant((TReal) speedinfo)) ;
  1334 		    	 Result->InsertL(KPositionFieldHorizontalSpeed ,TLiwVariant((TReal) speedinfo)) ;
  1396 		    	}
  1335 		    	}
  1397 
  1336 
  1398 
  1337 
  1399 
  1338 
  1400 		    if(!iGenericPosInfo->GetValue(EPositionFieldHorizontalSpeedError , speedinfo) )
  1339         if(!iGenericPosition->GetValue(EPositionFieldHorizontalSpeedError , speedinfo) )
  1401 		        {
  1340 		        {
  1402 		        Result->InsertL(KPositionFieldHorizontalSpeedError ,TLiwVariant((TReal) speedinfo)) ;
  1341 		        Result->InsertL(KPositionFieldHorizontalSpeedError ,TLiwVariant((TReal) speedinfo)) ;
  1403 		        }
  1342 		        }
  1404 
  1343 
  1405 		    /*if(!iGenericPosInfo->GetValue(EPositionFieldVerticalSpeed , speedinfo))
  1344 		    /*if(!iGenericPosInfo->GetValue(EPositionFieldVerticalSpeed , speedinfo))
  1412 		        {
  1351 		        {
  1413 		        Result->InsertL(KPositionFieldVerticalSpeedError ,TLiwVariant((TReal) speedinfo)) ;
  1352 		        Result->InsertL(KPositionFieldVerticalSpeedError ,TLiwVariant((TReal) speedinfo)) ;
  1414 		        }*/
  1353 		        }*/
  1415 
  1354 
  1416 
  1355 
  1417 		    }   //End of EcapabilitySpeed 
  1356 
  1418 
  1357 
  1419 
  1358         TInt8 satinfo  = 0;
  1420 		 if(currCapability & TPositionModuleInfo :: ECapabilitySatellite) //Extract satellitinfo if any and append it
  1359 
  1421 		    {																//as part of out parm list
  1360         if(!iGenericPosition->GetValue(EPositionFieldSatelliteNumInView , satinfo))
  1422 		    TInt8 satinfo  = 0;
  1361             {
  1423 
  1362             Result->InsertL(KPositionFieldSatelliteNumInView ,TLiwVariant((TReal) satinfo)) ;
  1424 		    if(!iGenericPosInfo->GetValue(EPositionFieldSatelliteNumInView , satinfo))
  1363             }
  1425 		        {
  1364         if(!iGenericPosition->GetValue(EPositionFieldSatelliteNumUsed , satinfo))
  1426 		        Result->InsertL(KPositionFieldSatelliteNumInView ,TLiwVariant((TReal) satinfo)) ;
  1365             {
  1427 		        }
  1366             Result->InsertL(KPositionFieldSatelliteNumUsed ,TLiwVariant((TReal) satinfo)) ;
  1428 			if(!iGenericPosInfo->GetValue(EPositionFieldSatelliteNumUsed , satinfo))
  1367             }
  1429 		        {
  1368 		   
  1430 		        Result->InsertL(KPositionFieldSatelliteNumUsed ,TLiwVariant((TReal) satinfo)) ;
  1369 
  1431 		        }
  1370 		 
  1432 		    } //End of ECapabilitySatellite
       
  1433 
       
  1434 		 if(currCapability & TPositionModuleInfo :: ECapabilityDirection) //Extract direction info if any and append it 
       
  1435 		 {                                                               // as part of out parm list
       
  1436 		 TReal32 direcinfo = 0;
  1371 		 TReal32 direcinfo = 0;
  1437 
  1372 
  1438 
  1373 
  1439 		 if(!iGenericPosInfo->GetValue(EPositionFieldTrueCourse , direcinfo) )
  1374 		 if(!iGenericPosition->GetValue(EPositionFieldTrueCourse , direcinfo) )
  1440 		   {
  1375 		   {
  1441 		   Result->InsertL(KPositionFieldTrueCourse ,TLiwVariant((TReal) direcinfo)) ;
  1376 		   Result->InsertL(KPositionFieldTrueCourse ,TLiwVariant((TReal) direcinfo)) ;
  1442 		   }
  1377 		   }
  1443 
  1378 
  1444 
  1379 
  1445 		 if(!iGenericPosInfo->GetValue(EPositionFieldTrueCourseError , direcinfo) )
  1380 		 if(!iGenericPosition->GetValue(EPositionFieldTrueCourseError , direcinfo) )
  1446 		   {
  1381 		   {
  1447 		   Result->InsertL(KPositionFieldTrueCourseError ,TLiwVariant((TReal) direcinfo)) ;
  1382 		   Result->InsertL(KPositionFieldTrueCourseError ,TLiwVariant((TReal) direcinfo)) ;
  1448 		   }
  1383 		   }
  1449 
  1384 
  1450 
  1385 
  1451 		 if(!iGenericPosInfo->GetValue(EPositionFieldMagneticCourseError , direcinfo) )
  1386 		 if(!iGenericPosition->GetValue(EPositionFieldMagneticCourseError , direcinfo) )
  1452 		    {
  1387 		    {
  1453 		    Result->InsertL(KPositionFieldMagneticCourseError ,TLiwVariant((TReal) direcinfo)) ;
  1388 		    Result->InsertL(KPositionFieldMagneticCourseError ,TLiwVariant((TReal) direcinfo)) ;
  1454 		    }
  1389 		    }
  1455 
  1390 
  1456 
  1391 
  1457 		 if(!iGenericPosInfo->GetValue(EPositionFieldMagneticCourse , direcinfo) )
  1392 		 if(!iGenericPosition->GetValue(EPositionFieldMagneticCourse , direcinfo) )
  1458 		    {
  1393 		    {
  1459 		    Result->InsertL(KPositionFieldMagneticCourse ,TLiwVariant((TReal) direcinfo)) ;
  1394 		    Result->InsertL(KPositionFieldMagneticCourse ,TLiwVariant((TReal) direcinfo)) ;
  1460 		    }
  1395 		    }
  1461 		 } // End of ECapabilityDirection
  1396 		
  1462 
  1397 
  1463 
  1398 
  1464 		if(currCapability & TPositionModuleInfo :: ECapabilityCompass) //Extract compass info if any and append it 
  1399 		
  1465 	    	{                                                               // as part of out parm list
  1400         TReal32 compassinfo ;
  1466 	    	TReal32 compassinfo ;
  1401 
  1467 
  1402         
  1468 	    	
  1403         if(!iGenericPosition->GetValue(EPositionFieldHeading , compassinfo) )
  1469 	    	if(!iGenericPosInfo->GetValue(EPositionFieldHeading , compassinfo) )
  1404             {
  1470 	        	{
  1405             Result->InsertL(KPositionFieldHeading ,TLiwVariant((TReal) compassinfo)) ;	
  1471 	        	Result->InsertL(KPositionFieldHeading ,TLiwVariant((TReal) compassinfo)) ;	
  1406             }
  1472 	        	}
  1407 
  1473 
  1408 
  1474 
  1409         if(!iGenericPosition->GetValue(EPositionFieldHeadingError , compassinfo) )
  1475 	    	if(!iGenericPosInfo->GetValue(EPositionFieldHeadingError , compassinfo) )
  1410             {
  1476 	        	{
  1411             Result->InsertL(KPositionFieldHeadingError ,TLiwVariant((TReal) compassinfo)) ;
  1477 	        	Result->InsertL(KPositionFieldHeadingError ,TLiwVariant((TReal) compassinfo)) ;
  1412             }
  1478 	        	}
  1413 
  1479 
  1414 
  1480 
  1415         if(!iGenericPosition->GetValue(EPositionFieldMagneticHeading , compassinfo) )
  1481 	    	if(!iGenericPosInfo->GetValue(EPositionFieldMagneticHeading , compassinfo) )
  1416             {
  1482 	        	{
  1417             Result->InsertL(KPositionFieldMagneticHeading ,TLiwVariant((TReal) compassinfo)) ;
  1483 	        	Result->InsertL(KPositionFieldMagneticHeading ,TLiwVariant((TReal) compassinfo)) ;
  1418             }
  1484 	        	}
  1419 
  1485 
  1420 
  1486 
  1421 
  1487 
  1422         if(!iGenericPosition->GetValue(EPositionFieldMagneticHeadingError , compassinfo) )
  1488 	    	if(!iGenericPosInfo->GetValue(EPositionFieldMagneticHeadingError , compassinfo) )
  1423             {
  1489 	            {
  1424             Result->InsertL(KPositionFieldMagneticHeadingError ,TLiwVariant((TReal) compassinfo)) ;
  1490 	            Result->InsertL(KPositionFieldMagneticHeadingError ,TLiwVariant((TReal) compassinfo)) ;
  1425 
  1491 
  1426             } 
  1492 	            } 
       
  1493 
       
  1494 
       
  1495 	    	} //End of  ECapabilityCompass
       
  1496 
       
  1497 		/*if( currCapability & TPositionModuleInfo :: ECapabilityNmea ) //Extract Nmea info if any and append it 	
       
  1498 		    {                                                             //as part of out param list  
       
  1499 		    TUint8 numSentences ;
       
  1500 
       
  1501 		    if(!iGenericPosInfo->GetValue(EPositionFieldNMEASentences , numSentences) )
       
  1502 		        {
       
  1503 		        Result->InsertL(KPositionFieldNMEASentences ,TLiwVariant((TReal) numSentences)) ;
       
  1504 		        }
  1427 		        }
  1505 
  1428 
  1506 
  1429 
  1507 		    TBuf8 <20> nmeaSentences ;
       
  1508 		    if(!iGenericPosInfo->GetValue(EPositionFieldNMEASentencesStart , nmeaSentences) )
       
  1509 		        {
       
  1510 		        Result->InsertL(KPositionFieldNMEASentencesStart ,TLiwVariant( numSentences)) ;
       
  1511 		        }
       
  1512 		    }*/ //End of ECapabilityNmea
       
  1513 
       
  1514 	     }
       
  1515     aOutParamList.AppendL(TLiwGenericParam ( KLocationMap, TLiwVariant(Result))) ;
  1430     aOutParamList.AppendL(TLiwGenericParam ( KLocationMap, TLiwVariant(Result))) ;
  1516     Result->DecRef();
  1431     Result->DecRef();
  1517     CleanupStack :: Pop(Result) ;
  1432     CleanupStack :: Pop(Result) ;
  1518     		
  1433     		
  1519     }
  1434     }