os/mm/mmplugins/cameraplugins/source/mmcameraclientplugin/mmcameraserver/src/mmcameraserversession.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// mmcamerasession.cpp
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
/**
sl@0
    19
 @file
sl@0
    20
 @internalComponent
sl@0
    21
*/
sl@0
    22
sl@0
    23
#include "mmcameraserversession.h"
sl@0
    24
#include "mmcameraservercontroller.h"
sl@0
    25
sl@0
    26
sl@0
    27
CMMCameraServerSession::CMMCameraServerSession()
sl@0
    28
	:iCameraIndex(0),
sl@0
    29
	 iHandle(KECamHandleNotKnown),
sl@0
    30
	 iPriority(KECamNoPriority),
sl@0
    31
	 iMMCapability(ETrue),
sl@0
    32
	 iCollaborativeClient(EFalse),
sl@0
    33
	 iReserved(EFalse),
sl@0
    34
	 iPoweredUp(EFalse)
sl@0
    35
	{
sl@0
    36
	}
sl@0
    37
sl@0
    38
void CMMCameraServerSession::CreateL()
sl@0
    39
	{
sl@0
    40
	iCameraServer = static_cast<CMMCameraServer*>(const_cast<CServer2*>(CSession2::Server()));
sl@0
    41
	// Get server policymanager
sl@0
    42
	iPolicyManager = Server()->PolicyManager();
sl@0
    43
sl@0
    44
	//load camera control etc in OpenCamera...
sl@0
    45
	Server()->AddSession();
sl@0
    46
	}
sl@0
    47
sl@0
    48
CMMCameraServerSession::~CMMCameraServerSession()
sl@0
    49
	{
sl@0
    50
//	CameraController()->Reset();
sl@0
    51
	Server()->DropSession();
sl@0
    52
sl@0
    53
	//deque the session queued in controller
sl@0
    54
	iCamSessionLink.Deque();  //safe to deque if it does not exists in the queue.
sl@0
    55
	iCamSessionLink.iNext = NULL;
sl@0
    56
	}
sl@0
    57
sl@0
    58
void CMMCameraServerSession::Disconnect(const RMessage2 &aMessage)
sl@0
    59
	{
sl@0
    60
	if(!iOverthrowMessage.IsNull())
sl@0
    61
		{
sl@0
    62
		iOverthrowMessage.Complete(KErrCancel);
sl@0
    63
		}
sl@0
    64
	CSession2::Disconnect(aMessage);
sl@0
    65
	}
sl@0
    66
sl@0
    67
void CMMCameraServerSession::ServiceL(const RMessage2& aMessage)
sl@0
    68
	{
sl@0
    69
	
sl@0
    70
	// Do policy manager checks
sl@0
    71
	iPolicyManager->ServiceHandlerL(aMessage);
sl@0
    72
sl@0
    73
	switch (aMessage.Function())
sl@0
    74
		{
sl@0
    75
		case ECamQueryCamerasAvailable:
sl@0
    76
			{
sl@0
    77
			CamerasAvailable(aMessage);
sl@0
    78
			break;
sl@0
    79
			}
sl@0
    80
		
sl@0
    81
		case ECamOpenCamera:
sl@0
    82
			{
sl@0
    83
			OpenCamera(aMessage);
sl@0
    84
			break;	
sl@0
    85
			}
sl@0
    86
sl@0
    87
		case ECamCameraAccessControl:
sl@0
    88
			{
sl@0
    89
			switch(aMessage.Int0())
sl@0
    90
				{
sl@0
    91
				case ECameraRelease:     
sl@0
    92
					{
sl@0
    93
					Release(aMessage);
sl@0
    94
					break;
sl@0
    95
					}
sl@0
    96
sl@0
    97
				case ECameraReservedNotification:    
sl@0
    98
					{
sl@0
    99
					Reserve(aMessage);
sl@0
   100
					break;	
sl@0
   101
					}
sl@0
   102
sl@0
   103
				case ECameraCancelReservedNotification:    
sl@0
   104
					{
sl@0
   105
					CancelReserve(aMessage);
sl@0
   106
					break;	
sl@0
   107
					}
sl@0
   108
sl@0
   109
				case ECameraOverthrowNotification:
sl@0
   110
					{
sl@0
   111
					if(iOverthrowMessage.IsNull())
sl@0
   112
						{
sl@0
   113
						iOverthrowMessage = aMessage;
sl@0
   114
						}
sl@0
   115
					else
sl@0
   116
						{
sl@0
   117
						aMessage.Complete(KErrServerBusy);
sl@0
   118
						}
sl@0
   119
					break;
sl@0
   120
					}
sl@0
   121
sl@0
   122
				case ECameraCancelOverthrowNotification:
sl@0
   123
					{
sl@0
   124
					if(!iOverthrowMessage.IsNull())
sl@0
   125
						{
sl@0
   126
						iOverthrowMessage.Complete(KErrCancel);
sl@0
   127
						}
sl@0
   128
					CameraController()->Reset(); //Stops VF, VC. Cancels ImageCapture if issued using this session.
sl@0
   129
					aMessage.Complete(KErrNone);
sl@0
   130
					break;
sl@0
   131
					}
sl@0
   132
sl@0
   133
				default:
sl@0
   134
					aMessage.Complete(KErrArgument);
sl@0
   135
				}
sl@0
   136
			break;
sl@0
   137
			}
sl@0
   138
		case ECamPowerCamera:
sl@0
   139
			{
sl@0
   140
			switch(aMessage.Int0())
sl@0
   141
				{
sl@0
   142
				case ECameraPowerOnNotification:     
sl@0
   143
					{
sl@0
   144
					PowerOn(aMessage);
sl@0
   145
					break;
sl@0
   146
					}
sl@0
   147
				case ECameraPowerOff:
sl@0
   148
					{
sl@0
   149
					PowerOff();	
sl@0
   150
					aMessage.Complete(KErrNone);
sl@0
   151
					break;
sl@0
   152
					}
sl@0
   153
				case ECameraCancelPowerOnNotification:
sl@0
   154
					{
sl@0
   155
					CancelPowerOn();
sl@0
   156
					aMessage.Complete(KErrNone);
sl@0
   157
					break;
sl@0
   158
					}
sl@0
   159
				}
sl@0
   160
			break;
sl@0
   161
			}
sl@0
   162
sl@0
   163
		case ECamPrepareDirectViewFinder:
sl@0
   164
			{
sl@0
   165
			PrepareDirectViewFinder(aMessage);
sl@0
   166
			break;
sl@0
   167
			}
sl@0
   168
sl@0
   169
		case ECamStartDirectViewFinder:
sl@0
   170
			{
sl@0
   171
			StartDirectViewFinder(aMessage);
sl@0
   172
			break;
sl@0
   173
			}
sl@0
   174
sl@0
   175
		case ECamStopDirectViewFinder:
sl@0
   176
			{
sl@0
   177
			StopDirectViewFinder(aMessage);
sl@0
   178
			break;
sl@0
   179
			}
sl@0
   180
sl@0
   181
		case ECamPauseDirectViewFinder:
sl@0
   182
			{
sl@0
   183
			PauseDirectViewFinder(aMessage);
sl@0
   184
			break;
sl@0
   185
			}
sl@0
   186
sl@0
   187
		case ECamResumeDirectViewFinder:
sl@0
   188
			{
sl@0
   189
			ResumeDirectViewFinder(aMessage);
sl@0
   190
			break;
sl@0
   191
			}
sl@0
   192
sl@0
   193
		case ECamDirectViewFinderState:
sl@0
   194
			{
sl@0
   195
			DirectViewFinderState(aMessage);
sl@0
   196
			break;
sl@0
   197
			}
sl@0
   198
sl@0
   199
		case ECamSetDirectViewFinderMirror:
sl@0
   200
			{
sl@0
   201
			SetDirectViewFinderMirror(aMessage);
sl@0
   202
			break;
sl@0
   203
			}
sl@0
   204
			
sl@0
   205
		case ECamGetDirectViewFinderMirror:
sl@0
   206
			{
sl@0
   207
			GetDirectViewFinderMirror(aMessage);
sl@0
   208
			break;
sl@0
   209
			}
sl@0
   210
sl@0
   211
		case ECamDirectViewFinderProperties:
sl@0
   212
			{
sl@0
   213
			DirectViewFinderProperties(aMessage);
sl@0
   214
			break;
sl@0
   215
			}
sl@0
   216
		case ECamSetParameter:
sl@0
   217
			{
sl@0
   218
			SetCameraParameter(aMessage);
sl@0
   219
			break;
sl@0
   220
			}
sl@0
   221
sl@0
   222
		case ECamGetParameter:
sl@0
   223
			{
sl@0
   224
			GetCameraParameter(aMessage);
sl@0
   225
			break;
sl@0
   226
			}
sl@0
   227
sl@0
   228
		case ECamCameraHandle:
sl@0
   229
			{
sl@0
   230
			CameraHandle(aMessage);
sl@0
   231
			break;
sl@0
   232
			}
sl@0
   233
sl@0
   234
		default:
sl@0
   235
			Server()->PanicClient(aMessage, EPanicNotSupported);
sl@0
   236
			break;
sl@0
   237
		}
sl@0
   238
	}
sl@0
   239
sl@0
   240
/**
sl@0
   241
 * Queries controller to find out how many cameras are available to clients.
sl@0
   242
 */
sl@0
   243
void CMMCameraServerSession::CamerasAvailable(const RMessage2& aMessage)
sl@0
   244
	{
sl@0
   245
	TCamerasAvailable info;
sl@0
   246
sl@0
   247
	CMMCameraServerControllerQuery* query = NULL;
sl@0
   248
	TRAPD(error, Server()->GetCameraControllerQueryL(query));
sl@0
   249
	if (error == KErrNone)
sl@0
   250
		{
sl@0
   251
		info.iCameraCount = query->GetCamerasAvailable();
sl@0
   252
		delete query;
sl@0
   253
sl@0
   254
		TCamerasAvailablePckg pckg(info);
sl@0
   255
		error = aMessage.Write(TInt(0), pckg);
sl@0
   256
		}
sl@0
   257
sl@0
   258
	aMessage.Complete(error);
sl@0
   259
	}
sl@0
   260
sl@0
   261
/**
sl@0
   262
 * Stores client information and retrieves camera controller for required camera index.
sl@0
   263
 * 
sl@0
   264
 * Called when client connects to the server for the first time.
sl@0
   265
 */
sl@0
   266
void CMMCameraServerSession::OpenCamera(const RMessage2& aMessage)
sl@0
   267
	{
sl@0
   268
	TOpenCamera parameters;
sl@0
   269
	TOpenCameraPckg parametersBuf(parameters);
sl@0
   270
sl@0
   271
	TInt error = aMessage.Read(TInt(0),parametersBuf);
sl@0
   272
	if (error != KErrNone)
sl@0
   273
		{
sl@0
   274
		aMessage.Complete(error);
sl@0
   275
		}
sl@0
   276
sl@0
   277
	parameters = parametersBuf();
sl@0
   278
sl@0
   279
	iCameraIndex = parameters.iCameraIndex;   // Store the required member variables 
sl@0
   280
    iPriority = parameters.iPriority;
sl@0
   281
    iMMCapability = parameters.iMMCapability;
sl@0
   282
    iHandle = parameters.iHandle; 
sl@0
   283
    iCollaborativeClient = parameters.iCollaborativeClient;
sl@0
   284
sl@0
   285
    TRAP(error, Server()->GetCameraControllerL(iCameraIndex, iCameraController));
sl@0
   286
sl@0
   287
    aMessage.Complete(error);
sl@0
   288
 	}
sl@0
   289
sl@0
   290
/**
sl@0
   291
 * Reserves the camera.
sl@0
   292
 * 
sl@0
   293
 * Delegates the responsibility to the policy manager
sl@0
   294
 */
sl@0
   295
void CMMCameraServerSession::Release(const RMessage2& aMessage)
sl@0
   296
	{
sl@0
   297
	if(!iReserved)
sl@0
   298
		{
sl@0
   299
		aMessage.Complete(KErrAlreadyExists);
sl@0
   300
		}
sl@0
   301
	else
sl@0
   302
		{		
sl@0
   303
		CameraController()->Reset(); //Stops VF, VC. Cancels ImageCapture if issued using this session.
sl@0
   304
		
sl@0
   305
		iPolicyManager->ReleaseClient(this);
sl@0
   306
sl@0
   307
		iReserved = EFalse;
sl@0
   308
		iPoweredUp = EFalse;
sl@0
   309
sl@0
   310
		if(!iOverthrowMessage.IsNull())
sl@0
   311
			{	
sl@0
   312
			iOverthrowMessage.Complete(KErrCancel);
sl@0
   313
			}
sl@0
   314
sl@0
   315
		aMessage.Complete(KErrNone);
sl@0
   316
		}
sl@0
   317
	}
sl@0
   318
sl@0
   319
void CMMCameraServerSession::CompleteOverthrow ()
sl@0
   320
	{
sl@0
   321
	if(!iOverthrowMessage.IsNull())
sl@0
   322
		{
sl@0
   323
		// Complete means sucess
sl@0
   324
		iOverthrowMessage.Complete(KErrNone);
sl@0
   325
		}
sl@0
   326
sl@0
   327
	iPoweredUp = EFalse;
sl@0
   328
	}
sl@0
   329
sl@0
   330
/**
sl@0
   331
 * Releases the camera.
sl@0
   332
 * 
sl@0
   333
 * Delegates the responsibility to the policy manager
sl@0
   334
 */
sl@0
   335
void CMMCameraServerSession::Reserve(const RMessage2& aMessage)
sl@0
   336
	{
sl@0
   337
	if (iReserved)
sl@0
   338
		{
sl@0
   339
		aMessage.Complete(KErrInUse);
sl@0
   340
		return;
sl@0
   341
		}
sl@0
   342
sl@0
   343
	iReserved = iPolicyManager->ReserveClient(this);
sl@0
   344
sl@0
   345
    if(!iReserved)       	
sl@0
   346
    	{
sl@0
   347
    	aMessage.Complete(KErrAccessDenied);
sl@0
   348
    	}
sl@0
   349
    else
sl@0
   350
    	{
sl@0
   351
   	    aMessage.Complete(KErrNone);
sl@0
   352
    	}
sl@0
   353
    }
sl@0
   354
sl@0
   355
/**
sl@0
   356
 * Cancels on ongoing Reserve() operation.
sl@0
   357
 */
sl@0
   358
void CMMCameraServerSession::CancelReserve(const RMessage2& aMessage)
sl@0
   359
	{
sl@0
   360
	Release(aMessage);
sl@0
   361
	}
sl@0
   362
sl@0
   363
/**
sl@0
   364
 * Powers on the device.
sl@0
   365
 * 
sl@0
   366
 * Simply returns with KErrNone or KErrNotReady since device is not powered on until VF is activated.
sl@0
   367
 */
sl@0
   368
void CMMCameraServerSession::PowerOn(const RMessage2& aMessage)
sl@0
   369
	{
sl@0
   370
	if(!iReserved)
sl@0
   371
		{
sl@0
   372
		aMessage.Complete(KErrNotReady);
sl@0
   373
		}
sl@0
   374
	else if (iPoweredUp)
sl@0
   375
		{
sl@0
   376
		aMessage.Complete(KErrInUse);
sl@0
   377
		}
sl@0
   378
	else
sl@0
   379
		{
sl@0
   380
		iPoweredUp = ETrue;
sl@0
   381
		aMessage.Complete(KErrNone);
sl@0
   382
		}
sl@0
   383
	}
sl@0
   384
sl@0
   385
/**
sl@0
   386
 * Powers off the device.
sl@0
   387
 * 
sl@0
   388
 * Simply stops any viewfinder activity.
sl@0
   389
 */
sl@0
   390
void CMMCameraServerSession::PowerOff()
sl@0
   391
	{
sl@0
   392
	CameraController()->Reset();
sl@0
   393
sl@0
   394
	iPoweredUp = EFalse;
sl@0
   395
	}
sl@0
   396
sl@0
   397
void CMMCameraServerSession::CancelPowerOn()
sl@0
   398
	{
sl@0
   399
	iPoweredUp = EFalse;
sl@0
   400
	}
sl@0
   401
sl@0
   402
/**
sl@0
   403
 * Prepares the view finder.
sl@0
   404
 * 
sl@0
   405
 * First step before viewfinder is started.
sl@0
   406
 */
sl@0
   407
void CMMCameraServerSession::PrepareDirectViewFinder(const RMessage2& aMessage)
sl@0
   408
	{
sl@0
   409
	TDirectViewFinderInfo viewFinderInfo;
sl@0
   410
	TDirectViewFinderInfoPckg viewFinderInfoPckg(viewFinderInfo);
sl@0
   411
sl@0
   412
	TInt error = aMessage.Read(TInt(0), viewFinderInfoPckg);
sl@0
   413
	if(error == KErrNone)
sl@0
   414
		{
sl@0
   415
		viewFinderInfo = viewFinderInfoPckg();
sl@0
   416
		TRAP(error, CameraController()->PrepareDirectViewFinderL(viewFinderInfo));
sl@0
   417
		if(error == KErrNone)
sl@0
   418
			{
sl@0
   419
			TDirectViewFinderInfoPckg pckg(viewFinderInfo);
sl@0
   420
			error = aMessage.Write(TInt(0), pckg);
sl@0
   421
			}
sl@0
   422
		}
sl@0
   423
sl@0
   424
	aMessage.Complete(error); 
sl@0
   425
	}
sl@0
   426
sl@0
   427
/**
sl@0
   428
 * Starts the viewfinder
sl@0
   429
 */
sl@0
   430
void CMMCameraServerSession::StartDirectViewFinder(const RMessage2& aMessage)
sl@0
   431
	{
sl@0
   432
	TInt error = CameraController()->StartDirectViewFinder();
sl@0
   433
	aMessage.Complete(error);
sl@0
   434
	}
sl@0
   435
sl@0
   436
/**
sl@0
   437
 * Stops the viewfinder.
sl@0
   438
 * 
sl@0
   439
 * Returns KErrNone even if stop is called when the viewfinder is not active, as client API must fail silently if error occurs.
sl@0
   440
 */
sl@0
   441
void CMMCameraServerSession::StopDirectViewFinder(const RMessage2& aMessage)
sl@0
   442
	{
sl@0
   443
	if (CameraController()->GetDirectViewFinderState() == CCamera::CCameraV2DirectViewFinder::EViewFinderActive)
sl@0
   444
		{
sl@0
   445
		CameraController()->StopDirectViewFinder();
sl@0
   446
		}
sl@0
   447
sl@0
   448
	aMessage.Complete(KErrNone);
sl@0
   449
	}
sl@0
   450
sl@0
   451
/**
sl@0
   452
 * Pauses the viewfinder.
sl@0
   453
 * 
sl@0
   454
 * Returns KErrNone even if pause is called when the viewfinder is not active, as client API must fail silently if error occurs.
sl@0
   455
 */
sl@0
   456
void CMMCameraServerSession::PauseDirectViewFinder(const RMessage2& aMessage)
sl@0
   457
	{
sl@0
   458
	if (CameraController()->GetDirectViewFinderState() == CCamera::CCameraV2DirectViewFinder::EViewFinderActive)
sl@0
   459
		{
sl@0
   460
		CameraController()->PauseDirectViewFinder();
sl@0
   461
		}
sl@0
   462
sl@0
   463
	aMessage.Complete(KErrNone);
sl@0
   464
	}
sl@0
   465
sl@0
   466
/**
sl@0
   467
 * Resumes the viewfinder if previously paused.
sl@0
   468
 * 
sl@0
   469
 * Returns KErrNone even if resume is called when the viewfinder is not paused, as client API must fail silently if error occurs.
sl@0
   470
 */
sl@0
   471
void CMMCameraServerSession::ResumeDirectViewFinder(const RMessage2& aMessage)
sl@0
   472
	{
sl@0
   473
	if (CameraController()->GetDirectViewFinderState() == CCamera::CCameraV2DirectViewFinder::EViewFinderPause)
sl@0
   474
		{
sl@0
   475
		CameraController()->ResumeDirectViewFinder();
sl@0
   476
		}
sl@0
   477
sl@0
   478
	aMessage.Complete(KErrNone);
sl@0
   479
	}
sl@0
   480
sl@0
   481
/**
sl@0
   482
 * Retrieves the state of the viewfinder
sl@0
   483
 */
sl@0
   484
void CMMCameraServerSession::DirectViewFinderState(const RMessage2& aMessage)
sl@0
   485
	{
sl@0
   486
	TDirectViewFinderState state;
sl@0
   487
sl@0
   488
	state.iState = CameraController()->GetDirectViewFinderState();
sl@0
   489
sl@0
   490
	TDirectViewFinderStatePckg pckg(state);
sl@0
   491
	TInt error = aMessage.Write(TInt(0), pckg);
sl@0
   492
	
sl@0
   493
	aMessage.Complete(error);
sl@0
   494
	}
sl@0
   495
sl@0
   496
/**
sl@0
   497
 * Sets viewfinder mirror mode on or off.
sl@0
   498
 */
sl@0
   499
void CMMCameraServerSession::SetDirectViewFinderMirror(const RMessage2& aMessage)
sl@0
   500
	{
sl@0
   501
	TViewFinderMirror viewFinderMirror;
sl@0
   502
	TViewFinderMirrorPckg pckg(viewFinderMirror);
sl@0
   503
sl@0
   504
	TInt error = aMessage.Read(TInt(0), pckg);
sl@0
   505
	if (error == KErrNone)
sl@0
   506
		{
sl@0
   507
		viewFinderMirror = pckg();
sl@0
   508
		error = CameraController()->SetDirectViewFinderMirror(viewFinderMirror.iMirror);
sl@0
   509
		}
sl@0
   510
sl@0
   511
	aMessage.Complete(error);
sl@0
   512
	}
sl@0
   513
sl@0
   514
/**
sl@0
   515
 * Retrieves whether viewfinder mirror mode is activated or not.
sl@0
   516
 */
sl@0
   517
void CMMCameraServerSession::GetDirectViewFinderMirror(const RMessage2& aMessage)
sl@0
   518
	{
sl@0
   519
	TViewFinderMirror viewFinderMirror;
sl@0
   520
sl@0
   521
	TInt error = CameraController()->GetDirectViewFinderMirror(viewFinderMirror.iMirror);
sl@0
   522
	if (error == KErrNone)
sl@0
   523
		{
sl@0
   524
		TViewFinderMirrorPckg pckg(viewFinderMirror);
sl@0
   525
		error = aMessage.Write(TInt(0), pckg);
sl@0
   526
		}
sl@0
   527
sl@0
   528
	aMessage.Complete(error);	
sl@0
   529
	}
sl@0
   530
sl@0
   531
/**
sl@0
   532
 * Retrieves the viewfinder properties
sl@0
   533
 */
sl@0
   534
void CMMCameraServerSession::DirectViewFinderProperties(const RMessage2& aMessage)
sl@0
   535
	{
sl@0
   536
	TDirectViewFinderInfo info;
sl@0
   537
sl@0
   538
	TInt error = CameraController()->DirectViewFinderProperties(info.iScreenNum, info.iScreenRect, info.iClipRect);
sl@0
   539
	if (error == KErrNone)
sl@0
   540
		{
sl@0
   541
		TDirectViewFinderInfoPckg pckg(info);
sl@0
   542
		error = aMessage.Write(TInt(0), pckg);
sl@0
   543
		}
sl@0
   544
sl@0
   545
	aMessage.Complete(error);
sl@0
   546
	}
sl@0
   547
sl@0
   548
/**
sl@0
   549
 * Sets various camera parameters depending on what the client wishes to set.
sl@0
   550
 */
sl@0
   551
void CMMCameraServerSession::SetCameraParameter(const RMessage2& aMessage)
sl@0
   552
	{
sl@0
   553
	TInt error = KErrNone;
sl@0
   554
sl@0
   555
	switch(aMessage.Int0())
sl@0
   556
		{
sl@0
   557
		case EZoomFactor:
sl@0
   558
			{
sl@0
   559
			TInt zoom = aMessage.Int1();
sl@0
   560
			error = CameraController()->SetZoom(zoom);
sl@0
   561
			aMessage.Complete(error);
sl@0
   562
			break;
sl@0
   563
			}
sl@0
   564
sl@0
   565
		case EDigitalZoomFactor:
sl@0
   566
			{
sl@0
   567
			TInt digitalZoom = aMessage.Int1();
sl@0
   568
			error = CameraController()->SetDigitalZoom(digitalZoom);
sl@0
   569
			aMessage.Complete(error);
sl@0
   570
			break;
sl@0
   571
			}
sl@0
   572
sl@0
   573
		case EContrast:
sl@0
   574
			{
sl@0
   575
			TInt contrast = aMessage.Int1();
sl@0
   576
			error = CameraController()->SetContrast(contrast);
sl@0
   577
			aMessage.Complete(error);
sl@0
   578
			break;
sl@0
   579
			}
sl@0
   580
sl@0
   581
		case EBrightness:
sl@0
   582
			{
sl@0
   583
			TInt brightness = aMessage.Int1();
sl@0
   584
			error = CameraController()->SetBrightness(brightness);
sl@0
   585
			aMessage.Complete(error);
sl@0
   586
			break;
sl@0
   587
			}
sl@0
   588
sl@0
   589
		case EFlash:
sl@0
   590
			{
sl@0
   591
			TCameraFlash flash;
sl@0
   592
			TCameraFlashPckg pckg(flash);
sl@0
   593
sl@0
   594
			error = aMessage.Read(TInt(1), pckg);
sl@0
   595
			if (error == KErrNone)
sl@0
   596
				{
sl@0
   597
				flash = pckg();
sl@0
   598
				error = CameraController()->SetFlash(flash.iFlash);
sl@0
   599
				}
sl@0
   600
			aMessage.Complete(error);
sl@0
   601
			break;
sl@0
   602
			}
sl@0
   603
sl@0
   604
		case EExposure:
sl@0
   605
			{
sl@0
   606
			TCameraExposure exposure;
sl@0
   607
			TCameraExposurePckg pckg(exposure);
sl@0
   608
sl@0
   609
			error = aMessage.Read(TInt(1), pckg);
sl@0
   610
			if (error == KErrNone)
sl@0
   611
				{
sl@0
   612
				exposure = pckg();
sl@0
   613
				error = CameraController()->SetExposure(exposure.iExposure);
sl@0
   614
				}
sl@0
   615
			aMessage.Complete(error);
sl@0
   616
			break;
sl@0
   617
			}
sl@0
   618
sl@0
   619
		case EWhiteBalance:
sl@0
   620
			{
sl@0
   621
			TCameraWhiteBalance whiteBalance;
sl@0
   622
			TCameraWhiteBalancePckg pckg(whiteBalance);
sl@0
   623
sl@0
   624
			error = aMessage.Read(TInt(1), pckg);
sl@0
   625
			if (error == KErrNone)
sl@0
   626
				{
sl@0
   627
				whiteBalance = pckg();
sl@0
   628
				error = CameraController()->SetWhiteBalance(whiteBalance.iWhiteBalance);
sl@0
   629
				}
sl@0
   630
			aMessage.Complete(error);
sl@0
   631
			break;
sl@0
   632
			}
sl@0
   633
sl@0
   634
		default:
sl@0
   635
			{
sl@0
   636
			Server()->PanicClient(aMessage, EPanicNotSupported);
sl@0
   637
			break;
sl@0
   638
			}
sl@0
   639
		}
sl@0
   640
	}
sl@0
   641
sl@0
   642
/**
sl@0
   643
 * Gets various camera parameters depending on what information the client wishes to retrieve.
sl@0
   644
 */
sl@0
   645
void CMMCameraServerSession::GetCameraParameter(const RMessage2& aMessage)
sl@0
   646
	{
sl@0
   647
	TInt error = KErrNone;
sl@0
   648
sl@0
   649
	switch(aMessage.Int0())
sl@0
   650
		{
sl@0
   651
		case EZoomFactor:
sl@0
   652
			{
sl@0
   653
			TCameraZoom zoom;
sl@0
   654
			error = CameraController()->GetZoom(zoom.iZoom);
sl@0
   655
			if (error == KErrNone)
sl@0
   656
				{
sl@0
   657
				TCameraZoomPckg pckg(zoom);
sl@0
   658
				error = aMessage.Write(TInt(1), pckg);
sl@0
   659
				}
sl@0
   660
			break;
sl@0
   661
			}
sl@0
   662
sl@0
   663
		case EDigitalZoomFactor:
sl@0
   664
			{
sl@0
   665
			TCameraDigitalZoom digitalZoom;
sl@0
   666
			error = CameraController()->GetDigitalZoom(digitalZoom.iDigitalZoom);
sl@0
   667
			if (error == KErrNone)
sl@0
   668
				{
sl@0
   669
				TCameraDigitalZoomPckg pckg(digitalZoom);
sl@0
   670
				error = aMessage.Write(TInt(1), pckg);
sl@0
   671
				}
sl@0
   672
			break;
sl@0
   673
			}
sl@0
   674
sl@0
   675
		case EContrast:
sl@0
   676
			{
sl@0
   677
			TCameraContrast contrast;
sl@0
   678
			error = CameraController()->GetContrast(contrast.iContrast);
sl@0
   679
			if (error == KErrNone)
sl@0
   680
				{
sl@0
   681
				TCameraContrastPckg pckg(contrast);
sl@0
   682
				error = aMessage.Write(TInt(1), pckg);
sl@0
   683
				}
sl@0
   684
			break;
sl@0
   685
			}
sl@0
   686
sl@0
   687
		case EBrightness:
sl@0
   688
			{
sl@0
   689
			TCameraBrightness brightness;
sl@0
   690
			error = CameraController()->GetBrightness(brightness.iBrightness);
sl@0
   691
			if (error == KErrNone)
sl@0
   692
				{
sl@0
   693
				TCameraBrightnessPckg pckg(brightness);
sl@0
   694
				error = aMessage.Write(TInt(1), pckg);
sl@0
   695
				}
sl@0
   696
			break;
sl@0
   697
			}
sl@0
   698
sl@0
   699
		case EFlash:
sl@0
   700
			{
sl@0
   701
			TCameraFlash flash;
sl@0
   702
			error = CameraController()->GetFlash(flash.iFlash);
sl@0
   703
			if (error == KErrNone)
sl@0
   704
				{
sl@0
   705
				TCameraFlashPckg pckg(flash);
sl@0
   706
				error = aMessage.Write(TInt(1), pckg);		
sl@0
   707
				}
sl@0
   708
			break;
sl@0
   709
			}
sl@0
   710
sl@0
   711
		case EExposure:
sl@0
   712
			{
sl@0
   713
			TCameraExposure exposure;
sl@0
   714
			error = CameraController()->GetExposure(exposure.iExposure);
sl@0
   715
			if (error == KErrNone)
sl@0
   716
				{
sl@0
   717
				TCameraExposurePckg pckg(exposure);
sl@0
   718
				error = aMessage.Write(TInt(1), pckg);
sl@0
   719
				}
sl@0
   720
			break;
sl@0
   721
			}
sl@0
   722
sl@0
   723
		case EWhiteBalance:
sl@0
   724
			{
sl@0
   725
			TCameraWhiteBalance whiteBalance;
sl@0
   726
			error = CameraController()->GetWhiteBalance(whiteBalance.iWhiteBalance);
sl@0
   727
			if (error == KErrNone)
sl@0
   728
				{
sl@0
   729
				TCameraWhiteBalancePckg pckg(whiteBalance);
sl@0
   730
				error = aMessage.Write(TInt(1), pckg);
sl@0
   731
				}
sl@0
   732
			break;
sl@0
   733
			}
sl@0
   734
sl@0
   735
		default:
sl@0
   736
			{
sl@0
   737
			Server()->PanicClient(aMessage, EPanicNotSupported);
sl@0
   738
			break;
sl@0
   739
			}
sl@0
   740
		}
sl@0
   741
	
sl@0
   742
	aMessage.Complete(error);
sl@0
   743
	}
sl@0
   744
sl@0
   745
/**
sl@0
   746
 * Retrives the camera handle
sl@0
   747
 */
sl@0
   748
void CMMCameraServerSession::CameraHandle(const RMessage2& aMessage)
sl@0
   749
	{
sl@0
   750
	TCameraHandle cameraHandle;
sl@0
   751
sl@0
   752
	cameraHandle.iHandle = CameraController()->CameraHandle();
sl@0
   753
	TCameraHandlePckg pckg(cameraHandle);
sl@0
   754
	
sl@0
   755
	aMessage.Write(TInt(0), pckg);
sl@0
   756
	aMessage.Complete(KErrNone);
sl@0
   757
	}
sl@0
   758
sl@0
   759
void CMMCameraServerSession::SetHandle (TInt aHandle)
sl@0
   760
	{
sl@0
   761
	iHandle = aHandle;
sl@0
   762
	}
sl@0
   763
sl@0
   764
void CMMCameraServerSession::SetPriority (TInt aPriority)
sl@0
   765
	{
sl@0
   766
	iPriority = aPriority;
sl@0
   767
	}
sl@0
   768
sl@0
   769
void CMMCameraServerSession::SetReserved (TBool aReserved)
sl@0
   770
	{
sl@0
   771
	iReserved = aReserved;
sl@0
   772
	}
sl@0
   773
sl@0
   774
CMMCameraServer* CMMCameraServerSession::Server()
sl@0
   775
	{
sl@0
   776
	return iCameraServer;
sl@0
   777
	}
sl@0
   778
sl@0
   779
CMMCameraServerController* CMMCameraServerSession::CameraController()
sl@0
   780
	{
sl@0
   781
	return iCameraController;
sl@0
   782
	}