baseport/syborg/webcamera/webcamera_pdd.cpp
changeset 52 0dfaca43d90e
child 79 80387fbc46c5
equal deleted inserted replaced
51:457d682728ee 52:0dfaca43d90e
       
     1 /*
       
     2 * Copyright (c) 2010 ISB.
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * ISB - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: USB driver for test
       
    15 *
       
    16 */
       
    17 
       
    18 #include "webcamera_pdd.h"
       
    19 #include <webcamera_driver.h>
       
    20 
       
    21 #define DP(format...) Kern::Printf(format)
       
    22 
       
    23 //Name for PDD
       
    24 _LIT(KWebcameraPddName,"WebcameraDevice.pdd");
       
    25 
       
    26 // ---------------------------------------------------------------
       
    27 // ---------------------------------------------------------------
       
    28 
       
    29 DWebcameraPddFactory::DWebcameraPddFactory()
       
    30 {
       
    31   DP("DWebcameraPddFactory::DWebcameraPddFactory()");
       
    32   iVersion=TVersion(KCommsMajorVersionNumber,KCommsMinorVersionNumber,KCommsBuildVersionNumber);
       
    33 }
       
    34 
       
    35 TInt DWebcameraPddFactory::Install()
       
    36 {
       
    37   DP("DWebcameraPddFactory::Install");
       
    38   return SetName(&KWebcameraPddName);
       
    39 }
       
    40 
       
    41 void DWebcameraPddFactory::GetCaps(TDes8 &aDes) const
       
    42 {
       
    43   DP("DWebcameraPddFactory::GetCaps start");
       
    44   RWebcameraDevice::TCaps capsBuf;
       
    45   capsBuf.iVersion = iVersion;
       
    46   aDes.FillZ(aDes.MaxLength());
       
    47   TInt size=sizeof(capsBuf);
       
    48   if(size>aDes.MaxLength())
       
    49 	  {
       
    50       size=aDes.MaxLength();
       
    51 	  }
       
    52   aDes.Copy((TUint8*)&capsBuf,size);
       
    53   DP("DWebcameraPddFactory::GetCaps end");
       
    54 }
       
    55 
       
    56 TInt DWebcameraPddFactory::Create(DBase*& aChannel, TInt aUnit, const TDesC8* anInfo, const TVersion& aVer)
       
    57 {
       
    58   DP("DWebcameraPddFactory::Create start");
       
    59   DWebcameraDriver* pD=new DWebcameraDriver;
       
    60   aChannel=pD;
       
    61   TInt r=KErrNoMemory;
       
    62   if (pD)
       
    63 	  {
       
    64 	  r=pD->DoCreate(aUnit,anInfo);
       
    65 	  }
       
    66   DP("DWebcameraPddFactory::Create end");
       
    67   return r;
       
    68 }
       
    69 
       
    70 TInt DWebcameraPddFactory::Validate(TInt aUnit, const TDesC8* /*anInfo*/, const TVersion& aVer)
       
    71 {
       
    72   DP("DWebcameraPddFactory::Validate start");
       
    73   if ((!Kern::QueryVersionSupported(iVersion,aVer)) || 
       
    74 	  (!Kern::QueryVersionSupported(aVer,TVersion(KMinimumLddMajorVersion,KMinimumLddMinorVersion,KMinimumLddBuild))))
       
    75 	  {
       
    76 		return KErrNotSupported;
       
    77 	  }
       
    78   DP("DWebcameraPddFactory::Validate end");
       
    79   return KErrNone;
       
    80 }
       
    81 
       
    82 // ---------------------------------------------------------------
       
    83 // ---------------------------------------------------------------
       
    84 
       
    85 DWebcameraDriver::DWebcameraDriver()
       
    86 {
       
    87 	DP("DWebcameraDriver::DWebcameraDriver start");
       
    88 	DP("DWebcameraDriver::DWebcameraDriver end");
       
    89 }
       
    90 
       
    91 DWebcameraDriver::~DWebcameraDriver()
       
    92 {
       
    93   DP("DWebcameraDriver::~DWebcameraDriver start");
       
    94   Interrupt::Unbind(iIrq);
       
    95   DP("DWebcameraDriver::~DWebcameraDriver end");
       
    96 }
       
    97 
       
    98 TInt DWebcameraDriver::DoCreate(TInt aUnit, const TDesC8* anInfo)
       
    99 {
       
   100   DP("DWebcameraDriver::DoCreate start");
       
   101   iPortAddr=KHwSVPWebcameraDevice;
       
   102   iIrq = EIrqWebamera;
       
   103   Interrupt::Bind(iIrq,Isr,this);
       
   104   DP("DWebcameraDriver::DoCreate end");
       
   105   return KErrNone;
       
   106 }
       
   107 
       
   108 TInt DWebcameraDriver::StartViewerFinder(TUint aBuffer,TInt aSize)
       
   109 {
       
   110   DP("DWebcameraDriver::StartViewerFinder start");
       
   111   iType=0;
       
   112   TUint32 temp=(TUint32)aBuffer;
       
   113   DP("temp=%x",temp);
       
   114   DP("iPortAddr=%x",iPortAddr);
       
   115   WriteReg(iPortAddr,WEBCAMERA_REG_DATA_TYPE, 0x0);
       
   116   WriteReg(iPortAddr,WEBCAMERA_REG_DMA_ADDR,temp);
       
   117   WriteReg(iPortAddr,WEBCAMERA_REG_DMA_SIZE, aSize);
       
   118   WriteReg(iPortAddr,WEBCAMERA_REG_INT_ENABLE, 0x1);
       
   119   Interrupt::Enable(iIrq);
       
   120   
       
   121   DP("DWebcameraDriver::StartViewerFinder END"); 
       
   122   return KErrNone;
       
   123 }
       
   124 
       
   125 TInt DWebcameraDriver::StartCapture(TUint aBuffer,TInt aSize)
       
   126 {
       
   127   DP("DWebcameraDriver::StartCapture start");
       
   128   // Save a pointer to the buffer we need to put the 'recevied' data in
       
   129   iType=1;
       
   130   TUint32 temp=(TUint32)aBuffer;
       
   131   DP("temp=%x",temp);
       
   132   WriteReg(iPortAddr,WEBCAMERA_REG_DATA_TYPE, 0x1);
       
   133   WriteReg(iPortAddr,WEBCAMERA_REG_DMA_ADDR,temp);
       
   134   WriteReg(iPortAddr,WEBCAMERA_REG_DMA_SIZE, aSize);
       
   135   WriteReg(iPortAddr,WEBCAMERA_REG_INT_ENABLE, 0x1);
       
   136   Interrupt::Enable(iIrq);
       
   137   
       
   138   DP("DWebcameraDriver::StartCapture END"); 
       
   139   return KErrNone;
       
   140 }
       
   141 
       
   142 void DWebcameraDriver::Stop(TUSBStopMode aMode)
       
   143 {
       
   144   DP("DWebcameraDriver::Stop start");
       
   145   WriteReg(iPortAddr, WEBCAMERA_REG_INT_ENABLE, 0x0);
       
   146   Interrupt::Disable(iIrq);
       
   147   DP("DWebcameraDriver::Stop end");
       
   148 }
       
   149 
       
   150 void DWebcameraDriver::Isr(TAny* aPtr)
       
   151 {
       
   152   DP("DWebcameraDriver::Isr start");
       
   153   ((DWebcameraDriver*)aPtr)->receivedatacallback();
       
   154   DP("DWebcameraDriver::Isr end");
       
   155 }
       
   156 
       
   157 void DWebcameraDriver::receivedatacallback()
       
   158 {
       
   159   DP("DWebcameraDriver::receivedatacallback start");
       
   160   TInt datasize=ReadReg(iPortAddr,WEBCAMERA_REG_DMA_SIZE);
       
   161   switch (iType)
       
   162 	  {
       
   163 	  case 0:
       
   164 		  iLdd->GetOneFlameComplete(datasize);
       
   165 		  break;
       
   166 	  case 1:
       
   167 		  iLdd->CaptureComplete(datasize);
       
   168 		  break;
       
   169 	  default:
       
   170 		  //
       
   171 	  }
       
   172   WriteReg(iPortAddr,WEBCAMERA_REG_DMA_ADDR, 0);
       
   173   WriteReg(iPortAddr,WEBCAMERA_REG_DMA_SIZE, 0);
       
   174   WriteReg(iPortAddr,WEBCAMERA_REG_INT_ENABLE, 0x0);
       
   175   DP("DWebcameraDriver::receivedatacallback end");	  
       
   176 }
       
   177 
       
   178 // ---------------------------------------------------------------
       
   179 // ---------------------------------------------------------------
       
   180 
       
   181 DECLARE_STANDARD_PDD()
       
   182 {
       
   183   DP("DECLARE_STANDARD_PDD()");
       
   184   return new DWebcameraPddFactory;
       
   185 }
       
   186