home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lxapi32.zip / Dev32 / lxioctlv4l.c < prev    next >
C/C++ Source or Header  |  2002-04-26  |  2KB  |  99 lines

  1. /* $Id: lxioctlv4l.c,v 1.2 2002/04/26 23:08:56 smilcke Exp $ */
  2.  
  3. /*
  4.  * ioctlv4l.c
  5.  * Autor:               Stefan Milcke
  6.  * Erstellt am:         16.11.2001
  7.  * Letzte Aenderung am: 14.01.2002
  8.  *
  9. */
  10.  
  11. extern "C"
  12. {
  13. #define INCL_NOPMAPI
  14. #define INCL_DOSINFOSEG
  15. #include <os2.h>
  16. }
  17.  
  18. #include <devhelp.h>
  19. #include <devtype.h>
  20. #include <devrp.h>
  21. #include <ldefos2.h>
  22. #include <lxapioctl.h>
  23. #include <lxapiv4l.h>
  24.  
  25. extern "C"
  26. {
  27. #include <linux/types.h>
  28. #include <lxapilib.h>
  29. };
  30.  
  31. //-------------------------------- map_lx_error --------------------------------
  32. ULONG map_lx_error(int err)
  33. {
  34.  return RPDEV | (-err);
  35. }
  36.  
  37. //--------------------------------- ioctl_v4l ----------------------------------
  38. extern "C" ULONG ioctl_v4l(RPIOCtl __far* rp)
  39. {
  40.  ULONG rc=RPDONE;
  41.  switch(rp->Function)
  42.  {
  43.   case LXIOCFN_V4L_ENUMDEVICES:
  44.    {
  45.     PLXIOCDP_V4L_ENUMDEVICES pEnum=(PLXIOCDP_V4L_ENUMDEVICES)
  46.               VDPFROMRP(rp,rp->DataLength,VERIFY_READWRITE);
  47.     rc=RPERR_PARAMETER | RPDONE;
  48.     if(pEnum)
  49.     {
  50.      PLX_V4L_DEVICEINFO p=(PLX_V4L_DEVICEINFO)pEnum->devInfos;
  51.      if(p)
  52.      {
  53.       pEnum->ulDevices=OS2_v4lx_enum_devices(p,((ULONG)rp->DataLength)-sizeof(LXIOCDP_V4L_ENUMDEVICES));
  54.       rc=RPDONE;
  55.      }
  56.     }
  57.    }
  58.    break;
  59.   case LXIOCFN_V4L_OPENDEVICE:
  60.    {
  61.     PLXIOCPA_V4L_OPENDEVICE paOpen=(PLXIOCPA_V4L_OPENDEVICE)
  62.               VPAFROMRP(rp,rp->ParmLength,VERIFY_READWRITE);
  63.     paOpen->rc=OS2_v4lx_open_device(paOpen->devname);
  64.     if(paOpen->rc>0)
  65.     {
  66.      paOpen->handle=paOpen->rc;
  67.      paOpen->rc=0;
  68.      rc=RPDONE;
  69.     }
  70.     else
  71.      rc=RPDONE | map_lx_error(paOpen->rc);
  72.    }
  73.    break;
  74.   case LXIOCFN_V4L_CLOSEDEVICE:
  75.    {
  76.     PLXIOCPA_V4L_CLOSEDEVICE paClose=(PLXIOCPA_V4L_CLOSEDEVICE)
  77.               VPAFROMRP(rp,rp->ParmLength,VERIFY_READWRITE);
  78.     paClose->rc=OS2_v4lx_close_device(paClose->handle);
  79.     rc=RPDONE | map_lx_error(paClose->rc);
  80.    }
  81.    break;
  82.   case LXIOCFN_V4L_IOCTL:
  83.    {
  84.     PLXIOCPA_V4L_IOCTL paIoctl=(PLXIOCPA_V4L_IOCTL)
  85.               VPAFROMRP(rp,rp->ParmLength,VERIFY_READWRITE);
  86.     PLXIOCDP_V4L_IOCTL dpIoctl=(PLXIOCDP_V4L_IOCTL)
  87.               VDPFROMRP(rp,rp->DataLength,VERIFY_READWRITE);
  88.     paIoctl->rc=OS2_v4lx_ioctl(paIoctl->handle
  89.                                ,paIoctl->v4l_ioctlfn
  90.                                ,dpIoctl);
  91.    }
  92.    break;
  93.   default:
  94.    rc=RPERR_COMMAND | RPDONE;
  95.    break;
  96.  }
  97.  return rc;
  98. }
  99.