dcam1394_io.h revision 21:9318364fb703
1130803Smarcel/*
2130803Smarcel * CDDL HEADER START
3130803Smarcel *
4130803Smarcel * The contents of this file are subject to the terms of the
5130803Smarcel * Common Development and Distribution License, Version 1.0 only
6130803Smarcel * (the "License").  You may not use this file except in compliance
7130803Smarcel * with the License.
8130803Smarcel *
9130803Smarcel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10130803Smarcel * or http://www.opensolaris.org/os/licensing.
11130803Smarcel * See the License for the specific language governing permissions
12130803Smarcel * and limitations under the License.
13130803Smarcel *
14130803Smarcel * When distributing Covered Code, include this CDDL HEADER in each
15130803Smarcel * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16130803Smarcel * If applicable, add the following below this CDDL HEADER, with the
17130803Smarcel * fields enclosed by brackets "[]" replaced with your own identifying
18130803Smarcel * information: Portions Copyright [yyyy] [name of copyright owner]
19130803Smarcel *
20130803Smarcel * CDDL HEADER END
21130803Smarcel */
22130803Smarcel/*
23130803Smarcel * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24130803Smarcel * Use is subject to license terms.
25130803Smarcel */
26130803Smarcel
27130803Smarcel#ifndef _SYS_DCAM_DCAM1394_IO_H
28130803Smarcel#define	_SYS_DCAM_DCAM1394_IO_H
29130803Smarcel
30130803Smarcel#pragma ident	"%Z%%M%	%I%	%E% SMI"
31130803Smarcel
32130803Smarcel#include <sys/time.h>
33130803Smarcel
34130803Smarcel#ifdef __cplusplus
35130803Smarcelextern "C" {
36130803Smarcel#endif
37130803Smarcel
38130803Smarcel/* macros for manipulating dcam1394_param_list_t structure */
39130803Smarcel#define	PARAM_LIST_INIT(list)			bzero(list, sizeof (list))
40130803Smarcel#define	PARAM_LIST_ADD(list, param, subparam)	list[param][subparam].flag = 1
41130803Smarcel#define	PARAM_LIST_REMOVE(list, param, subparam)  list[param][subparam].flag = 0
42130803Smarcel#define	PARAM_LIST_IS_ENTRY(list, param, subparam) list[param][subparam].flag
43130803Smarcel#define	PARAM_VAL(list, param, subparam)	list[param][subparam].val
44130803Smarcel#define	PARAM_ERR(list, param, subparam)	list[param][subparam].err
45130803Smarcel
46130803Smarcel#define	DCAM1394_NUM_PARAM	30
47130803Smarcel#define	DCAM1394_NUM_SUBPARAM	24
48130803Smarcel
49130803Smarcel/* parameters */
50130803Smarcel#define	DCAM1394_PARAM_CAP_POWER_CTRL			0x0
51130803Smarcel#define	DCAM1394_PARAM_CAP_VID_MODE			0x1
52130803Smarcel#define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0	0x2
53130803Smarcel#define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_1	0x3
54130803Smarcel#define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_2	0x4
55130803Smarcel#define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_3	0x5
56130803Smarcel#define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_4	0x6
57130803Smarcel#define	DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_5	0x7
58130803Smarcel#define	DCAM1394_PARAM_POWER				0x8
59130803Smarcel#define	DCAM1394_PARAM_VID_MODE				0x9
60130803Smarcel#define	DCAM1394_PARAM_FRAME_RATE			0xA
61130803Smarcel#define	DCAM1394_PARAM_RING_BUFF_CAPACITY		0xB
62130803Smarcel#define	DCAM1394_PARAM_RING_BUFF_NUM_FRAMES_READY	0xC
63130803Smarcel#define	DCAM1394_PARAM_RING_BUFF_READ_PTR_INCR		0xD
64130803Smarcel#define	DCAM1394_PARAM_FRAME_NUM_BYTES			0xE
65130803Smarcel#define	DCAM1394_PARAM_STATUS				0xF
66130803Smarcel#define	DCAM1394_PARAM_BRIGHTNESS			0x10
67130803Smarcel#define	DCAM1394_PARAM_EXPOSURE				0x11
68130803Smarcel#define	DCAM1394_PARAM_SHARPNESS			0x12
69130803Smarcel#define	DCAM1394_PARAM_WHITE_BALANCE			0x13
70130803Smarcel#define	DCAM1394_PARAM_HUE				0x14
71130803Smarcel#define	DCAM1394_PARAM_SATURATION			0x15
72130803Smarcel#define	DCAM1394_PARAM_GAMMA				0x16
73130803Smarcel#define	DCAM1394_PARAM_SHUTTER				0x17
74130803Smarcel#define	DCAM1394_PARAM_GAIN				0x18
75130803Smarcel#define	DCAM1394_PARAM_IRIS				0x19
76130803Smarcel#define	DCAM1394_PARAM_FOCUS				0x1A
77130803Smarcel#define	DCAM1394_PARAM_ZOOM				0x1B
78130803Smarcel#define	DCAM1394_PARAM_PAN				0x1C
79130803Smarcel#define	DCAM1394_PARAM_TILT				0x1D
80130803Smarcel
81130803Smarcel/* subparameters */
82130803Smarcel
83130803Smarcel/* for DCAM1394_PARAM_CAP_VID_MODE */
84130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_0			0x0
85130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_YUV_444_160_120	0x0
86130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_1			0x1
87130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_YUV_422_320_240	0x1
88130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_2			0x2
89130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_YUV_411_640_480	0x2
90130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_3			0x3
91130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_YUV_422_640_480	0x3
92130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_4			0x4
93130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_RGB_640_480		0x4
94130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_5			0x5
95130803Smarcel#define	DCAM1394_SUBPARAM_VID_MODE_Y_640_480		0x5
96130803Smarcel
97130803Smarcel/* for DCAM1394_PARAM_CAP_FRAME_RATE_VID_MODE_0 */
98130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_0			0x6
99130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_3_75_FPS		0x6
100130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_1			0x7
101130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_7_5_FPS		0x7
102130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_2			0x8
103130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_15_FPS		0x8
104130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_3			0x9
105130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_30_FPS		0x9
106130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_4			0xA
107130803Smarcel#define	DCAM1394_SUBPARAM_FRAME_RATE_60_FPS		0xA
108130803Smarcel
109130803Smarcel/* for features */
110130803Smarcel#define	DCAM1394_SUBPARAM_PRESENCE			0xB
111130803Smarcel#define	DCAM1394_SUBPARAM_CAP_READ			0xC
112130803Smarcel#define	DCAM1394_SUBPARAM_CAP_ON_OFF			0xD
113130803Smarcel#define	DCAM1394_SUBPARAM_CAP_CTRL_AUTO			0xE
114130803Smarcel#define	DCAM1394_SUBPARAM_CAP_CTRL_MANUAL		0xF
115130803Smarcel#define	DCAM1394_SUBPARAM_MIN_VAL			0x10
116130803Smarcel#define	DCAM1394_SUBPARAM_MAX_VAL			0x11
117130803Smarcel#define	DCAM1394_SUBPARAM_ON_OFF			0x12
118130803Smarcel#define	DCAM1394_SUBPARAM_CTRL_MODE			0x13
119130803Smarcel#define	DCAM1394_SUBPARAM_VALUE				0x14
120130803Smarcel
121130803Smarcel/* for white balance feature */
122130803Smarcel#define	DCAM1394_SUBPARAM_U_VALUE			0x15
123130803Smarcel#define	DCAM1394_SUBPARAM_V_VALUE			0x16
124130803Smarcel
125130803Smarcel#define	DCAM1394_SUBPARAM_NONE				0x17
126130803Smarcel
127130803Smarcel/* parameter values */
128130803Smarcel
129130803Smarcel/* for video mode param */
130130803Smarcel
131130803Smarcel#define	DCAM1394_VID_MODE_0			0x0
132130803Smarcel#define	DCAM1394_VID_MODE_YUV_444_160_120	0x0
133130803Smarcel
134130803Smarcel#define	DCAM1394_VID_MODE_1			0x1
135130803Smarcel#define	DCAM1394_VID_MODE_YUV_422_320_240	0x1
136130803Smarcel
137130803Smarcel#define	DCAM1394_VID_MODE_2			0x2
138130803Smarcel#define	DCAM1394_VID_MODE_YUV_411_640_480	0x2
139130803Smarcel
140130803Smarcel#define	DCAM1394_VID_MODE_3			0x3
141130803Smarcel#define	DCAM1394_VID_MODE_YUV_422_640_480	0x3
142130803Smarcel
143130803Smarcel#define	DCAM1394_VID_MODE_4			0x4
144130803Smarcel#define	DCAM1394_VID_MODE_RGB_640_480		0x4
145130803Smarcel
146130803Smarcel#define	DCAM1394_VID_MODE_5			0x5
147130803Smarcel#define	DCAM1394_VID_MODE_Y_640_480		0x5
148130803Smarcel
149130803Smarcel/* for frame rate param */
150130803Smarcel
151130803Smarcel#define	DCAM1394_FRAME_RATE_0			0x6
152130803Smarcel#define	DCAM1394_3_75_FPS			0x6
153130803Smarcel
154130803Smarcel#define	DCAM1394_FRAME_RATE_1			0x7
155130803Smarcel#define	DCAM1394_7_5_FPS			0x7
156130803Smarcel
157130803Smarcel#define	DCAM1394_FRAME_RATE_2			0x8
158130803Smarcel#define	DCAM1394_15_FPS				0x8
159130803Smarcel
160130803Smarcel#define	DCAM1394_FRAME_RATE_3			0x9
161130803Smarcel#define	DCAM1394_30_FPS				0x9
162130803Smarcel
163130803Smarcel#define	DCAM1394_FRAME_RATE_4			0xA
164130803Smarcel#define	DCAM1394_60_FPS				0xA
165130803Smarcel
166130803Smarcel/* for feature control mode subparam */
167130803Smarcel
168130803Smarcel#define	DCAM1394_CTRL_AUTO			0x1
169130803Smarcel#define	DCAM1394_CTRL_MANUAL			0x0
170130803Smarcel
171130803Smarcel/* for power control subparam */
172130803Smarcel
173130803Smarcel#define	DCAM1394_POWER_OFF			0x0
174130803Smarcel#define	DCAM1394_POWER_ON			0x1
175130803Smarcel
176130803Smarcel/* ioctl() commands */
177130803Smarcel
178130803Smarcel#define	DCAM1394_IOC				('d' << 8)
179130803Smarcel
180130803Smarcel#define	DCAM1394_CMD_REG_READ			(DCAM1394_IOC | 0)
181130803Smarcel#define	DCAM1394_CMD_REG_WRITE			(DCAM1394_IOC | 1)
182130803Smarcel
183130803Smarcel#define	DCAM1394_CMD_CAM_RESET			(DCAM1394_IOC | 2)
184130803Smarcel#define	DCAM1394_CMD_PARAM_GET			(DCAM1394_IOC | 3)
185130803Smarcel#define	DCAM1394_CMD_PARAM_SET			(DCAM1394_IOC | 4)
186130803Smarcel#define	DCAM1394_CMD_FRAME_RCV_START		(DCAM1394_IOC | 5)
187130803Smarcel#define	DCAM1394_CMD_FRAME_RCV_STOP		(DCAM1394_IOC | 6)
188130803Smarcel#define	DCAM1394_CMD_RING_BUFF_FLUSH		(DCAM1394_IOC | 7)
189130803Smarcel#define	DCAM1394_CMD_FRAME_SEQ_NUM_COUNT_RESET	(DCAM1394_IOC | 8)
190130803Smarcel
191130803Smarcel#define	DCAM1394_RING_BUFF_OFFS		0x1
192130803Smarcel
193130803Smarcel/* for DCAM1394_PARAM_STATUS */
194130803Smarcel
195130803Smarcel#define	DCAM1394_STATUS_FRAME_RCV_DONE			0x1
196130803Smarcel#define	DCAM1394_STATUS_RING_BUFF_LOST_FRAME		0x2
197130803Smarcel#define	DCAM1394_STATUS_PARAM_CHANGE			0x4
198130803Smarcel#define	DCAM1394_STATUS_FRAME_SEQ_NUM_COUNT_OVERFLOW	0x8
199130803Smarcel#define	DCAM1394_STATUS_CAM_UNPLUG			0x10
200130803Smarcel
201130803Smarceltypedef struct dcam1394_param_list_entry_s {
202130803Smarcel	int 		flag;
203130803Smarcel	int 		err;
204130803Smarcel	unsigned int 	val;
205130803Smarcel
206130803Smarcel} dcam1394_param_list_entry_t;
207130803Smarcel
208130803Smarceltypedef dcam1394_param_list_entry_t
209130803Smarcel	dcam1394_param_list_t[DCAM1394_NUM_PARAM][DCAM1394_NUM_SUBPARAM];
210130803Smarcel
211130803Smarceltypedef dcam1394_param_list_entry_t
212130803Smarcel	(*dcam1394_param_list_p_t)[DCAM1394_NUM_PARAM][DCAM1394_NUM_SUBPARAM];
213130803Smarcel
214130803Smarceltypedef struct dcam1394_frame_s {
215130803Smarcel	unsigned int	 vid_mode;
216130803Smarcel	unsigned int	 seq_num;
217130803Smarcel	hrtime_t	 timestamp;
218130803Smarcel	unsigned char	*buff;
219130803Smarcel} dcam1394_frame_t;
220130803Smarcel
221130803Smarceltypedef struct dcam1394_reg_io_s {
222130803Smarcel	unsigned int	offs;
223130803Smarcel	unsigned int 	val;
224130803Smarcel
225130803Smarcel} dcam1394_reg_io_t;
226130803Smarcel
227130803Smarcel#ifdef __cplusplus
228130803Smarcel}
229130803Smarcel#endif
230130803Smarcel
231130803Smarcel#endif	/* _SYS_DCAM_DCAM1394_IO_H */
232130803Smarcel