diff -r 43e37759235e -r 51a74ef9ed63 Symbian3/SDK/Source/GUID-BA0D9DA9-3B54-4964-A4D6-9ADA4DEB7231.dita --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/SDK/Source/GUID-BA0D9DA9-3B54-4964-A4D6-9ADA4DEB7231.dita Wed Mar 31 11:11:55 2010 +0100 @@ -0,0 +1,90 @@ + + + + + +Receiving +Data from SensorsYou can implement a data listener to receive data from the sensors. +Based on the data received, you can perform specific actions on the Symbian +device. For example, if you receive information from the sensor about the +distance between the device and the user then based on this information, you +can disable or enable the loudspeaker mode on the Symbian device. +

Before listening +for sensor channel data, you must open +the sensor channel.

+ +Implement the data +listener. +

Inherit from the MSensrvDataListener interface +and implement the following pure virtual functions: MSensrvDataListener::DataReceived, MSensrvDataListener::DataError and MSensrvDataListener::GetDataListenerInterfaceL

class DataListener:public MSensrvDataListener + { + public: + void DataReceived(CSensrvChannel& aChannel, TInt aCount, TInt aDataLost ) + { + ... + //Implementation + } + void DataError( CSensrvChannel&, TSensrvErrorSeverity) + { + ... + //Implementation + } + void GetDataListenerInterfaceL( TUid, TAny*&) + { + ... + //Implementation + } + };
+
+Start data listening. +

Pass an instance of data listener implementation using the CSensrvChannel::StartDataListeningL() function.

//Instance of the data listener implementation +DataListener dataListener; +... +CSensrvChannel* channel; +... +channel->StartDataListeningL(&dataListener, 1, 1, 0); +...

When new data is available to be read in the sensor channel, +the client is notified by the MSensrvDataListener::DataReceived(CSensrvChannel +&,TInt,TInt) callback function. The channel data is received +into the receiving buffer. The receiving buffer is allocated from the heap +in the client's thread and its size is the channel data item size multiplied +by the maximum number of data items.

+
+Read the channel +data from the receiving buffer using the CSensrvChannel::GetData() function. +For more information about handling data notifications, see the following Example. + +After you get the +required sensor data feeds from the sensor channel, you can stop data listening +using the CSensrvChannel::StopDataListening() function. +channel->StopDataListening(); + +
+

The following example +shows how to handle the double tapping data notification that is received.

Check +the channel type of the received data and then receive the data object using +the CSensrvChannel::GetData() function. The aCount parameter +provides the details about the number of data objects in the channels receiving +buffer. This number can be zero if the buffering period is used when data +listening is started. The aDataLost parameter provides +the details about the number of the lost data objects. For example, in heavy +load situations.

void CTestClass::DataReceived( CSensrvChannel& aChannel, + TInt aCount, + TInt aDataLost ) + { + if ( aChannel.GetChannelInfo().iChannelType == KSensrvChannelTypeIdAccelerometerDoubleTappingData ) + { + TSensrvTappingData tappingData; + TPckg <TSensrvTappingData> tappingPackage( tappingData ); + aChannel.GetData( tappingPackage ); + } + }
+

End the session +with the sensor channel using the CSensrvChannel::CloseChannel() function.

+
\ No newline at end of file