This tutorial deals with the commands and responses available for remote control framework applications.
Intended Audience:
This tutorial is designed for Symbian licensees and 3rd party application developers.
The following tasks will be covered in this tutorial:
The device used to send control commands to a remote target is the controller. There are two broad kinds of controller operations that need to be understood: sending commands and receiving responses. They are discussed below.
Sending Commands
Commands are sent to a remote control target device to tell the device to do something. This may include changing the volume setting, requesting a track listing, starting or stopping music playback, requesting a file listing, or depending on the kind of device being controlled, telling the device to move in some way.
... CRemConCoreApiController* iCoreController; ... // open the controller as previously discussed. TRequestStatus stat; TUint numRemotes; // numRemotes is a value representing a specific participating device. iCoreController->Play(stat, numRemotes, ERemConCoreApiButtonClick); User::WaitForRequest(stat); LEAVEIFERRORL(stat.Int());
When a target receives the command it will handle it in an appropriate way, as discussed in the next section. The target may also send a response to the controller.
Receiving Responses
If a target sends a response to a received command the controller needs to handle the response. The response could be something as simple as an acknowledgement that a command has been received or it could be as complex as a listing of audio tracks that the controller needs to process in some way.
To receive responses the application should implement the MRemConCoreApiControllerObserver controller observer interface. It then receives callbacks when a response has arrived.
void MrccacoResponse(TRemConCoreApiOperationId aOperationId, TInt aError); ... void CRemConTestOuter::MrccacoResponse(TRemConCoreApiOperationId aOperationId, TInt aError) { switch ( aOperationId ) { case ERemConCoreApiPlay: iManager.MtmWrite(_L8("\ta 'play' response came in with error %d"), aError); break; case ERemConCoreApiStop: iManager.MtmWrite(_L8("\ta 'stop' response came in with error %d"), aError); break; case ERemConCoreApiVolumeUp: iManager.MtmWrite(_L8("\ta 'VolumeUp' response came in with error %d"), aError); break; case ERemConCoreApiVolumeDown: iManager.MtmWrite(_L8("\ta 'VolumeDown' response came in with error %d"), aError); break; case ERemConCoreApiForward: iManager.MtmWrite(_L8("\ta 'Forward' response came in with error %d"), aError); break; case ERemConCoreApiBackward: iManager.MtmWrite(_L8("\ta 'Backward' response came in with error %d"), aError); break; } }
Responses are often followed up by the controller with a series of actions such as presenting the information provided by the response to the user, waiting for the user to make a choice of some kind, and sending a new command, which begins the whole process again.
A target device is set up to wait for and handle commands sent to it from a controller and respond in some way to those commands.
Receiving Commands
To receive a command, such as a request to increase the volume or return a listing of audio tracks, the client must implement the MRemConCoreApiTargetObserver target observer interface. It then will receive a callback through this interface when a command is received.
iCoreTarget = CRemConCoreApiTarget::NewL(*iInterfaceSelector, *this); ... void CRemConTestOuter::MrccatoPlay(TRemConCoreApiPlaybackSpeed aSpeed, TRemConCoreApiButtonAction aButtonAct) { ... // used below TRequestStatus stat; // send the response iCoreTarget->PlayResponse(stat, KErrNone); User::WaitForRequest(stat); ... }
Sending Responses
Once the command has been handled the target will send a response to the controller. The response could be a simple acknowledgement, an error message, or a listing of files or music tracks or some other data. Use the CRemConCoreApiTarget interface.
... CRemConCoreApiTarget* iCoreTarget; ... { ... // from above TRequestStatus stat; // send the response iCoreTarget->PlayResponse(stat, KErrNone); User::WaitForRequest(stat); ... }
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.