stk11xx-sysfs.c

Go to the documentation of this file.
00001 
00034 #include <linux/module.h>
00035 #include <linux/init.h>
00036 #include <linux/kernel.h>
00037 #include <linux/errno.h>
00038 #include <linux/slab.h>
00039 #include <linux/kref.h>
00040 #include <linux/device.h>
00041 
00042 #include <linux/usb.h>
00043 #include <media/v4l2-common.h>
00044 
00045 #include "stk11xx.h"
00046 
00047 
00048 extern const struct stk11xx_coord stk11xx_image_sizes[STK11XX_NBR_SIZES];
00049 
00050 
00060 static ssize_t show_release(struct class_device *class, char *buf)
00061 {
00062     struct video_device *vdev = to_video_device(class);
00063     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00064 
00065     return sprintf(buf, "%d\n", dev->release);
00066 }
00067 
00068 
00078 static ssize_t show_videostatus(struct class_device *class, char *buf)
00079 {
00080     struct video_device *vdev = to_video_device(class);
00081     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00082 
00083     return sprintf(buf,
00084             "Nbr ISOC errors    : %d\n"
00085             "Nbr dropped frames : %d\n"
00086             "Nbr dumped frames  : %d\n",
00087             dev->visoc_errors,
00088             dev->vframes_error,
00089             dev->vframes_dumped);
00090 }
00091 
00092 
00102 static ssize_t show_informations(struct class_device *class, char *buf)
00103 {
00104     int width, height;
00105 
00106     struct video_device *vdev = to_video_device(class);
00107     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00108 
00109 
00110     switch (dev->resolution) {
00111         case STK11XX_80x60:
00112         case STK11XX_128x96:
00113         case STK11XX_160x120:
00114         case STK11XX_213x160:
00115         case STK11XX_320x240:
00116         case STK11XX_640x480:
00117             width = stk11xx_image_sizes[STK11XX_640x480].x;
00118             height = stk11xx_image_sizes[STK11XX_640x480].y;
00119             break;
00120 
00121         case STK11XX_800x600:
00122         case STK11XX_1024x768:
00123         case STK11XX_1280x1024:
00124             width = stk11xx_image_sizes[STK11XX_1280x1024].x;
00125             height = stk11xx_image_sizes[STK11XX_1280x1024].y;
00126             break;
00127 
00128         default:
00129             width = 0;
00130             height = 0;
00131     }
00132 
00133     return sprintf(buf,
00134             "Asked resolution  : %dx%d\n"
00135             "Driver resolution : %dx%d\n"
00136             "Webcam resolution : %dx%d\n"
00137             "\n"
00138             "Brightness        : 0x%X\n"
00139             "Contrast          : 0x%X\n"
00140             "Whiteness         : 0x%X\n"
00141             "Colour            : 0x%X\n",
00142             dev->view.x, dev->view.y,
00143             stk11xx_image_sizes[dev->resolution].x, stk11xx_image_sizes[dev->resolution].y,
00144             width, height,
00145             0xFFFF & dev->vsettings.brightness,
00146             0xFFFF & dev->vsettings.contrast,
00147             0xFFFF & dev->vsettings.whiteness,
00148             0xFFFF & dev->vsettings.colour);
00149 }
00150 
00151 
00161 static ssize_t show_brightness(struct class_device *class, char *buf)
00162 {
00163     struct video_device *vdev = to_video_device(class);
00164     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00165 
00166     return sprintf(buf, "%X\n", dev->vsettings.brightness);
00167 }
00168 
00169 
00179 static ssize_t store_brightness(struct class_device *class, const char *buf, size_t count)
00180 {
00181     char *endp;
00182     unsigned long value;
00183 
00184     struct video_device *vdev = to_video_device(class);
00185     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00186 
00187     value = simple_strtoul(buf, &endp, 16);
00188 
00189     dev->vsettings.brightness = (int) value;
00190 
00191     dev_stk11xx_set_camera_quality(dev);
00192 
00193     return strlen(buf);
00194 }
00195 
00205 static ssize_t show_contrast(struct class_device *class, char *buf)
00206 {
00207     struct video_device *vdev = to_video_device(class);
00208     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00209 
00210     return sprintf(buf, "%X\n", dev->vsettings.contrast);
00211 }
00212 
00213 
00223 static ssize_t store_contrast(struct class_device *class, const char *buf, size_t count)
00224 {
00225     char *endp;
00226     unsigned long value;
00227 
00228     struct video_device *vdev = to_video_device(class);
00229     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00230 
00231     value = simple_strtoul(buf, &endp, 16);
00232 
00233     dev->vsettings.contrast = (int) value;
00234 
00235     dev_stk11xx_set_camera_quality(dev);
00236 
00237     return strlen(buf);
00238 }
00239 
00240 
00250 static ssize_t show_whitebalance(struct class_device *class, char *buf)
00251 {
00252     struct video_device *vdev = to_video_device(class);
00253     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00254 
00255     return sprintf(buf, "%X\n", dev->vsettings.whiteness);
00256 }
00257 
00258 
00268 static ssize_t store_whitebalance(struct class_device *class, const char *buf, size_t count)
00269 {
00270     char *endp;
00271     unsigned long value;
00272 
00273     struct video_device *vdev = to_video_device(class);
00274     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00275 
00276     value = simple_strtoul(buf, &endp, 16);
00277 
00278     dev->vsettings.whiteness = (int) value;
00279 
00280     dev_stk11xx_set_camera_quality(dev);
00281 
00282     return strlen(buf);
00283 }
00284 
00285 
00295 static ssize_t show_colour(struct class_device *class, char *buf)
00296 {
00297     struct video_device *vdev = to_video_device(class);
00298     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00299 
00300     return sprintf(buf, "%X\n", dev->vsettings.colour);
00301 }
00302 
00303 
00313 static ssize_t store_colour(struct class_device *class, const char *buf, size_t count)
00314 {
00315     char *endp;
00316     unsigned long value;
00317 
00318     struct video_device *vdev = to_video_device(class);
00319     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00320 
00321     value = simple_strtoul(buf, &endp, 16);
00322 
00323     dev->vsettings.colour = (int) value;
00324 
00325     dev_stk11xx_set_camera_quality(dev);
00326 
00327     return strlen(buf);
00328 }
00329 
00330 
00340 static ssize_t show_hflip(struct class_device *class, char *buf)
00341 {
00342     struct video_device *vdev = to_video_device(class);
00343     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00344 
00345     return sprintf(buf, "%d\n", dev->vsettings.hflip);
00346 }
00347 
00348 
00358 static ssize_t store_hflip(struct class_device *class, const char *buf, size_t count)
00359 {
00360     struct video_device *vdev = to_video_device(class);
00361     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00362 
00363     if (strncmp(buf, "1", 1) == 0)
00364         dev->vsettings.hflip = 1;
00365     else if (strncmp(buf, "0", 1) == 0)
00366         dev->vsettings.hflip = 0;
00367     else
00368         return -EINVAL;
00369 
00370     return strlen(buf);
00371 }
00372 
00373 
00383 static ssize_t show_vflip(struct class_device *class, char *buf)
00384 {
00385     struct video_device *vdev = to_video_device(class);
00386     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00387 
00388     return sprintf(buf, "%d\n", dev->vsettings.vflip);
00389 }
00390 
00391 
00401 static ssize_t store_vflip(struct class_device *class, const char *buf, size_t count)
00402 {
00403     struct video_device *vdev = to_video_device(class);
00404     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00405 
00406     if (strncmp(buf, "1", 1) == 0)
00407         dev->vsettings.vflip = 1;
00408     else if (strncmp(buf, "0", 1) == 0)
00409         dev->vsettings.vflip = 0;
00410     else
00411         return -EINVAL;
00412 
00413     return strlen(buf);
00414 }
00415 
00416 
00417 
00418 
00419 static ssize_t runtest(struct class_device *class, const char *buf, size_t count)
00420 {
00421     char *endp;
00422     unsigned long value;
00423 
00424     struct video_device *vdev = to_video_device(class);
00425     struct usb_stk11xx *dev = video_get_drvdata(vdev);
00426 
00427     value = simple_strtoul(buf, &endp, 16);
00428 
00429     switch (value) {
00430         case 1:
00431             dev_stk11xx_set_camera_quality(dev);
00432             STK_INFO("1 run\n");
00433             break;
00434 
00435         case 2:
00436             dev_stk11xx_set_camera_fps(dev);
00437             STK_INFO("2 run\n");
00438             break;
00439 
00440         case 3:
00441             dev_stk11xx_camera_settings(dev);
00442             STK_INFO("3 run\n");
00443             break;
00444     }
00445 
00446     return strlen(buf);
00447 }
00448 
00449 
00450 
00451 static CLASS_DEVICE_ATTR(release, S_IRUGO, show_release, NULL);                                     
00452 static CLASS_DEVICE_ATTR(videostatus, S_IRUGO, show_videostatus, NULL);                             
00453 static CLASS_DEVICE_ATTR(informations, S_IRUGO, show_informations, NULL);                           
00454 static CLASS_DEVICE_ATTR(brightness, S_IRUGO | S_IWUGO, show_brightness, store_brightness);         
00455 static CLASS_DEVICE_ATTR(contrast, S_IRUGO | S_IWUGO, show_contrast, store_contrast);               
00456 static CLASS_DEVICE_ATTR(whitebalance, S_IRUGO | S_IWUGO, show_whitebalance, store_whitebalance);   
00457 static CLASS_DEVICE_ATTR(colour, S_IRUGO | S_IWUGO, show_colour, store_colour);                             
00458 static CLASS_DEVICE_ATTR(hflip, S_IRUGO | S_IWUGO, show_hflip, store_hflip);                        
00459 static CLASS_DEVICE_ATTR(vflip, S_IRUGO | S_IWUGO, show_vflip, store_vflip);                        
00460 static CLASS_DEVICE_ATTR(test, S_IRUGO | S_IWUGO, NULL, runtest);
00461 
00462 
00472 int stk11xx_create_sysfs_files(struct video_device *vdev)
00473 {
00474     int ret;
00475 
00476     ret = video_device_create_file(vdev, &class_device_attr_release);
00477     ret = video_device_create_file(vdev, &class_device_attr_videostatus);
00478     ret = video_device_create_file(vdev, &class_device_attr_informations);
00479     ret = video_device_create_file(vdev, &class_device_attr_brightness);
00480     ret = video_device_create_file(vdev, &class_device_attr_contrast);
00481     ret = video_device_create_file(vdev, &class_device_attr_whitebalance);
00482     ret = video_device_create_file(vdev, &class_device_attr_colour);
00483     ret = video_device_create_file(vdev, &class_device_attr_hflip);
00484     ret = video_device_create_file(vdev, &class_device_attr_vflip);
00485     ret = video_device_create_file(vdev, &class_device_attr_test);
00486 
00487     return ret;
00488 }
00489 
00490 
00500 void stk11xx_remove_sysfs_files(struct video_device *vdev)
00501 {
00502     video_device_remove_file(vdev, &class_device_attr_release);
00503     video_device_remove_file(vdev, &class_device_attr_videostatus);
00504     video_device_remove_file(vdev, &class_device_attr_informations);
00505     video_device_remove_file(vdev, &class_device_attr_brightness);
00506     video_device_remove_file(vdev, &class_device_attr_contrast);
00507     video_device_remove_file(vdev, &class_device_attr_whitebalance);
00508     video_device_remove_file(vdev, &class_device_attr_colour);
00509     video_device_remove_file(vdev, &class_device_attr_hflip);
00510     video_device_remove_file(vdev, &class_device_attr_vflip);
00511     video_device_remove_file(vdev, &class_device_attr_test);
00512 }
00513 

Generated on Tue Oct 30 13:32:13 2007 for SyntekUSBVideoCamera by  doxygen 1.5.3