This page was last modified 07:42, 22 April 2008.
CS000914 - Displaying sensor data
From Forum Nokia Wiki
| ID | CS000914 | Creation date | April 22, 2008 |
| Platform | S60 3rd Edition, MR | Tested on devices | Nokia N95 8GB |
| Category | Symbian C++ | Subcategory | Hardware, Sensor |
| Keywords (APIs, classes, methods, functions): MRRSensorDataListener, TRRSensorInfo, TRRSensorEvent, CFont, CWindowGc, MRRSensorDataListener::HandleDataEventL(), CGraphicsDevice::GetNearestFontInTwips(), CWindowGc::SetBrushColor(), CWindowGc::UseFont(), CWindowGc::DrawText() |
Overview
This code snippet demonstrates how to display the data produced by the accelerometer and rotation sensors of the device on the screen.
Registering listeners for the sensors is not covered in this code snippet. See CS000888 - Listening for accelerometer sensor data events and CS000913 - Listening for rotation sensor data events for more information on registering listeners.
Note: In order to use the code, you need to install the sensor plug-in for your SDK.
This snippet can be self-signed.
MMP file
The following libraries are required:
LIBRARY RRSensorApi.lib LIBRARY gdi.lib
Header file
#include <coecntrl.h> // CCoeControl #include <gdi.h> // CFont #include <RRSensorApi.h>
// Accelerometer sensor UID const TInt KAccelerometerSensorUID = 0x10273024; // Rotation sensor UID const TInt KRotationSensorUID = 0x303E;
class CMyControl : public CCoeControl, public MRRSensorDataListener { // ... private: // Functions from base classes /** * From CCoeControl. * Draws this control to the screen. * @param aRect the rectangle of this view that needs updating */ void Draw(const TRect& aRect) const; /** * From MRRSensorDataListener. * Callback function for receiving sensor data events. * * @param aSensor identifies the sensor that created the event. * @param aEvent contains data about created event. */ void HandleDataEventL(TRRSensorInfo aSensor, TRRSensorEvent aEvent); private: // Data CRRSensorApi* iAccelerometerSensor; TInt iAccSensorDataX; TInt iAccSensorDataY; TInt iAccSensorDataZ; CRRSensorApi* iRotationSensor; TInt iRotSensorDataX; TInt iRotSensorDataY; TInt iRotSensorDataZ; CFont* iFont; }
Source file
#include <EIKENV.H> // CEikonEnv #include <gdi.h> // TFontSpec, CGraphicsDevice #include <RRSensorApi.h>
void CMyControl::ConstructL(const TRect& aRect) { // ... // Reset sensor data iAccSensorDataX = 0; iAccSensorDataY = 0; iAccSensorDataZ = 0; iRotSensorDataX = 0; iRotSensorDataY = 0; iRotSensorDataZ = 0; // Initialize the font used in drawing onto the screen _LIT(KFontName, "Arial"); const TInt KFontSize = 120; TFontSpec fontSpec(KFontName, KFontSize); CGraphicsDevice* screenDevice = CEikonEnv::Static()->ScreenDevice(); screenDevice->GetNearestFontInTwips(iFont, fontSpec); // ... }
/** * Draws the display. */ void CMyControl::Draw(const TRect& /*aRect*/) const { // Get the standard graphics context CWindowGc& gc = SystemGc(); // Get the control's extent TRect drawRect(Rect()); // Clear the screen with white color gc.SetBrushColor(KRgbWhite); gc.Clear(drawRect); // Set the font gc.UseFont(iFont); // The text is drawn in black gc.SetBrushColor(KRgbBlack); TBuf<255> buffer; // Draw accelerometer sensor data _LIT(KAccTxt, "Accel. sensor: X: %d, Y: %d, Z: %d"); buffer.Format(KAccTxt, iAccSensorDataX, iAccSensorDataY, iAccSensorDataZ); gc.DrawText(buffer, TPoint(0, 20)); // Draw rotation sensor data _LIT(KRotTxt, "Rotation sensor: X: %d, Y: %d, Z: %d"); buffer.Format(KRotTxt, iRotSensorDataX, iRotSensorDataY, iRotSensorDataZ); gc.DrawText(buffer, TPoint(0, 40)); }
/** * Gets called whenever a data event occurs. */ void CMyControl::HandleDataEventL(TRRSensorInfo aSensor, TRRSensorEvent aEvent) { // A data event occurred. Store new values from the sensor in question. switch (aSensor.iSensorId) { case KAccelerometerSensorUID: { iAccSensorDataX = aEvent.iSensorData1; iAccSensorDataY = aEvent.iSensorData2; iAccSensorDataZ = aEvent.iSensorData3; } break; case KRotationSensorUID: { iRotSensorDataX = aEvent.iSensorData1; iRotSensorDataY = aEvent.iSensorData2; iRotSensorDataZ = aEvent.iSensorData3; } default: break; } // Update the display DrawNow(); }
Postconditions
Data received from accelerometer and rotation sensors is constantly drawn onto the screen.
See also
- CS000888 - Listening for accelerometer sensor data events
- CS000913 - Listening for rotation sensor data events
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| uninstall app to s60 simulator | Pando | Symbian Tools & SDKs | 17 | 2008-03-22 02:18 |
| Browsing Phone through camera sensing ....... | RohanSolanki | General Discussion | 9 | 2008-02-04 15:25 |
| Copying a Bitmap using DataAddress() of another Bitmap and Displaying it | val_kilmer | Symbian Media (Graphics & Sounds) | 2 | 2005-11-14 10:51 |
| custom font problem | allyfeng | General Symbian C++ | 8 | 2005-05-03 15:08 |
| Displaying midi lyrics | salmira | Mobile Java Media (Graphics & Sounds) | 0 | 2003-08-12 14:12 |

