1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/kernelhwsrv/kernel/eka/include/d32camerasc.inl Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,222 @@
1.4 +// Copyright (c) 2006-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 the License "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 +// e32\include\d32camerasc.inl
1.18 +//
1.19 +//
1.20 +
1.21 +inline TVersion RDevCameraSc::VersionRequired()
1.22 + {
1.23 + const TInt KCameraMajorVersionNumber=1;
1.24 + const TInt KCameraMinorVersionNumber=0;
1.25 + const TInt KCameraBuildVersionNumber=KE32BuildVersionNumber;
1.26 + return TVersion(KCameraMajorVersionNumber,KCameraMinorVersionNumber,KCameraBuildVersionNumber);
1.27 + }
1.28 +
1.29 +#ifndef __KERNEL_MODE__
1.30 +
1.31 +
1.32 +inline RDevCameraSc::RDevCameraSc()
1.33 +: RBusLogicalChannel()
1.34 + {
1.35 + iCameraCaps = NULL;
1.36 + iCapsSize = 0;
1.37 + }
1.38 +
1.39 +inline TInt RDevCameraSc::Open(TInt aUnit)
1.40 + {
1.41 + TInt r=DoCreate(KDevCameraScName,VersionRequired(),aUnit,NULL,NULL,EOwnerThread);
1.42 + if (KErrNone == r)
1.43 + {
1.44 + // Obtain the Capability structure size then allocate memory for it on client side
1.45 + r=iCapsSize=DoControl(EControlCapsSize);
1.46 + if (KErrNone > r)
1.47 + {
1.48 + iCapsSize = 0;
1.49 + return r;
1.50 + }
1.51 +
1.52 + TAny* capsBufPtr = User::Alloc(iCapsSize);
1.53 + if(NULL == capsBufPtr)
1.54 + {
1.55 + Close();
1.56 + return KErrNoMemory;
1.57 + }
1.58 +
1.59 + TPtr8 capsPtr((TUint8*)capsBufPtr, iCapsSize, iCapsSize);
1.60 + // Fill the Capability structure
1.61 + r = DoControl(EControlCaps,(TAny*)&capsPtr);
1.62 + if (KErrNone > r)
1.63 + {
1.64 + iCapsSize = 0;
1.65 + return r;
1.66 + }
1.67 + iCameraCaps = (TCameraCapsV02*) capsPtr.Ptr();
1.68 + }
1.69 +
1.70 + return r;
1.71 + }
1.72 +
1.73 +inline void RDevCameraSc::Close()
1.74 + {
1.75 + if (iCameraCaps != NULL)
1.76 + {
1.77 + User::Free(iCameraCaps);
1.78 + iCameraCaps = NULL;
1.79 + }
1.80 + iCapsSize = 0;
1.81 + RBusLogicalChannel::Close();
1.82 + }
1.83 +
1.84 +inline TInt RDevCameraSc::Caps(TDes8& aCapsBuf)
1.85 + {
1.86 + if (aCapsBuf.MaxLength() < iCapsSize)
1.87 + {
1.88 + return KErrArgument;
1.89 + }
1.90 +
1.91 + TPtrC8 ptr ((TUint8*)iCameraCaps, iCapsSize);
1.92 + aCapsBuf = ptr;
1.93 + return KErrNone;
1.94 + }
1.95 +
1.96 +inline TPtrC8 RDevCameraSc::Caps()
1.97 + {
1.98 + TPtrC8 ptr((TUint8*)iCameraCaps, iCapsSize);
1.99 + return ptr;
1.100 + }
1.101 +
1.102 +inline TInt RDevCameraSc::SetBufConfigChunkCreate(TDevCamCaptureMode aCaptureMode, TInt aNumBuffers, RChunk& aChunk)
1.103 + {return(aChunk.SetReturnedHandle(DoControl(EControlSetBufConfigChunkCreate,(TAny*)aCaptureMode,(TAny*)aNumBuffers)));}
1.104 +
1.105 +inline TInt RDevCameraSc::SetBufConfigChunkOpen(TDevCamCaptureMode aCaptureMode, const TDesC8& aBufferConfigBuf, RChunk& aChunk)
1.106 + {
1.107 + SSetBufConfigChunkOpenInfo info = {&aBufferConfigBuf, aChunk.Handle()};
1.108 + return(DoControl(EControlSetBufConfigChunkOpen,(TAny*)aCaptureMode,&info));
1.109 + }
1.110 +
1.111 +inline TInt RDevCameraSc::ChunkClose(TDevCamCaptureMode aCaptureMode)
1.112 + {return(DoControl(EControlChunkClose,(TAny*)aCaptureMode));}
1.113 +
1.114 +inline TInt RDevCameraSc::SetCamConfig(TDevCamCaptureMode aCaptureMode,const TDesC8& aConfigBuf)
1.115 + {return(DoControl(EControlSetCamConfig,(TAny*)aCaptureMode,(TAny*)&aConfigBuf));}
1.116 +
1.117 +inline void RDevCameraSc::GetCamConfig(TDevCamCaptureMode aCaptureMode, TDes8& aConfigBuf)
1.118 + {DoControl(EControlGetCamConfig,(TAny*)aCaptureMode,(TAny*)&aConfigBuf);}
1.119 +
1.120 +inline void RDevCameraSc::GetBufferConfig(TDevCamCaptureMode aCaptureMode, TDes8& aConfigBuf)
1.121 + {DoControl(EControlGetBufferConfig,(TAny*)aCaptureMode,(TAny*)&aConfigBuf);}
1.122 +
1.123 +inline TInt RDevCameraSc::SetCaptureMode(TDevCamCaptureMode aCaptureMode)
1.124 + {return(DoControl(EControlSetCaptureMode,(TAny*)aCaptureMode));}
1.125 +
1.126 +inline TInt RDevCameraSc::Start()
1.127 + {return(DoControl(EControlStart));}
1.128 +
1.129 +inline TInt RDevCameraSc::Stop()
1.130 + {return(DoControl(EControlStop));}
1.131 +
1.132 +inline void RDevCameraSc::NotifyNewImage(TRequestStatus& aStatus)
1.133 + {DoRequest(ERequestNotifyNewImage,aStatus);}
1.134 +
1.135 +inline void RDevCameraSc::NotifyNewImageCancel()
1.136 + {DoCancel(1<<ERequestNotifyNewImage);}
1.137 +
1.138 +inline void RDevCameraSc::NotifyNewImageCancel(const TRequestStatus& aStatus)
1.139 + {DoControl(EControlNotifyNewImageSpecificCancel,(TAny*)&aStatus);}
1.140 +
1.141 +inline TInt RDevCameraSc::ReleaseBuffer(TInt aBufferId)
1.142 + {return(DoControl(EControlReleaseBuffer,(TAny*)aBufferId));}
1.143 +
1.144 +inline TInt RDevCameraSc::BufferIdToOffset(TDevCamCaptureMode aCaptureMode, TInt aId, TInt& aOffset)
1.145 + {
1.146 + // search criteria
1.147 + TDevCamBufferModeAndIdBuf databuf;
1.148 + TDevCamBufferModeAndId &data = databuf();
1.149 + data.iCaptureMode = aCaptureMode;
1.150 + data.iId = aId;
1.151 +
1.152 + return (DoControl(EControlBufferIdToOffset,(TAny*)&databuf,(TAny*)&aOffset));
1.153 + }
1.154 +
1.155 +inline TInt RDevCameraSc::CapsSize()
1.156 + {return(iCapsSize);}
1.157 +
1.158 +inline TInt RDevCameraSc::FrameSizeCaps(TDevCamCaptureMode aCaptureMode, TUidPixelFormat aUidPixelFormat, TDes8& aFrameSizeCapsBuf)
1.159 + {
1.160 + SFrameSizeCapsInfo info = {aUidPixelFormat, aCaptureMode};
1.161 + return(DoControl(EControlFrameSizeCaps, (TAny*)&aFrameSizeCapsBuf, &info));
1.162 + }
1.163 +
1.164 +//
1.165 +//
1.166 +//
1.167 +inline TInt RDevCameraSc::CheckAttributeSupported(TDevCamDynamicAttribute aAttribute)
1.168 + {
1.169 + TUint mask = 0;
1.170 +
1.171 + switch (aAttribute)
1.172 + {
1.173 + case ECamAttributeBrightness:
1.174 + mask = KCamMiscBrightness;
1.175 + break;
1.176 +
1.177 + case ECamAttributeContrast:
1.178 + mask = KCamMiscContrast;
1.179 + break;
1.180 +
1.181 + case ECamAttributeColorEffect:
1.182 + mask = KCamMiscColorEffect;
1.183 + break;
1.184 +
1.185 + default:
1.186 + return KErrNotSupported;
1.187 + }
1.188 +
1.189 + // Check that the attribute is supported by the hardware.
1.190 + return (iCameraCaps->iCapsMisc & mask ? KErrNone : KErrNotSupported);
1.191 + }
1.192 +
1.193 +//
1.194 +//
1.195 +//
1.196 +inline TInt RDevCameraSc::SetDynamicAttribute(TDevCamDynamicAttribute aAttribute, TUint aValue)
1.197 + {
1.198 + TInt err = CheckAttributeSupported(aAttribute);
1.199 + if (err == KErrNone)
1.200 + {
1.201 + err = KErrArgument;
1.202 + TDynamicRange &range = iCameraCaps->iDynamicRange[aAttribute];
1.203 + if ((aValue >= range.iMin) && (aValue <= range.iMax))
1.204 + {
1.205 + err = DoControl(EControlSetDynamicAttribute, (TAny*)aAttribute, (TAny*)aValue);
1.206 + }
1.207 + }
1.208 +
1.209 + return err;
1.210 + }
1.211 +
1.212 +//
1.213 +//
1.214 +//
1.215 +inline TInt RDevCameraSc::GetDynamicAttribute(TDevCamDynamicAttribute aAttribute, TUint& aValue)
1.216 + {
1.217 + TInt err = CheckAttributeSupported(aAttribute);
1.218 + if (err == KErrNone)
1.219 + {
1.220 + err = DoControl(EControlGetDynamicAttribute, (TAny*)aAttribute, (TAny*)&aValue);
1.221 + }
1.222 +
1.223 + return err;
1.224 + }
1.225 +#endif // __KERNEL_MODE__