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