1 /*
2 *********************************************************************************************************
3 *                                                    MELIS
4 *                                    the Easy Portable/Player Develop Kits
5 *                                                 WEBCAM Driver
6 *
7 *                                    (c) Copyright 2012-2016, Kingvan.Tong China
8 *                                             All Rights Reserved
9 *
10 * File    : drv_webcam.h
11 * By      : Kingvan
12 * Version : v1.0
13 * Date    : 2012-9-27
14 * Descript:
15 * Update  : date                auther         ver     notes
16 *           2012-9-27 11:09:13  Kingvan.Tong   2.0     build the file.
17 *********************************************************************************************************
18 */
19 
20 #include "drv_webcam_i.h"
21 #include <hal_osal.h>
22 
23 extern __s32 WEBCAM_DEV_NODE_Init_Part1(void);  //WEBCAM_DEV_NODE的初始化的第一部分
24 //extern __s32 WEBCAM_DEV_NODE_Init_Part2(__u32 webcam_channle,__u32 system);
25 extern __s32 WEBCAM_DEV_NODE_Exit(void);
26 
27 extern __hdle DEV_WEBCAM_Open(void * open_arg, __u32 mode);
28 extern __s32 DEV_WEBCAM_Close(__hdle hwebcam);
29 extern __u32 DEV_WEBCAM_Read(void *pdata, __u32 size, __u32 n, __hdle hPower);
30 extern __u32 DEV_WEBCAM_Write(const void *pdata, __u32 size, __u32 n, __hdle hPower);
31 extern __s32 DEV_WEBCAM_Ioctrl(__hdle hPower, __u32 cmd, __s32 aux, void *pbuffer);
32 static  __webcam_drv_t       webcam_drv;
33 
DRV_WEBCAM_MInit(void)34 __s32 DRV_WEBCAM_MInit(void)
35 {
36     extern void* esDEV_DevReg(const char *classname, const char *name, const __dev_devop_t *pDevOp, void *pOpenArg);
37     hal_log_info("DRV_WEBCAM_MInit\n");
38 
39     //WEBCAM设备节点的初始化,此时这些设备均未注册
40     memset(&webcam_drv, 0, sizeof(__webcam_drv_t));
41     if(EPDK_OK == WEBCAM_DEV_NODE_Init_Part1())
42     {
43         webcam_drv.webcam_dev_entry.Open  = DEV_WEBCAM_Open;
44         webcam_drv.webcam_dev_entry.Close = DEV_WEBCAM_Close;
45         webcam_drv.webcam_dev_entry.Read  = DEV_WEBCAM_Read;
46         webcam_drv.webcam_dev_entry.Write = DEV_WEBCAM_Write;
47         webcam_drv.webcam_dev_entry.Ioctl = DEV_WEBCAM_Ioctrl;
48     }
49     else
50     {
51         goto _err0;
52     }
53     webcam_drv.used = 0;
54 
55     if(webcam_drv.used)
56     {
57         hal_log_info("webcam already used!\n");
58         return EPDK_FAIL;
59     }
60     webcam_drv.hReg_WebcamDevHdl = (__hdle)esDEV_DevReg("UVC", "WEBCAM", &webcam_drv.webcam_dev_entry, 0);
61     if(!webcam_drv.hReg_WebcamDevHdl)
62     {
63         hal_log_info("user webcam registered Error!\n");
64         return EPDK_FAIL;
65     }
66     hal_log_info("drv webcam reg ok!\n");
67 //  ret = WEBCAM_DEV_NODE_Init_Part2(aux,(__s32)pbuffer);
68 //
69 //  if(ret != EPDK_OK)
70 //  {
71 //      return ret;
72 //  }
73 //  webcam_drv.used = 1;
74     hal_log_info("webcam drv plugin ok!\n");
75     return EPDK_OK;
76 _err0:
77     WEBCAM_DEV_NODE_Exit();
78     memset(&webcam_drv, 0, sizeof(__webcam_drv_t));
79     return EPDK_FAIL;
80 }
81 
DRV_WEBCAM_MExit(void)82 __s32 DRV_WEBCAM_MExit(void)
83 {
84     hal_log_info("DRV_WEBCAM_MExit\n");
85     WEBCAM_DEV_NODE_Exit();
86     memset(&webcam_drv, 0, sizeof(__webcam_drv_t));
87     return EPDK_OK;
88 }
89 
90 //__mp *DRV_WEBCAM_MOpen(__u32 mid, __u32 mod)
91 //{
92 //  hal_log_info("DRV_WEBCAM_MOpen\n");
93 //  webcam_drv.mid = mid;
94 
95 //  return (__mp *)&webcam_drv;
96 //}
97 
98 //__s32 DRV_WEBCAM_MClose(__mp *mp)
99 //{
100 //  hal_log_info("DRV_WEBCAM_MClose\n");
101 //
102 //  return EPDK_OK;
103 //}
104 
105 //__u32 DRV_WEBCAM_MRead(void *pdata, __u32 size, __u32 n, __mp *mp)
106 //{
107 //    return EPDK_OK;
108 //}
109 
110 //__u32 DRV_WEBCAM_MWrite(const void *pdata, __u32 size, __u32 n, __mp *mp)
111 //{
112 //    return EPDK_OK;
113 //}
114 
115 //__s32 DRV_WEBCAM_MIoctrl(__mp *mp, __u32 cmd, __s32 aux, void *pbuffer)
116 //{
117 //    __s32   ret;
118 
119 //  switch(cmd)
120 //    {
121 //        case DRV_CMD_PLUGIN:
122 //        {
123 //          if(webcam_drv.used)
124 //            {
125 //                hal_log_info("webcam already used!\n");
126 //                return EPDK_FAIL;
127 //            }
128 //            webcam_drv.hReg_WebcamDevHdl = esDEV_DevReg("UVC", "WEBCAM", &webcam_drv.webcam_dev_entry, 0);
129 //          if(!webcam_drv.hReg_WebcamDevHdl)
130 //          {
131 //                hal_log_info("user webcam registered Error!\n");
132 //              return EPDK_FAIL;
133 //          }
134 //            hal_log_info("drv webcam reg ok!\n");
135 //
136 //            ret = WEBCAM_DEV_NODE_Init_Part2(aux,(__s32)pbuffer);
137 //
138 //            if(ret != EPDK_OK)
139 //            {
140 //                return ret;
141 //            }
142 //          webcam_drv.used = 1;
143 //
144 //          hal_log_info("webcam drv plugin ok!\n");
145 //
146 //          return EPDK_OK;
147 //        }
148 
149 //        case DRV_CMD_PLUGOUT:
150 //        {
151 //          hal_log_info("webcam DRV_CMD_PLUGOUT!\n");
152 //          if(webcam_drv.used == 1)
153 //            {
154 //              __s32 ret ;
155 //                if(!webcam_drv.hReg_WebcamDevHdl)
156 //                {
157 //                    hal_log_info("Dev not plugin!\n");
158 //                    return EPDK_FAIL;
159 //                }
160 //
161 //                ret = esDEV_DevUnreg(webcam_drv.hReg_WebcamDevHdl);
162 //              hal_log_info("ret=%d\n",ret);
163 //                webcam_drv.hReg_WebcamDevHdl = NULL;
164 //                WEBCAM_DEV_NODE_Exit();
165 //            }
166 //
167 //            webcam_drv.used = 0;
168 //            return EPDK_OK;
169 //        }
170 
171 //        case DRV_CMD_GET_STATUS:
172 //        {
173 //          hal_log_info("DRV_CMD_GET_STATUS\n");
174 //          if(webcam_drv.used)
175 //            {
176 //                return DRV_STA_BUSY;
177 //            }
178 //            else
179 //            {
180 //                return DRV_STA_FREE;
181 //            }
182 //        }
183 //      default:
184 //            return EPDK_FAIL;
185 //    }
186 //}
187 
188