os/mm/mmplugins/cameraplugins/source/mmcameraclientplugin/mmcameraserver/src/mmcameraserversession.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/mmplugins/cameraplugins/source/mmcameraclientplugin/mmcameraserver/src/mmcameraserversession.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,782 @@
1.4 +// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// mmcamerasession.cpp
1.18 +//
1.19 +//
1.20 +
1.21 +/**
1.22 + @file
1.23 + @internalComponent
1.24 +*/
1.25 +
1.26 +#include "mmcameraserversession.h"
1.27 +#include "mmcameraservercontroller.h"
1.28 +
1.29 +
1.30 +CMMCameraServerSession::CMMCameraServerSession()
1.31 + :iCameraIndex(0),
1.32 + iHandle(KECamHandleNotKnown),
1.33 + iPriority(KECamNoPriority),
1.34 + iMMCapability(ETrue),
1.35 + iCollaborativeClient(EFalse),
1.36 + iReserved(EFalse),
1.37 + iPoweredUp(EFalse)
1.38 + {
1.39 + }
1.40 +
1.41 +void CMMCameraServerSession::CreateL()
1.42 + {
1.43 + iCameraServer = static_cast<CMMCameraServer*>(const_cast<CServer2*>(CSession2::Server()));
1.44 + // Get server policymanager
1.45 + iPolicyManager = Server()->PolicyManager();
1.46 +
1.47 + //load camera control etc in OpenCamera...
1.48 + Server()->AddSession();
1.49 + }
1.50 +
1.51 +CMMCameraServerSession::~CMMCameraServerSession()
1.52 + {
1.53 +// CameraController()->Reset();
1.54 + Server()->DropSession();
1.55 +
1.56 + //deque the session queued in controller
1.57 + iCamSessionLink.Deque(); //safe to deque if it does not exists in the queue.
1.58 + iCamSessionLink.iNext = NULL;
1.59 + }
1.60 +
1.61 +void CMMCameraServerSession::Disconnect(const RMessage2 &aMessage)
1.62 + {
1.63 + if(!iOverthrowMessage.IsNull())
1.64 + {
1.65 + iOverthrowMessage.Complete(KErrCancel);
1.66 + }
1.67 + CSession2::Disconnect(aMessage);
1.68 + }
1.69 +
1.70 +void CMMCameraServerSession::ServiceL(const RMessage2& aMessage)
1.71 + {
1.72 +
1.73 + // Do policy manager checks
1.74 + iPolicyManager->ServiceHandlerL(aMessage);
1.75 +
1.76 + switch (aMessage.Function())
1.77 + {
1.78 + case ECamQueryCamerasAvailable:
1.79 + {
1.80 + CamerasAvailable(aMessage);
1.81 + break;
1.82 + }
1.83 +
1.84 + case ECamOpenCamera:
1.85 + {
1.86 + OpenCamera(aMessage);
1.87 + break;
1.88 + }
1.89 +
1.90 + case ECamCameraAccessControl:
1.91 + {
1.92 + switch(aMessage.Int0())
1.93 + {
1.94 + case ECameraRelease:
1.95 + {
1.96 + Release(aMessage);
1.97 + break;
1.98 + }
1.99 +
1.100 + case ECameraReservedNotification:
1.101 + {
1.102 + Reserve(aMessage);
1.103 + break;
1.104 + }
1.105 +
1.106 + case ECameraCancelReservedNotification:
1.107 + {
1.108 + CancelReserve(aMessage);
1.109 + break;
1.110 + }
1.111 +
1.112 + case ECameraOverthrowNotification:
1.113 + {
1.114 + if(iOverthrowMessage.IsNull())
1.115 + {
1.116 + iOverthrowMessage = aMessage;
1.117 + }
1.118 + else
1.119 + {
1.120 + aMessage.Complete(KErrServerBusy);
1.121 + }
1.122 + break;
1.123 + }
1.124 +
1.125 + case ECameraCancelOverthrowNotification:
1.126 + {
1.127 + if(!iOverthrowMessage.IsNull())
1.128 + {
1.129 + iOverthrowMessage.Complete(KErrCancel);
1.130 + }
1.131 + CameraController()->Reset(); //Stops VF, VC. Cancels ImageCapture if issued using this session.
1.132 + aMessage.Complete(KErrNone);
1.133 + break;
1.134 + }
1.135 +
1.136 + default:
1.137 + aMessage.Complete(KErrArgument);
1.138 + }
1.139 + break;
1.140 + }
1.141 + case ECamPowerCamera:
1.142 + {
1.143 + switch(aMessage.Int0())
1.144 + {
1.145 + case ECameraPowerOnNotification:
1.146 + {
1.147 + PowerOn(aMessage);
1.148 + break;
1.149 + }
1.150 + case ECameraPowerOff:
1.151 + {
1.152 + PowerOff();
1.153 + aMessage.Complete(KErrNone);
1.154 + break;
1.155 + }
1.156 + case ECameraCancelPowerOnNotification:
1.157 + {
1.158 + CancelPowerOn();
1.159 + aMessage.Complete(KErrNone);
1.160 + break;
1.161 + }
1.162 + }
1.163 + break;
1.164 + }
1.165 +
1.166 + case ECamPrepareDirectViewFinder:
1.167 + {
1.168 + PrepareDirectViewFinder(aMessage);
1.169 + break;
1.170 + }
1.171 +
1.172 + case ECamStartDirectViewFinder:
1.173 + {
1.174 + StartDirectViewFinder(aMessage);
1.175 + break;
1.176 + }
1.177 +
1.178 + case ECamStopDirectViewFinder:
1.179 + {
1.180 + StopDirectViewFinder(aMessage);
1.181 + break;
1.182 + }
1.183 +
1.184 + case ECamPauseDirectViewFinder:
1.185 + {
1.186 + PauseDirectViewFinder(aMessage);
1.187 + break;
1.188 + }
1.189 +
1.190 + case ECamResumeDirectViewFinder:
1.191 + {
1.192 + ResumeDirectViewFinder(aMessage);
1.193 + break;
1.194 + }
1.195 +
1.196 + case ECamDirectViewFinderState:
1.197 + {
1.198 + DirectViewFinderState(aMessage);
1.199 + break;
1.200 + }
1.201 +
1.202 + case ECamSetDirectViewFinderMirror:
1.203 + {
1.204 + SetDirectViewFinderMirror(aMessage);
1.205 + break;
1.206 + }
1.207 +
1.208 + case ECamGetDirectViewFinderMirror:
1.209 + {
1.210 + GetDirectViewFinderMirror(aMessage);
1.211 + break;
1.212 + }
1.213 +
1.214 + case ECamDirectViewFinderProperties:
1.215 + {
1.216 + DirectViewFinderProperties(aMessage);
1.217 + break;
1.218 + }
1.219 + case ECamSetParameter:
1.220 + {
1.221 + SetCameraParameter(aMessage);
1.222 + break;
1.223 + }
1.224 +
1.225 + case ECamGetParameter:
1.226 + {
1.227 + GetCameraParameter(aMessage);
1.228 + break;
1.229 + }
1.230 +
1.231 + case ECamCameraHandle:
1.232 + {
1.233 + CameraHandle(aMessage);
1.234 + break;
1.235 + }
1.236 +
1.237 + default:
1.238 + Server()->PanicClient(aMessage, EPanicNotSupported);
1.239 + break;
1.240 + }
1.241 + }
1.242 +
1.243 +/**
1.244 + * Queries controller to find out how many cameras are available to clients.
1.245 + */
1.246 +void CMMCameraServerSession::CamerasAvailable(const RMessage2& aMessage)
1.247 + {
1.248 + TCamerasAvailable info;
1.249 +
1.250 + CMMCameraServerControllerQuery* query = NULL;
1.251 + TRAPD(error, Server()->GetCameraControllerQueryL(query));
1.252 + if (error == KErrNone)
1.253 + {
1.254 + info.iCameraCount = query->GetCamerasAvailable();
1.255 + delete query;
1.256 +
1.257 + TCamerasAvailablePckg pckg(info);
1.258 + error = aMessage.Write(TInt(0), pckg);
1.259 + }
1.260 +
1.261 + aMessage.Complete(error);
1.262 + }
1.263 +
1.264 +/**
1.265 + * Stores client information and retrieves camera controller for required camera index.
1.266 + *
1.267 + * Called when client connects to the server for the first time.
1.268 + */
1.269 +void CMMCameraServerSession::OpenCamera(const RMessage2& aMessage)
1.270 + {
1.271 + TOpenCamera parameters;
1.272 + TOpenCameraPckg parametersBuf(parameters);
1.273 +
1.274 + TInt error = aMessage.Read(TInt(0),parametersBuf);
1.275 + if (error != KErrNone)
1.276 + {
1.277 + aMessage.Complete(error);
1.278 + }
1.279 +
1.280 + parameters = parametersBuf();
1.281 +
1.282 + iCameraIndex = parameters.iCameraIndex; // Store the required member variables
1.283 + iPriority = parameters.iPriority;
1.284 + iMMCapability = parameters.iMMCapability;
1.285 + iHandle = parameters.iHandle;
1.286 + iCollaborativeClient = parameters.iCollaborativeClient;
1.287 +
1.288 + TRAP(error, Server()->GetCameraControllerL(iCameraIndex, iCameraController));
1.289 +
1.290 + aMessage.Complete(error);
1.291 + }
1.292 +
1.293 +/**
1.294 + * Reserves the camera.
1.295 + *
1.296 + * Delegates the responsibility to the policy manager
1.297 + */
1.298 +void CMMCameraServerSession::Release(const RMessage2& aMessage)
1.299 + {
1.300 + if(!iReserved)
1.301 + {
1.302 + aMessage.Complete(KErrAlreadyExists);
1.303 + }
1.304 + else
1.305 + {
1.306 + CameraController()->Reset(); //Stops VF, VC. Cancels ImageCapture if issued using this session.
1.307 +
1.308 + iPolicyManager->ReleaseClient(this);
1.309 +
1.310 + iReserved = EFalse;
1.311 + iPoweredUp = EFalse;
1.312 +
1.313 + if(!iOverthrowMessage.IsNull())
1.314 + {
1.315 + iOverthrowMessage.Complete(KErrCancel);
1.316 + }
1.317 +
1.318 + aMessage.Complete(KErrNone);
1.319 + }
1.320 + }
1.321 +
1.322 +void CMMCameraServerSession::CompleteOverthrow ()
1.323 + {
1.324 + if(!iOverthrowMessage.IsNull())
1.325 + {
1.326 + // Complete means sucess
1.327 + iOverthrowMessage.Complete(KErrNone);
1.328 + }
1.329 +
1.330 + iPoweredUp = EFalse;
1.331 + }
1.332 +
1.333 +/**
1.334 + * Releases the camera.
1.335 + *
1.336 + * Delegates the responsibility to the policy manager
1.337 + */
1.338 +void CMMCameraServerSession::Reserve(const RMessage2& aMessage)
1.339 + {
1.340 + if (iReserved)
1.341 + {
1.342 + aMessage.Complete(KErrInUse);
1.343 + return;
1.344 + }
1.345 +
1.346 + iReserved = iPolicyManager->ReserveClient(this);
1.347 +
1.348 + if(!iReserved)
1.349 + {
1.350 + aMessage.Complete(KErrAccessDenied);
1.351 + }
1.352 + else
1.353 + {
1.354 + aMessage.Complete(KErrNone);
1.355 + }
1.356 + }
1.357 +
1.358 +/**
1.359 + * Cancels on ongoing Reserve() operation.
1.360 + */
1.361 +void CMMCameraServerSession::CancelReserve(const RMessage2& aMessage)
1.362 + {
1.363 + Release(aMessage);
1.364 + }
1.365 +
1.366 +/**
1.367 + * Powers on the device.
1.368 + *
1.369 + * Simply returns with KErrNone or KErrNotReady since device is not powered on until VF is activated.
1.370 + */
1.371 +void CMMCameraServerSession::PowerOn(const RMessage2& aMessage)
1.372 + {
1.373 + if(!iReserved)
1.374 + {
1.375 + aMessage.Complete(KErrNotReady);
1.376 + }
1.377 + else if (iPoweredUp)
1.378 + {
1.379 + aMessage.Complete(KErrInUse);
1.380 + }
1.381 + else
1.382 + {
1.383 + iPoweredUp = ETrue;
1.384 + aMessage.Complete(KErrNone);
1.385 + }
1.386 + }
1.387 +
1.388 +/**
1.389 + * Powers off the device.
1.390 + *
1.391 + * Simply stops any viewfinder activity.
1.392 + */
1.393 +void CMMCameraServerSession::PowerOff()
1.394 + {
1.395 + CameraController()->Reset();
1.396 +
1.397 + iPoweredUp = EFalse;
1.398 + }
1.399 +
1.400 +void CMMCameraServerSession::CancelPowerOn()
1.401 + {
1.402 + iPoweredUp = EFalse;
1.403 + }
1.404 +
1.405 +/**
1.406 + * Prepares the view finder.
1.407 + *
1.408 + * First step before viewfinder is started.
1.409 + */
1.410 +void CMMCameraServerSession::PrepareDirectViewFinder(const RMessage2& aMessage)
1.411 + {
1.412 + TDirectViewFinderInfo viewFinderInfo;
1.413 + TDirectViewFinderInfoPckg viewFinderInfoPckg(viewFinderInfo);
1.414 +
1.415 + TInt error = aMessage.Read(TInt(0), viewFinderInfoPckg);
1.416 + if(error == KErrNone)
1.417 + {
1.418 + viewFinderInfo = viewFinderInfoPckg();
1.419 + TRAP(error, CameraController()->PrepareDirectViewFinderL(viewFinderInfo));
1.420 + if(error == KErrNone)
1.421 + {
1.422 + TDirectViewFinderInfoPckg pckg(viewFinderInfo);
1.423 + error = aMessage.Write(TInt(0), pckg);
1.424 + }
1.425 + }
1.426 +
1.427 + aMessage.Complete(error);
1.428 + }
1.429 +
1.430 +/**
1.431 + * Starts the viewfinder
1.432 + */
1.433 +void CMMCameraServerSession::StartDirectViewFinder(const RMessage2& aMessage)
1.434 + {
1.435 + TInt error = CameraController()->StartDirectViewFinder();
1.436 + aMessage.Complete(error);
1.437 + }
1.438 +
1.439 +/**
1.440 + * Stops the viewfinder.
1.441 + *
1.442 + * Returns KErrNone even if stop is called when the viewfinder is not active, as client API must fail silently if error occurs.
1.443 + */
1.444 +void CMMCameraServerSession::StopDirectViewFinder(const RMessage2& aMessage)
1.445 + {
1.446 + if (CameraController()->GetDirectViewFinderState() == CCamera::CCameraV2DirectViewFinder::EViewFinderActive)
1.447 + {
1.448 + CameraController()->StopDirectViewFinder();
1.449 + }
1.450 +
1.451 + aMessage.Complete(KErrNone);
1.452 + }
1.453 +
1.454 +/**
1.455 + * Pauses the viewfinder.
1.456 + *
1.457 + * Returns KErrNone even if pause is called when the viewfinder is not active, as client API must fail silently if error occurs.
1.458 + */
1.459 +void CMMCameraServerSession::PauseDirectViewFinder(const RMessage2& aMessage)
1.460 + {
1.461 + if (CameraController()->GetDirectViewFinderState() == CCamera::CCameraV2DirectViewFinder::EViewFinderActive)
1.462 + {
1.463 + CameraController()->PauseDirectViewFinder();
1.464 + }
1.465 +
1.466 + aMessage.Complete(KErrNone);
1.467 + }
1.468 +
1.469 +/**
1.470 + * Resumes the viewfinder if previously paused.
1.471 + *
1.472 + * Returns KErrNone even if resume is called when the viewfinder is not paused, as client API must fail silently if error occurs.
1.473 + */
1.474 +void CMMCameraServerSession::ResumeDirectViewFinder(const RMessage2& aMessage)
1.475 + {
1.476 + if (CameraController()->GetDirectViewFinderState() == CCamera::CCameraV2DirectViewFinder::EViewFinderPause)
1.477 + {
1.478 + CameraController()->ResumeDirectViewFinder();
1.479 + }
1.480 +
1.481 + aMessage.Complete(KErrNone);
1.482 + }
1.483 +
1.484 +/**
1.485 + * Retrieves the state of the viewfinder
1.486 + */
1.487 +void CMMCameraServerSession::DirectViewFinderState(const RMessage2& aMessage)
1.488 + {
1.489 + TDirectViewFinderState state;
1.490 +
1.491 + state.iState = CameraController()->GetDirectViewFinderState();
1.492 +
1.493 + TDirectViewFinderStatePckg pckg(state);
1.494 + TInt error = aMessage.Write(TInt(0), pckg);
1.495 +
1.496 + aMessage.Complete(error);
1.497 + }
1.498 +
1.499 +/**
1.500 + * Sets viewfinder mirror mode on or off.
1.501 + */
1.502 +void CMMCameraServerSession::SetDirectViewFinderMirror(const RMessage2& aMessage)
1.503 + {
1.504 + TViewFinderMirror viewFinderMirror;
1.505 + TViewFinderMirrorPckg pckg(viewFinderMirror);
1.506 +
1.507 + TInt error = aMessage.Read(TInt(0), pckg);
1.508 + if (error == KErrNone)
1.509 + {
1.510 + viewFinderMirror = pckg();
1.511 + error = CameraController()->SetDirectViewFinderMirror(viewFinderMirror.iMirror);
1.512 + }
1.513 +
1.514 + aMessage.Complete(error);
1.515 + }
1.516 +
1.517 +/**
1.518 + * Retrieves whether viewfinder mirror mode is activated or not.
1.519 + */
1.520 +void CMMCameraServerSession::GetDirectViewFinderMirror(const RMessage2& aMessage)
1.521 + {
1.522 + TViewFinderMirror viewFinderMirror;
1.523 +
1.524 + TInt error = CameraController()->GetDirectViewFinderMirror(viewFinderMirror.iMirror);
1.525 + if (error == KErrNone)
1.526 + {
1.527 + TViewFinderMirrorPckg pckg(viewFinderMirror);
1.528 + error = aMessage.Write(TInt(0), pckg);
1.529 + }
1.530 +
1.531 + aMessage.Complete(error);
1.532 + }
1.533 +
1.534 +/**
1.535 + * Retrieves the viewfinder properties
1.536 + */
1.537 +void CMMCameraServerSession::DirectViewFinderProperties(const RMessage2& aMessage)
1.538 + {
1.539 + TDirectViewFinderInfo info;
1.540 +
1.541 + TInt error = CameraController()->DirectViewFinderProperties(info.iScreenNum, info.iScreenRect, info.iClipRect);
1.542 + if (error == KErrNone)
1.543 + {
1.544 + TDirectViewFinderInfoPckg pckg(info);
1.545 + error = aMessage.Write(TInt(0), pckg);
1.546 + }
1.547 +
1.548 + aMessage.Complete(error);
1.549 + }
1.550 +
1.551 +/**
1.552 + * Sets various camera parameters depending on what the client wishes to set.
1.553 + */
1.554 +void CMMCameraServerSession::SetCameraParameter(const RMessage2& aMessage)
1.555 + {
1.556 + TInt error = KErrNone;
1.557 +
1.558 + switch(aMessage.Int0())
1.559 + {
1.560 + case EZoomFactor:
1.561 + {
1.562 + TInt zoom = aMessage.Int1();
1.563 + error = CameraController()->SetZoom(zoom);
1.564 + aMessage.Complete(error);
1.565 + break;
1.566 + }
1.567 +
1.568 + case EDigitalZoomFactor:
1.569 + {
1.570 + TInt digitalZoom = aMessage.Int1();
1.571 + error = CameraController()->SetDigitalZoom(digitalZoom);
1.572 + aMessage.Complete(error);
1.573 + break;
1.574 + }
1.575 +
1.576 + case EContrast:
1.577 + {
1.578 + TInt contrast = aMessage.Int1();
1.579 + error = CameraController()->SetContrast(contrast);
1.580 + aMessage.Complete(error);
1.581 + break;
1.582 + }
1.583 +
1.584 + case EBrightness:
1.585 + {
1.586 + TInt brightness = aMessage.Int1();
1.587 + error = CameraController()->SetBrightness(brightness);
1.588 + aMessage.Complete(error);
1.589 + break;
1.590 + }
1.591 +
1.592 + case EFlash:
1.593 + {
1.594 + TCameraFlash flash;
1.595 + TCameraFlashPckg pckg(flash);
1.596 +
1.597 + error = aMessage.Read(TInt(1), pckg);
1.598 + if (error == KErrNone)
1.599 + {
1.600 + flash = pckg();
1.601 + error = CameraController()->SetFlash(flash.iFlash);
1.602 + }
1.603 + aMessage.Complete(error);
1.604 + break;
1.605 + }
1.606 +
1.607 + case EExposure:
1.608 + {
1.609 + TCameraExposure exposure;
1.610 + TCameraExposurePckg pckg(exposure);
1.611 +
1.612 + error = aMessage.Read(TInt(1), pckg);
1.613 + if (error == KErrNone)
1.614 + {
1.615 + exposure = pckg();
1.616 + error = CameraController()->SetExposure(exposure.iExposure);
1.617 + }
1.618 + aMessage.Complete(error);
1.619 + break;
1.620 + }
1.621 +
1.622 + case EWhiteBalance:
1.623 + {
1.624 + TCameraWhiteBalance whiteBalance;
1.625 + TCameraWhiteBalancePckg pckg(whiteBalance);
1.626 +
1.627 + error = aMessage.Read(TInt(1), pckg);
1.628 + if (error == KErrNone)
1.629 + {
1.630 + whiteBalance = pckg();
1.631 + error = CameraController()->SetWhiteBalance(whiteBalance.iWhiteBalance);
1.632 + }
1.633 + aMessage.Complete(error);
1.634 + break;
1.635 + }
1.636 +
1.637 + default:
1.638 + {
1.639 + Server()->PanicClient(aMessage, EPanicNotSupported);
1.640 + break;
1.641 + }
1.642 + }
1.643 + }
1.644 +
1.645 +/**
1.646 + * Gets various camera parameters depending on what information the client wishes to retrieve.
1.647 + */
1.648 +void CMMCameraServerSession::GetCameraParameter(const RMessage2& aMessage)
1.649 + {
1.650 + TInt error = KErrNone;
1.651 +
1.652 + switch(aMessage.Int0())
1.653 + {
1.654 + case EZoomFactor:
1.655 + {
1.656 + TCameraZoom zoom;
1.657 + error = CameraController()->GetZoom(zoom.iZoom);
1.658 + if (error == KErrNone)
1.659 + {
1.660 + TCameraZoomPckg pckg(zoom);
1.661 + error = aMessage.Write(TInt(1), pckg);
1.662 + }
1.663 + break;
1.664 + }
1.665 +
1.666 + case EDigitalZoomFactor:
1.667 + {
1.668 + TCameraDigitalZoom digitalZoom;
1.669 + error = CameraController()->GetDigitalZoom(digitalZoom.iDigitalZoom);
1.670 + if (error == KErrNone)
1.671 + {
1.672 + TCameraDigitalZoomPckg pckg(digitalZoom);
1.673 + error = aMessage.Write(TInt(1), pckg);
1.674 + }
1.675 + break;
1.676 + }
1.677 +
1.678 + case EContrast:
1.679 + {
1.680 + TCameraContrast contrast;
1.681 + error = CameraController()->GetContrast(contrast.iContrast);
1.682 + if (error == KErrNone)
1.683 + {
1.684 + TCameraContrastPckg pckg(contrast);
1.685 + error = aMessage.Write(TInt(1), pckg);
1.686 + }
1.687 + break;
1.688 + }
1.689 +
1.690 + case EBrightness:
1.691 + {
1.692 + TCameraBrightness brightness;
1.693 + error = CameraController()->GetBrightness(brightness.iBrightness);
1.694 + if (error == KErrNone)
1.695 + {
1.696 + TCameraBrightnessPckg pckg(brightness);
1.697 + error = aMessage.Write(TInt(1), pckg);
1.698 + }
1.699 + break;
1.700 + }
1.701 +
1.702 + case EFlash:
1.703 + {
1.704 + TCameraFlash flash;
1.705 + error = CameraController()->GetFlash(flash.iFlash);
1.706 + if (error == KErrNone)
1.707 + {
1.708 + TCameraFlashPckg pckg(flash);
1.709 + error = aMessage.Write(TInt(1), pckg);
1.710 + }
1.711 + break;
1.712 + }
1.713 +
1.714 + case EExposure:
1.715 + {
1.716 + TCameraExposure exposure;
1.717 + error = CameraController()->GetExposure(exposure.iExposure);
1.718 + if (error == KErrNone)
1.719 + {
1.720 + TCameraExposurePckg pckg(exposure);
1.721 + error = aMessage.Write(TInt(1), pckg);
1.722 + }
1.723 + break;
1.724 + }
1.725 +
1.726 + case EWhiteBalance:
1.727 + {
1.728 + TCameraWhiteBalance whiteBalance;
1.729 + error = CameraController()->GetWhiteBalance(whiteBalance.iWhiteBalance);
1.730 + if (error == KErrNone)
1.731 + {
1.732 + TCameraWhiteBalancePckg pckg(whiteBalance);
1.733 + error = aMessage.Write(TInt(1), pckg);
1.734 + }
1.735 + break;
1.736 + }
1.737 +
1.738 + default:
1.739 + {
1.740 + Server()->PanicClient(aMessage, EPanicNotSupported);
1.741 + break;
1.742 + }
1.743 + }
1.744 +
1.745 + aMessage.Complete(error);
1.746 + }
1.747 +
1.748 +/**
1.749 + * Retrives the camera handle
1.750 + */
1.751 +void CMMCameraServerSession::CameraHandle(const RMessage2& aMessage)
1.752 + {
1.753 + TCameraHandle cameraHandle;
1.754 +
1.755 + cameraHandle.iHandle = CameraController()->CameraHandle();
1.756 + TCameraHandlePckg pckg(cameraHandle);
1.757 +
1.758 + aMessage.Write(TInt(0), pckg);
1.759 + aMessage.Complete(KErrNone);
1.760 + }
1.761 +
1.762 +void CMMCameraServerSession::SetHandle (TInt aHandle)
1.763 + {
1.764 + iHandle = aHandle;
1.765 + }
1.766 +
1.767 +void CMMCameraServerSession::SetPriority (TInt aPriority)
1.768 + {
1.769 + iPriority = aPriority;
1.770 + }
1.771 +
1.772 +void CMMCameraServerSession::SetReserved (TBool aReserved)
1.773 + {
1.774 + iReserved = aReserved;
1.775 + }
1.776 +
1.777 +CMMCameraServer* CMMCameraServerSession::Server()
1.778 + {
1.779 + return iCameraServer;
1.780 + }
1.781 +
1.782 +CMMCameraServerController* CMMCameraServerSession::CameraController()
1.783 + {
1.784 + return iCameraController;
1.785 + }