diff -r 000000000000 -r 4e1aa6a622a0 sensorservices/sensorserver/inc/common/sensrvclientserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/sensorservices/sensorserver/inc/common/sensrvclientserver.h Tue Feb 02 00:53:00 2010 +0200 @@ -0,0 +1,541 @@ +/* +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Sensor server client-server API. +* +*/ + + +#ifndef SENSRVCLIENTSERVER_H +#define SENSRVCLIENTSERVER_H + +#include +#include +#include "sensrvdefines.h" +#include "sensrvtypes.h" + +/** +* Data holder class for ESensrvSrvReqAsyncChannelData return values. +* @since S60 5.0 +*/ +class TSensrvAsyncChannelDataCountsRetval + { + public: + TSensrvAsyncChannelDataCountsRetval() + {} + + TSensrvAsyncChannelDataCountsRetval(TInt aDataItemCount, + TInt aDataLostCount) + : iDataItemCount(aDataItemCount), + iDataLostCount(aDataLostCount) + { + } + + /** + * Amount of data items written to message + */ + TInt iDataItemCount; + + /** + * Amount of data items lost due buffer overwrite + */ + TInt iDataLostCount; + }; + +/** +* Data holder class for ESensrvSrvReqStartListening parameter values. +* @since S60 5.0 +*/ +class TSensrvStartListeningParameters + { + public: + TSensrvStartListeningParameters() + {} + + TSensrvStartListeningParameters(TInt aDesiredBufferingCount, + TInt aMaximumBufferingCount, + TInt aBufferingPeriod) + : iDesiredBufferingCount(aDesiredBufferingCount), + iMaximumBufferingCount(aMaximumBufferingCount), + iBufferingPeriod(aBufferingPeriod) + { + } + + /** + * The minimum desired count of items in each request. + * Count must be less than half of the buffer size assigned + * to channel. + * Count less than one or count over maximum means maximum + * allowed count is used. + */ + TInt iDesiredBufferingCount; + + /** + * The maximum count of items in each request. + * Count must be less than half of the buffer size assigned + * to channel and more than iDesiredBufferingCount. + * Count less than iDesiredBufferingCount or count over + * maximum means maximum allowed count is used. + */ + TInt iMaximumBufferingCount; + + /** + * Buffering period in milliseconds. + * If buffering period is very short, it can + * easily be affected by system load. + * This value will be converted into 32-bit microseconds + * value on server side, so maximum period is 30 minutes. + * Period over maximum means maximum period is used. + * Zero or negative period means no buffering period is used. + */ + TInt iBufferingPeriod; + }; + +/** +* Data holder class for ESensrvSrvReqAddConditionSet parameter values. +* @since S60 5.0 +*/ +class TSensrvAsyncConditionRetval + { + public: + TSensrvAsyncConditionRetval() + {} + + TSensrvAsyncConditionRetval( + TInt aConditionSetId, + TInt aConditionId ) + : iConditionSetId(aConditionSetId), + iConditionId(aConditionId) + { + } + + /** + * An identifier for condition set which was met. Must be unique within + * currently active condition sets for this client. + */ + TInt iConditionSetId; + + /** + * An identifier for the specific condition that was met. + * If multiple conditions in a set were met by the same data, + * only the first match is indicated here. + * Must be unique within currently active conditions for this client. + */ + TInt iConditionId; + }; + +// Package buffers for return values +typedef TPckgBuf TSensrvAsyncChannelDataCountsRetvalPckgBuf; +typedef TPckgBuf TSensrvStartListeningParametersPckgBuf; +typedef TPckgBuf TSensrvAsyncConditionRetvalPckgBuf; +typedef TPckgBuf TSensrvTIntPckgBuf; +typedef TPckgBuf TSensrvChannelInfoPckgBuf; +typedef TPckg TPropertyPckg; +typedef TPckgBuf TPropertyPckgBuf; +typedef TPckgBuf TSensrvTSensrvChannelChangeTypePckgBuf; + +// Message slot constants +const TInt KSensrvChannelIdSlot(0); // Channel id must always be in slot zero. + +const TInt KSensrvQueryChannelsQueryParametersSlot(0); +const TInt KSensrvQueryChannelsChannelInfoArraySlot(1); +const TInt KSensrvQueryChannelsCountSlot(2); + +const TInt KSensrvOpenChannelBufferSizeSlot(1); +const TInt KSensrvOpenChannelDataItemSizeSizeSlot(2); + +const TInt KSensrvStartListeningParametersSlot(1); // Used for data and condition listening + +const TInt KSensrvAsyncChannelDataBufferSlot(1); +const TInt KSensrvAsyncChannelDataCountSlot(2); + +const TInt KSensrvGetPropertyPropertySlot(1); +const TInt KSensrvGetAllPropertiesPropertyArraySlot(1); +const TInt KSensrvGetAllPropertiesPropertyCountSlot(2); +const TInt KSensrvSetPropertyPropertySlot(1); +const TInt KSensrvAsyncPropertyDataPropertySlot(1); + +const TInt KSensrvAddConditionSetDataSlot(1); + +const TInt KSensrvRemoveConditionSetIdSlot(1); + +const TInt KSensrvAsyncConditionMetReturnDataSlot(1); +const TInt KSensrvAsyncConditionMetReturnIdSlot(2); + +const TInt KSensrvAsyncChannelChangeInfoSlot(0); +const TInt KSensrvAsyncChannelChangeTypeSlot(1); +const TInt KSensrvAsyncChannelSearchParamsSlot(2); + +// Completion codes for the property set success indicator notification +const TInt KSensrvErrPropertySetAvailable(-500000); +const TInt KSensrvErrPropertySetPossible(-500001); +const TInt KSensrvErrPropertySetUnavailable(-500002); + +/** +* Opcodes used in message passing between client and server +* +* NOTE: If TSensrvServerRequest enumeration is changed, +* Sensor Server's policy defined in sensrvserver.h must also be +* checked and changed correspondingly, if necessary. +*/ +enum TSensrvServerRequest + { +// --------------------------------------------------------------- +// Channel listening and property getting operations +// --------------------------------------------------------------- + + /** + * Query channels + * + * parameters: + * 0 - in - TSensrvChannelInfoPckgBuf instance containing required channel properties. + * 1 - out - TDes8 indicating the data area where fetched channels are written to. + * Note: Client must reserve enough space to contain all returned channels. + * If there was not enough space, information in array is not valid, + * and must be requested again with larger buffer. + * The count parameter indicates the actual channel count in that case. + * 2 - out - TSensrvTIntPckgBuf, Count of returned channel infos. + * + * Errors: + * KErrBadDescriptor - Invalid data descriptor for returning data + * KErrOverflow - Not enough space to return all found channels. + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqQueryChannels, + + /** + * Open a channel for the client + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel to open + * 1 - out - TSensrvTIntPckgBuf Maximum client buffer count + * 2 - out - TSensrvTIntPckgBuf Actual channel data item size + * + * Errors: + * KErrNotFound - Invalid channel id or channel handler creation failure. + * KErrAlreadyExists - Session already has channel open. + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqOpenChannel, + + /** + * Close a channel for the client + * Channel must be opened. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel to close + * + * Errors: + * KErrNotFound - No channel with that id found. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqCloseChannel, + + /** + * Start listening for a channel. + * Channel must be opened. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - in - TSensrvStartListeningParameters specifying + * listening parameters. + * + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrAlreadyExists - This client is already listening for this channel. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqStartListening, + + /** + * Stop listening for a channel. + * Channel must be opened and listened to. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * + * Errors: + * KErrNotFound - No open and listened channel with that id for this client found. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqStopListening, + + /** + * Request data from a channel. + * Channel must be opened and listened to. + * This request is asynchronous. + * + * Parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - out - TDes8 indicating the data area where fetched data is written to. + * 2 - out - TSensrvAsyncChannelDataCountsRetvalPckgBuf + * Actual number of returned items and lost items. + * Rest of data area is invalid. + * + * Errors: + * KErrNotFound - No open and listened channel with that id for this client found. + * KErrBadDescriptor - Invalid data descriptor for returning data. + * KErrOverflow - Not enough space to return data. All out parameters are invalid. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqAsyncChannelData, + + /** + * Get a channel property value synchronously. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - in/out - TPropertyPckg, returned properties for a property. + * Name of the property(iPropertyId) + * and channel data type index number (iItemIndex) + * are transferred inside TSensrvProperty towards server. + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrArgument - Property doesn't exist. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqGetProperty, + + /** + * Start listening for a channel property changes. + * Channel must be opened and listened to. + * This request is asynchronous. + * + * Parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - out - TPropertyPckgBuf, changed property. + * + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqAsyncPropertyData, + + /** + * Stop listening for a channel property changes. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqStopPropertyListening, + + /** + * Get all channel properties. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - out - TPtr8 indicating the data area where changed properties are written to. + * Note: Client must reserve enough space to contain all returned properties. + * If there was not enough space, information in array is not valid, + * and must be requested again with larger buffer. + * The count parameter indicates the actual property count in that case. + * 2 - out - TSensrvTIntPckgBuf, Count of returned properties. + * + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqGetAllProperties, + + /** + * Add a condition set for this channel. + * Channel must be opened. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - in - TDesC8 Externalized CSensrvChannelConditionSetImpl + * + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrAlreadyExists - This set is already active. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqAddConditionSet, + + /** + * Remove a condition set for this channel if one is found. + * Channel must be opened. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - in - TSensrvTIntPckgBuf identifying the set to remove. + * + * Errors: + * KErrNotFound - No open channel with specified id + * for this client found. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqRemoveConditionSet, + + /** + * Start listening for condition set. + * Channel must be opened. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - in - TSensrvStartListeningParameters specifying + * listening parameters. Maximum count doesn't + * really matter in condition listening, as + * long as it is at least as much as desired count. + * + * Errors: + * KErrNotFound - No open channel with that id for this client found. + * KErrAlreadyExists - This client is already listening for this channel. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqStartConditionListening, + + /** + * Stop condition listening for a channel. + * Channel must be opened and listened to. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * + * Errors: + * KErrNotFound - No open and listened channel with that id for this client found. + * KErrNotReady - Plugin is not in loaded state + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqStopConditionListening, + + /** + * Request condition met notifications from a channel. + * Channel must be opened and conditions listened to. + * This request is asynchronous. + * + * Parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - out - TDes8 indicating the data area where triggering data value is written to. + * 2 - out - TSensrvTIntPckgBuf Id of returned set + * + * Errors: + * KErrNotFound - No open and listened channel with that id for this client found. + * KErrBadDescriptor - Invalid data descriptor for returning data. + * KErrOverflow - Not enough space to return data. All out parameters are invalid. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqAsyncConditionMet, + + /** + * Start listening for new and removed channels. + * This request is asynchronous. + * + * Parameters: + * 0 - out - TSensrvChannelInfoPckgBuf Channel information. + * 1 - out - TSensrvTSensrvChannelChangeTypePckgBuf, Indicates if channel was removed or added, + * value must be one of those defined in TSensrvChannelChangeType enum. + * 2 - in - TSensrvChannelInfoPckgBuf Search parameter. + * + * Errors: + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqAsyncChannelChangeNotification, + + /** + * Stop listening for a channel changes. + * If not listening, still completes without error. + * + * parameters: + * None + * + * Errors: + * KErrCancel - Request was canceled + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqStopChannelChangeListening, + +// --------------------------------------------------------------- +// Property Writing +// --------------------------------------------------------------- + + /** + * Set a property value. + * + * parameters: + * 0 - in - TSensrvChannelID identifying the channel + * 1 - in - TPropertyPckg, property to be set. + * + * Errors: + * KErrNotFound - No open channel with that id for this client found, or property + * does not exist. + * KErrPermissionDenied - Client capabilities do not match proprety set requirements. + * KErrArgument - Property value is not valid. + * KErrCancel - Request was canceled + * KErrNotReady - Plugin is not in loaded state + * KErrNoMemory - Not enough memory to fulfill request. + */ + ESensrvSrvReqSetProperty, + +// --------------------------------------------------------------- +// Server shutdown, +// --------------------------------------------------------------- + + /** + * Shuts down the server gracefully. + * This function can only be issued by test framework (KSensrvTestFrameworkUid). + * + * parameters: + * None + * + * Errors: + * KErrPermissionDenied - Invalid client SID + */ + ESensrvSrvReqShutdownServer, + +// --------------------------------------------------------------- +// End of enum +// --------------------------------------------------------------- + + /** + * Indicates end of enumeration values. + * Only used in security check and is not supported + * as a real operation. + */ + ESensrvSrvReqEnd + }; + + +#endif // SENSRVCLIENTSERVER_H