sensorservices/sensorserver/inc/common/sensrvclientserver.h
changeset 0 4e1aa6a622a0
--- /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 <e32base.h>
+#include <sensrvchannelinfo.h>
+#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<TSensrvAsyncChannelDataCountsRetval> TSensrvAsyncChannelDataCountsRetvalPckgBuf;  
+typedef TPckgBuf<TSensrvStartListeningParameters> TSensrvStartListeningParametersPckgBuf;  
+typedef TPckgBuf<TSensrvAsyncConditionRetval> TSensrvAsyncConditionRetvalPckgBuf;
+typedef TPckgBuf<TInt> TSensrvTIntPckgBuf;
+typedef TPckgBuf<TSensrvChannelInfo> TSensrvChannelInfoPckgBuf;
+typedef TPckg<TSensrvProperty> TPropertyPckg;
+typedef TPckgBuf<TSensrvProperty> TPropertyPckgBuf;
+typedef TPckgBuf<TSensrvChannelChangeType> 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