10c0d06caSMauro Carvalho Chehab /*
20c0d06caSMauro Carvalho Chehab  *
30c0d06caSMauro Carvalho Chehab  *
40c0d06caSMauro Carvalho Chehab  *  Copyright (C) 2005 Mike Isely <isely@pobox.com>
50c0d06caSMauro Carvalho Chehab  *
60c0d06caSMauro Carvalho Chehab  *  This program is free software; you can redistribute it and/or modify
70c0d06caSMauro Carvalho Chehab  *  it under the terms of the GNU General Public License as published by
80c0d06caSMauro Carvalho Chehab  *  the Free Software Foundation; either version 2 of the License
90c0d06caSMauro Carvalho Chehab  *
100c0d06caSMauro Carvalho Chehab  *  This program is distributed in the hope that it will be useful,
110c0d06caSMauro Carvalho Chehab  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
120c0d06caSMauro Carvalho Chehab  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
130c0d06caSMauro Carvalho Chehab  *  GNU General Public License for more details.
140c0d06caSMauro Carvalho Chehab  *
150c0d06caSMauro Carvalho Chehab  *  You should have received a copy of the GNU General Public License
160c0d06caSMauro Carvalho Chehab  *  along with this program; if not, write to the Free Software
170c0d06caSMauro Carvalho Chehab  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
180c0d06caSMauro Carvalho Chehab  *
190c0d06caSMauro Carvalho Chehab  */
200c0d06caSMauro Carvalho Chehab #ifndef __PVRUSB2_CTRL_H
210c0d06caSMauro Carvalho Chehab #define __PVRUSB2_CTRL_H
220c0d06caSMauro Carvalho Chehab 
230c0d06caSMauro Carvalho Chehab struct pvr2_ctrl;
240c0d06caSMauro Carvalho Chehab 
250c0d06caSMauro Carvalho Chehab enum pvr2_ctl_type {
260c0d06caSMauro Carvalho Chehab 	pvr2_ctl_int = 0,
270c0d06caSMauro Carvalho Chehab 	pvr2_ctl_enum = 1,
280c0d06caSMauro Carvalho Chehab 	pvr2_ctl_bitmask = 2,
290c0d06caSMauro Carvalho Chehab 	pvr2_ctl_bool = 3,
300c0d06caSMauro Carvalho Chehab };
310c0d06caSMauro Carvalho Chehab 
320c0d06caSMauro Carvalho Chehab 
330c0d06caSMauro Carvalho Chehab /* Set the given control. */
340c0d06caSMauro Carvalho Chehab int pvr2_ctrl_set_value(struct pvr2_ctrl *,int val);
350c0d06caSMauro Carvalho Chehab 
360c0d06caSMauro Carvalho Chehab /* Set/clear specific bits of the given control. */
370c0d06caSMauro Carvalho Chehab int pvr2_ctrl_set_mask_value(struct pvr2_ctrl *,int mask,int val);
380c0d06caSMauro Carvalho Chehab 
390c0d06caSMauro Carvalho Chehab /* Get the current value of the given control. */
400c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_value(struct pvr2_ctrl *,int *valptr);
410c0d06caSMauro Carvalho Chehab 
420c0d06caSMauro Carvalho Chehab /* Retrieve control's type */
430c0d06caSMauro Carvalho Chehab enum pvr2_ctl_type pvr2_ctrl_get_type(struct pvr2_ctrl *);
440c0d06caSMauro Carvalho Chehab 
450c0d06caSMauro Carvalho Chehab /* Retrieve control's maximum value (int type) */
460c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_max(struct pvr2_ctrl *);
470c0d06caSMauro Carvalho Chehab 
480c0d06caSMauro Carvalho Chehab /* Retrieve control's minimum value (int type) */
490c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_min(struct pvr2_ctrl *);
500c0d06caSMauro Carvalho Chehab 
510c0d06caSMauro Carvalho Chehab /* Retrieve control's default value (any type) */
520c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_def(struct pvr2_ctrl *, int *valptr);
530c0d06caSMauro Carvalho Chehab 
540c0d06caSMauro Carvalho Chehab /* Retrieve control's enumeration count (enum only) */
550c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_cnt(struct pvr2_ctrl *);
560c0d06caSMauro Carvalho Chehab 
570c0d06caSMauro Carvalho Chehab /* Retrieve control's valid mask bits (bit mask only) */
580c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_mask(struct pvr2_ctrl *);
590c0d06caSMauro Carvalho Chehab 
600c0d06caSMauro Carvalho Chehab /* Retrieve the control's name */
610c0d06caSMauro Carvalho Chehab const char *pvr2_ctrl_get_name(struct pvr2_ctrl *);
620c0d06caSMauro Carvalho Chehab 
630c0d06caSMauro Carvalho Chehab /* Retrieve the control's desc */
640c0d06caSMauro Carvalho Chehab const char *pvr2_ctrl_get_desc(struct pvr2_ctrl *);
650c0d06caSMauro Carvalho Chehab 
660c0d06caSMauro Carvalho Chehab /* Retrieve a control enumeration or bit mask value */
670c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_valname(struct pvr2_ctrl *,int,char *,unsigned int,
680c0d06caSMauro Carvalho Chehab 			  unsigned int *);
690c0d06caSMauro Carvalho Chehab 
700c0d06caSMauro Carvalho Chehab /* Return true if control is writable */
710c0d06caSMauro Carvalho Chehab int pvr2_ctrl_is_writable(struct pvr2_ctrl *);
720c0d06caSMauro Carvalho Chehab 
730c0d06caSMauro Carvalho Chehab /* Return V4L flags value for control (or zero if there is no v4l control
740c0d06caSMauro Carvalho Chehab    actually under this control) */
750c0d06caSMauro Carvalho Chehab unsigned int pvr2_ctrl_get_v4lflags(struct pvr2_ctrl *);
760c0d06caSMauro Carvalho Chehab 
770c0d06caSMauro Carvalho Chehab /* Return V4L ID for this control or zero if none */
780c0d06caSMauro Carvalho Chehab int pvr2_ctrl_get_v4lid(struct pvr2_ctrl *);
790c0d06caSMauro Carvalho Chehab 
800c0d06caSMauro Carvalho Chehab /* Return true if control has custom symbolic representation */
810c0d06caSMauro Carvalho Chehab int pvr2_ctrl_has_custom_symbols(struct pvr2_ctrl *);
820c0d06caSMauro Carvalho Chehab 
830c0d06caSMauro Carvalho Chehab /* Convert a given mask/val to a custom symbolic value */
840c0d06caSMauro Carvalho Chehab int pvr2_ctrl_custom_value_to_sym(struct pvr2_ctrl *,
850c0d06caSMauro Carvalho Chehab 				  int mask,int val,
860c0d06caSMauro Carvalho Chehab 				  char *buf,unsigned int maxlen,
870c0d06caSMauro Carvalho Chehab 				  unsigned int *len);
880c0d06caSMauro Carvalho Chehab 
890c0d06caSMauro Carvalho Chehab /* Convert a symbolic value to a mask/value pair */
900c0d06caSMauro Carvalho Chehab int pvr2_ctrl_custom_sym_to_value(struct pvr2_ctrl *,
910c0d06caSMauro Carvalho Chehab 				  const char *buf,unsigned int len,
920c0d06caSMauro Carvalho Chehab 				  int *maskptr,int *valptr);
930c0d06caSMauro Carvalho Chehab 
940c0d06caSMauro Carvalho Chehab /* Convert a given mask/val to a symbolic value */
950c0d06caSMauro Carvalho Chehab int pvr2_ctrl_value_to_sym(struct pvr2_ctrl *,
960c0d06caSMauro Carvalho Chehab 			   int mask,int val,
970c0d06caSMauro Carvalho Chehab 			   char *buf,unsigned int maxlen,
980c0d06caSMauro Carvalho Chehab 			   unsigned int *len);
990c0d06caSMauro Carvalho Chehab 
1000c0d06caSMauro Carvalho Chehab /* Convert a symbolic value to a mask/value pair */
1010c0d06caSMauro Carvalho Chehab int pvr2_ctrl_sym_to_value(struct pvr2_ctrl *,
1020c0d06caSMauro Carvalho Chehab 			   const char *buf,unsigned int len,
1030c0d06caSMauro Carvalho Chehab 			   int *maskptr,int *valptr);
1040c0d06caSMauro Carvalho Chehab 
1050c0d06caSMauro Carvalho Chehab /* Convert a given mask/val to a symbolic value - must already be
1060c0d06caSMauro Carvalho Chehab    inside of critical region. */
1070c0d06caSMauro Carvalho Chehab int pvr2_ctrl_value_to_sym_internal(struct pvr2_ctrl *,
1080c0d06caSMauro Carvalho Chehab 			   int mask,int val,
1090c0d06caSMauro Carvalho Chehab 			   char *buf,unsigned int maxlen,
1100c0d06caSMauro Carvalho Chehab 			   unsigned int *len);
1110c0d06caSMauro Carvalho Chehab 
1120c0d06caSMauro Carvalho Chehab #endif /* __PVRUSB2_CTRL_H */
1130c0d06caSMauro Carvalho Chehab 
1140c0d06caSMauro Carvalho Chehab /*
1150c0d06caSMauro Carvalho Chehab   Stuff for Emacs to see, in order to encourage consistent editing style:
1160c0d06caSMauro Carvalho Chehab   *** Local Variables: ***
1170c0d06caSMauro Carvalho Chehab   *** mode: c ***
1180c0d06caSMauro Carvalho Chehab   *** fill-column: 75 ***
1190c0d06caSMauro Carvalho Chehab   *** tab-width: 8 ***
1200c0d06caSMauro Carvalho Chehab   *** c-basic-offset: 8 ***
1210c0d06caSMauro Carvalho Chehab   *** End: ***
1220c0d06caSMauro Carvalho Chehab   */
123