diff --git a/CMakeLists.txt b/CMakeLists.txt index 04c4104..e03215b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -128,7 +128,25 @@ endif() if(OS_WIN) set(UVC_SRC src/mynteye/uvc/win/uvc-wmf.cc) elseif(OS_MAC) - set(UVC_SRC src/mynteye/uvc/macosx/uvc-libuvc.cc) + add_compile_options(-x objective-c++) + ## INCLUDE_DIRECTORIES(src/mynteye/uvc/macosx) + ## INCLUDE_DIRECTORIES(src/mynteye/uvc/macosx/VVUVCKit) + ## aux_source_directory(src/mynteye/uvc/macosx/VVUVCKit/ MAC_VVUVCKIT_SRC_LIST) + ## aux_source_directory(src/mynteye/uvc/macosx/USBBusProber/ MAC_USBBUSPROBER_SRC_LIST) + ## add_library(usbBusProber SHARED ${MAC_USBBUSPROBER_SRC_LIST}) + ## set_target_properties(usbBusProber PROPERTIES FRAMEWORK TRUE ) + ## add_library(vvuvckit SHARED ${MAC_VVUVCKIT_SRC_LIST}) + ## set_target_properties(vvuvckit PROPERTIES FRAMEWORK TRUE ) + + INCLUDE_DIRECTORIES(src/mynteye/uvc/macosx/USBBusProber.framework/Headers) + INCLUDE_DIRECTORIES(src/mynteye/uvc/macosx/VVUVCKit.framework/Headers) + find_library(VVUVCKIT_LIBRARY VVUVCKit PATHS src/mynteye/uvc/macosx) + find_library(USB_LIBRARY USBBusProber PATHS src/mynteye/uvc/macosx) + MARK_AS_ADVANCED (VVUVCKIT_LIBRARY USB_LIBRARY) + SET(OSX_EXTRA_LIBS ${VVUVCKIT_LIBRARY} ${USB_LIBRARY}) + + set(UVC_SRC src/mynteye/uvc/macosx/CameraEngine.cpp src/mynteye/uvc/macosx/AVfoundationCamera.mm src/mynteye/uvc/macosx/uvc-vvuvckit.cc ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework CoreFoundation -framework AVFoundation -framework IOKit -framework AppKit -framework Cocoa -framework CoreMedia -framework CoreData -framework Foundation -framework CoreVideo ${__MACUVCLOG_FLAGS}") find_package(libuvc REQUIRED) set(UVC_LIB ${libuvc_LIBRARIES}) @@ -186,6 +204,9 @@ endif() add_library(${MYNTEYE_NAME} SHARED ${MYNTEYE_SRCS}) target_link_libraries(${MYNTEYE_NAME} ${MYNTEYE_LINKLIBS}) +if(OS_MAC) + target_link_libraries( ${MYNTEYE_NAME} ${OSX_EXTRA_LIBS} ) +endif() target_link_threads(${MYNTEYE_NAME}) if(OS_WIN) diff --git a/src/mynteye/uvc/macosx/AVfoundationCamera.h b/src/mynteye/uvc/macosx/AVfoundationCamera.h new file mode 100644 index 0000000..aae568c --- /dev/null +++ b/src/mynteye/uvc/macosx/AVfoundationCamera.h @@ -0,0 +1,91 @@ +// Copyright 2018 Slightech Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AVfoundationCamera_H +#define AVfoundationCamera_H + +#import +#import +#import "VVUVCKit.h" + +#include "CameraEngine.h" + +static int32_t codec_table[] = { 0, 40, 0, 24, 0, 0, 0, 0, 0, 0, 'yuvs', '2vuy', 0, 'v308', '420v', '410v', 0, 0, 0, 0, 'dmb1', 'dmb1', 'mp1v', 'mp2v', 'mp4v', 'h263', 'avc1', 'dvcp', 'dvc ' }; + + +@interface FrameGrabber : NSObject +{ + bool new_frame; + int cam_width, cam_height; + int frm_width, frm_height; + int xoff, yoff; + unsigned char *buffer; + bool crop; + bool color; +} +- (id) initWithCameraSize:(int)w :(int)h :(int)b; +- (id) initWithCropSize:(int)cw :(int)ch :(int)b :(int)fw :(int)fh :(int)xo :(int)yo; +- (void)captureOutput:(AVCaptureOutput *)captureOutput +didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer + fromConnection:(AVCaptureConnection *)connection; +- (unsigned char*) getFrame; + +@end + +class AVfoundationCamera : public CameraEngine +{ + +public: + AVfoundationCamera(CameraConfig* cam_cfg); + ~AVfoundationCamera(); + + static int getDeviceCount(); + static std::vector getCameraConfigs(int dev_id = -1); + static CameraEngine* getCamera(CameraConfig* cam_cfg); + + bool initCamera(); + bool startCamera(); + unsigned char* getFrame(); + bool stopCamera(); + bool stillRunning(); + bool resetCamera(); + bool closeCamera(); + + int getCameraSettingStep(int mode); + bool setCameraSettingAuto(int mode, bool flag); + bool getCameraSettingAuto(int mode); + bool setCameraSetting(int mode, int value); + int getCameraSetting(int mode); + int getMaxCameraSetting(int mode); + int getMinCameraSetting(int mode); + bool setDefaultCameraSetting(int mode); + int getDefaultCameraSetting(int mode); + bool hasCameraSetting(int mode); + bool hasCameraSettingAuto(int mode); + + bool showSettingsDialog(bool lock); + +private: + + bool disconnected; + + VVUVCController *uvcController; + FrameGrabber *grabber; + + AVCaptureSession *session; + AVCaptureDeviceInput *videoDeviceInput; + AVCaptureVideoDataOutput *videoOutput; + AVCaptureDevice *videoDevice; +}; +#endif diff --git a/src/mynteye/uvc/macosx/AVfoundationCamera.mm b/src/mynteye/uvc/macosx/AVfoundationCamera.mm new file mode 100644 index 0000000..0d1fe6b --- /dev/null +++ b/src/mynteye/uvc/macosx/AVfoundationCamera.mm @@ -0,0 +1,739 @@ +// Copyright 2018 Slightech Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "AVfoundationCamera.h" +#include +#include +// #include "CameraTool.h" + +#ifdef OSC_HOST_BIG_ENDIAN +#define FourCC2Str(fourcc) (const char[]){*((char*)&fourcc), *(((char*)&fourcc)+1), *(((char*)&fourcc)+2), *(((char*)&fourcc)+3),0} +#else +#define FourCC2Str(fourcc) (const char[]){*(((char*)&fourcc)+3), *(((char*)&fourcc)+2), *(((char*)&fourcc)+1), *(((char*)&fourcc)+0),0} +#endif + +@implementation FrameGrabber +- (id) initWithCameraSize:(int)cw :(int)ch :(int) bytes +{ + self = [super init]; + cam_width = cw; + cam_height = ch; + new_frame = false; + crop = false; + + if(bytes==3) color = true; + else color = false; + + buffer = new unsigned char[cam_width*cam_height*bytes]; + return self; +} + +- (id) initWithCropSize:(int)cw :(int)ch :(int)bytes :(int)fw :(int)fh :(int)xo :(int)yo +{ + self = [super init]; + cam_width = cw; + cam_height = ch; + frm_width = fw; + frm_height = fh; + xoff = xo; + yoff = yo; + new_frame = false; + crop = true; + + if(bytes==3) color = true; + else color = false; + + buffer = new unsigned char[frm_width*frm_height*bytes]; + return self; +} + + +- (void)captureOutput:(AVCaptureOutput *)captureOutput +didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer + fromConnection:(AVCaptureConnection *)connection +{ + + new_frame = false; + CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); + if (CVPixelBufferLockBaseAddress(imageBuffer, 0) == kCVReturnSuccess) { + + unsigned char *src = (unsigned char*)CVPixelBufferGetBaseAddress(imageBuffer); + unsigned char *dest = buffer; + + if (color) { + + if (crop) { + unsigned char *src_buf = src + 3*(yoff*cam_width + xoff); + + for (int i=0;i0;j--) { + *dest++ = *src++; + src++; + *dest++ = *src++; + src++; + } + src += 2*xend; + + } + + } else { + + int size = cam_width*cam_height/2; + for (int i=size;i>0;i--) { + *dest++ = *src++; + src++; + *dest++ = *src++; + src++; + } + } + } + + CVPixelBufferUnlockBaseAddress(imageBuffer, 0); + new_frame = true; + } +} + +- (unsigned char*) getFrame +{ + if (new_frame){ + new_frame = false; + return buffer; + } else return NULL; +} + + +- (void)dealloc +{ + if(buffer) delete []buffer; + [super dealloc]; +} +@end + +AVfoundationCamera::AVfoundationCamera(CameraConfig *cam_cfg):CameraEngine(cam_cfg) +{ + disconnected = false; + running=false; + lost_frames=0; + timeout = 1000; + + uvcController = NULL; + + session = NULL; + videoDeviceInput = NULL; + videoOutput = NULL; + + videoDevice = NULL; + grabber = NULL; + + cam_cfg->driver = DRIVER_DEFAULT; +} + +AVfoundationCamera::~AVfoundationCamera() +{ + if (uvcController) [uvcController release]; + //if (videoDevice) [videoDevice release]; + if (videoOutput) [videoOutput release]; + if (grabber) [grabber release]; +} + +int AVfoundationCamera::getDeviceCount() { + + NSInteger dev_count0 = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo].count; + NSInteger dev_count1 = [AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed].count; + return (dev_count0 + dev_count1); +} + +std::vector AVfoundationCamera::getCameraConfigs(int dev_id) { + std::vector cfg_list; + + int dev_count = getDeviceCount(); + if (dev_count==0) return cfg_list; + + NSMutableArray *captureDevices = [NSMutableArray arrayWithCapacity:dev_count]; + NSArray *dev_list0 = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; + for (AVCaptureDevice* device in dev_list0) [captureDevices addObject:device]; + NSArray *dev_list1 = [AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed]; + for (AVCaptureDevice* device in dev_list1)[captureDevices addObject:device]; + + int cam_id = -1; + for (AVCaptureDevice* device in captureDevices) { + cam_id ++; + if ((dev_id>=0) && (dev_id!=cam_id)) continue; + + CameraConfig cam_cfg; + // CameraTool::initCameraConfig(&cam_cfg); + + cam_cfg.driver = DRIVER_DEFAULT; + cam_cfg.device = cam_id; + + if ([device localizedName]!=NULL) + sprintf(cam_cfg.name,"%s",[[device localizedName] cStringUsingEncoding:NSUTF8StringEncoding]); + else sprintf(cam_cfg.name,"unknown device"); + + std::vector fmt_list; + int last_format = FORMAT_UNKNOWN; + NSArray *captureDeviceFormats = [device formats]; + for (AVCaptureDeviceFormat *format in captureDeviceFormats) { + + int32_t codec = CMVideoFormatDescriptionGetCodecType((CMVideoFormatDescriptionRef)[format formatDescription]); + + if (codec == '420f') codec = '420v'; + + cam_cfg.cam_format = FORMAT_UNKNOWN; + for (int i=FORMAT_MAX-1;i>0;i--) { + if (codec == codec_table[i]) { + cam_cfg.cam_format = i; + break; + } + } + + if (cam_cfg.cam_format != last_format) { + std::sort(fmt_list.begin(), fmt_list.end()); + cfg_list.insert( cfg_list.end(), fmt_list.begin(), fmt_list.end() ); + fmt_list.clear(); + last_format = cam_cfg.cam_format; + } + + CMVideoDimensions dim = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[format formatDescription]); + + cam_cfg.cam_width = dim.width; + cam_cfg.cam_height = dim.height; + + for (AVFrameRateRange *frameRateRange in [format videoSupportedFrameRateRanges]) { + cam_cfg.cam_fps = roundf([frameRateRange maxFrameRate]*10)/10.0f; + fmt_list.push_back(cam_cfg); + } + } + std::sort(fmt_list.begin(), fmt_list.end()); + cfg_list.insert( cfg_list.end(), fmt_list.begin(), fmt_list.end() ); + } + + //[captureDevices release]; + return cfg_list; +} + +CameraEngine* AVfoundationCamera::getCamera(CameraConfig *cam_cfg) { + + int dev_count = getDeviceCount(); + if (dev_count==0) return NULL; + + if ((cam_cfg->device==SETTING_MIN) || (cam_cfg->device==SETTING_DEFAULT)) cam_cfg->device=0; + else if (cam_cfg->device==SETTING_MAX) cam_cfg->device=dev_count-1; + + std::vector cfg_list = AVfoundationCamera::getCameraConfigs(cam_cfg->device); + if (cam_cfg->cam_format==FORMAT_UNKNOWN) cam_cfg->cam_format = cfg_list[0].cam_format; + setMinMaxConfig(cam_cfg,cfg_list); + + if (cam_cfg->force) return new AVfoundationCamera(cam_cfg); + + for (int i=0;icam_format != cfg_list[i].cam_format) continue; + if ((cam_cfg->cam_width >=0) && (cam_cfg->cam_width != cfg_list[i].cam_width)) continue; + if ((cam_cfg->cam_height >=0) && (cam_cfg->cam_height != cfg_list[i].cam_height)) continue; + if ((cam_cfg->cam_fps >=0) && (cam_cfg->cam_fps != cfg_list[i].cam_fps)) continue; + + return new AVfoundationCamera(cam_cfg); + } + + return NULL; +} + +bool AVfoundationCamera::initCamera() { + + int dev_count = getDeviceCount(); + if ((dev_count==0) || (cfg->device < 0) || (cfg->device>=dev_count)) return false; + + NSMutableArray *videoDevices = [NSMutableArray arrayWithCapacity:dev_count]; + NSArray *dev_list0 = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; + for (AVCaptureDevice* dev in dev_list0) [videoDevices addObject:dev]; + NSArray *dev_list1 = [AVCaptureDevice devicesWithMediaType:AVMediaTypeMuxed]; + for (AVCaptureDevice* dev in dev_list1) [videoDevices addObject:dev]; + + videoDevice = [videoDevices objectAtIndex:cfg->device]; + if (videoDevice==NULL) return false; + //else [videoDevices release]; + + if ([videoDevice localizedName]!=NULL) + sprintf(cfg->name,"%s",[[videoDevice localizedName] cStringUsingEncoding:NSUTF8StringEncoding]); + else sprintf(cfg->name,"unknown"); + + session = [[AVCaptureSession alloc] init]; + if (session==NULL) return false; + + NSError *error = nil; + videoDeviceInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error]; + if (videoDeviceInput == NULL) return false; + + std::vector cfg_list = getCameraConfigs(cfg->device); + if (cfg->cam_format==FORMAT_UNKNOWN) cfg->cam_format = cfg_list[0].cam_format; + setMinMaxConfig(cfg, cfg_list); + + AVCaptureDeviceFormat *selectedFormat = NULL; + AVFrameRateRange *selectedFrameRateRange = NULL; + NSArray *videoDeviceFormats = [videoDevice formats]; + for (AVCaptureDeviceFormat *format in videoDeviceFormats) { + + CMVideoDimensions dim = CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[format formatDescription]); + + if ((dim.width!=cfg->cam_width) || (dim.height!=cfg->cam_height)) continue; // wrong size + + int cam_format=0; + int32_t codec = CMVideoFormatDescriptionGetCodecType((CMVideoFormatDescriptionRef)[format formatDescription]); + if (codec == '420f') codec = '420v'; + + for (int i=FORMAT_MAX-1;i>0;i--) { + + if ((codec == codec_table[i]) && (cfg->cam_format==i)) { + cam_format = i; + break; + } + } + + if (!cam_format) continue; // wrong format + else selectedFormat = format; + + for (AVFrameRateRange *frameRateRange in [selectedFormat videoSupportedFrameRateRanges]) { + float framerate = roundf([frameRateRange maxFrameRate]*10)/10.0f; + if (framerate==cfg->cam_fps) { // found exact framerate + selectedFrameRateRange = frameRateRange; + break; + } + } + + if (selectedFrameRateRange) break; + } + + if ((selectedFrameRateRange==NULL) || (selectedFormat==NULL)) return false; + + [videoDevice lockForConfiguration:&error]; + [videoDevice setActiveFormat:selectedFormat]; + if ([[[videoDevice activeFormat] videoSupportedFrameRateRanges] containsObject:selectedFrameRateRange]) { + //[videoDevice setActiveVideoMaxFrameDuration:[selectedFrameRateRange maxFrameDuration]]; + [videoDevice setActiveVideoMinFrameDuration:[selectedFrameRateRange minFrameDuration]]; + } + [videoDevice unlockForConfiguration]; + + CMVideoDimensions dimensions = + CMVideoFormatDescriptionGetDimensions((CMVideoFormatDescriptionRef)[[videoDevice activeFormat] formatDescription]); + + cfg->cam_width = dimensions.width; + cfg->cam_height = dimensions.height; + + for (AVFrameRateRange *frameRateRange in [[videoDevice activeFormat] videoSupportedFrameRateRanges]) + { + cfg->cam_fps = roundf([frameRateRange maxFrameRate]*10)/10.0f; + if (CMTIME_COMPARE_INLINE([frameRateRange minFrameDuration], ==, [videoDevice activeVideoMinFrameDuration])) { + break; + } + } + + videoOutput = [[AVCaptureVideoDataOutput alloc] init]; + + unsigned int pixelformat = kCVPixelFormatType_422YpCbCr8_yuvs; + cfg->src_format = FORMAT_YUYV; + if (cfg->color) { + pixelformat = kCVPixelFormatType_24RGB; + cfg->src_format = FORMAT_RGB; + } + + NSDictionary *pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithDouble:cfg->cam_width], (id)kCVPixelBufferWidthKey, + [NSNumber numberWithDouble:cfg->cam_height], (id)kCVPixelBufferHeightKey, + [NSNumber numberWithUnsignedInt: pixelformat ], + (id)kCVPixelBufferPixelFormatTypeKey, nil]; + + [videoOutput setVideoSettings:pixelBufferOptions]; + + videoOutput.alwaysDiscardsLateVideoFrames = YES; + [session addInput:videoDeviceInput]; + [session addOutput:videoOutput]; + + // configure output. + setupFrame(); + dispatch_queue_t queue = dispatch_queue_create("queue", NULL); + if (cfg->frame) { + grabber = [[FrameGrabber alloc] initWithCropSize:cfg->cam_width :cfg->cam_height :cfg->buf_format :cfg->frame_width :cfg->frame_height :cfg->frame_xoff :cfg->frame_yoff]; + } else { + grabber = [[FrameGrabber alloc] initWithCameraSize:cfg->cam_width :cfg->cam_height: cfg->buf_format]; + } + [videoOutput setSampleBufferDelegate:grabber queue:queue]; + dispatch_release(queue); + + NSString *uniqueID = [videoDevice uniqueID]; + if (uniqueID!=NULL) { + uvcController = [[VVUVCController alloc] initWithDeviceIDString:[videoDevice uniqueID]]; + if (uvcController) [uvcController resetParamsToDefaults]; + } // else std::cout << "VVUVCController NULL" << std::endl; + + return true; +} + +unsigned char* AVfoundationCamera::getFrame() +{ + unsigned char *cambuffer = [grabber getFrame]; + if (cambuffer!=NULL) { + timeout=100; + lost_frames=0; + return cambuffer; + } else { + usleep(10000); + lost_frames++; + if (lost_frames>timeout) { + disconnected=true; + running=false; + } + return NULL; + } + + return NULL; +} + +bool AVfoundationCamera::startCamera() +{ + [session startRunning]; + applyCameraSettings(); + running = true; + return true; +} + +bool AVfoundationCamera::stopCamera() +{ + [session stopRunning]; + running=false; + return true; +} + +bool AVfoundationCamera::stillRunning() { + return running; +} + +bool AVfoundationCamera::resetCamera() +{ + return (stopCamera() && startCamera()); +} + +bool AVfoundationCamera::closeCamera() +{ + if ((uvcController) && (!disconnected)) { + updateSettings(); + // CameraTool::saveSettings(); + } + [session release]; + return true; +} + +bool AVfoundationCamera::showSettingsDialog(bool lock) { + + if (uvcController) { + [uvcController closeSettingsWindow]; + [uvcController openSettingsWindow]; + } + + return lock; +} + +bool AVfoundationCamera::hasCameraSettingAuto(int mode) { + + if (uvcController==NULL) return false; + + switch (mode) { + case EXPOSURE: + return [uvcController autoExposureModeSupported]; + case WHITE: + return [uvcController autoWhiteBalanceSupported]; + case FOCUS: + return [uvcController autoFocusSupported]; + case COLOR_HUE: + return [uvcController autoHueSupported]; + } + + return false; +} + +bool AVfoundationCamera::getCameraSettingAuto(int mode) { + + if (uvcController==NULL) return false; + if (!hasCameraSettingAuto(mode)) return false; + + switch (mode) { + case EXPOSURE: + if ([uvcController autoExposureMode]>UVC_AEMode_Manual) return true; + else return false; + case WHITE: + return [uvcController autoWhiteBalance]; + case FOCUS: + return [uvcController autoFocus]; + case COLOR_HUE: + return [uvcController autoHue]; + } + + return false; +} + +bool AVfoundationCamera::setCameraSettingAuto(int mode, bool flag) { + + if (uvcController==NULL) return false; + if (!hasCameraSettingAuto(mode)) return false; + + switch (mode) { + case EXPOSURE: + if (flag==true) [uvcController setAutoExposureMode:UVC_AEMode_Auto]; + else [uvcController setAutoExposureMode:UVC_AEMode_Manual]; + return true; + case WHITE: + [uvcController setAutoWhiteBalance:flag]; + return true; + case FOCUS: + [uvcController setAutoFocus:flag]; + return true; + case COLOR_HUE: + [uvcController setAutoHue:flag]; + return true; + } + + return false; +} + +bool AVfoundationCamera::hasCameraSetting(int mode) { + + if (uvcController==NULL) return false; + + switch (mode) { + case BRIGHTNESS: return [uvcController brightSupported]; + case CONTRAST: return [uvcController contrastSupported]; + case SHARPNESS: return [uvcController sharpnessSupported]; + case GAMMA: return [uvcController gammaSupported]; + case GAIN: return [uvcController gainSupported]; + case AUTO_GAIN: return hasCameraSettingAuto(GAIN); + case EXPOSURE: return [uvcController exposureTimeSupported]; + case AUTO_EXPOSURE: return hasCameraSettingAuto(EXPOSURE); + case FOCUS: return [uvcController focusSupported]; + case AUTO_FOCUS: return hasCameraSettingAuto(FOCUS); + case WHITE: return [uvcController whiteBalanceSupported]; + case AUTO_WHITE: return hasCameraSettingAuto(WHITE); + case BACKLIGHT: return [uvcController backlightSupported]; + case SATURATION: return [uvcController saturationSupported]; + case COLOR_HUE: return [uvcController hueSupported]; + case AUTO_HUE: return hasCameraSettingAuto(COLOR_HUE); + case POWERLINE: return [uvcController powerLineSupported]; + } + + return false; +} + +bool AVfoundationCamera::setCameraSetting(int mode, int setting) { + + if (uvcController==NULL) return false; + if (!hasCameraSetting(mode)) return false; + setCameraSettingAuto(mode, false); + + switch (mode) { + case BRIGHTNESS: [uvcController setBright:setting]; return true; + case CONTRAST: [uvcController setContrast:setting]; return true; + case SHARPNESS: [uvcController setSharpness:setting]; return true; + case GAIN: [uvcController setGain:setting]; return true; + case GAMMA: [uvcController setGamma:setting]; return true; + case EXPOSURE: [uvcController setExposureTime:setting]; return true; + case FOCUS: [uvcController setFocus:setting]; return true; + case WHITE: [uvcController setWhiteBalance:setting]; return true; + case BACKLIGHT: [uvcController setBacklight:setting]; return true; + case SATURATION: [uvcController setSaturation:setting]; return true; + case COLOR_HUE: [uvcController setHue:setting]; return true; + case POWERLINE: [uvcController setPowerLine:setting]; return true; + } + + return false; +} + +int AVfoundationCamera::getCameraSetting(int mode) { + + if (uvcController==NULL) return 0; + if (!hasCameraSetting(mode)) return 0; + //if (getCameraSettingAuto(mode)) return 0; + + switch (mode) { + case BRIGHTNESS: return [uvcController bright]; + case CONTRAST: return [uvcController contrast]; + case SHARPNESS: return [uvcController sharpness]; + case GAIN: return [uvcController gain]; + case GAMMA: return [uvcController gamma]; + case EXPOSURE: return [uvcController exposureTime]; + case FOCUS: return [uvcController focus]; + case WHITE: return [uvcController whiteBalance]; + case BACKLIGHT: return [uvcController backlight]; + case SATURATION: return [uvcController saturation]; + case COLOR_HUE: return [uvcController hue]; + case POWERLINE: return [uvcController powerLine]; + } + + return 0; +} + +int AVfoundationCamera::getMaxCameraSetting(int mode) { + + if (uvcController==NULL) return 0; + if (!hasCameraSetting(mode)) return 0; + //if (getCameraSettingAuto(mode)) return 0; + + switch (mode) { + case BRIGHTNESS: return [uvcController maxBright]; + case CONTRAST: return [uvcController maxContrast]; + case SHARPNESS: return [uvcController maxSharpness]; + case GAIN: return [uvcController maxGain]; + case GAMMA: return [uvcController maxGamma]; + case EXPOSURE: return [uvcController maxExposureTime]; + case FOCUS: return [uvcController maxFocus]; + case WHITE: return [uvcController maxWhiteBalance]; + case BACKLIGHT: return [uvcController maxBacklight]; + case SATURATION: return [uvcController maxSaturation]; + case COLOR_HUE: return [uvcController maxHue]; + case POWERLINE: return [uvcController maxPowerLine]; + } + + return 0; +} + +int AVfoundationCamera::getMinCameraSetting(int mode) { + + if (uvcController==NULL) return 0; + if (!hasCameraSetting(mode)) return 0; + //if (getCameraSettingAuto(mode)) return 0; + + switch (mode) { + case BRIGHTNESS: return [uvcController minBright]; + case CONTRAST: return [uvcController minContrast]; + case GAIN: return [uvcController minGain]; + case GAMMA: return [uvcController minGamma]; + case EXPOSURE: return [uvcController minExposureTime]; + case SHARPNESS: return [uvcController minSharpness]; + case FOCUS: return [uvcController minFocus]; + case WHITE: return [uvcController minWhiteBalance]; + case BACKLIGHT: return [uvcController minBacklight]; + case SATURATION: return [uvcController minSaturation]; + case COLOR_HUE: return [uvcController minHue]; + case POWERLINE: return [uvcController minPowerLine]; + } + + return 0; +} + +bool AVfoundationCamera::setDefaultCameraSetting(int mode) { + + if (uvcController==NULL) return false; + if (!hasCameraSetting(mode)) return false; + setCameraSettingAuto(mode, false); + + switch (mode) { + case BRIGHTNESS: + [uvcController resetBright]; + default_brightness = [uvcController bright]; + break; + case CONTRAST: + [uvcController resetContrast]; + default_contrast = [uvcController contrast]; + break; + case SHARPNESS: + [uvcController resetSharpness]; + default_sharpness = [uvcController sharpness]; + break; + case GAIN: + [uvcController resetGain]; + default_gain = [uvcController gain]; + break; + case GAMMA: + [uvcController resetGamma]; + default_gamma = [uvcController gamma]; + break; + case EXPOSURE: + [uvcController resetExposureTime]; + default_exposure = [uvcController exposureTime]; + break; + case FOCUS: + [uvcController resetFocus]; + default_focus = [uvcController focus]; + break; + case WHITE: + [uvcController resetWhiteBalance]; + default_white = [uvcController whiteBalance]; + break; + case BACKLIGHT: + [uvcController resetBacklight]; + default_backlight = [uvcController backlight]; + break; + case SATURATION: + [uvcController resetSaturation]; + default_saturation = [uvcController saturation]; + break; + case COLOR_HUE: + [uvcController resetHue]; + default_hue = [uvcController hue]; + break; + case POWERLINE: + [uvcController resetPowerLine]; + default_powerline = [uvcController powerLine]; + break; + } + + return false; +} + +int AVfoundationCamera::getDefaultCameraSetting(int mode) { + + if (uvcController==NULL) return 0; + if (!hasCameraSetting(mode)) return 0; + + switch (mode) { + case BRIGHTNESS: return default_brightness; + case CONTRAST: return default_contrast; + case GAIN: return default_gain; + case GAMMA: return default_gamma; + case EXPOSURE: return default_exposure; + case SHARPNESS: return default_sharpness; + case FOCUS: return default_focus; + case WHITE: return default_white; + case BACKLIGHT: return default_backlight; + case SATURATION: return default_saturation; + case COLOR_HUE: return default_hue; + case POWERLINE: return default_powerline; + } + + return 0; +} + +int AVfoundationCamera::getCameraSettingStep(int mode) { + if (!hasCameraSetting(mode)) return 0; + return 1; +} diff --git a/src/mynteye/uvc/macosx/CameraEngine.cpp b/src/mynteye/uvc/macosx/CameraEngine.cpp new file mode 100644 index 0000000..c8020e9 --- /dev/null +++ b/src/mynteye/uvc/macosx/CameraEngine.cpp @@ -0,0 +1,697 @@ +// Copyright 2018 Slightech Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include "CameraEngine.h" + +const char* dstr[] = { "default","dc1394","ps3eye","raspi","uvccam","","","","","","file","folder"}; + +const char* fstr[] = { "unknown", "mono8", "mono16", "rgb8", "rgb16", "mono16s", "rgb16s", "raw8", "raw16", "rgba", "yuyv", "uyvy", "yuv411", "yuv444", "yuv420p", "yuv410p", "yvyu", "yuv211", "", "", "jpeg", "mjpeg", "mpeg", "mpeg2", "mpeg4", "h263", "h264", "", "", "", "dvpal", "dvntsc" }; + + +void CameraEngine::printInfo() { + printf("camera: %s\n",cfg->name); + printf("driver: %s\n",dstr[cfg->driver]); + printf("codec: %s\n",fstr[cfg->cam_format]); + if (cfg->frame_mode<0) { + if (cfg->cam_fps==(int)cfg->cam_fps) printf("format: %dx%d, %dfps\n",cfg->frame_width,cfg->frame_height,(int)cfg->cam_fps); + else printf("format: %dx%d, %.1ffps\n",cfg->frame_width,cfg->frame_height,cfg->cam_fps); + } + else printf("format7_%d: %dx%d\n",cfg->frame_mode,cfg->frame_width,cfg->frame_height); +} + +void CameraEngine::setMinMaxConfig(CameraConfig *cam_cfg, std::vector cfg_list) { + if ((cam_cfg->cam_width>0) && (cam_cfg->cam_height>0) && (cam_cfg->cam_fps>0)) return; + + int max_width = 0; + int max_height = 0; + int min_width = INT_MAX; + int min_height = INT_MAX; + float max_fps = 0; + float min_fps = INT_MAX; + + for (unsigned int i=0;icam_format) continue; // wrong format + if (cfg_list[i].frame_mode!=cam_cfg->frame_mode) continue; // wrong format7 + + if (cfg_list[i].cam_width>max_width) max_width = cfg_list[i].cam_width; + if (cfg_list[i].cam_widthmax_height) max_height = cfg_list[i].cam_height; + if (cfg_list[i].cam_widthcam_width==SETTING_MAX) || (cam_cfg->cam_width>max_width)) cam_cfg->cam_width = max_width; + else if ((cam_cfg->cam_width==SETTING_MIN) || (cam_cfg->cam_widthcam_width = min_width; + if ((cam_cfg->cam_height==SETTING_MAX) || (cam_cfg->cam_height>max_height)) cam_cfg->cam_height = max_height; + else if ((cam_cfg->cam_height==SETTING_MIN) || (cam_cfg->cam_heightcam_height = min_height; + + if (cam_cfg->cam_fps>0) return; + + for (unsigned int i=0;icam_format) continue; // wrong format + if (cfg_list[i].frame_mode!=cam_cfg->frame_mode) continue; // wrong format7 + if ((cfg_list[i].cam_width!=cam_cfg->cam_width) || (cfg_list[i].cam_height!=cam_cfg->cam_height)) continue; // wrong size + + if (cfg_list[i].cam_fps>max_fps) max_fps = cfg_list[i].cam_fps; + if (cfg_list[i].cam_fpscam_fps==SETTING_MAX) || (cam_cfg->cam_fps>max_fps)) cam_cfg->cam_fps = max_fps; + if ((cam_cfg->cam_fps==SETTING_MIN) || (cam_cfg->cam_fpscam_fps = min_fps; +} + +bool CameraEngine::showSettingsDialog(bool lock) { + return true; +} + +void CameraEngine::control(unsigned char key) { + if(!settingsDialog) return; + + int step = 0; + switch(key) { + case VALUE_DECREASE: + step = getCameraSettingStep(currentCameraSetting); + if (step==1) step = (int)((float)ctrl_max/256.0f); + if (step<1) step=1; + ctrl_val -= step; + if (ctrl_valctrl_max) ctrl_val=ctrl_max; + setCameraSetting(currentCameraSetting,ctrl_val); + break; + case SETTING_PREVIOUS: + currentCameraSetting--; + if(currentCameraSetting<0) { + if (cfg->color) currentCameraSetting=COLOR_BLUE; + else currentCameraSetting=BACKLIGHT; + } + if ((!hasCameraSetting(currentCameraSetting)) || (getCameraSettingAuto(currentCameraSetting))) + control(SETTING_PREVIOUS); + break; + case SETTING_NEXT: + currentCameraSetting++; + if ((cfg->color) && (currentCameraSetting>COLOR_BLUE)) currentCameraSetting=0; + else if ((!cfg->color) && (currentCameraSetting>BACKLIGHT)) currentCameraSetting=0; + if ((!hasCameraSetting(currentCameraSetting)) || (getCameraSettingAuto(currentCameraSetting))) + control(SETTING_NEXT); + break; + case KEY_D: + resetCameraSettings(); + break; + + } + + ctrl_val = getCameraSetting(currentCameraSetting); + ctrl_max = getMaxCameraSetting(currentCameraSetting); + ctrl_min = getMinCameraSetting(currentCameraSetting); +} + +void CameraEngine::uyvy2gray(int width, int height, unsigned char *src, unsigned char *dest) { + + for (int i=height*width/2;i>0;i--) { + src++; + *dest++ = *src++; + src++; + *dest++ = *src++; + } +} + +void CameraEngine::crop_uyvy2gray(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += 2*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + cam_buf += 2*x_off; + for (int j=frm_w/2;j>0;j--) { + cam_buf++; + *frm_buf++ = *cam_buf++; + cam_buf++; + *frm_buf++ = *cam_buf++; + } + cam_buf += 2*x_end; + } +} + +void CameraEngine::yuyv2gray(int width, int height, unsigned char *src, unsigned char *dest) { + for (int i=height*width/2;i>0;i--) { + *dest++ = *src++; + src++; + *dest++ = *src++; + src++; + } +} + +void CameraEngine::crop_yuyv2gray(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += 2*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + cam_buf += 2*x_off; + for (int j=frm_w/2;j>0;j--) { + *frm_buf++ = *cam_buf++; + cam_buf++; + *frm_buf++ = *cam_buf++; + cam_buf++; + } + cam_buf += 2*x_end; + } +} + +//void yuv2rgb_conv(int Y1, int Y2, int U, int V, unsigned char *dest) { +void yuv2rgb_conv(int Y, int U, int V, unsigned char *dest) { + + /*int R = (int)(Y + 1.370705f * V); + int G = (int)(Y - 0.698001f * V - 0.337633f * U); + int B = (int)(Y + 1.732446f * U);*/ + + // integer method is twice as fast + int C = 298*(Y - 16); + int R = (C + 409*V + 128) >> 8; + int G = (C - 100*U - 208*V + 128) >> 8; + int B = (C + 516*U + 128) >> 8; + + SAT(R); + SAT(G); + SAT(B); + + *dest++ = R; + *dest++ = G; + *dest++ = B; +} + +void CameraEngine::uyvy2rgb(int width, int height, unsigned char *src, unsigned char *dest) { + + int Y1,Y2,U,V; + + for(int i=width*height/2;i>0;i--) { + // U and V are +-0.5 + U = *src++ - 128; + Y1 = *src++; + V = *src++ - 128; + Y2 = *src++; + + yuv2rgb_conv(Y1,U,V,dest); + yuv2rgb_conv(Y2,U,V,dest+=3); + dest+=3; + } +} + +void CameraEngine::crop_uyvy2rgb(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + int Y1,Y2,U,V; + + cam_buf += 2*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + cam_buf += 2*x_off; + for (int j=frm_w/2;j>0;j--) { + // U and V are +-0.5 + U = *cam_buf++ - 128; + Y1 = *cam_buf++; + V = *cam_buf++ - 128; + Y2 = *cam_buf++; + + yuv2rgb_conv(Y1,U,V,frm_buf); + yuv2rgb_conv(Y2,U,V,frm_buf+=3); + frm_buf+=3; + } + cam_buf += 2*x_end; + } +} + +void CameraEngine::yuyv2rgb(int width, int height, unsigned char *src, unsigned char *dest) { + + int Y1,Y2,U,V; + + for(int i=width*height/2;i>0;i--) { + + Y1 = *src++; + U = *src++ - 128; + Y2 = *src++; + V = *src++ - 128; + + yuv2rgb_conv(Y1,U,V,dest); + yuv2rgb_conv(Y2,U,V,dest+=3); + dest+=3; + } +} + +void CameraEngine::crop_yuyv2rgb(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + int Y1,Y2,U,V; + + cam_buf += 2*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + cam_buf += 2*x_off; + for (int j=frm_w/2;j>0;j--) { + // U and V are +-0.5 + Y1 = *cam_buf++; + U = *cam_buf++ - 128; + Y2 = *cam_buf++; + V = *cam_buf++ - 128; + + yuv2rgb_conv(Y1,U,V,frm_buf); + yuv2rgb_conv(Y2,U,V,frm_buf+=3); + frm_buf+=3; + } + cam_buf += 2*x_end; + } +} + +void CameraEngine::gray2rgb(int width, int height, unsigned char *src, unsigned char *dest) { + + int size = width*height; + for (int i=size;i>0;i--) { + unsigned char pixel = *src++; + *dest++ = pixel; + *dest++ = pixel; + *dest++ = pixel; + } +} + +void CameraEngine::crop_gray2rgb(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + cam_buf += x_off; + for (int j=frm_w;j>0;j--) { + unsigned char pixel = *cam_buf++; + *frm_buf++ = pixel; + *frm_buf++ = pixel; + *frm_buf++ = pixel; + } + cam_buf += x_end; + } +} + +void CameraEngine::grayw2rgb(int width, int height, unsigned char *src, unsigned char *dest) { + unsigned short src_pixel; + unsigned char dest_pixel; + unsigned char pixel; + + for(int i=width*height;i>0;i--) { + pixel = *src++ ; + src_pixel = pixel | (*src++ << 8); + dest_pixel = (unsigned char)(src_pixel/4); + *dest++ = dest_pixel; + *dest++ = dest_pixel; + *dest++ = dest_pixel; + } +} + +void CameraEngine::crop_grayw2rgb(int cam_w, unsigned char *src, unsigned char *dest) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + unsigned short src_pixel; + unsigned char dest_pixel; + unsigned char pixel; + + src += 2*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + src += 2*x_off; + for (int j=frm_w;j>0;j--) { + pixel = *src++; + src_pixel = pixel | (*src++ << 8); + dest_pixel = (unsigned char)(src_pixel/4); + + *dest++ = dest_pixel; + *dest++ = dest_pixel; + *dest++ = dest_pixel; + } + src += 2*x_end; + } + +} + +void CameraEngine::grayw2gray(int width, int height, unsigned char *src, unsigned char *dest) { + + unsigned short value; + unsigned char pixel; + + for(int i=width*height;i>0;i--) { + pixel = *src++; + value = pixel | (*src++ << 8); + *dest++ = (unsigned char)(value/4); + } +} + +void CameraEngine::crop_grayw2gray(int cam_w, unsigned char *src, unsigned char *dest) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + unsigned short src_pixel; + unsigned char pixel; + + src += 2*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + for (int i=frm_h;i>0;i--) { + + src += 2*x_off; + for (int j=frm_w;j>0;j--) { + pixel = *src++; + src_pixel = pixel | (*src++ << 8); + *dest++ = (unsigned char)(src_pixel/4); + } + src += 2*x_end; + } +} + +void CameraEngine::crop(int cam_w, int cam_h, unsigned char *cam_buf, unsigned char *frm_buf, int b) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += b*(y_off*cam_w + x_off); + + for (int i=frm_h;i>0;i--) { + memcpy(frm_buf, cam_buf, b*cam_w); + + cam_buf += b*cam_w; + frm_buf += b*frm_w; + } + } + +void CameraEngine::flip(int width, int height, unsigned char *src, unsigned char *dest, int b) { + + int size = b*width*height; + dest += size-1; + for(int i=size;i>0;i--) { + *dest-- = *src++; + } +} + +void CameraEngine::flip_crop(int cam_w, int cam_h, unsigned char *cam_buf, unsigned char *frm_buf, int b) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += b*y_off*cam_w; + frm_buf += b*frm_w*frm_h-1; + int xend = (cam_w-(frm_w+x_off)); + + for (int i=frm_h;i>0;i--) { + + cam_buf += b*x_off; + for (int j=b*frm_w;j>0;j--) { + *frm_buf-- = *cam_buf++; + } + cam_buf += b*xend; + } +} + +void CameraEngine::rgb2gray(int width, int height, unsigned char *src, unsigned char *dest) { + + int R,G,B; + for (int i=width*height;i>0;i--) { + + R = *src++; + G = *src++; + B = *src++; + *dest++ = HBT(R*77 + G*151 + B*28); + } +} + +void CameraEngine::flip_rgb2gray(int width, int height, unsigned char *src, unsigned char *dest) { + + int size = width*height; + dest += size-1; + + int R,G,B; + for (int i=size;i>0;i--) { + + R = *src++; + G = *src++; + B = *src++; + *dest-- = HBT(R*77 + G*151 + B*28); + } +} +void CameraEngine::crop_rgb2gray(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += 3*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + + int R,G,B; + for (int i=frm_h;i>0;i--) { + + cam_buf += 3*x_off; + for (int j=frm_w;j>0;j--) { + R = *cam_buf++; + G = *cam_buf++; + B = *cam_buf++; + *frm_buf++ = HBT(R*77 + G*151 + B*28); + } + cam_buf += 3*x_end; + } +} + +void CameraEngine::flip_crop_rgb2gray(int cam_w, unsigned char *cam_buf, unsigned char *frm_buf) { + + if(!cfg->frame) return; + int x_off = cfg->frame_xoff; + int y_off = cfg->frame_yoff; + int frm_w = cfg->frame_width; + int frm_h = cfg->frame_height; + + cam_buf += 3*y_off*cam_w; + int x_end = cam_w-(frm_w+x_off); + frm_buf += frm_w*frm_h-1; + + int R,G,B; + for (int i=frm_h;i>0;i--) { + + cam_buf += 3*x_off; + for (int j=frm_w;j>0;j--) { + R = *cam_buf++; + G = *cam_buf++; + B = *cam_buf++; + *frm_buf-- = HBT(R*77 + G*151 + B*28); + } + cam_buf += 3*x_end; + } +} + +void CameraEngine::setupFrame() { + + if(!cfg->frame) { + cfg->frame_width = cfg->cam_width; + cfg->frame_height = cfg->cam_height; + return; + } + + // size sanity check + if (cfg->frame_width%2!=0) cfg->frame_width--; + if (cfg->frame_height%2!=0) cfg->frame_height--; + + if (cfg->frame_width<=0) cfg->frame_width = cfg->cam_width; + if (cfg->frame_height<=0) cfg->frame_height = cfg->cam_height; + + if (cfg->frame_width > cfg->cam_width) cfg->frame_width = cfg->cam_width; + if (cfg->frame_height > cfg->cam_height) cfg->frame_height = cfg->cam_height; + + // no cropping if same size + if ((cfg->frame_width==cfg->cam_width) && (cfg->frame_height==cfg->cam_height)) { + + cfg->frame_width = cfg->cam_width; + cfg->frame_height = cfg->cam_height; + cfg->frame = false; + return; + } + + // offset sanity check + int xdiff = cfg->cam_width-cfg->frame_width; + if (xdiff<0) cfg->frame_xoff = 0; + else if (cfg->frame_xoff > xdiff) cfg->frame_xoff = xdiff; + int ydiff = cfg->cam_height-cfg->frame_height; + if (ydiff<0) cfg->frame_yoff = 0; + else if (cfg->frame_yoff > ydiff) cfg->frame_yoff = ydiff; + +} + +void CameraEngine::applyCameraSetting(int mode, int value) { + + if (!hasCameraSetting(mode)) return; + + switch (value) { + case SETTING_AUTO: + if (hasCameraSettingAuto(mode)) { + setCameraSettingAuto(mode,true); + return; + } + case SETTING_OFF: + case SETTING_DEFAULT: + setDefaultCameraSetting(mode); + return; + case SETTING_MIN: + setCameraSettingAuto(mode,false); + setCameraSetting(mode,getMinCameraSetting(mode)); return; + case SETTING_MAX: + setCameraSettingAuto(mode,false); + setCameraSetting(mode,getMaxCameraSetting(mode)); return; + default: { + int max = getMaxCameraSetting(mode); + int min = getMinCameraSetting(mode); + if (valuemax) value = max; + setCameraSettingAuto(mode,false); + setCameraSetting(mode,value); + } + } +} + +void CameraEngine::resetCameraSettings() { + + for (int mode=MODE_MIN;mode<=MODE_MAX;mode++) + setDefaultCameraSetting(mode); +} + +void CameraEngine::applyCameraSettings() { + + resetCameraSettings(); + + applyCameraSetting(BRIGHTNESS,cfg->brightness); + applyCameraSetting(CONTRAST,cfg->contrast); + applyCameraSetting(SHARPNESS,cfg->sharpness); + applyCameraSetting(GAIN,cfg->gain); + applyCameraSetting(EXPOSURE,cfg->exposure); + applyCameraSetting(SHUTTER,cfg->shutter); + applyCameraSetting(FOCUS,cfg->focus); + applyCameraSetting(WHITE,cfg->white); + applyCameraSetting(POWERLINE,cfg->powerline); + applyCameraSetting(BACKLIGHT,cfg->backlight); + applyCameraSetting(GAMMA,cfg->gamma); + + applyCameraSetting(SATURATION,cfg->saturation); + applyCameraSetting(COLOR_HUE,cfg->hue); + applyCameraSetting(COLOR_RED,cfg->red); + applyCameraSetting(COLOR_GREEN,cfg->green); + applyCameraSetting(COLOR_BLUE,cfg->blue); +} + +int CameraEngine::updateSetting(int mode) { + + if (!hasCameraSetting(mode)) return SETTING_OFF; + if (getCameraSettingAuto(mode)) return SETTING_AUTO; + + int value = getCameraSetting(mode); + if (value==getDefaultCameraSetting(mode)) value = SETTING_DEFAULT; + else if (value==getMinCameraSetting(mode)) value = SETTING_MIN; + else if (value==getMaxCameraSetting(mode)) value = SETTING_MAX; + + return value; +} + +void CameraEngine::updateSettings() { + + cfg->brightness = updateSetting(BRIGHTNESS); + cfg->contrast = updateSetting(CONTRAST); + cfg->sharpness = updateSetting(SHARPNESS); + + cfg->gain = updateSetting(GAIN); + cfg->exposure = updateSetting(EXPOSURE); + cfg->shutter = updateSetting(SHUTTER); + cfg->focus = updateSetting(FOCUS); + cfg->white = updateSetting(WHITE); + cfg->backlight = updateSetting(BACKLIGHT); + cfg->powerline = updateSetting(POWERLINE); + cfg->gamma = updateSetting(GAMMA); + + if (cfg->color) { + cfg->saturation = updateSetting(SATURATION); + cfg->hue = updateSetting(COLOR_HUE); + cfg->red = updateSetting(COLOR_RED); + cfg->green = updateSetting(COLOR_GREEN); + cfg->blue = updateSetting(COLOR_BLUE); + } else { + cfg->saturation = SETTING_OFF; + cfg->hue = SETTING_OFF; + cfg->red = SETTING_OFF; + cfg->green = SETTING_OFF; + cfg->blue = SETTING_OFF; + } + +} diff --git a/src/mynteye/uvc/macosx/CameraEngine.h b/src/mynteye/uvc/macosx/CameraEngine.h new file mode 100644 index 0000000..964b1f2 --- /dev/null +++ b/src/mynteye/uvc/macosx/CameraEngine.h @@ -0,0 +1,306 @@ +// Copyright 2018 Slightech Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef CAMERAENGINE_H +#define CAMERAENGINE_H + +#include +#include +#include +#include + +#include +#include + +#include + +#define SAT(c) \ +if (c & (~255)) { if (c < 0) c = 0; else c = 255; } +#define HBT(x) (unsigned char)((x)>>8) + +#define KEY_A 4 +#define KEY_B 5 +#define KEY_C 6 +#define KEY_D 7 +#define KEY_E 8 +#define KEY_F 9 +#define KEY_G 10 +#define KEY_H 11 +#define KEY_I 12 +#define KEY_J 13 +#define KEY_K 14 +#define KEY_L 15 +#define KEY_M 16 +#define KEY_N 17 +#define KEY_O 18 +#define KEY_P 19 +#define KEY_Q 20 +#define KEY_R 21 +#define KEY_S 22 +#define KEY_T 23 +#define KEY_U 24 +#define KEY_V 25 +#define KEY_W 26 +#define KEY_X 27 +#define KEY_Y 29 +#define KEY_Z 28 + +#define KEY_SPACE 44 +#define KEY_RIGHT 79 +#define KEY_LEFT 80 +#define KEY_DOWN 81 +#define KEY_UP 82 + +#define WIDTH 640 +#define HEIGHT 480 + +#define SETTING_DEFAULT -100000 +#define SETTING_AUTO -200000 +#define SETTING_MIN -300000 +#define SETTING_MAX -400000 +#define SETTING_OFF -500000 + +#define FORMAT_UNSUPPORTED -1 +#define FORMAT_UNKNOWN 0 +#define FORMAT_GRAY 1 +#define FORMAT_GRAY16 2 +#define FORMAT_RGB 3 +#define FORMAT_RGB16 4 +#define FORMAT_GRAY16S 5 +#define FORMAT_RGB16S 6 +#define FORMAT_RAW8 7 +#define FORMAT_RAW16 8 +#define FORMAT_RGBA 9 +#define FORMAT_YUYV 10 +#define FORMAT_UYVY 11 +#define FORMAT_YUV411 12 +#define FORMAT_YUV444 13 +#define FORMAT_420P 14 +#define FORMAT_410P 15 +#define FORMAT_YVYU 16 +#define FORMAT_YUV211 17 +#define FORMAT_JPEG 20 +#define FORMAT_MJPEG 21 +#define FORMAT_MPEG 22 +#define FORMAT_MPEG2 23 +#define FORMAT_MPEG4 24 +#define FORMAT_H263 25 +#define FORMAT_H264 26 +#define FORMAT_DVPAL 30 +#define FORMAT_DVNTSC 31 +#define FORMAT_MAX 31 + +extern const char* fstr[]; +extern const char* dstr[]; + +#define DRIVER_DEFAULT 0 +#define DRIVER_DC1394 1 +#define DRIVER_PS3EYE 2 +#define DRIVER_RASPI 3 +#define DRIVER_UVCCAM 4 +#define DRIVER_FILE 10 +#define DRIVER_FOLDER 11 + +#define VALUE_INCREASE 79 +#define VALUE_DECREASE 80 +#define SETTING_NEXT 81 +#define SETTING_PREVIOUS 82 + +enum CameraSetting { BRIGHTNESS, CONTRAST, SHARPNESS, AUTO_GAIN, GAIN, AUTO_EXPOSURE, EXPOSURE, SHUTTER, AUTO_FOCUS, FOCUS, AUTO_WHITE, WHITE, GAMMA, POWERLINE, BACKLIGHT, SATURATION, AUTO_HUE, COLOR_HUE, COLOR_RED, COLOR_GREEN, COLOR_BLUE }; +#define MODE_MIN BRIGHTNESS +#define MODE_MAX COLOR_BLUE + +struct CameraConfig { + + char path[256]; + + int driver; + int device; + + char name[256]; + char src[256]; + + bool color; + bool frame; + + int cam_format; + int src_format; + int buf_format; + + int cam_width; + int cam_height; + float cam_fps; + + int frame_width; + int frame_height; + int frame_xoff; + int frame_yoff; + int frame_mode; + + int brightness; + int contrast; + int sharpness; + + int gain; + int shutter; + int exposure; + int focus; + int gamma; + int white; + int powerline; + int backlight; + + int saturation; + int hue; + int red; + int blue; + int green; + + bool force; + + bool operator < (const CameraConfig& c) const { + + //if (device < c.device) return true; + //if (cam_format < c.cam_format) return true; + + if (cam_width > c.cam_width || (cam_width == c.cam_width && cam_height < c.cam_height)) + return true; + + if (cam_width == c.cam_width && cam_height == c.cam_height) { + return (cam_fps > c.cam_fps); + } else return false; + + } +}; + +class CameraEngine +{ +public: + + CameraEngine(CameraConfig *cam_cfg) { + cfg = cam_cfg; + settingsDialog=false; + + if (cfg->color) cfg->buf_format=FORMAT_RGB; + else cfg->buf_format=FORMAT_GRAY; + } + + virtual ~CameraEngine() {}; + + virtual bool initCamera() = 0; + virtual bool startCamera() = 0; + virtual unsigned char* getFrame() = 0; + virtual bool stopCamera() = 0; + virtual bool resetCamera() = 0; + virtual bool closeCamera() = 0; + virtual bool stillRunning() = 0; + + void printInfo(); + static void setMinMaxConfig(CameraConfig *cam_cfg, std::vector cfg_list); + + virtual int getCameraSettingStep(int mode) = 0; + virtual int getMinCameraSetting(int mode) = 0; + virtual int getMaxCameraSetting(int mode) = 0; + virtual int getCameraSetting(int mode) = 0; + virtual bool setCameraSetting(int mode, int value) = 0; + virtual bool setCameraSettingAuto(int mode, bool flag) = 0; + virtual bool getCameraSettingAuto(int mode) = 0; + virtual bool setDefaultCameraSetting(int mode) = 0; + virtual int getDefaultCameraSetting(int mode) = 0; + virtual bool hasCameraSetting(int mode) = 0; + virtual bool hasCameraSettingAuto(int mode) = 0; + + virtual bool showSettingsDialog(bool lock); + virtual void control(unsigned char key); + + int getId() { return cfg->device; } + int getFps() { return (int)floor(cfg->cam_fps+0.5f); } + int getWidth() { return cfg->frame_width; } + int getHeight() { return cfg->frame_height; } + int getFormat() { return cfg->buf_format; } + char* getName() { return cfg->name; } + +protected: + + CameraConfig *cfg; + + unsigned char* frm_buffer; + unsigned char* cam_buffer; + + int lost_frames, timeout; + + bool running; + bool settingsDialog; + int currentCameraSetting; + + void crop(int width, int height, unsigned char *src, unsigned char *dest, int bytes); + void flip(int width, int height, unsigned char *src, unsigned char *dest, int bytes); + void flip_crop(int width, int height, unsigned char *src, unsigned char *dest, int bytes); + + void rgb2gray(int width, int height, unsigned char *src, unsigned char *dest); + void crop_rgb2gray(int width, unsigned char *src, unsigned char *dest); + void flip_rgb2gray(int width, int height, unsigned char *src, unsigned char *dest); + void flip_crop_rgb2gray(int width, unsigned char *src, unsigned char *dest); + + void uyvy2gray(int width, int height, unsigned char *src, unsigned char *dest); + void crop_uyvy2gray(int width, unsigned char *src, unsigned char *dest); + void yuyv2gray(int width, int height, unsigned char *src, unsigned char *dest); + void crop_yuyv2gray(int width, unsigned char *src, unsigned char *dest); + void yuv2gray(int width, int height, unsigned char *src, unsigned char *dest); + void crop_yuv2gray(int width, unsigned char *src, unsigned char *dest); + + void gray2rgb(int width, int height, unsigned char *src, unsigned char *dest); + void crop_gray2rgb(int width, unsigned char *src, unsigned char *dest); + void uyvy2rgb(int width, int height, unsigned char *src, unsigned char *dest); + void crop_uyvy2rgb(int width, unsigned char *src, unsigned char *dest); + void yuyv2rgb(int width, int height, unsigned char *src, unsigned char *dest); + void crop_yuyv2rgb(int width, unsigned char *src, unsigned char *dest); + + void grayw2rgb(int width, int height, unsigned char *src, unsigned char *dest); + void crop_grayw2rgb(int width, unsigned char *src, unsigned char *dest); + void grayw2gray(int width, int height, unsigned char *src, unsigned char *dest); + void crop_grayw2gray(int width, unsigned char *src, unsigned char *dest); + + void resetCameraSettings(); + void applyCameraSettings(); + void applyCameraSetting(int mode, int value); + void updateSettings(); + int updateSetting(int mode); + + void setupFrame(); + + int default_brightness; + int default_contrast; + int default_sharpness; + + int default_gain; + int default_shutter; + int default_exposure; + int default_focus; + int default_gamma; + int default_powerline; + int default_white; + int default_backlight; + + int default_saturation; + int default_hue; + int default_red; + int default_blue; + int default_green; + + int ctrl_min; + int ctrl_max; + int ctrl_val; +}; +#endif diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Headers b/src/mynteye/uvc/macosx/USBBusProber.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Resources b/src/mynteye/uvc/macosx/USBBusProber.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/USBBusProber b/src/mynteye/uvc/macosx/USBBusProber.framework/USBBusProber new file mode 120000 index 0000000..8da966e --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/USBBusProber @@ -0,0 +1 @@ +Versions/Current/USBBusProber \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProbeClass.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProbeClass.h new file mode 100644 index 0000000..6ea403f --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProbeClass.h @@ -0,0 +1,55 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#import + + +@interface BusProbeClass : NSObject { + UInt8 _classNum; + UInt8 _subclassNum; + UInt8 _protocolNum; + NSString * _className; + NSString * _subclassName; + NSString * _protocolName; +} + ++ (BusProbeClass *)withClass:(UInt8)classNum subclass:(UInt8)subclassNum protocol:(UInt8)protocolNum; +- (UInt8)classNum; +- (void)setClassNum:(UInt8)classNum; +- (UInt8)subclassNum; +- (void)setSubclassNum:(UInt8)subclassNum; +- (UInt8)protocolNum; +- (void)setProtocolNum:(UInt8)protocolNum; +- (NSString *)className; +- (void)setClassName:(NSString *)deviceClass; +- (NSString *)subclassName; +- (void)setSubclassName:(NSString *)deviceSubclass; +- (NSString *)protocolName; +- (void)setProtocolName:(NSString *)deviceProtocol; +- (NSString *)classDescription; +- (NSString *)subclassDescription; +- (NSString *)protocolDescription; + +-(NSMutableDictionary *)dictionaryVersionOfMe; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProbeDevice.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProbeDevice.h new file mode 100644 index 0000000..71c66f3 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProbeDevice.h @@ -0,0 +1,82 @@ +/* + * Copyright � 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import +#import "BusProberSharedFunctions.h" +#import "OutlineViewNode.h" +#import "BusProbeClass.h" + +@interface BusProbeDevice : NSObject { + OutlineViewNode * _rootNode; + UInt8 _speed; + USBDeviceAddress _address; + UInt32 _locationID; + UInt32 _vendorID; + UInt32 _productID; + UInt16 _usbRelease; + BusProbeClass * _deviceClassInfo; + BusProbeClass * _lastInterfaceClassInfo; + UInt8 _lastInterfaceSubclass; + int _currentInterfaceNumber; + uint32_t _portInfo; +} + +- (OutlineViewNode *)rootNode; +- (void)addProperty:(char *)property withValue:(char *)value atDepth:(int)depth; +- (void)addNumberProperty:(char *)property value:(UInt32)value size:(int)sizeInBytes atDepth:(int)depth usingStyle:(int)style; +- (void)addStringProperty:(char *)property fromStringIndex:(UInt8)strIndex fromDeviceInterface:(IOUSBDeviceRef)deviceIntf atDepth:(int)depth; + +- (NSString *)deviceName; +- (void)setDeviceName:(NSString *)name; +- (NSString *)deviceDescription; +- (void)setDeviceDescription:(NSString *)description; +- (UInt8)speed; +- (void)setSpeed:(UInt8)speed; +- (USBDeviceAddress)address; +- (void)setAddress:(USBDeviceAddress)address; +- (uint32_t)portInfo; +- (void)setPortInfo:(uint32_t)portInfo; +//- (UInt32)locationID; +//- (void)setLocationID:(UInt32)locationID; +- (UInt32)vendorID; +- (void)setVendorID:(UInt32)vendorID; +- (UInt32)productID; +- (void)setProductID:(UInt32)productID; +- (UInt32)locationID; +- (void)setLocationID:(UInt32)locationID; +- (BusProbeClass *)deviceClassInfo; +- (void)setDeviceClassInfo:(BusProbeClass *)classInfo; +- (BusProbeClass *)lastInterfaceClassInfo; +- (void)setLastInterfaceClassInfo:(BusProbeClass *)classInfo; +- (int)currentInterfaceNumber; +- (void)setCurrentInterfaceNumber:(int)currentNum; +- (UInt16)usbRelease; +- (void)setUSBRelease:(UInt16)usbRelease; + +- (NSString *)descriptionForName:(NSString*)name; +- (NSString *)description; +- (NSMutableDictionary *)dictionaryVersionOfMe; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProber.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProber.h new file mode 100644 index 0000000..1188170 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProber.h @@ -0,0 +1,65 @@ +/* + * Copyright � 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import +#import +#import +#import +#import +#import "BusProberSharedFunctions.h" +#import "OutlineViewNode.h" +#import "BusProbeDevice.h" +#import "BusProbeClass.h" + +#import "DescriptorDecoder.h" + +@interface BusProber : NSObject { + id _listener; + + NSMutableArray * _devicesArray; + CFRunLoopSourceRef _runLoopSource; +} + +- (BOOL)registerForUSBNotifications; +- (void)unregisterForUSBNotifications; + +- (void)refreshData:(BOOL)shouldForce; + +- (void)processDevice:(IOUSBDeviceRef)deviceIntf deviceNumber:(int)deviceNumber usbName:(NSString*)usbName; +- (void)PrintPortInfo: (uint32_t)portInfo forDevice:(BusProbeDevice *)thisDevice; +- (void)GetAndPrintNumberOfEndpoints:(IOUSBDeviceRef)deviceIntf forDevice:(BusProbeDevice *)thisDevice portInfo:(UInt32)portInfo; + +- (NSMutableArray *) devicesArray; + +@end + + + + +@protocol BusProberListener + +- (void)busProberInformationDidChange:(BusProber *)aProber; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProberSharedFunctions.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProberSharedFunctions.h new file mode 100644 index 0000000..517756e --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/BusProberSharedFunctions.h @@ -0,0 +1,87 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#include + + +#import +#import +#import +#import +#import +#import "BusProbeClass.h" + +typedef struct IOUSBDeviceStruct320** IOUSBDeviceRef ; +typedef struct IOUSBInterfaceStruct220** IOUSBInterfaceRef ; + +#define ROOT_LEVEL 0 +#define DEVICE_DESCRIPTOR_LEVEL ROOT_LEVEL + 1 +#define CONFIGURATION_DESCRIPTOR_LEVEL ROOT_LEVEL + 1 +#define INTERFACE_LEVEL CONFIGURATION_DESCRIPTOR_LEVEL + 1 +#define ENDPOINT_LEVEL INTERFACE_LEVEL + 1 +#define HID_DESCRIPTOR_LEVEL INTERFACE_LEVEL + 1 +#define DFU_DESCRIPTOR_LEVEL INTERFACE_LEVEL + 1 +#define CCID_DESCRIPTOR_LEVEL INTERFACE_LEVEL + 1 +#define HUB_DESCRIPTOR_LEVEL ROOT_LEVEL + 1 +#define DEVICE_QUAL_DESCRIPTOR_LEVEL ROOT_LEVEL + 1 +#define BOS_DESCRIPTOR_LEVEL ROOT_LEVEL + 1 + +enum { + kIntegerOutputStyle = 0, + kHexOutputStyle = 1 +}; + +IOReturn GetNumberOfConfigurations( IOUSBDeviceRef deviceIntf, uint8_t * numberOfConfigs ); +IOReturn GetConfigurationDescriptor( IOUSBDeviceRef deviceIntf, uint8_t config, IOUSBConfigurationDescriptorPtr * description ); +IOReturn GetConfiguration( IOUSBDeviceRef deviceIntf, uint8_t * currentConfig ); +IOReturn GetPortInformation( IOUSBDeviceRef deviceIntf, uint32_t * portInfo ); +int GetDeviceLocationID( IOUSBDeviceRef deviceIntf, UInt32 * locationID ); +int GetDeviceSpeed( IOUSBDeviceRef deviceIntf, UInt8 * speed ); +int GetDeviceAddress( IOUSBDeviceRef deviceIntf, USBDeviceAddress * address ); +int SuspendDevice( IOUSBDeviceRef deviceIntf, BOOL suspend ); +IOReturn GetDescriptor(IOUSBDeviceRef deviceIntf, UInt8 descType, UInt8 descIndex, void *buf, UInt16 len, IOReturn *actError); +int GetStringDescriptor(IOUSBDeviceRef deviceIntf, UInt8 descIndex, void *buf, UInt16 len, UInt16 lang); +int GetClassDescriptor(IOUSBDeviceRef deviceIntf, UInt8 descType, UInt8 descIndex, void *buf, UInt16 len); +int GetDescriptorFromInterface(IOUSBDeviceRef deviceIntf, UInt8 descType, UInt8 descIndex, UInt16 wIndex, void *buf, UInt16 len, Boolean inCurrentConfig); +int GetCurrentConfiguration(IOUSBDeviceRef deviceIntf); + +BusProbeClass * GetDeviceClassAndSubClass(UInt8 * pcls); +BusProbeClass * GetInterfaceClassAndSubClass(UInt8 * pcls); +char * GetStringFromNumber(UInt32 value, int sizeInBytes, int style); +char * GetStringFromIndex(UInt8 strIndex, IOUSBDeviceRef deviceIntf); +NSString * VendorNameFromVendorID(NSString * intValueAsString); +NSString * GetUSBProductNameFromRegistry(io_registry_entry_t entry); + +void FreeString(char * cstr); +UInt16 Swap16(void *p); +uint32_t Swap32(void *p); +uint64_t Swap64(void *p); +uint32_t Swap24(void *p); + +const char * USBErrorToString(IOReturn status); + +IOUSBDescriptorHeader * NextDescriptor(const void *desc); +IOUSBDescriptorHeader* FindNextDescriptor(IOUSBConfigurationDescriptor *curConfDesc, const void *cur, UInt8 descType); +IOReturn FindNextInterfaceDescriptor(const IOUSBConfigurationDescriptor *configDescIn, const IOUSBInterfaceDescriptor *intfDesc,IOUSBInterfaceDescriptor **descOut); + diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeAudioInterfaceDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeAudioInterfaceDescriptor.h new file mode 100644 index 0000000..56625af --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeAudioInterfaceDescriptor.h @@ -0,0 +1,477 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + +#define kUSBAudioInterfaceDesc (0x24) +#define kUSBAudioEndPointDesc (0x25) + +// +#define kUSBAudioDescriptorBytesPerLine 16 +// String buffer size to log desciptor: +// Each byte in descriptor requires 3 chars: 2 for nibbles + a space char +// One byte for null terminator +#define kUSBAudioMaxDescriptorStringSize ( ( kUSBAudioDescriptorBytesPerLine * 3 ) + 1 ) * sizeof ( char ) + + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descContents[32]; +} GenericAudioDescriptor, *GenericAudioDescriptorPtr; +#pragma options align=reset + +enum AudioClassSpecific { + ACS_HEADER = 0x01, + ACS_INPUT_TERMINAL = 0x02, + ACS_OUTPUT_TERMINAL = 0x03, + ACS_MIXER_UNIT = 0x04, + ACS_SELECTOR_UNIT = 0x05, + ACS_FEATURE_UNIT = 0x06, + ACS_PROCESSING_UNIT = 0x07, + ACS_EXTENSION_UNIT = 0x08, + ACS_UNDEFINED = 0x20, + ACS_DEVICE = 0x21, + ACS_CONFIGURATION = 0x22, + ACS_STRING = 0x23, + ACS_INTERFACE = 0x24, + ACS_ENDPOINT = 0x25, + ACS_FORMAT_TYPE = 0x02, + ACS_FORMAT_SPECIFIC = 0x03, + ACS_FORMAT_TYPE_UNDEF = 0x00, + ACS_FORMAT_TYPE_I = 0x01, + ACS_FORMAT_TYPE_II = 0x02, + ACS_FORMAT_TYPE_III = 0x03, + ACS_ASTREAM_UNDEF = 0x00, + ACS_ASTREAM_GENERAL = 0x01, + ACS_ASTREAM_TYPE = 0x02, + ACS_ASTREAM_SPECIFIC = 0x03, + AC_CONTROL_SUBCLASS = 0x01, + AC_STREAM_SUBCLASS = 0x02, + AC_MIDI_SUBCLASS = 0x03 +}; + +// Standard Audio Stream Isoc Audio Data Endpoint Descriptor +// Refer to USB Audio Class Devices pp. 61-62. +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 asAddress; + UInt8 asAttributes; + UInt16 asMaxPacketSize; + UInt8 asInterval; + UInt8 asRefresh; + UInt8 asSynchAddress; +} AS_IsocEndPtDesc, *AS_IsocEndPtDescPtr; +#pragma options align=reset + +// Class Specific Audio Stream Isoc Audio Data Endpoint Descriptor +// Refer to USB Audio Class Devices pp. 62-63. +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubtype; + UInt8 asAttributes; + UInt8 bLockDelayUnits; + UInt16 wLockDelay; +} CSAS_IsocEndPtDesc, *CSAS_IsocEndPtDescPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt16 descVersNum; + UInt16 descTotalLength; + UInt8 descAICNum; /* Number of elements in the Audio Interface Collection. */ + UInt8 descInterfaceNum[1]; +} AudioCtrlHdrDescriptor, *AudioCtrlHdrDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descTermID; + UInt16 descTermType; + UInt8 descOutTermID; + UInt8 descNumChannels; + UInt16 descChannelConfig; + UInt8 descChannelNames; + UInt8 descTermName; +} AudioCtrlInTermDescriptor, *AudioCtrlInTermDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descTermID; + UInt16 descTermType; + UInt8 descInTermID; + UInt8 descSourceID; + UInt8 descTermName; +} AudioCtrlOutTermDescriptor, *AudioCtrlOutTermDescriptorPtr; + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descUnitID; + UInt8 descNumPins; + UInt8 descSourcePID[1]; +} AudioCtrlMixerDescriptor, *AudioCtrlMixerDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descUnitID; + UInt8 descNumPins; + UInt8 descSourcePID[1]; +} AudioCtrlSelectorDescriptor, *AudioCtrlSelectorDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descUnitID; + UInt8 descSourceID; + UInt8 descCtrlSize; + UInt8 descControls[1]; +} AudioCtrlFeatureDescriptor, *AudioCtrlFeatureDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descUnitID; + UInt16 descExtensionCode; + UInt8 descNumPins; + UInt8 descSourcePID[1]; +} AudioCtrlExtDescriptor, *AudioCtrlExtDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 terminalID; + UInt8 delay; + UInt16 formatTag; +} CSAS_InterfaceDescriptor, *CSAS_InterfaceDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct acProcessingDescriptor{ // ¥¥¥¥ WARNING ¥¥¥ ADDING ELEMENTS WILL KILL CODE!!! + UInt8 descLen; // size of this descriptor in bytes + UInt8 bDescriptorType; // const CS_INTERFACE + UInt8 bDescriptorSubtype; // const FEATURE_UNIT + UInt8 bUnitID; + UInt16 wProcessType; + UInt8 bNrPins; + UInt8 bSourceID; +}acProcessingDescriptor; +#pragma options align=reset +typedef acProcessingDescriptor *acProcessingDescriptorPtr; + +#pragma pack(1) +typedef struct acProcessingDescriptorCont{ + UInt8 bNrChannels; + UInt16 wChannelConfig; + UInt8 iChannelNames; + UInt8 bControlSize; + UInt16 bmControls; + UInt8 iProcessing; +}acProcessingDescriptorCont; +#pragma options align=reset +typedef acProcessingDescriptorCont *acProcessingDescriptorContPtr; + +/* Refer to USB PDF files for Frmts10.pdf pp. 10 for Type I Format Descriptor. */ +#pragma pack(1) +typedef struct { + UInt8 byte1; + UInt8 byte2; + UInt8 byte3; +} CSAS_Freq3, *CSAS_Freq3Ptr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + CSAS_Freq3 lowerSamFreq; + CSAS_Freq3 upperSamFreq; +} CSAS_ContTbl, *CSAS_ContTblPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + CSAS_Freq3 samFreq[1]; +} CSAS_DiscreteTbl, *CSAS_DiscreteTblPtr; +#pragma options align=reset +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 formatType; + UInt8 numberOfChannels; + UInt8 subFrameSize; + UInt8 bitResolution; + UInt8 sampleFreqType; + union { + CSAS_ContTbl cont; + CSAS_DiscreteTbl discrete; + } sampleFreqTables; +} CSAS_FormatTypeIDesc, *CSAS_FormatTypeIDescPtr; +#pragma options align=reset + +enum Audio20ClassSpecific { + AC20S_HEADER = 0x01, + AC20S_INPUT_TERMINAL = 0x02, + AC20S_OUTPUT_TERMINAL = 0x03, + AC20S_MIXER_UNIT = 0x04, + AC20S_SELECTOR_UNIT = 0x05, + AC20S_FEATURE_UNIT = 0x06, + AC20S_EFFECT_UNIT = 0x07, + AC20S_PROCESSING_UNIT = 0x08, + AC20S_EXTENSION_UNIT = 0x09, + AC20S_CLOCK_SOURCE = 0x0A, + AC20S_CLOCK_SELECTOR = 0x0B, + AC20S_CLOCK_MULTIPLIER = 0x0C, + AC20S_SAMPLE_RATE_CONVERTER = 0x0D, + + AC20S_FORMAT_TYPE_IV = 0x04, + AC20S_EXTENDED_FORMAT_TYPE_I = 0x81, + AC20S_EXTENDED_FORMAT_TYPE_II = 0x82, + AC20S_EXTENDED_FORMAT_TYPE_III = 0x83 + +}; + +// Standard Audio Stream Isoc Audio Data Endpoint Descriptor +// Refer to USB Audio Class Devices pp. 61-62. +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 asAddress; + UInt8 asAttributes; + UInt16 asMaxPacketSize; + UInt8 asInterval; +} AS20_IsocEndPtDesc, *AS20_IsocEndPtDescPtr; +#pragma options align=reset + +// Class Specific Audio Stream Isoc Audio Data Endpoint Descriptor +// Refer to USB Audio Class Devices pp. 62-63. +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubtype; + UInt8 asAttributes; + UInt8 bmControls; + UInt8 bLockDelayUnits; + UInt16 wLockDelay; +} CSA20S_IsocEndPtDesc, *CSAS20_IsocEndPtDescPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt16 descVersNum; + UInt8 descCategory; + UInt16 descTotalLength; + UInt8 descbmControls; +} Audio20CtrlHdrDescriptor, *Audio20CtrlHdrDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descTermID; + UInt16 descTermType; + UInt8 descOutTermID; + UInt8 descClockSourceID; + UInt8 descNumChannels; + UInt32 descChannelConfig; + UInt8 descChannelNames; + UInt16 descbmControls; + UInt8 descTermName; +} Audio20CtrlInTermDescriptor, *Audio20CtrlInTermDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descClockID; + UInt8 descAttributes; + UInt8 descbmControls; + UInt8 descAssocTermID; + UInt8 desciClockSourceName; +} Audio20ClockSourceDescriptor, *Audio20ClockSourceDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descClockID; + UInt8 descNumPins; + UInt8 descClockPID[1]; +} Audio20ClockSelectorDescriptor, *Audio20ClockSelectorDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descClockID; + UInt8 descClockSourceID; + UInt8 descbmControls; + UInt8 desciClockMultiplierName; +} Audio20ClockMultiplierDescriptor, *Audio20ClockMultiplierDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descTermID; + UInt16 descTermType; + UInt8 descInTermID; + UInt8 descSourceID; + UInt8 descClockSourceID; + UInt16 bmControls; + UInt8 descTermName; +} Audio20CtrlOutTermDescriptor, *Audio20CtrlOutTermDescriptorPtr; + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descUnitID; + UInt8 descSourceID; + UInt8 descControls[1]; +} Audio20CtrlFeatureDescriptor, *Audio20CtrlFeatureDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 descUnitID; + UInt16 descExtensionCode; + UInt8 descNumPins; + UInt8 descSourcePID[1]; +} Audio20CtrlExtDescriptor, *Audio20CtrlExtDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 terminalID; + UInt8 bmControls; + UInt8 formatType; + UInt32 bmFormats; + UInt8 numChannels; + UInt32 channelConfig; + UInt8 channelNames; +} CS20AS_InterfaceDescriptor, *CS20AS_InterfaceDescriptorPtr; +#pragma options align=reset + +#pragma pack(1) +typedef struct ac20ProcessingDescriptor{ // ¥¥¥¥ WARNING ¥¥¥ ADDING ELEMENTS WILL KILL CODE!!! + UInt8 descLen; // size of this descriptor in bytes + UInt8 bDescriptorType; // const CS_INTERFACE + UInt8 bDescriptorSubtype; // const FEATURE_UNIT + UInt8 bUnitID; + UInt16 wProcessType; + UInt8 bNrPins; + UInt8 bSourceID[1]; +}ac20ProcessingDescriptor, *ac20ProcessingDescriptorPtr; +#pragma options align=reset +typedef ac20ProcessingDescriptor *a20cProcessingDescriptorPtr; + +#pragma pack(1) +typedef struct ac20ProcessingDescriptorCont{ + UInt8 bNrChannels; + UInt32 wChannelConfig; + UInt8 iChannelNames; + UInt16 bmControls; + UInt8 iProcessing; +}ac20ProcessingDescriptorCont; +#pragma options align=reset +typedef ac20ProcessingDescriptorCont *ac20ProcessingDescriptorContPtr; + +/* Refer to USB PDF files for Frmts10.pdf pp. 10 for Type I Format Descriptor. */ +#pragma pack(1) +typedef struct { + UInt8 descLen; + UInt8 descType; + UInt8 descSubType; + UInt8 formatType; + UInt8 slotSize; + UInt8 bitResolution; +} CS20AS_FormatTypeIDesc, *CS20AS_FormatTypeIDescPtr; +#pragma options align=reset + +@interface DecodeAudioInterfaceDescriptor : NSObject { + +} + ++(void)decodeBytes:(UInt8 *)descriptor forDevice:(BusProbeDevice *)thisDevice; +void decodeBytes10( UInt8 *descriptor, BusProbeDevice * thisDevice ); +void decodeBytes20( UInt8 *descriptor, BusProbeDevice * thisDevice ); + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeBOSDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeBOSDescriptor.h new file mode 100644 index 0000000..552b396 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeBOSDescriptor.h @@ -0,0 +1,35 @@ +/* + * Copyright © 2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#import +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +@interface DecodeBOSDescriptor : NSObject { + +} + ++ (void)decodeBytes:(IOUSBBOSDescriptor *)bosDescriptor forDevice:(BusProbeDevice *)thisDevice deviceInterface:(IOUSBDeviceRef)deviceIntf; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeCommClassDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeCommClassDescriptor.h new file mode 100644 index 0000000..e187d1d --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeCommClassDescriptor.h @@ -0,0 +1,44 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +@interface DecodeCommClassDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice; + +@end + +@interface DecodeMassStorageDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeConfigurationDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeConfigurationDescriptor.h new file mode 100644 index 0000000..3210e5d --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeConfigurationDescriptor.h @@ -0,0 +1,37 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +@interface DecodeConfigurationDescriptor : NSObject { + +} + ++ (void)decodeBytes:(IOUSBConfigurationDescHeader *)cfg forDevice:(BusProbeDevice *)thisDevice deviceInterface:(IOUSBDeviceRef)deviceIntf configNumber:(int)iconfig currentConfig:(int)cconfig isOtherSpeedDesc:(BOOL)isOtherSpeedDesc; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeDeviceDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeDeviceDescriptor.h new file mode 100644 index 0000000..06e8998 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeDeviceDescriptor.h @@ -0,0 +1,36 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +@interface DecodeDeviceDescriptor : NSObject { + +} + ++ (void)decodeBytes:(IOUSBDeviceDescriptor *)dev forDevice:(BusProbeDevice *)thisDevice deviceInterface:(IOUSBDeviceRef)deviceIntf wasSuspended:(BOOL)wasSuspended; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeDeviceQualifierDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeDeviceQualifierDescriptor.h new file mode 100644 index 0000000..1a21ca7 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeDeviceQualifierDescriptor.h @@ -0,0 +1,37 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +@interface DecodeDeviceQualifierDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeEndpointDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeEndpointDescriptor.h new file mode 100644 index 0000000..97f237e --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeEndpointDescriptor.h @@ -0,0 +1,40 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + +enum { + kEndpointAddressBit = 7, + kEndpointAddressMask = ( 1 << kEndpointAddressBit ) +}; + +@interface DecodeEndpointDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice isOtherSpeedDesc:(BOOL)isOtherSpeedDesc; ++ (void)decodeBytesCompanion:(Byte *)p forDevice:(BusProbeDevice *)thisDevice endpoint:(UInt8)epType; +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeHIDDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeHIDDescriptor.h new file mode 100644 index 0000000..c66882d --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeHIDDescriptor.h @@ -0,0 +1,226 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + +#define UnpackReportSize(packedByte) ((packedByte) & 0x03) +#define UnpackReportType(packedByte) (((packedByte) & 0x0C) >> 2) +#define UnpackReportTag(packedByte) (((packedByte) & 0xF0) >> 4) + +enum +{ + kReport_TypeMain = 0, + kReport_TypeGlobal = 1, + kReport_TypeLocal = 2, + kReport_TypeReserved = 3, + + kReport_TagLongItem = 0x0F, + + // main items + kReport_TagInput = 0x08, + kReport_TagOutput = 0x09, + kReport_TagFeature = 0x0B, + kReport_TagCollection = 0x0A, + kReport_TagEndCollection = 0x0C, + + // global items + kReport_TagUsagePage = 0x00, + kReport_TagLogicalMin = 0x01, + kReport_TagLogicalMax = 0x02, + kReport_TagPhysicalMin = 0x03, + kReport_TagPhysicalMax = 0x04, + kReport_TagUnitExponent = 0x05, + kReport_TagUnit = 0x06, + kReport_TagReportSize = 0x07, + kReport_TagReportID = 0x08, + kReport_TagReportCount = 0x09, + kReport_TagPush = 0x0A, + kReport_TagPop = 0x0B, + + // local items + kReport_TagUsage = 0x00, + kReport_TagUsageMin = 0x01, + kReport_TagUsageMax = 0x02, + kReport_TagDesignatorIndex = 0x03, + kReport_TagDesignatorMin = 0x04, + kReport_TagDesignatorMax = 0x05, + kReport_TagStringIndex = 0x07, + kReport_TagStringMin = 0x08, + kReport_TagStringMax = 0x09, + kReport_TagSetDelimiter = 0x0A +}; + +// Collection constants +enum +{ + kCollection_Physical = 0x00, + kCollection_Application = 0x01, + kCollection_Logical = 0x02 +}; + +// I/O constants (used for Input/Output/Feature tags) +enum +{ + kIO_Data_or_Constant = 0x0001, + kIO_Array_or_Variable = 0x0002, + kIO_Absolute_or_Relative = 0x0004, + kIO_NoWrap_or_Wrap = 0x0008, + kIO_Linear_or_NonLinear = 0x0010, + kIO_PreferredState_or_NoPreferred = 0x0020, + kIO_NoNullPosition_or_NullState = 0x0040, + kIO_NonVolatile_or_Volatile = 0x0080, // reserved for Input + kIO_BitField_or_BufferedBytes = 0x0100 +}; + +// Usage pages from HID Usage Tables spec 1.0 +enum +{ + kUsage_PageGenericDesktop = 0x01, + kUsage_PageSimulationControls = 0x02, + kUsage_PageVRControls = 0x03, + kUsage_PageSportControls = 0x04, + kUsage_PageGameControls = 0x05, + kUsage_PageKeyboard = 0x07, + kUsage_PageLED = 0x08, + kUsage_PageButton = 0x09, + kUsage_PageOrdinal = 0x0A, + kUsage_PageTelephonyDevice = 0x0B, + kUsage_PageConsumer = 0x0C, + kUsage_PageDigitizers = 0x0D, + kUsage_PagePID = 0x0F, + kUsage_PageUnicode = 0x10, + kUsage_PageAlphanumericDisplay = 0x14, + kUsage_PageMonitor = 0x80, + kUsage_PageMonitorEnumeratedValues = 0x81, + kUsage_PageMonitorVirtualControl = 0x82, + kUsage_PageMonitorReserved = 0x83, + kUsage_PagePowerDevice = 0x84, + kUsage_PageBatterySystem = 0x85, + kUsage_PowerClassReserved = 0x86, + kUsage_PowerClassReserved2 = 0x87, + kUsage_VendorDefinedStart = 0xff00 +}; + +// Usage constants for Generic Desktop page (01) from HID Usage Tables spec 1.0 +enum +{ + kUsage_01_Pointer = 0x01, + kUsage_01_Mouse = 0x02, + kUsage_01_Joystick = 0x04, + kUsage_01_GamePad = 0x05, + kUsage_01_Keyboard = 0x06, + kUsage_01_Keypad = 0x07, + + kUsage_01_X = 0x30, + kUsage_01_Y = 0x31, + kUsage_01_Z = 0x32, + kUsage_01_Rx = 0x33, + kUsage_01_Ry = 0x34, + kUsage_01_Rz = 0x35, + kUsage_01_Slider = 0x36, + kUsage_01_Dial = 0x37, + kUsage_01_Wheel = 0x38, + kUsage_01_HatSwitch = 0x39, + kUsage_01_CountedBuffer = 0x3A, + kUsage_01_ByteCount = 0x3B, + kUsage_01_MotionWakeup = 0x3C, + + kUsage_01_Vx = 0x40, + kUsage_01_Vy = 0x41, + kUsage_01_Vz = 0x42, + kUsage_01_Vbrx = 0x43, + kUsage_01_Vbry = 0x44, + kUsage_01_Vbrz = 0x45, + kUsage_01_Vno = 0x46, + + kUsage_01_SystemControl = 0x80, + kUsage_01_SystemPowerDown = 0x81, + kUsage_01_SystemSleep = 0x82, + kUsage_01_SystemWakeup = 0x83, + kUsage_01_SystemContextMenu = 0x84, + kUsage_01_SystemMainMenu = 0x85, + kUsage_01_SystemAppMenu = 0x86, + kUsage_01_SystemMenuHelp = 0x87, + kUsage_01_SystemMenuExit = 0x88, + kUsage_01_SystemMenuSelect = 0x89, + kUsage_01_SystemMenuRight = 0x8A, + kUsage_01_SystemMenuLeft = 0x8B, + kUsage_01_SystemMenuUp = 0x8C, + kUsage_01_SystemMenuDown = 0x8D +}; + +/*! + @typedef IOUSBCCIDDescriptor + @discussion USB Device CHIP CARD ID Descriptor. See the USB CCID Specification at http://www.usb.org. + */ + +#pragma pack(1) +struct IOUSBCCIDDescriptor +{ + UInt8 bLength; + UInt8 bDescriptorType; + UInt16 bcdCCID; + UInt8 bMaxSlotIndex; + UInt8 bVoltageSupport; + UInt32 dwProtocols; + UInt32 dwDefaultClock; + UInt32 dwMaximumClock; + UInt8 bNumClockSupported; + UInt32 dwDataRate; + UInt32 dwMaxDataRate; + UInt8 bNumDataRatesSupported; + UInt32 dwMaxIFSD; + UInt32 dwSyncProtocols; + UInt32 dwMechanical; + UInt32 dwFeatures; + UInt32 dwMaxCCIDMessageLength; + UInt8 bClassGetResponse; + UInt8 bClassEnvelope; + UInt16 wLcdLayout; + UInt8 bPINSupport; + UInt8 bMaxCCIDBusySlots; +}; +typedef struct IOUSBCCIDDescriptor IOUSBCCIDDescriptor; +typedef IOUSBCCIDDescriptor * IOUSBCCIDDescriptorPtr; + +#pragma options align=reset + + + + +/* end HID Constants Spec 1.0 */ + +@interface DecodeHIDDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice withDeviceInterface:(IOUSBDeviceRef)deviceIntf isinCurrentConfig:(Boolean)inCurrentConfig; + ++(void)decodeHIDReport:(UInt8 *)reportDesc forDevice:(BusProbeDevice *)thisDevice atDepth:(UInt16)depth reportLen:(UInt16)length; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeHubDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeHubDescriptor.h new file mode 100644 index 0000000..c93a5f2 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeHubDescriptor.h @@ -0,0 +1,68 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + +struct IOUSBHubDescriptor { + UInt8 length; + UInt8 hubType; + UInt8 numPorts; + UInt16 characteristics __attribute__((packed)); + UInt8 powerOnToGood; // Port settling time, in 2ms + UInt8 hubCurrent; + // These are received packed, will have to be unpacked + UInt8 removablePortFlags[9]; + UInt8 pwrCtlPortFlags[9]; +}; + +typedef struct IOUSBHubDescriptor IOUSBHubDescriptor; + +// To cope with the extra fields in a USB3 hub descriptor + +struct IOUSB3HubDescriptor { + UInt8 length; + UInt8 hubType; + UInt8 numPorts; + UInt16 characteristics __attribute__((packed)); + UInt8 powerOnToGood; // Port settling time, in 2ms + UInt8 hubCurrent; + UInt8 hubHdrDecLat; // Header decode latency, new 3.0 field + UInt16 hubDelay __attribute__((packed)); // new in 3.0 + + // These are received packed, will have to be unpacked + UInt8 removablePortFlags[9]; + UInt8 pwrCtlPortFlags[9]; // This field does not exist in the 3.0 descriptor +}; + +typedef struct IOUSB3HubDescriptor IOUSB3HubDescriptor; + +@interface DecodeHubDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeInterfaceDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeInterfaceDescriptor.h new file mode 100644 index 0000000..0ac1a1a --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeInterfaceDescriptor.h @@ -0,0 +1,45 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +@interface DecodeInterfaceDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice withDeviceInterface:(IOUSBDeviceRef)deviceIntf; + +@end + +@interface DecodeInterfaceAssociationDescriptor : NSObject { + +} + ++ (void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice withDeviceInterface:(IOUSBDeviceRef)deviceIntf; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeVideoInterfaceDescriptor.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeVideoInterfaceDescriptor.h new file mode 100644 index 0000000..02a6663 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DecodeVideoInterfaceDescriptor.h @@ -0,0 +1,765 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "DescriptorDecoder.h" +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + + +enum VideoClassSpecific +{ + // Video Interface Class Code + CC_VIDEO = 0x0E, + + // Video Interface Subclass Codes + // + SC_UNDEFINED = 0x00, + SC_VIDEOCONTROL = 0x01, + SC_VIDEOSTREAMING = 0x02, + SC_VIDEO_INTERFACE_COLLECTION = 0x03, + + // Video Interface Protocol Codes + // + PC_PROTOCOL_UNDEFINED = 0x00, + + // Video Class Specific Descriptor Types + // + CS_UNDEFINED = 0x20, + CS_DEVICE = 0x21, + CS_CONFIGURATION = 0x22, + CS_STRING = 0x23, + // CS_INTERFACE = 0x24, + // CS_ENDPOINT = 0x25, + + // Video Class Specific Control Interface Descriptor Types + // + VC_DESCRIPTOR_UNDEFINED = 0x00, + VC_HEADER = 0x01, + VC_INPUT_TERMINAL = 0x02, + VC_OUTPUT_TERMINAL = 0x03, + VC_SELECTOR_UNIT = 0x04, + VC_PROCESSING_UNIT = 0x05, + VC_EXTENSION_UNIT = 0x06, + + // Video Class Specific Streaming Interface Descriptor Types + // + VS_UNDEFINED = 0x00, + VS_INPUT_HEADER = 0x01, + VS_OUTPUT_HEADER = 0x02, + VS_STILL_IMAGE_FRAME = 0x03, + VS_FORMAT_UNCOMPRESSED = 0x04, + VS_FRAME_UNCOMPRESSED = 0x05, + VS_FORMAT_MJPEG = 0x06, + VS_FRAME_MJPEG = 0x07, + VS_FORMAT_MPEG1 = 0x08, // Reserved in 1.1 + VS_FORMAT_MPEG2PS = 0x09, // Reserved in 1.1 + VS_FORMAT_MPEG2TS = 0x0a, + VS_FORMAT_DV = 0x0c, + VS_COLORFORMAT = 0x0d, + VS_FORMAT_VENDOR = 0x0e, // Reserved in 1.1 + VS_FRAME_VENDOR = 0x0f, // Reserved in 1.1 + VS_FORMAT_FRAME_BASED = 0x10, + VS_FRAME_FRAME_BASED = 0x11, + VS_FORMAT_STREAM_BASED = 0x12, + VS_FORMAT_MPEG4SL = 0xFF, // Undefined in 1.1 + + // Video Class Specific Endpoint Descriptor Subtypes + // + EP_UNDEFINED = 0x00, + EP_GENERAL = 0x01, + EP_ENDPOINT = 0x02, + EP_INTERRUPT = 0x03, + + // Video Class Specific Request Codes + // + RC_UNDEFINED = 0x00, + SET_CUR = 0x01, + GET_CUR = 0x81, + GET_MIN = 0x82, + GET_MAX = 0x83, + GET_RES = 0x84, + GET_LEN = 0x85, + GET_INFO = 0x86, + GET_DEF = 0x87, + + // Video Control Interface Control Selectors + // + VC_CONTROL_UNDEFINED = 0x00, + VC_VIDEO_POWER_MODE_CONTROL = 0x01, + VC_REQUEST_ERROR_CODE_CONTROL = 0x02, + VC_REQUEST_INDICATE_HOST_CLOCK_CONTROL = 0x03, + + // Terminal Control Selectors + // + TE_CONTROL_UNDEFINED = 0x00, + + // Selector Unit Control Selectors + // + SU_CONTROL_UNDEFINED = 0x00, + SU_INPUT_SELECT_CONTROL = 0x01, + + // Camera Terminal Control Selectors + // + CT_CONTROL_UNDEFINED = 0x00, + CT_SCANNING_MODE_CONTROL = 0x01, + CT_AE_MODE_CONTROL = 0x02, + CT_AE_PRIORITY_CONTROL = 0x03, + CT_EXPOSURE_TIME_ABSOLUTE_CONTROL = 0x04, + CT_EXPOSURE_TIME_RELATIVE_CONTROL = 0x05, + CT_FOCUS_ABSOLUTE_CONTROL = 0x06, + CT_FOCUS_RELATIVE_CONTROL = 0x07, + CT_FOCUS_AUTO_CONTROL = 0x08, + CT_IRIS_ABSOLUTE_CONTROL = 0x09, + CT_IRIS_RELATIVE_CONTROL = 0x0A, + CT_ZOOM_ABSOLUTE_CONTROL = 0x0B, + CT_ZOOM_RELATIVE_CONTROL = 0x0C, + CT_PANTILT_ABSOLUTE_CONTROL = 0x0D, + CT_PANTILT_RELATIVE_CONTROL = 0x0E, + CT_ROLL_ABSOLUTE_CONTROL = 0x0F, + CT_ROLL_RELATIVE_CONTROL = 0x10, + CT_PRIVACY_CONTROL = 0x11, + + // Processing Unit Control Selectors + // + PU_CONTROL_UNDEFINED = 0x00, + PU_BACKLIGHT_COMPENSATION_CONTROL = 0x01, + PU_BRIGHTNESS_CONTROL = 0x02, + PU_CONTRAST_CONTROL = 0x03, + PU_GAIN_CONTROL = 0x04, + PU_POWER_LINE_FREQUENCY_CONTROL = 0x05, + PU_HUE_CONTROL = 0x06, + PU_SATURATION_CONTROL = 0x07, + PU_SHARPNESS_CONTROL = 0x08, + PU_GAMMA_CONTROL = 0x09, + PU_WHITE_BALANCE_TEMPERATURE_CONTROL = 0x0A, + PU_WHITE_BALANCE_TEMPERATURE_AUTO_CONTROL = 0x0B, + PU_WHITE_BALANCE_COMPONENT_CONTROL = 0x0C, + PU_WHITE_BALANCE_COMPONENT_AUTO_CONTROL = 0x0D, + PU_DIGITAL_MULTIPLIER_CONTROL = 0x0E, + PU_DIGITAL_MULTIPLIER_LIMIT_CONTROL = 0x0F, + PU_HUE_AUTO_CONTROL = 0x10, + + // Extension Unit Control Selectors + // + XU_CONTROL_UNDEFINED = 0x00, + + // Video Streaming Interface Control Selectors + // + VS_CONTROL_UNDEFINED = 0x00, + VS_PROBE_CONTROL = 0x01, + VS_COMMIT_CONTROL = 0x02, + VS_STILL_PROBE_CONTROL = 0x03, + VS_STILL_COMMIT_CONTROL = 0x04, + VS_STILL_IMAGE_TRIGGER_CONTROL = 0x05, + VS_STREAM_ERROR_CODE_CONTROL = 0x06, + VS_GENERATE_KEY_FRAME_CONTROL = 0x07, + VS_UPDATE_FRAME_SEGMENT_CONTROL = 0x08, + VS_SYNCH_DELAY_CONTROL = 0x09, + + // USB Terminal Types + // + TT_VENDOR_SPECIFIC = 0x0100, + TT_STREAMING = 0x0101, + + // Input Terminal Types + // + ITT_VENDOR_SPECIFIC = 0x0200, + ITT_CAMERA = 0x0201, + ITT_MEDIA_TRANSPORT_UNIT = 0x0202, + + // Output Terminal Types + // + OTT_VENDOR_SPECIFIC = 0x0300, + OTT_DISPLAY = 0x0301, + OTT_MEDIA_TRANSPORT_OUTPUT = 0x0302, + + // External Terminal Types + // + EXTERNAL_VENDOR_SPECIFIC = 0x0400, + COMPOSITE_CONNECTOR = 0x0401, + SVIDEO_CONNECTOR = 0x0402, + COMPONENT_CONNECTOR = 0x0403, + + // Media Transport Terminal Control Selectors + // + MTT_CONTROL_UNDEFINED = 0x00, + TRANSPORT_CONTROL = 0X01, + ATN_INFORMATION_CONTROL = 0X02, + MEDIA_INFORMATION_CONTROL = 0X03, + TIME_CODE_INFORMATION_CONTROL = 0X04, + + +}; + +enum UncompressedFormatGUID +{ + UNCOMPRESSED_YUV2_HI = 0x3259555900000010ULL, + UNCOMPRESSED_YUV2_LO = 0x800000aa00389b71ULL, + UNCOMPRESSED_NV12_HI = 0x3231564E00000010ULL, + UNCOMPRESSED_NV12_LO = 0x800000aa00389b71ULL, +}; + +// Standard Video Class Control Interface Descriptor +// +#pragma pack(1) +struct IOUSBVCInterfaceDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint16_t bcdVDC; + uint16_t wTotalLength; + uint32_t dwClockFrequency; + uint8_t bInCollection; // Number of Video Streaming Interfaces in the collection + uint8_t baInterfaceNr[1]; +}; +typedef struct IOUSBVCInterfaceDescriptor IOUSBVCInterfaceDescriptor; +#pragma options align=reset + +// Video Control Standard Input Terminal Descriptor +// +#pragma pack(1) +struct IOUSBVCInputTerminalDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t iTerminal; +}; +typedef struct IOUSBVCInputTerminalDescriptor IOUSBVCInputTerminalDescriptor; +#pragma options align=reset + +// Video Class Standard Output Terminal Descriptor +// +#pragma pack(1) +struct IOUSBVCOutputTerminalDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t bSourceID; + uint8_t iTerminal; +}; +typedef struct IOUSBVCOutputTerminalDescriptor IOUSBVCOutputTerminalDescriptor; +#pragma options align=reset + +// Video Class Camera Terminal Descriptor +// +#pragma pack(1) +struct IOUSBVCCameraTerminalDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bTerminalID; + uint16_t wTerminalType; + uint8_t bAssocTerminal; + uint8_t iTerminal; + uint16_t wObjectiveFocalLengthMin; + uint16_t wObjectiveFocalLengthMax; + uint16_t wOcularFocalLength; + uint8_t bControlSize; // Size of the bmControls field + uint8_t bmControls[1]; +}; +typedef struct IOUSBVCCameraTerminalDescriptor IOUSBVCCameraTerminalDescriptor; +#pragma options align=reset + +// Video Class Selector Unit Descriptor +// +#pragma pack(1) +struct IOUSBVCSelectorUnitDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bUnitID; + uint8_t bNrInPins; + uint8_t baSourceID[1]; +}; +typedef struct IOUSBVCSelectorUnitDescriptor IOUSBVCSelectorUnitDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCSelectorUnit2Descriptor +{ + uint8_t iSelector; +}; +typedef struct IOUSBVCSelectorUnit2Descriptor IOUSBVCSelectorUnit2Descriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCProcessingUnitDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bUnitID; + uint8_t bSourceID; + uint16_t wMaxMultiplier; + uint8_t bControlSize; + uint8_t bmControls[1]; +}; +typedef struct IOUSBVCProcessingUnitDescriptor IOUSBVCProcessingUnitDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCProcessingUnit2Descriptor +{ + uint8_t iProcessing; +}; +typedef struct IOUSBVCProcessingUnit2Descriptor IOUSBVCProcessingUnit2Descriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCExtensionUnitDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bUnitID; + uint8_t guidFormat[16]; + uint8_t bNumControls; + uint8_t bNrInPins; + uint8_t baSourceID[1]; +}; +typedef struct IOUSBVCExtensionUnitDescriptor IOUSBVCExtensionUnitDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCExtensionUnit2Descriptor +{ + uint8_t bControlSize; + uint8_t bmControls[1]; +}; +typedef struct IOUSBVCExtensionUnit2Descriptor IOUSBVCExtensionUnit2Descriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCExtensionUnit3Descriptor +{ + uint8_t iExtension; +}; +typedef struct IOUSBVCExtensionUnit3Descriptor IOUSBVCExtensionUnit3Descriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVCInterruptEndpointDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint16_t wMaxTransferSize; +}; +typedef struct IOUSBVCInterruptEndpointDescriptor IOUSBVCInterruptEndpointDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVSInputHeaderDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bNumFormats; + uint16_t wTotalLength; + uint8_t bEndpointAddress; + uint8_t bmInfo; + uint8_t bTerminalLink; + uint8_t bStillCaptureMethod; + uint8_t bTriggerSupport; + uint8_t bTriggerUsage; + uint8_t bControlSize; + uint8_t bmControls[1]; +}; +typedef struct IOUSBVSInputHeaderDescriptor IOUSBVSInputHeaderDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVSOutputHeaderDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bNumFormats; + uint16_t wTotalLength; + uint8_t bEndpointAddress; + uint8_t bTerminalLink; +}; +typedef struct IOUSBVSOutputHeaderDescriptor IOUSBVSOutputHeaderDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_MJPEGFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t bmFlags; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; +}; +typedef struct IOUSBVDC_MJPEGFormatDescriptor IOUSBVDC_MJPEGFormatDescriptor; +#pragma options align=reset + +struct IOSUBVDC_StillImageSize +{ + uint16_t wWidth; + uint16_t wHeight; +}; +typedef struct IOSUBVDC_StillImageSize IOSUBVDC_StillImageSize; + +struct IOSUBVDC_StillImageCompressionPattern +{ + uint8_t bNumCompressionPattern; + uint8_t bCompression[1]; +}; +typedef struct IOSUBVDC_StillImageCompressionPattern IOSUBVDC_StillImageCompressionPattern; + +#pragma pack(1) +struct IOUSBVDC_StillImageFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bEndpointAddress; + uint8_t bNumImageSizePatterns; + IOSUBVDC_StillImageSize dwSize[1]; +}; +typedef struct IOUSBVDC_StillImageFrameDescriptor IOUSBVDC_StillImageFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_MJPEGFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwMaxVideoFrameBufferSize; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwMinFrameInterval; + uint32_t dwMaxFrameInterval; + uint32_t dwFrameIntervalStep; +}; +typedef struct IOUSBVDC_MJPEGFrameDescriptor IOUSBVDC_MJPEGFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_MJPEGDiscreteFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwMaxVideoFrameBufferSize; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwFrameInterval[1]; +}; +typedef struct IOUSBVDC_MJPEGDiscreteFrameDescriptor IOUSBVDC_MJPEGDiscreteFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_UncompressedFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; +}; +typedef struct IOUSBVDC_UncompressedFormatDescriptor IOUSBVDC_UncompressedFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_UncompressedFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwMaxVideoFrameBufferSize; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwMinFrameInterval; + uint32_t dwMaxFrameInterval; + uint32_t dwFrameIntervalStep; +}; +typedef struct IOUSBVDC_UncompressedFrameDescriptor IOUSBVDC_UncompressedFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_UncompressedDiscreteFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwMaxVideoFrameBufferSize; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwFrameInterval[1]; +}; +typedef struct IOUSBVDC_UncompressedDiscreteFrameDescriptor IOUSBVDC_UncompressedDiscreteFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_VendorFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidMajorFormat[16]; + uint8_t guidSubFormat[16]; + uint8_t guidSpecifierFormat[16]; + uint8_t bPayloadClass; + uint8_t bDefaultFrameIndex; + uint8_t bCopyProtect; +}; +typedef struct IOUSBVDC_VendorFormatDescriptor IOUSBVDC_VendorFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_VendorFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwMaxVideoFrameBufferSize; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwMinFrameInterval; + uint32_t dwMaxFrameInterval; + uint32_t dwFrameIntervalStep; +}; +typedef struct IOUSBVDC_VendorFrameDescriptor IOUSBVDC_VendorFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_VendorDiscreteFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwMaxVideoFrameBufferSize; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwFrameInterval[1]; +}; +typedef struct IOUSBVDC_VendorDiscreteFrameDescriptor IOUSBVDC_VendorDiscreteFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_DVFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint32_t dwMaxVideoFrameBufferSize; + uint8_t bFormatType; +}; +typedef struct IOUSBVDC_DVFormatDescriptor IOUSBVDC_DVFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_MPEG1SSFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint16_t wPacketLength; + uint16_t wPackLength; + uint8_t bPackDataType; +}; +typedef struct IOUSBVDC_MPEG1SSFormatDescriptor IOUSBVDC_MPEG1SSFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_MPEG2PSFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint16_t wPacketLength; + uint16_t wPackLength; + uint8_t bPackDataType; +}; +typedef struct IOUSBVDC_MPEG2PSFormatDescriptor IOUSBVDC_MPEG2PSFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_MPEG2PTSFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bDataOffset; + uint8_t bPacketLength; + uint8_t bStrideLength; +}; +typedef struct IOUSBVDC_MPEG2PTSFormatDescriptor IOUSBVDC_MPEG2PTSFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_ColorFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bColorPrimaries; + uint8_t bTransferCharacteristics; + uint8_t bMatrixCoefficients; +}; +typedef struct IOUSBVDC_ColorFormatDescriptor IOUSBVDC_ColorFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_FrameBasedFormatDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFormatIndex; + uint8_t bNumFrameDescriptors; + uint8_t guidFormat[16]; + uint8_t bBitsPerPixel; + uint8_t bDefaultFrameIndex; + uint8_t bAspectRatioX; + uint8_t bAspectRatioY; + uint8_t bmInterlaceFlags; + uint8_t bCopyProtect; + uint8_t bVariableSize; +}; +typedef struct IOUSBVDC_FrameBasedFormatDescriptor IOUSBVDC_FrameBasedFormatDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_FrameBasedFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwBytesPerLine; + uint32_t dwMinFrameInterval; + uint32_t dwMaxFrameInterval; + uint32_t dwFrameIntervalStep; +}; +typedef struct IOUSBVDC_FrameBasedFrameDescriptor IOUSBVDC_FrameBasedFrameDescriptor; +#pragma options align=reset + +#pragma pack(1) +struct IOUSBVDC_DiscreteFrameBasedFrameDescriptor +{ + uint8_t bLength; + uint8_t bDescriptorType; + uint8_t bDescriptorSubType; + uint8_t bFrameIndex; + uint8_t bmCapabilities; + uint16_t wWidth; + uint16_t wHeight; + uint32_t dwMinBitRate; + uint32_t dwMaxBitRate; + uint32_t dwDefaultFrameInterval; + uint8_t bFrameIntervalType; + uint32_t dwBytesPerLine; + uint32_t dwMinFrameInterval; + uint32_t dwMaxFrameInterval; + uint32_t dwFrameInterval[1]; +}; +typedef struct IOUSBVDC_DiscreteFrameBasedFrameDescriptor IOUSBVDC_DiscreteFrameBasedFrameDescriptor; +#pragma options align=reset + +@interface DecodeVideoInterfaceDescriptor : NSObject { + +} + ++(void)decodeBytes:(uint8_t *)descriptor forDevice:(BusProbeDevice *)thisDevice withDeviceInterface:(IOUSBDeviceRef)deviceIntf; + char MapNumberToVersion( int i ); + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DescriptorDecoder.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DescriptorDecoder.h new file mode 100644 index 0000000..5bd5972 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/DescriptorDecoder.h @@ -0,0 +1,58 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#import +#import "BusProberSharedFunctions.h" +#import "BusProbeDevice.h" + +#import "DecodeDeviceDescriptor.h" +#import "DecodeConfigurationDescriptor.h" +#import "DecodeInterfaceDescriptor.h" +#import "DecodeEndpointDescriptor.h" +#import "DecodeHIDDescriptor.h" +#import "DecodeHubDescriptor.h" +#import "DecodeDeviceQualifierDescriptor.h" +#import "DecodeAudioInterfaceDescriptor.h" +#import "DecodeVideoInterfaceDescriptor.h" +#import "DecodeCommClassDescriptor.h" +#import "DecodeBOSDescriptor.h" + +#define HID_DESCRIPTOR 0x21 +#define DFU_FUNCTIONAL_DESCRIPTOR 0x21 +#define CCID_DESCRIPTOR 0x21 + +enum ClassSpecific { + CS_INTERFACE = 0x24, + CS_ENDPOINT = 0x25 +}; + +@interface DescriptorDecoder : NSObject { + +} + ++(void)decodeBytes:(Byte *)p forDevice:(BusProbeDevice *)thisDevice deviceInterface:(IOUSBDeviceRef)deviceIntf userInfo:(void *)userInfo isOtherSpeedDesc:(BOOL)isOtherSpeedDesc isinCurrentConfig:(Boolean)inCurrentConfig; ++(void)dumpRawDescriptor:(Byte *)p forDevice:(BusProbeDevice *)thisDevice atDepth:(int)depth; ++(void)dumpRawConfigDescriptor:(IOUSBConfigurationDescriptor*)cfg forDevice:(BusProbeDevice *)thisDevice atDepth:(int)depth; ++(void)dump:(int)n byte:(Byte *)p forDevice:(BusProbeDevice *)thisDevice atDepth:(int)depth; ++(void)dumpRawBOSDescriptor:(IOUSBBOSDescriptor*)bos forDevice:(BusProbeDevice *)thisDevice atDepth:(int)depth; +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/ExtensionSelector.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/ExtensionSelector.h new file mode 100644 index 0000000..80b75ce --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/ExtensionSelector.h @@ -0,0 +1,38 @@ +/* + * Copyright © 2011-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +#import + +@interface ExtensionSelector : NSView +{ + NSPopUpButton *extensionSelectionButton; + NSSavePanel *theSavePanel; + NSDictionary *itemDictionary; +} +@property (nonatomic, retain) NSPopUpButton *extensionSelectionButton; +@property (nonatomic, retain) NSSavePanel *theSavePanel; +@property (nonatomic, retain) NSDictionary *itemDictionary; + +-(void)populatePopuButtonWithArray:(NSDictionary *)addItems; +-(void)setCurrentSelection:(NSString *)currentSelection; +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/OutlineViewAdditions.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/OutlineViewAdditions.h new file mode 100644 index 0000000..5b0ec56 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/OutlineViewAdditions.h @@ -0,0 +1,34 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import +#import "BusProbeDevice.h" + + +@interface NSOutlineView(OutlineViewAdditions) + +- (void)itemDoubleClicked; + +@end + diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/OutlineViewNode.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/OutlineViewNode.h new file mode 100644 index 0000000..c5ab35d --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/OutlineViewNode.h @@ -0,0 +1,67 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import + + +@interface OutlineViewNode : NSObject { + NSString * _name; + NSString * _value; + NSMutableArray * _children; + NSString * _tempName; + NSString * _tempValue; +} + +- init; +- initWithName:(NSString *)name value:(NSString *)value; +- (void)dealloc; + + + // Accessor methods for the strings +- (NSString *)name; +- (NSString *)value; +- (void)setName:(NSString *)aString; +- (void)setValue:(NSString *)aString; + + // Accessors for the children +- (void)addChild:(OutlineViewNode *)aNode; +- (int)childrenCount; +- (NSArray *)children; +- (OutlineViewNode *)childAtIndex:(int)i; +- (void)removeAllChildren; + +- (void)addNode:(OutlineViewNode *)aNode atDepth:(int)depth; +- (void)addNodeWithName:(char *)name value:(char *)value atDepth:(int)depth; + + // Other properties +- (BOOL)isExpandable; + +- (OutlineViewNode *)deepestChild; + +- (NSString*)stringRepresentation:(NSString*)name startingLevel:(int)startingLevel; +- (NSString *)stringRepresentation:(int)startingLevel; +- (NSString *)stringRepresentationOfValues:(int)startingLevel; +- (NSMutableDictionary *)dictionaryVersionOfMe; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/TableViewWithCopying.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/TableViewWithCopying.h new file mode 100644 index 0000000..ba13711 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/TableViewWithCopying.h @@ -0,0 +1,36 @@ +/* + * Copyright © 1998-2012 Apple Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + + +#import + + +@interface TableViewWithCopying : NSTableView { + +} + +- (IBAction)copy:(id)sender; +- (NSString *)stringRepresentation; +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem; + +@end diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/USBBusProber.h b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/USBBusProber.h new file mode 100644 index 0000000..d2055b3 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Headers/USBBusProber.h @@ -0,0 +1,6 @@ + +#import "BusProberSharedFunctions.h" +//#import "BusProbeController.h" +#import "BusProber.h" +//#import "BusProbeDevice.h" +//#import "BusProbeClass.h" diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/APPLE_LICENSE b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/APPLE_LICENSE new file mode 100644 index 0000000..c618c09 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/APPLE_LICENSE @@ -0,0 +1,372 @@ +/*! +\page AppleLicense + +APPLE PUBLIC SOURCE LICENSE +Version 2.0 - August 6, 2003 + +Please read this License carefully before downloading this software. +By downloading or using this software, you are agreeing to be bound by +the terms of this License. If you do not or cannot agree to the terms +of this License, please do not download or use the software. + +1. General; Definitions. This License applies to any program or other +work which Apple Computer, Inc. ("Apple") makes publicly available and +which contains a notice placed by Apple identifying such program or +work as "Original Code" and stating that it is subject to the terms of +this Apple Public Source License version 2.0 ("License"). As used in +this License: + +1.1 "Applicable Patent Rights" mean: (a) in the case where Apple is +the grantor of rights, (i) claims of patents that are now or hereafter +acquired, owned by or assigned to Apple and (ii) that cover subject +matter contained in the Original Code, but only to the extent +necessary to use, reproduce and/or distribute the Original Code +without infringement; and (b) in the case where You are the grantor of +rights, (i) claims of patents that are now or hereafter acquired, +owned by or assigned to You and (ii) that cover subject matter in Your +Modifications, taken alone or in combination with Original Code. + +1.2 "Contributor" means any person or entity that creates or +contributes to the creation of Modifications. + +1.3 "Covered Code" means the Original Code, Modifications, the +combination of Original Code and any Modifications, and/or any +respective portions thereof. + +1.4 "Externally Deploy" means: (a) to sublicense, distribute or +otherwise make Covered Code available, directly or indirectly, to +anyone other than You; and/or (b) to use Covered Code, alone or as +part of a Larger Work, in any way to provide a service, including but +not limited to delivery of content, through electronic communication +with a client other than You. + +1.5 "Larger Work" means a work which combines Covered Code or portions +thereof with code not governed by the terms of this License. + +1.6 "Modifications" mean any addition to, deletion from, and/or change +to, the substance and/or structure of the Original Code, any previous +Modifications, the combination of Original Code and any previous +Modifications, and/or any respective portions thereof. When code is +released as a series of files, a Modification is: (a) any addition to +or deletion from the contents of a file containing Covered Code; +and/or (b) any new file or other representation of computer program +statements that contains any part of Covered Code. + +1.7 "Original Code" means (a) the Source Code of a program or other +work as originally made available by Apple under this License, +including the Source Code of any updates or upgrades to such programs +or works made available by Apple under this License, and that has been +expressly identified by Apple as such in the header file(s) of such +work; and (b) the object code compiled from such Source Code and +originally made available by Apple under this License. + +1.8 "Source Code" means the human readable form of a program or other +work that is suitable for making modifications to it, including all +modules it contains, plus any associated interface definition files, +scripts used to control compilation and installation of an executable +(object code). + +1.9 "You" or "Your" means an individual or a legal entity exercising +rights under this License. For legal entities, "You" or "Your" +includes any entity which controls, is controlled by, or is under +common control with, You, where "control" means (a) the power, direct +or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (b) ownership of fifty percent +(50%) or more of the outstanding shares or beneficial ownership of +such entity. + +2. Permitted Uses; Conditions & Restrictions. Subject to the terms +and conditions of this License, Apple hereby grants You, effective on +the date You accept this License and download the Original Code, a +world-wide, royalty-free, non-exclusive license, to the extent of +Apple's Applicable Patent Rights and copyrights covering the Original +Code, to do the following: + +2.1 Unmodified Code. You may use, reproduce, display, perform, +internally distribute within Your organization, and Externally Deploy +verbatim, unmodified copies of the Original Code, for commercial or +non-commercial purposes, provided that in each instance: + +(a) You must retain and reproduce in all copies of Original Code the +copyright and other proprietary notices and disclaimers of Apple as +they appear in the Original Code, and keep intact all notices in the +Original Code that refer to this License; and + +(b) You must include a copy of this License with every copy of Source +Code of Covered Code and documentation You distribute or Externally +Deploy, and You may not offer or impose any terms on such Source Code +that alter or restrict this License or the recipients' rights +hereunder, except as permitted under Section 6. + +2.2 Modified Code. You may modify Covered Code and use, reproduce, +display, perform, internally distribute within Your organization, and +Externally Deploy Your Modifications and Covered Code, for commercial +or non-commercial purposes, provided that in each instance You also +meet all of these conditions: + +(a) You must satisfy all the conditions of Section 2.1 with respect to +the Source Code of the Covered Code; + +(b) You must duplicate, to the extent it does not already exist, the +notice in Exhibit A in each file of the Source Code of all Your +Modifications, and cause the modified files to carry prominent notices +stating that You changed the files and the date of any change; and + +(c) If You Externally Deploy Your Modifications, You must make +Source Code of all Your Externally Deployed Modifications either +available to those to whom You have Externally Deployed Your +Modifications, or publicly available. Source Code of Your Externally +Deployed Modifications must be released under the terms set forth in +this License, including the license grants set forth in Section 3 +below, for as long as you Externally Deploy the Covered Code or twelve +(12) months from the date of initial External Deployment, whichever is +longer. You should preferably distribute the Source Code of Your +Externally Deployed Modifications electronically (e.g. download from a +web site). + +2.3 Distribution of Executable Versions. In addition, if You +Externally Deploy Covered Code (Original Code and/or Modifications) in +object code, executable form only, You must include a prominent +notice, in the code itself as well as in related documentation, +stating that Source Code of the Covered Code is available under the +terms of this License with information on how and where to obtain such +Source Code. + +2.4 Third Party Rights. You expressly acknowledge and agree that +although Apple and each Contributor grants the licenses to their +respective portions of the Covered Code set forth herein, no +assurances are provided by Apple or any Contributor that the Covered +Code does not infringe the patent or other intellectual property +rights of any other entity. Apple and each Contributor disclaim any +liability to You for claims brought by any other entity based on +infringement of intellectual property rights or otherwise. As a +condition to exercising the rights and licenses granted hereunder, You +hereby assume sole responsibility to secure any other intellectual +property rights needed, if any. For example, if a third party patent +license is required to allow You to distribute the Covered Code, it is +Your responsibility to acquire that license before distributing the +Covered Code. + +3. Your Grants. In consideration of, and as a condition to, the +licenses granted to You under this License, You hereby grant to any +person or entity receiving or distributing Covered Code under this +License a non-exclusive, royalty-free, perpetual, irrevocable license, +under Your Applicable Patent Rights and other intellectual property +rights (other than patent) owned or controlled by You, to use, +reproduce, display, perform, modify, sublicense, distribute and +Externally Deploy Your Modifications of the same scope and extent as +Apple's licenses under Sections 2.1 and 2.2 above. + +4. Larger Works. You may create a Larger Work by combining Covered +Code with other code not governed by the terms of this License and +distribute the Larger Work as a single product. In each such instance, +You must make sure the requirements of this License are fulfilled for +the Covered Code or any portion thereof. + +5. Limitations on Patent License. Except as expressly stated in +Section 2, no other patent rights, express or implied, are granted by +Apple herein. Modifications and/or Larger Works may require additional +patent licenses from Apple which Apple may grant in its sole +discretion. + +6. Additional Terms. You may choose to offer, and to charge a fee for, +warranty, support, indemnity or liability obligations and/or other +rights consistent with the scope of the license granted herein +("Additional Terms") to one or more recipients of Covered Code. +However, You may do so only on Your own behalf and as Your sole +responsibility, and not on behalf of Apple or any Contributor. You +must obtain the recipient's agreement that any such Additional Terms +are offered by You alone, and You hereby agree to indemnify, defend +and hold Apple and every Contributor harmless for any liability +incurred by or claims asserted against Apple or such Contributor by +reason of any such Additional Terms. + +7. Versions of the License. Apple may publish revised and/or new +versions of this License from time to time. Each version will be given +a distinguishing version number. Once Original Code has been published +under a particular version of this License, You may continue to use it +under the terms of that version. You may also choose to use such +Original Code under the terms of any subsequent version of this +License published by Apple. No one other than Apple has the right to +modify the terms applicable to Covered Code created under this +License. + +8. NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in +part pre-release, untested, or not fully tested works. The Covered +Code may contain errors that could cause failures or loss of data, and +may be incomplete or contain inaccuracies. You expressly acknowledge +and agree that use of the Covered Code, or any portion thereof, is at +Your sole and entire risk. THE COVERED CODE IS PROVIDED "AS IS" AND +WITHOUT WARRANTY, UPGRADES OR SUPPORT OF ANY KIND AND APPLE AND +APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE +PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM +ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR +PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. APPLE AND EACH CONTRIBUTOR DOES NOT WARRANT AGAINST +INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE +FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, +THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR +ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO +ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE, AN APPLE +AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY. +You acknowledge that the Covered Code is not intended for use in the +operation of nuclear facilities, aircraft navigation, communication +systems, or air traffic control machines in which case the failure of +the Covered Code could lead to death, personal injury, or severe +physical or environmental damage. + +9. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO +EVENT SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING +TO THIS LICENSE OR YOUR USE OR INABILITY TO USE THE COVERED CODE, OR +ANY PORTION THEREOF, WHETHER UNDER A THEORY OF CONTRACT, WARRANTY, +TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR OTHERWISE, EVEN IF +APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY +REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF +INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY +TO YOU. In no event shall Apple's total liability to You for all +damages (other than as may be required by applicable law) under this +License exceed the amount of fifty dollars ($50.00). + +10. Trademarks. This License does not grant any rights to use the +trademarks or trade names "Apple", "Apple Computer", "Mac", "Mac OS", +"QuickTime", "QuickTime Streaming Server" or any other trademarks, +service marks, logos or trade names belonging to Apple (collectively +"Apple Marks") or to any trademark, service mark, logo or trade name +belonging to any Contributor. You agree not to use any Apple Marks in +or as part of the name of products derived from the Original Code or +to endorse or promote products derived from the Original Code other +than as expressly permitted by and in strict compliance at all times +with Apple's third party trademark usage guidelines which are posted +at http://www.apple.com/legal/guidelinesfor3rdparties.html. + +11. Ownership. Subject to the licenses granted under this License, +each Contributor retains all rights, title and interest in and to any +Modifications made by such Contributor. Apple retains all rights, +title and interest in and to the Original Code and any Modifications +made by or on behalf of Apple ("Apple Modifications"), and such Apple +Modifications will not be automatically subject to this License. Apple +may, at its sole discretion, choose to license such Apple +Modifications under this License, or on different terms from those +contained in this License or may choose not to license them at all. + +12. Termination. + +12.1 Termination. This License and the rights granted hereunder will +terminate: + +(a) automatically without notice from Apple if You fail to comply with +any term(s) of this License and fail to cure such breach within 30 +days of becoming aware of such breach; + +(b) immediately in the event of the circumstances described in Section +13.5(b); or + +(c) automatically without notice from Apple if You, at any time during +the term of this License, commence an action for patent infringement +against Apple; provided that Apple did not first commence +an action for patent infringement against You in that instance. + +12.2 Effect of Termination. Upon termination, You agree to immediately +stop any further use, reproduction, modification, sublicensing and +distribution of the Covered Code. All sublicenses to the Covered Code +which have been properly granted prior to termination shall survive +any termination of this License. Provisions which, by their nature, +should remain in effect beyond the termination of this License shall +survive, including but not limited to Sections 3, 5, 8, 9, 10, 11, +12.2 and 13. No party will be liable to any other for compensation, +indemnity or damages of any sort solely as a result of terminating +this License in accordance with its terms, and termination of this +License will be without prejudice to any other right or remedy of +any party. + +13. Miscellaneous. + +13.1 Government End Users. The Covered Code is a "commercial item" as +defined in FAR 2.101. Government software and technical data rights in +the Covered Code include only those rights customarily provided to the +public as defined in this License. This customary commercial license +in technical data and software is provided in accordance with FAR +12.211 (Technical Data) and 12.212 (Computer Software) and, for +Department of Defense purchases, DFAR 252.227-7015 (Technical Data -- +Commercial Items) and 227.7202-3 (Rights in Commercial Computer +Software or Computer Software Documentation). Accordingly, all U.S. +Government End Users acquire Covered Code with only those rights set +forth herein. + +13.2 Relationship of Parties. This License will not be construed as +creating an agency, partnership, joint venture or any other form of +legal association between or among You, Apple or any Contributor, and +You will not represent to the contrary, whether expressly, by +implication, appearance or otherwise. + +13.3 Independent Development. Nothing in this License will impair +Apple's right to acquire, license, develop, have others develop for +it, market and/or distribute technology or products that perform the +same or similar functions as, or otherwise compete with, +Modifications, Larger Works, technology or products that You may +develop, produce, market or distribute. + +13.4 Waiver; Construction. Failure by Apple or any Contributor to +enforce any provision of this License will not be deemed a waiver of +future enforcement of that or any other provision. Any law or +regulation which provides that the language of a contract shall be +construed against the drafter will not apply to this License. + +13.5 Severability. (a) If for any reason a court of competent +jurisdiction finds any provision of this License, or portion thereof, +to be unenforceable, that provision of the License will be enforced to +the maximum extent permissible so as to effect the economic benefits +and intent of the parties, and the remainder of this License will +continue in full force and effect. (b) Notwithstanding the foregoing, +if applicable law prohibits or restricts You from fully and/or +specifically complying with Sections 2 and/or 3 or prevents the +enforceability of either of those Sections, this License will +immediately terminate and You must immediately discontinue any use of +the Covered Code and destroy all copies of it that are in your +possession or control. + +13.6 Dispute Resolution. Any litigation or other dispute resolution +between You and Apple relating to this License shall take place in the +Northern District of California, and You and Apple hereby consent to +the personal jurisdiction of, and venue in, the state and federal +courts within that District with respect to this License. The +application of the United Nations Convention on Contracts for the +International Sale of Goods is expressly excluded. + +13.7 Entire Agreement; Governing Law. This License constitutes the +entire agreement between the parties with respect to the subject +matter hereof. This License shall be governed by the laws of the +United States and the State of California, except that body of +California law concerning conflicts of law. + +Where You are located in the province of Quebec, Canada, the following +clause applies: The parties hereby confirm that they have requested +that this License and all related documents be drafted in English. Les +parties ont exige que le present contrat et tous les documents +connexes soient rediges en anglais. + +EXHIBIT A. + +"Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights +Reserved. + +This file contains Original Code and/or Modifications of Original Code +as defined in and that are subject to the Apple Public Source License +Version 2.0 (the 'License'). You may not use this file except in +compliance with the License. Please obtain a copy of the License at +http://www.opensource.apple.com/apsl/ and read it before using this +file. + +The Original Code and all software distributed under the License are +distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, +INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. +Please see the License for the specific language governing rights and +limitations under the License." + +*/ \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/Info.plist b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..50f7a0d --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,46 @@ + + + + + BuildMachineOSBuild + 17F77 + CFBundleDevelopmentRegion + English + CFBundleExecutable + USBBusProber + CFBundleIdentifier + com.Vidvox.USBBusProber + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + USBBusProber + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 9C40b + DTPlatformVersion + GM + DTSDKBuild + 17C76 + DTSDKName + macosx10.13 + DTXcode + 0920 + DTXcodeBuild + 9C40b + NSHumanReadableCopyright + Copyright © 2014 Vidvox. All rights reserved. + + diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/USBVendors.txt b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/USBVendors.txt new file mode 100644 index 0000000..22936a2 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/USBVendors.txt @@ -0,0 +1,2226 @@ +1|Kavi-EVAL +1000|EndPoints Inc. +1001|Thesys Microelectronics +1003|Atmel Corporation +1005|Mitel Corporation +1006|Mitsumi +1008|Hewlett Packard +1009|Genoa Technology +1010|Oak Technology, Inc +1011|Adaptec, Inc. +1012|Diebold, Inc. +1016|Epson Research Center +1017|KeyTronic Corp. +1019|OPTi Inc. +1020|Elitegroup Computer Systems +1021|Xilinx Inc. +1022|Farallon Comunications +1024|National Semiconductor +1026|ALi Corporation +1026|Acer Labs Inc. +1027|Future Technology Devices International Limited +1028|NCR Corporation +1029|Sand Microelectronics, Inc. +1029|inSilicon +1031|Fujitsu Personal Systems, Inc. +1032|Quanta Computer Inc. +1033|NEC Corporation +1034|Eastman Kodak Company +1035|Weltrend Semiconductor +1037|VIA Technologies, Inc. +1038|MCCI +1041|BUFFALO INC. +1041|Melco, Inc. +1043|Leadtek Research Inc. +1044|Giga-Byte Technology Co., Ltd. +1046|Winbond Electronics Corp. +1050|Phoenix Technologies Ltd. +1054|Creative Labs +1057|Nokia Corporation +1058|ADI Systems Inc. +1059|CATC +1060|SMSC +1061|Motorola Semiconductors HK, Ltd. +1062|Integrated Device Technology +1063|Motorola Electronics Taiwan Ltd. +1064|Advanced Gravis Computer Ltd. +1065|Cirrus Logic Inc. +1066|Ericsson Austrian, AG +1068|Innovative Semiconductors, Inc. +1071|Molex Inc. +1072|Fujitsu Component Limited +1073|ITAC Systems, Inc. +1074|Unisys Corp. +1077|Hyundai Electronics America +1078|Taugagreining HF +1080|Advanced Micro Devices +1085|Lexmark International Inc. +1086|LG Electronics USA Inc. +1088|EIZO NANAO CORPORATION +1090|Ericsson Inc. +1091|Gateway 2000 +1094|NMB Technologies Corporation +1097|Eldim +1098|Shamrock Technology Co., Ltd. +1100|CCL/ITRI +1101|Siemens Nixdorf AG +1102|Alps Electric Co., Ltd. +1103|ThrustMaster, Inc. +1105|Texas Instruments +1106|Mitsubishi Electronics America, Inc. +1107|CMD Technology +1110|Analog Devices, Inc. +1111|Silicon Integrated Systems Corp. +1112|KYE Systems Corp. +1113|Adobe Systems, Inc. +1114|SONICblue Incorporated +1115|Renesas Electronics Corp. +1117|Nortel Networks +1118|Microsoft Corporation +1121|Primax Electronics +1123|EATON +1124|AMP/Tycoelectronics +1128|Wieson Technologies Co., Ltd. +1130|CHERRY GmbH +1131|American Megatrends +1132|Toshiba +1133|Logitech Inc. +1134|Behavior Tech Computer Corporation +1137|Philips Consumer Lifestyle BV +1138|Sun Microsystems +1139|Sanyo Information Business Co., Ltd. +1140|Sanyo Electric Co. Ltd. +1141|TECO Infor-ion System +1144|Connectix +1146|Semtech Corporation +1147|Silitek Corp. +1148|Dell Computer Corp. +1149|Kensington +1150|LSI Corporation +1151|Plantronics, Inc. +1152|Toshiba America Info. Systems, Inc. +1154|Kyocera Corporation +1155|STMicroelectronics +1160|Cirque Corporation +1161|Foxconn / Hon Hai +1165|ITE Tech Inc. +1165|Integrated Technology Express +1165|Integrated Technology Express, Inc. +1169|Capetronic (Kaohsiung ) Corp. +1170|Samsung SemiConductor, Inc. +1170|Samsung Semiconductor, Inc. +1174|Micron Electronics +1175|Smile International, Inc. +1177|Yamaha Corporation +1179|Curtis Connections +1181|VLSI Technology, Inc. +1183|Compaq Computer Corporation +1188|Hitachi, Ltd. +1189|Acer Peripherals Inc. +1189|BenQ Corporation +1189|Benq Corporation +1190|Nokia Display Products +1191|Visioneer +1192|Multivideo Labs, Inc. +1193|Canon Inc. +1200|Nikon Corporation +1201|Pan International +1203|IBM Corporation +1204|Cypress Semiconductor +1205|ROHM Co., Ltd. +1207|Compal Electronics, Inc. +1208|Seiko Epson Corp. +1209|Rainbow Technologies, Inc. +1211|I-O Data Device, Inc. +1215|TDK Corporation +1221|Fujitsu Ltd. +1222|Toshiba America Electronic Components +1223|Micro Macro Technologies +1224|Konica Corporation +1226|Lite-On Technology Corp. +1227|FUJIFILM Corporation +1227|Fuji Photo Film Co., Ltd. +1228|ST-Ericsson +1228|Philips Semiconductors +1229|Tatung Company of America, Inc. +1230|ScanLogic Corporation +1231|Myson Century, Inc. +1233|ITT Cannon +1234|Altec Lansing Technologies, Inc. +1236|LSI Logic Corporation +1238|Mentor Graphics +1239|Oki Semiconductor +1240|Microchip Technology Inc. +1241|Holtek Semiconductor, Inc. +1242|Panasonic Corporation +1244|Huan Hsin Holdings Ltd. +1245|Sharp Corporation +1246|MindShare, Inc. +1247|Interlink Electronics +1249|Iiyama Corporation +1250|Exar Corporation +1254|SCM Microsystems +1254|Shuttle Technology +1255|Elo TouchSystems +1256|Samsung Electronics Co., Ltd. +1257|PC-Tel Inc. +1259|Northstar Systems Corp. +1259|Northstar Systems, Inc +1260|Tokyo Electron Device Limited +1261|Annabooks +1265|Victor Company of Japan, Limited +1266|Chicony Electronics Co., Ltd. +1267|ELAN Microelectronics Corportation +1267|Elan Microelectronics Corportation +1271|Newnex Technology Corp. +1272|FuturePlus Systems +1273|Brother Industries, Ltd. +1273|Brother International Corporation +1274|Dallas Semiconductor +1275|Biostar Microtech Int'l Corp. +1276|SUNPLUS TECHNOLOGY CO., LTD. +1277|Soliton Systems K.K. +1278|PFU Limited +1279|E-CMOS Corp. +1281|Fujikura/DDK +1282|Acer, Inc. +1284|Hayes Microcomputer Products +1286|3Com Corporation +1287|Hosiden Corporation +1288|Clarion Co., Ltd. +1289|Aztech Systems Ltd +1293|Belkin Corporation +1295|KC Technology Inc. +1296|Sejin Electron Inc. +1300|FCI Electronics +1302|Longwell Electronics/Longwell Company +1303|Butterfly Communications +1304|EzKEY Corp. +1305|Star Micronics Co., LTD +1308|Shuttle Inc. +1309|American Power Conversion +1310|Scientific Atlanta, Inc. +1311|IO Systems Inc. fomerly Elite Electronics, Inc. +1312|Taiwan Semiconductor Manufacturing Co. +1314|ACON, Advanced-Connectek, Inc. +1315|ATEN GMBH +1316|Sola Electronics +1317|PLX Technology, Inc. +1318|Temic MHS S.A. +1319|ALTRA +1320|ATI Technologies, Inc. +1321|Aladdin Knowledge Systems +1322|Crescent Heart Software +1323|Tekom Technologies, Inc +1324|Canon Development Americas +1329|Wacom Technology Corp. +1330|Systech Corporation +1334|Welch Allyn Inc. +1335|Inventec Corporation +1336|Caldera International, Inc. +1337|Shyh Shiun Terminals Co. LTD +1338|Preh Werke Gmbh & Co. KG +1340|Institut of Microelectronic and Mechatronic Systems +1341|Silicon Architect +1342|Mobility Electronics +1343|Synopsys, Inc. +1344|UniAccess AB +1345|Sirf Technology, Inc +1347|ViewSonic Corporation +1349|Xirlink, Inc. +1350|Polaroid Corporation +1351|Anchor Chips Inc. +1356|Sony Corporation +1360|Fuji Xerox Co., Ltd. +1362|Philips Monitors +1363|STMicroelectronics Imaging Division +1363|VLSI Vision Ltd. +1364|Dictaphone Corp. +1366|Asahi Kasei Microsystems Co., Ltd +1367|ATEN International Co. Ltd. +1369|Cadence Design Systems, Inc. +1373|Samsung Electro-Mechanics Co. +1374|CTX Opto-Electronics Corp. +1376|Interface Corporation +1378|Telex Communications Inc. +1379|Immersion Corporation +1380|Chinon Industries, Inc. +1381|Peracom Networks, Inc. +1382|Monterey International Corp. +1383|Xyratex +1386|WACOM Co., Ltd. +1388|Belkin Research & Development +1389|Eizo +1390|Elecom Co., Ltd. +1391|Korea Data Systems Co., Ltd. +1393|Interex, Inc. +1394|Conexant Systems, Inc. +1395|Zoran Corporation +1397|Philips Creative Display Solutions +1398|BAFO/Quality Computer Accessories +1403|Y-E Data, Inc. +1404|AVM GmbH +1405|Shark Multimedia Inc. +1406|Nintendo Co., Ltd. +1407|QuickShot Limited +1410|Roland Corporation +1411|Padix Co., Ltd. +1412|RATOC System Inc. +1413|FlashPoint Technology, Inc. +1416|Sapien Design +1419|Infineon Technologies +1419|Siemens Semiconductor +1420|In Focus Systems +1421|Micrel Semiconductor +1422|Tripath Technology Inc. +1423|Alcor Micro, Corp. +1424|OMRON Corporation +1426|Exide Electronics +1429|Zoran Microelectronics Ltd. +1430|MicroTouch Systems Inc. +1432|Nigata Canotec Co., Inc. +1435|Iomega Corporation +1436|A-Trend Technology Co., Ltd. +1437|Advanced Input Devices +1438|Intelligent Instrumentation +1439|LaCie +1441|USC Corporation +1442|Fuji Film Microdevices Co. Ltd. +1443|ARC International +1443|V Automation Inc. +1444|Ortek Technology, Inc. +1445|Sampo Technology Corp. +1446|Cisco Systems, Inc. +1447|Bose Corporation +1448|Spacetec IMC Corporation +1449|OmniVision Technologies, Inc. +1451|In-System Design +1452|Apple Inc. +1453|Y.C. Cable U.S.A., Inc +1454|Jing-Mold Enterprise Co., Ltd. +1456|Fountain Technologies, Inc +1457|First International Computer, Inc. +1460|LG Semicon Co., Ltd. +1461|Dialogic Corp +1462|Proxima Corporation +1463|Medianix Semiconductor, Inc. +1466|DigitalPersona, Inc. +1469|RAFI GmbH & Co. KG +1470|Tyco Electronics +1472|Keil Software +1473|Kawasaki Microelectronics, Inc. +1473|Kawasaki Steel +1474|Mediaphonics S.A. +1477|Digi International Inc. +1478|Qualcomm, Inc +1479|Qtronix Corp +1480|Cheng Uei Precision Industry Co., Ltd +1480|Foxlink/Cheng Uei Precision Industry Co., Ltd. +1481|Semtech Corporation +1482|Ricoh Company Ltd. +1483|PowerVision Technologies Inc. +1484|ELSA AG +1485|Silicom LTD. +1486|SICAN Gmbh +1487|Sung Forn Co. LTD. +1488|Lunar Corporation +1489|Brainboxes Limited +1490|Wave Systems Corp. +1494|Philips Semiconductors, CICT +1495|Thomas and Betts +1496|Ultima Electronics Corp. +1497|Axiohm Transaction Solutions +1498|Microtek International Inc. +1499|Sun Corporation +1500|Lexar Media, Inc. +1501|Delta Electronics Inc. +1504|Symbol Technologies +1505|Syntek Design Technology Inc. +1507|Genesys Logic, Inc. +1508|Red Wing Corporation +1509|Fuji Electric FA Components & Systems Co. Ltd. +1510|Keithley Instruments +1513|Kawasaki Microelectronics America, Inc. +1515|FFC Limited +1516|COM21, Inc. +1518|Cytechinfo Inc. +1519|Anko Electronic Co., Ltd. +1520|Canopus Co., Ltd. +1522|Dexin Corporation, Ltd. +1523|PI Engineering, Inc +1525|Unixtar Technology Inc. +1526|AOC International +1527|RFC Distribution(s) PTE Ltd. +1529|Datalogic Scanning, Inc. +1529|PSC Scanning, Inc. +1530|Siemens Telecommunications Systems Limited +1532|Harman International +1533|STD Manufacturing Ltd. +1534|CHIC TECHNOLOGY CORP +1535|LeCroy Corporation +1536|Barco Display Systems +1537|Jazz Hipster Corporation +1538|Vista Imaging Inc. +1539|Novatek Microelectronics Corp. +1540|Jean Co, Ltd. +1542|Royal Information Electronics Co., Ltd. +1543|Bridge Information Co., Ltd. +1545|SMK Manufacturing Inc. +1546|Worth Data, Inc. +1546|Worthington Data Solutions, Inc. +1547|Solid Year Co., Ltd. +1548|EEH Datalink Gmbh +1550|Transmonde Technologies, Inc. +1551|Joinsoon Electronics Mfg. Co., Ltd. +1553|Totoku Electric Co., LTD. +1555|TransAct Technologies Incorporated +1556|Bio-Rad Laboratories +1558|Future Techno Designs PVT. LTD. +1560|Chia Shin Technology Corp. +1561|Seiko Instruments Inc. +1562|Veridicom +1564|Act Labs, Ltd. +1565|Quatech, Inc. +1566|Nissei Electric Co. +1568|Alaris, Inc. +1569|ODU-Steckverbindungssysteme GmbH and Co. KG +1571|Littelfuse, Inc. +1572|Apex PC Solutions, Inc. +1574|Nippon Systems Development Co., Ltd. +1577|Zida Technologies Limited +1578|MosArt Semiconductor Corp. +1578|ProVision Technology, Inc. +1579|Greatlink Electronics Taiwan Ltd. +1581|Taiwan Tai-Hao Enterprises Co. Ltd. +1582|MAIN SUPER ENTERPRISES CO.,LTD. +1582|Mainsuper Enterprises Co., Ltd. +1583|Sin Sheng Terminal & Machine Inc. +1588|Crucial Technology/Micron Semiconductor Products +1588|Micron Technology, Inc. +1590|Sierra Imaging, Inc. +1592|Avision, Inc. +1593|Chrontel, Inc. +1594|Techwin Corporation +1597|Fong Kai Industrial Co., Ltd. +1599|New Technology Cable Ltd. +1600|Hitex Development Tools +1601|Woods Industries, Inc. +1602|VIA Medical Corporation +1604|TEAC Corporation +1605|Who Vision Systems, Inc. +1608|Inside Out Networks +1611|Analog Devices, Inc. Development Tools +1612|Ji-Haw Industrial Co., Ltd +1614|Suyin Corporation +1615|WIBU-Systems AG +1617|Likom Technology Sdn. Bhd. +1618|Stargate Solutions, Inc. +1620|Granite Microsystems, Inc. +1621|Space Shuttle Hi-Fi Wire and Cable Industry Co, Ltd. +1621|Space Shuttle Hi-Tech Co.,Ltd. +1622|Glory Mark Electronic Ltd. +1623|Tekcon Electronics Corp. +1624|Sigma Designs, Inc. +1626|Optoelectronics Co., Ltd. +1630|Silicon Graphics +1631|Good Way Technology Co., Ltd. & GWC technology Inc +1632|TSAY-E (BVI) International Inc. +1633|Hamamatsu Photonics K.K. +1635|Topmax Electronic Co., Ltd. +1640|WordWand +1641|Oce Printing Systems GmbH +1642|Total Technologies, Ltd. +1643|Intermart Systems, Inc. +1645|Entrega Technologies Inc. +1646|Acer Semiconductor America, Inc. +1647|SigmaTel, Inc. +1650|Labtec Inc. +1652|KME Mouse Electronic Enterprise Co., Ltd. +1652|Key Mouse Electronic Enterprise Co., Ltd. +1653|DrayTek Corp. +1654|Teles AG +1655|Aiwa Co., Ltd. +1656|ACARD Technology Corp. +1659|Prolific Technology, Inc. +1660|Efficient Networks, Inc. +1661|Hohner Corp. +1662|Intermec Technologies (S) Pte Ltd. +1663|Virata Ltd. +1664|Avance Logic, Inc. +1664|Realtek Semiconductor Corp., CPP Div. +1665|Siemens Information and Communication Products +1669|ISDN*tek +1670|Minolta Co., Ltd. +1674|Pertech Inc. +1675|Potrans International, Inc. +1680|Golden Bridge Electech Inc. +1683|Hagiwara Sys-Com Co., Ltd. +1684|Lego Group +1688|Chuntex (CTX) +1689|Tektronix, Inc. +1690|Askey Computer Corporation +1691|Thomson Consumer Electronics +1693|Hughes Network Systems +1694|Welcat Inc. +1698|Topro Technology Inc. +1699|Saitek PLC +1700|Xiamen Doowell Electron Co., Ltd. +1701|Divio +1703|MicroStore, Inc. +1705|Westell +1706|Sysgration Ltd. +1708|Fujitsu Laboratories of America, Inc. +1709|Greatland Electronics Taiwan Ltd. +1710|Testronic Labs +1711|Harting, Inc. of North America +1714|N*ABLE Technologies, Inc. +1720|Pixela Corporation +1721|Alcatel +1722|Smooth Cord & Connector Co., Ltd. +1723|EDA Inc. +1724|Oki Data Corporation +1725|AGFA-Gevaert NV +1726|AME Optimedia Technology Co. Ltd. +1726|Asia Microelectronic Development, Inc. +1727|Leoco Corporation +1732|Bizlink Technology, Inc. +1733|Hagenuk, GmbH +1734|Infowave Software Inc. +1736|SIIG, Inc. +1737|Taxan (Europe) Ltd. +1738|Newer Technology, Inc. +1739|Synaptics Inc. +1740|Terayon Communication Systems +1741|Keyspan +1744|Traveling Software, Inc. +1745|Daewoo Electronics Co Ltd +1747|Mitsubishi Electric Corporation +1748|Cisco Systems +1749|Toshiba America Electronic Components, Inc. +1750|Aashima Technology B.V. +1751|Network Computing Devices (NCD) +1752|Technical Marketing Research, Inc. +1754|Phoenixtec Power Co., Ltd. +1755|Paradyne +1756|Compeye Corporation +1758|Heisei Electronics Co. Ltd. +1760|Multi-Tech Systems, Inc. +1761|ADS Technologies, Inc. +1764|Alcatel Microelectronics +1766|Tiger Jet Network, Inc. +1771|PC Expert Tech. Co., Ltd. +1775|I.A.C. Geometrische Ingenieurs B.V. +1776|T.N.C Industrial Co., Ltd. +1777|Opcode Systems Inc. +1778|Emine Technology Company +1782|Wintrend Technology Co., Ltd. +1786|HSD S.r.L +1788|Motorola Semiconductor Products Sector/US +1789|Boston Acoustics +1790|Gallant Computer, Inc. +1793|Supercomal Wire & Cable SDN. BHD. +1795|Bencent Tzeng Co., Ltd. +1795|Bvtech Industry Inc. +1797|NKK Corporation +1798|Ariel Corporation +1800|Putercom Co., Ltd. +1801|SSL +1802|Oki Electric Industry Co., Ltd +1802|Oki Electric Industry Co., Ltd. +1805|Comoss Electronic Co., Ltd. +1806|Excel Cell Electronic Co., Ltd. +1808|Connect Tech Inc. +1809|Magic Control Technology Corp. +1811|Interval Research Corp. +1815|ZNK Corporation +1816|Imation Corp. +1817|Tremon Enterprised Co., Ltd. +1820|Xionics Document Technologies, Inc. +1821|Dialogic Corporation +1821|Eicon Networks Corporation +1822|Ariston Technologies +1827|Centillium Communications Corporation +1830|Vanguard International Semiconductor-America +1838|Sunix Co., Ltd. +1841|SusTeen, Inc. +1842|Goldfull Electronics & Telecommunications Corp. +1843|ViewQuest Technologies, Inc. +1844|LASAT Communications A/S +1846|Lorom Industrial Co., Ltd. +1848|Mad Catz, Inc. +1850|Chaplet Systems, Inc. +1851|Suncom Technologies +1859|BBnig und Kallenbach oHG +1861|Syntech Information Co., Ltd. +1862|ONKYO Corporation +1863|Labway Corporation +1864|Strong Man Enterprise Co., Ltd. +1865|EVer Electronics Corp. +1866|Ming Fortune Industry Co., Ltd. +1867|Polestar Tech. Corp. +1868|C-C-C Group PLC +1869|Micronas GmbH +1870|Digital Stream Corporation +1877|Aureal Semiconductor +1879|Network Technologies, Inc. +1883|Sophisticated Circuits, Inc. +1891|M-Audio +1892|Cyber Power Systems, Inc. +1893|X-Rite Incorporated +1894|Jess-Link Products Co., Ltd. (JPC) +1895|Tokheim Corporation +1896|Camtel Technology Corp. +1897|SURECOM Technology Corp. +1898|Smart Technology Enablers, Inc. +1899|HID Global GmbH +1900|Partner Tech +1901|Denso Corporation +1902|Kuan Tech Enterprise Co., Ltd. +1903|Jhen Vei Electronic Co., Ltd. +1904|Welch Allyn, Inc - Medical Division +1908|AmTRAN Technology Co., Ltd. +1909|Longshine Electronics Corp. +1910|Inalways Corporation +1911|Comda Advanced Technology Corporation +1912|Volex, Inc. +1913|Fairchild Semiconductor +1914|Sankyo Seiki Mfg. Co., Ltd. +1915|Linksys +1916|Forward Electronics Co., Ltd. +1919|Well Excellent and Most Corp. +1921|SanDisk Corporation +1922|Trackerball +1929|Logitec +1932|GTCO CalComp Peripherals +1934|BRINCOM +1936|Pro-Image Manufacturing Co., Ltd +1937|Copartner Technology Corporation +1938|Axis Communications AB +1939|Wha Yu Industrial Co., Ltd. +1940|ABL Electronics Corporation +1941|SiCore Systems, Inc. +1942|Certicom Corp. +1943|Grandtech Semiconductor Corporation +1947|Sagem +1949|Alfadata Computer Corp. +1954|National Technical Systems +1955|ONNTO Corp. +1956|Be Incorporated +1958|ADMtek Incorporated +1962|corega K.K. +1963|Freecom Computer Peripherals +1969|IMP, Inc. +1970|Motorola BCS +1971|Plustek, Inc. +1972|OLYMPUS CORPORATION +1972|Olympus Optical Co., Ltd. +1973|Mega World International Ltd. +1974|Marubun Corp. +1975|TIME Interconnect Ltd. +1976|AboCom Systems, Inc. +1980|Canon Computer Sytems, Inc. +1981|Webgear Inc. +1982|Veridicom +1984|Code Mercenaries GmbH +1988|Datafab Systems Inc. +1989|APG Cash Drawer +1990|Share Wave, Inc. +1990|ShareWave, Inc. +1991|Powertech Industrial Co., Ltd. +1992|B.U.G., Inc. +1993|Allied Telesyn International +1994|AVerMedia Technologies, Inc. +1996|Carry Technology Co., Ltd. +1999|Casio Computer Co., Ltd. +2001|D-Link Corporation +2001|D-Link System +2002|Aptio Products Inc. +2003|Cyberdata Corp. +2007|GCC Technologies, Inc. +2010|Arasan Chip Systems Inc. +2015|David Electronics Company, Ltd. +2018|Elmeg GmbH and Co., Ltd. +2019|Planex Communications, Inc. +2020|Movado Enterprise Co., Ltd. +2021|QPS, Inc. +2022|Allied Cable Corporation +2023|Mirvo Toys, Inc. +2024|Labsystems +2027|Double-H Technology Co., Ltd. +2028|Taiyo Electric Wire & Cable Co., Ltd. +2038|Circuit Assembly Corp. +2039|Century Corporation +2041|Dotop Technology, Inc. +2049|Mag-Tek +2050|Mako Technologies, LLC +2051|Zoom Telephonics, Inc. +2057|Genicom Corp. +2058|Evermuch Technology Co., Ltd. +2061|TECO Image Systems Co., Ltd. +2064|Personal Communication Systems, Inc. +2067|Mattel, Inc. +2075|Indigita Corporation +2076|Mipsys +2078|AlphaSmart, Inc. +2082|REUDO Corporation +2085|GC Protronics +2086|Data Transit +2087|BroadLogic, Inc. +2088|Sato Corporation +2089|DirecTV Broadband +2093|Handspring Visor +2096|Palm Inc. +2098|Kouwell Electronics Corp. +2099|Source Corporation +2101|Action Star Enterprise Co., Ltd. +2105|Samsung Aerospace Industries Ltd. +2106|Accton Technology Corporation +2112|Argosy Research Inc. +2113|Rioport.com Inc. +2116|Welland Industrial Co., Ltd. +2118|NETGEAR, Inc. +2125|Minton Optic Industry Co., Ltd. +2128|Fast Point Technologies, Inc. +2129|Macronix International Co., Ltd. +2130|CSEM +2135|Gerber Scientific Products, Inc. +2136|Hitachi Maxell Ltd. +2137|Minolta Systems Laboratory, Inc. +2138|Xircom +2146|Teletrol Systems, Inc. +2147|Filanet Corporation +2151|Data Translation, Inc. +2154|Emagic Soft-und Hardware Gmbh +2158|System TALKS Inc. +2159|MEC IMEX INC/HPT +2160|Metricom +2163|Xpeed Inc. +2164|A-Tec Subsystem, Inc. +2169|Comtrol Corporation +2172|ADESSO/Kbtek America Inc. +2173|JATON Corporation +2174|Fujitsu Computer Products of America +2175|QualCore Logic Inc +2176|APT Technologies Inc. +2179|Recording Industry Association of America (RIAA) +2181|Boca Research, Inc. +2182|XAC Automation Corp. +2183|Hannstar Electronics Corp. +2194|DioGraphy Inc. +2204|United Technologies Research Cntr. +2205|Icron Technologies Corporation +2206|NST Co., Ltd. +2213|e9 Inc. +2216|Andrea Electronics +2222|Mace Group, Inc. +2228|Sorenson Vision, Inc. +2232|J. Gordon Electronic Design, Inc. +2233|RadioShack Corporation +2233|Tandy Corporation/Radio Shack +2235|Texas Instruments Japan +2237|Citizen Watch Co., Ltd. +2238|Meilenstein GmbH +2244|Proxim, Inc. +2247|TAI TWUN ENTERPRISE CO., LTD. +2248|2Wire, Inc +2249|Nippon Telegraph and Telephone Corp. +2250|AIPTEK International Inc. +2253|Jue Hsun Ind. Corp. +2254|Long Well Electronics Corp. +2255|Productivity Enhancement Products +2259|Virtual Ink +2260|Siemens PC Systems +2265|Increment P Corporation +2269|Billionton Systems, Inc. +2271|Spyrus Inc. +2276|Pioneer Corporation +2277|LITRONIC +2278|Gemalto SA +2279|PAN-INTERNATIONAL WIRE & CABLE (M) SDN BHD +2280|Integrated Memory Logic +2281|Extended Systems, Inc. +2282|Ericsson Inc., Blue Ridge Labs +2284|M-Systems Flash Disk Pioneers +2286|CCSI/HESSO +2288|CardScan Inc. +2289|CTI Electronics Corporation +2293|SYSTEC Co., Ltd. +2294|Logic 3 International Limited +2296|Keen Top International Enterprise Co., Ltd. +2297|Wipro Technologies +2298|CAERE +2299|Socket Communications +2300|Sicon Cable Technology Co. Ltd. +2301|Digianswer A/S +2303|AuthenTec, Inc. +2305|VST Technologies +2310|FARADAY Technology Corp. +2313|Audio-Technica Corp. +2314|Trumpion Microelectronics Inc +2315|Neurosmith +2316|Silicon Motion, Inc. - Taiwan +2317|MULTIPORT Computer Vertriebs GmbH +2318|Shining Technology, Inc. +2319|Fujitsu Devices Inc. +2320|Alation Systems, Inc. +2321|Philips Speech Processing +2322|Voquette, Inc. +2323|Asante' Technologies, Inc. +2325|GlobeSpan, Inc. +2327|SmartDisk Corporation +2334|Garmin International +2336|Echelon Co. +2337|GoHubs, inc. +2338|Dymo Corporation +2339|IC Media Corporation +2340|Xerox +2340|Xerox Corporation +2343|Summus, Ltd. +2344|Oxford Semiconductor Ltd. +2345|American Biometric Company +2346|Toshiba Information & Industrial Sys. And Services +2347|Sena Technologies, Inc. +2352|Toshiba Corporation +2353|Harmonic Data Systems Ltd. +2354|Crescentec Corporation +2355|Quantum Corp. +2356|Netcom Systems +2361|Lumberg, Inc. +2362|Pixart Imaging, Inc. +2363|Plextor LLC +2365|InnoSync, Inc. +2366|J.S.T. Mfg. Co., Ltd. +2367|OLYMPIA Telecom Vertriebs GmbH +2368|Japan Storage Battery Co., Ltd. +2369|Photobit Corporation +2370|i2Go.com, LLC +2371|HCL Technologies Ltd. +2372|KORG, Inc. +2373|PASCO Scientific +2381|Cable Television Laboratories +2385|Kingston Technology Company +2388|RPM Systems Corporation +2389|NVIDIA +2390|BSquare Corporation +2391|Agilent Technologies, Inc. +2392|CompuLink Research, Inc. +2393|Cologne Chip Designs GmbH +2394|Portsmith +2395|Medialogic Corporation +2396|K-Tec Electronics +2397|Polycom, Inc. +2408|Catalyst Enterprises, Inc. +2417|GretagMacbeth AG +2419|Axalto +2419|Schlumberger +2420|Datagraphix, a business unit of Anacomp +2421|OL'E Communications, Inc. +2422|Adirondack Wire & Cable +2423|Lightsurf Technologies +2424|Beckhoff Gmbh +2425|Jeilin Technology Corp., Ltd. +2426|Minds At Work LLC +2427|Knudsen Engineering Limited +2428|Marunix Co., Ltd. +2429|Rosun Technologies, Inc. +2431|Barun Electronics Co. Ltd. +2433|Oak Technology Ltd. +2436|Apricorn +2438|Matsushita Electric Works, Ltd. +2444|Vitana Corporation +2445|INDesign +2446|Integrated Intellectual Property Inc. +2447|Kenwood TMI Corporation +2454|Integrated Telecom Express, Inc. +2467|PairGain Technologies +2468|Contech Research, Inc. +2469|VCON Telecommunications +2470|Poinchips +2471|Data Transmission Network Corp. +2472|Lin Shiung Enterprise Co., Ltd. +2473|Smart Card Technologies Co., Ltd. +2474|Intersil Corporation +2475|Japan Cash Machine Co., Ltd. +2478|Tripp Lite +2482|Franklin Electronic Publishers +2483|Altius Solutions, Inc. +2484|MDS Telephone Systems +2485|Celltrix Technology Co., Ltd. +2497|ARRIS International +2498|NISCA Corporation +2499|ACTIVCARD, INC. +2500|ACTiSYS Corporation +2501|Memory Corporation +2508|Workbit Corporation +2509|Psion Dacom Plc +2510|City Electronics Ltd. +2511|Electronics Testing Center, Taiwan +2513|NeoMagic Inc. +2514|Vreelin Engineering Inc. +2515|COM ONE +2521|Jungo +2522|A-FOUR TECH CO., LTD. +2523|Measurement Computing Corporation +2524|AIMEX Corporation +2525|Fellowes Inc. +2525|Fellowes Manufacturing Co. +2527|Addonics Technologies Corp. +2529|Intellon Corporation +2533|Jo-Dan International, Inc. +2534|Silutia, Inc. +2535|Real 3D, Inc. +2536|AKAI professional M.I. Corp. +2537|CHEN-SOURCE INC. +2549|ARESCOM +2550|RocketChips, Inc. +2551|EDU-SCIENCE (H.K.) LIMITED +2552|SoftConnex Technologies, Inc. +2553|Bay Associates +2554|Mtek Vision +2555|Altera +2559|Gain Technology Corp. +2560|Liquid Audio +2561|ViA, Inc. +2571|Cybex Computer Products Corporation +2577|Xentec Incorporated +2578|Cambridge Silicon Radio Ltd. +2579|Telebyte Inc. +2580|Spacelabs Healthcare +2580|Spacelabs Medical Inc. +2581|Scalar Corporation +2582|Trek Technology (S) Pte Ltd +2583|HOYA Corporation +2584|Heidelberger Druckmaschinen AG +2585|Hua Geng Technologies Inc. +2593|Medtronic Physio Control Corp. +2594|Century Semiconductor USA, Inc. +2595|NDS Technologies Israel Ltd. +2617|Gilat Satellite Networks Ltd. +2618|PentaMedia Co., Ltd. +2620|NTT DoCoMo,Inc. +2621|Varo Vision +2627|Boca Systems Inc. +2628|TurboLinux +2629|Look&Say co., Ltd. +2630|Davicom Semiconductor, Inc. +2631|Hirose Electric Co., Ltd. +2632|I/O Interconnect +2635|Fujitsu Media Devices Limited +2636|COMPUTEX Co., Ltd. +2637|Evolution Electronics Ltd. +2638|Steinberg Soft-und Hardware GmbH +2639|Litton Systems Inc. +2640|Mimaki Engineering Co., Ltd. +2641|Sony Electronics Inc. +2642|JEBSEE ELECTRONICS CO., LTD. +2643|Portable Peripheral Co., Ltd. +2650|Electronics For Imaging, Inc. +2651|EASICS NV +2652|Broadcom Corp. +2653|Diatrend Corporation +2654|Spinnaker Systems Inc. +2661|FullAudio, Inc. +2662|ClearCube Technology +2662|INT LABS +2663|Medeli Electronics Co, Ltd. +2664|COMAIDE Corporation +2665|Chroma ate Inc. +2666|Newcom Inc. +2667|Green House Co., Ltd. +2668|Integrated Circuit Systems Inc. +2669|UPS Manufacturing +2670|Benwin +2671|Core Technology, Inc. +2672|International Game Technology +2673|VIPColor Technologies USA, Inc. +2674|Sanwa Denshi +2685|Intertek NSTL +2686|Octagon Systems Corporation +2687|AVerMedia MicroSystems +2688|Rexon Technology Corp., Ltd +2689|CHESEN ELECTRONICS CORP. +2690|SYSCAN +2691|NextComm, Inc. +2692|Maui Innovative Peripherals +2693|IDEXX LABS +2694|NITGen Co., Ltd. +2700|Tecmar +2701|Picturetel +2702|Japan Aviation Electronics Industry Ltd. (JAE) +2703|Young Chang Co. Ltd. +2704|Candy Technology Co., Ltd. +2705|Globlink Technology Inc. +2706|EGO SYStems Inc. +2707|C Technologies AB (publ) +2708|Intersense +2723|Lava Computer Mfg. Inc. +2724|Develco Elektronik +2725|First International Digital +2726|Perception Digital Limited +2727|Wincor Nixdorf GmbH & Co KG +2728|TriGem Computer, Inc. +2729|Baromtec Co. +2730|Japan CBM Corporation +2731|Vision Shape Europe SA. +2732|iCompression Inc. +2733|Rohde & Schwarz GmbH & Co. KG +2734|NEC infrontia Corporation +2734|Nitsuko Corporation +2735|digitalway co., ltd. +2736|Arrow Strong Electronics CO. LTD +2755|SANYO Semiconductor Company Micro +2756|LECO CORPORATION +2757|I & C Corporation +2758|Singing Electrons, Inc. +2759|Panwest Corporation +2760|Vimicro Corporation +2760|Z-Star Microelectronics Corporation +2761|Micro Solutions, Inc. +2764|Koga Electronics Co. +2765|ID Tech +2766|ZyDAS Technology Corporation +2767|Intoto, Inc. +2768|Intellix Corp. +2769|Remotec Technology Ltd. +2770|Service & Quality Technology Co., Ltd. +2787|Allion Test Labs, Inc. +2788|Taito Corporation +2789|MacroSystem Digital Video AG +2790|EVI, Inc. +2791|Neodym Systems Inc. +2792|System Support Co., Ltd. +2793|North Shore Circuit Design L.L.P. +2794|SciEssence, LLC +2795|TTP Communications Ltd. +2796|Neodio Technologies Corporation +2800|Option NV +2806|SILVER I CO., LTD. +2807|B2C2, Inc. +2812|Zaptronix Ltd +2813|Tateno Dennou, Inc. +2814|Cummins Engine Company +2815|Jump Zone Network Products, Inc. +2816|INGENICO +2821|ASUSTek Computer Inc. +2828|Todos Data System AB +2830|GN Netcom +2831|AVID Technology +2832|Pcally +2833|I Tech Solutions Co., Ltd. +2846|Electronic Warfare Assoc., Inc. (EWA) +2847|Insyde Software +2848|TransDimension Inc. +2849|Yokogawa Electric Corporation +2850|Japan System Development Co. Ltd. +2851|Pan-Asia Electronics Co., Ltd. +2852|Link Evolution Corp. +2855|Ritek Corporation +2856|Kenwood Corporation +2860|Village Center, Inc. +2864|NewHeights Software +2867|Contour Design, Inc. +2871|Hitachi ULSI Systems Co., Ltd. +2873|Omnidirectional Control Technology Inc. +2874|IPaxess +2875|Bromax Communications, Inc. +2876|Olivetti S.p.A +2876|Olivetti Tecnost +2878|Kikusui Electronics Corporation +2881|Hal Corporation +2888|TechnoTrend AG +2889|ASCII Corporation +2894|Musical Electronics Ltd. +2898|Colorado MicroDisplay, Inc +2900|Sinbon Electronics Co., Ltd. +2905|Lake Communications Ltd. +2912|Nsine Limited +2913|NEC Viewtechnology, Ltd. +2914|Orange Micro, Inc. +2917|Expert Magnetics Corp. +2921|CacheVision +2922|Maxim Integrated Products +2927|Nagano Japan Radio Co., Ltd +2928|PortalPlayer, Inc +2933|Roland DG Corporation +2949|Elkat Electronics (M) SDN. BHD. +2950|Exputer Systems, Inc. +2965|ASIX Electronics Corp. +2965|ASIX Electronics Corporation +2966|SEWON TELECOM +2967|O2 Micro, Inc. +2991|U.S. Robotics +2992|Concord Camera Corp. +2994|Ambit Microsystems Corporation +2995|Ofuji Technology +2996|HTC Corporation +2997|Murata Manufacturing Co., Ltd. +3000|Hitachi Semiconductor and Devices Sales Co., Ltd. +3000|Renesas Technology Sales Co., Ltd. +3009|FUW YNG ELECTRONICS COMPANY LTD +3010|Seagate LLC +3011|IPWireless, Inc. +3014|ExWAY Inc. +3015|X10 Wireless Technology, Inc. +3019|Perfect Technic Enterprise Co. LTD +3034|Realtek Semiconductor Corp. +3035|Ericsson AB +3042|Kanda Tsushin Kogyo Co., LTD +3044|Elka International Ltd. +3045|DOME Imaging Systems, Inc +3046|Wonderful Photoelectricity (DongGuan), Co., Ltd. +3054|LTK International Limited +3056|Pace Micro Technology PLC +3062|Addonics Technologies, Inc. +3063|Sunny Giken Inc. +3064|Fujitsu Siemens Computers GmbH +3078|Hasbro, Inc. +3079|Infinite Data Storage LTD +3083|Dura Micro, Inc. +3093|Iris Graphics +3100|Hang Zhou Silan Microelectronics Co. Ltd +3106|TallyGenicom L.P. +3108|Taiyo Yuden Co., Ltd. +3109|Sampo Corporation +3128|Der An Electric Wire & Cable Co. Ltd. +3129|Aeroflex +3130|Furui Precise Component (Kunshan) Co., Ltd +3131|Komatsu Ltd. +3132|Radius Co., Ltd. +3140|Motorola iDEN +3141|Sonix Technology Co., Ltd. +3154|Sealevel Systems, Inc. +3156|GLORY LTD. +3157|Spectrum Digital Inc. +3158|Billion Bright Limited +3159|Imaginative Design Operation Co. Ltd. +3161|Dong Guan Shinko Wire Co., Ltd. +3168|Apogee Electronics Corp +3170|Chant Sincere Co., Ltd +3171|Toko, Inc. +3172|Signality System Engineering Co., Ltd. +3173|Eminence Enterprise Co., Ltd. +3175|Concept Telecom Ltd +3176|Whanam Electronics Co., Ltd. +3190|Solid State System Co., Ltd. +3193|NuConnex Technologies PTE LTD +3194|Wing-Span Enterprise Co., Ltd. +3208|Kyocera Wireless Corp. +3209|Honda Tsushin Kogyo Co., Ltd +3213|Tempo +3214|Cesscom Co., Ltd. +3225|Innochips Co., Ltd. +3226|Hanwool Robotics Corp. +3238|Castles Technology Co. Ltd. +3245|Motorola CGISS +3245|Motorola G&PS +3247|Buslink +3255|Singatron Enterprise Co. Ltd. +3256|Opticis Co., Ltd. +3259|Shanghai Darong Electronics Co., Ltd. +3261|Pentel Co., Ltd. (Electronics Equipment Div.) +3262|Keryx Technologies, Inc. +3263|Union Genius Computer Co., Ltd +3264|Kuon Yi Industrial Corp. +3266|Timex Corporation +3268|emsys GmbH +3270|INTERMAGIC CORP. +3274|AMPHENOL +3276|DOMEX TECHNOLOGY CORPORATION +3289|Shin Din Cable Ltd. +3294|Z-Com INC. +3313|e-CONN ELECTRONIC CO., LTD. +3314|ENE Technology Inc. +3315|Atheros Communications, Inc. +3318|Compucable Corporation +3321|Central System Research Co., Ltd. +3324|Minolta-QMS, Inc. +3340|Astron Electronics Co., Ltd. +3343|Feng Shin Cable Co. Ltd. +3347|BMF CORPORATION +3348|Array Comm, Inc. +3349|OnStream b.v. +3350|Hi-Touch Imaging Technologies Co., Ltd. +3351|NALTEC, Inc. +3353|Hank Connection Industrial Co., Ltd. +3381|Dah Kun Co., Ltd. +3388|SRI CABLE TECHNOLOGY LTD. +3389|TANGTOP TECHNOLOGY CO., LTD. +3391|MTS Systems Corporation +3393|Ta Yun Electronic Technology Co., Ltd. +3394|FULL DER CO., LTD. +3401|Maxtor +3402|NF Corporation +3403|Grape Systems Inc. +3405|Coherent Inc. +3406|Agere Systems Netherland BV +3409|Volex (Asia) Pte Ltd +3411|HMI Co., Ltd. +3413|ASKA Technologies Inc. +3414|AVLAB Technology, Inc. +3423|CSI, Inc. +3424|IVL Technologies Ltd. +3425|MEILU ELECTRONICS (SHENZHEN) CO., LTD. +3426|Darfon Electronics Corp. +3427|Fritz Gegauf AG +3428|DXG Technology Corp. +3429|KMJP CO., LTD. +3430|TMT +3431|Advanet Inc. +3432|Super Link Electronics Co., Ltd. +3433|NSI +3434|Megapower International Corp. +3435|And-Or Logic +3440|Try Computer Co. LTD. +3442|Winmate Communication Inc. +3443|Hit's Communications INC. +3446|MFP Korea, Inc. +3447|Power Sentry/Newpoint +3448|Japan Distributor Corporation +3450|MARX CryptoTech LP +3452|Taiwan Line Tek Electronic Co., Ltd. +3453|Add-On Technology Co., Ltd. +3454|American Computer & Digital Components +3455|Essential Reality LLC +3456|H.R. Silvine Electronics Inc. +3457|TechnoVision +3459|Think Outside, Inc. +3463|Dolby Laboratories Inc. +3465|Oz Software +3466|KING JIM CO., LTD. +3467|Ascom Telecommunications Ltd. +3468|C-MEDIA ELECTRONICS INC. +3469|Promotion & Display Technology Ltd. +3470|Global Sun Technology Inc. +3471|Pitney Bowes +3472|Sure-Fire Electrical Corporation +3480|Mars Semiconductor Corp. +3481|Trazer Technologies Inc. +3482|RTX Telecom A/S +3483|Tat Shing Electrical Co. +3484|Chee Chen Hi-Technology Co., Ltd. +3485|Sanwa Supply Inc +3486|Avaya +3487|Powercom Co., Ltd. +3488|Danger Research +3489|Suzhou Peter's Precise Industrial Co., Ltd. +3491|Nippon Electro-Sensory Devices Corporation +3495|IOGEAR, Inc. +3501|Westover Scientific +3504|Micro-Star International Co., Ltd. +3505|Wen Te Electronics Co., Ltd. +3506|Shian Hwi Plug Parts, Plastic Factory +3507|Tekram Technology Co. Ltd. +3508|Chung Fu Chen Yeh Enterprise Corporation +3518|Jiuh Shiuh Precision Industry Co., Ltd. +3519|Quik Tech Solutions +3520|Great Notions +3521|Tamagawa Seiki Co., Ltd. +3523|Athena Smartcard Solutions Inc. +3524|Macpower Peripherals Ltd. +3525|SDK Co, Ltd. +3526|Precision Squared Technology Corporation +3527|First Cable Line, Inc. +3537|Contek Electronics Co., Ltd. +3538|Power Quotient International Co., Ltd. +3539|MediaQ +3540|Custom Engineering SPA +3541|California Micro Devices +3543|KOCOM CO., LTD +3545|HighSpeed Surfing +3546|Integrated Circuit Solution Inc. +3547|Tamarack Inc. +3548|Takaotec +3549|Datelink Technology Co., Ltd. +3550|UBICOM, INC +3552|BD Consumer Healthcare +3562|UTECH Electronic (D.G.) Co., Ltd. +3563|Lean Horn Co. +3564|Callserve Communications Ltd. +3565|Novasonics +3566|Lifetime Memory Products +3567|Full Rise Electronic Co., Ltd. +3574|Sitecom Europe B.V. +3575|Mobile Action Technology Inc. +3576|Hoya Computer Co., Ltd. +3577|Nice Fountain Industrial Co., Ltd. +3578|Toyo Communication Equipment Co., Ltd. +3580|General Touch Technology Co., Ltd. +3585|Sheng Xiang Investment Ltd. +3586|Doowon Co., LTD +3587|Nippon Systemware Co., Ltd. +3591|Viewtek Co., Ltd +3592|Winbest Technology Co., Ltd. +3593|Winskon Cabling Specialist Co., Ltd. +3599|VMWare, Inc. +3602|Danam Communications Inc. +3603|Lugh Networks, Inc. +3605|Tellert Elektronik GmbH +3606|JMTEK, LLC +3607|Walex Electronic Ltd. +3608|UNIWIDE Technologies +3615|Cabin Industrial Co., Ltd. +3618|Symbian Ltd. +3619|Liou Yuane International Ltd. +3620|Samson Electric Wire Co., Ltd. +3621|VinChip Systems, Inc. +3622|J-Phone East Co., Ltd. +3632|HeartMath LLC +3636|Micro Computer Control Corp. +3637|3Pea Technologies, Inc. +3638|TiePie engineering +3639|Alpha Data Corp. +3640|Stratitec, Inc. +3641|Smart Modular Technologies, Inc. +3642|Neostar Technology Co., Ltd. +3643|Mansella Ltd. +3644|Raytec Electronic Co., Ltd. +3650|Puretek Industrial Co., Ltd. +3651|Holly Lin International Technology Inc. +3652|Sun-Riseful Technology Co., Ltd. +3653|SafeNet B.V. +3654|Delphi Automotive +3654|Delphi Corporation +3658|Shenzhen Bao Hing Electric Wire & Cable Mfr. Co. +3659|System General Corp. +3660|Radica Games Ltd. +3661|Hong Shi Precision Corp. +3662|Lih Duo Intl. Co., Ltd. +3669|Speed Dragon Multimedia Ltd. +3674|ACTIVE CO., LTD. +3675|Union Power Information Industrial Co., Ltd. +3676|Bitland Information Technology Co., Ltd. +3677|Neltron Industrial Co., Ltd. +3678|Conwise Technology Co., Ltd. +3679|Entone Technologies +3680|XAVi Technologies Corp. +3681|E-Pen InMotion Inc. +3687|Fossil +3689|A Global Partner Corporation +3690|Megawin Technology Co., Ltd. +3696|Tokyo Electronic Industry Co, LTD. +3697|Schwarzer GmbH +3698|Hsi-Chin Electronics Co., Ltd. +3699|MCK Communications, Inc. +3700|Accu-Automation Corp. +3701|TVS Electronics Limited +3704|Ascom Powerline Communications Ltd. +3707|On-Tech Industry Co., Ltd. +3708|Legend Holdings Limited +3714|Ching Tai Electric Wire & Cable Co., Ltd. +3715|Shin An Wire & Cable Co. +3716|Elelux International Ltd. +3721|PRT Manufacturing Ltd. +3722|FinePoint Innovations, Inc. +3723|KAO SHIN PRECISION INDUSTRY CO., LTD. +3724|Well Force Electronic Co., Ltd +3725|MediaTek Inc. +3728|WiebeTech LLC +3729|VTech Engineering Canada Ltd. +3730|C'S GLORY ENTERPRISE CO., LTD. +3731|eM Technics Co., Ltd. +3733|Future Technology Co., Ltd +3734|APLUX Communications Ltd. +3735|Fingerworks, Inc. +3736|Advanced Analogic Technologies, Inc. +3737|Parallel Dice Co., Ltd. +3738|TA HSING INDUSTRIES LTD. +3739|ADTEC CORPORATION +3743|TAMURA CORPORATION +3744|Ours Technology Inc. +3750|Nihon Computer Co., Ltd. +3751|MSL Enterprises Corp. +3752|CenDyne, Inc. +3757|HUMAX Co., Ltd. +3761|WIS Technologies, Inc. +3762|Y-S ELECTRONIC CO., LTD. +3763|Saint Technology Corp. +3767|Endor AG +3768|Mettler-Toledo (Albstadt) GmbH +3774|VWEB Corporation +3775|Omega Technology of Taiwan Inc. +3776|LHI Technology (China) Co., Ltd. +3777|ABIT Computer Corporation +3778|Sweetray Industrial Ltd. +3779|AXELL CO., LTD. +3780|Ballracing Developments Ltd. +3781|GT Information System Co., Ltd. +3782|InnoVISION Multimedia Limited +3783|Theta Link Corporation +3789|Lite-On IT Corp. +3790|TaiSol Electronics Co., Ltd. +3791|Phogenix Imaging, LLC +3794|Kyoto Micro Computer Co., LTD. +3795|Wing-Tech Enterprise Co., Ltd. +3801|Holy Stone Enterprise Co., Ltd. +3802|ISE Electronics Corp. +3802|NORITAKE ITRON CORPORATION +3807|e-MDT Co., Ltd. +3808|SHIMA SEIKI MFG., LTD. +3809|Sarotech Co., Ltd. +3810|AMI Semiconductor Inc. +3811|ComTrue Technology Corporation (Taiwan) +3812|Sunrich Technology (H.K.) Ltd. +3822|Digital STREAM Technology, Inc. +3823|D-WAV SCIENTIFIC CO., LTD. +3824|Hitachi Cable, Ltd. +3825|Aichi Micro Intelligent Corporation +3826|I/OMAGIC CORPORATION +3827|Lynn Products, Inc. +3828|DSI Datotech +3829|PointChips +3830|Yield Microelectronics Corp. +3831|SM Tech Co., Ltd. +3837|Oasis Semiconductor +3838|WEM TECHNOLOGY INC. +3846|Visual Frontier Precision Corp. +3848|CSL Wire & Plug (Shen Zhen) Company +3852|CAS Corporation +3853|HORI CO., LTD. +3854|Energy Full Corp. +3858|MARS ENGINEERING CORPORATION +3859|Acetek Technology Co., Ltd. +3865|ORACOM CO., Ltd. +3867|Onset Computer Corporation +3868|Funai Electric Co., Ltd. +3869|Iwill Corporation +3872|GENNUM CORPORATION +3873|IOI Technology Corporation +3874|SENIOR INDUSTRIES, INC. +3875|Leader Tech Manufacturer Co., Ltd +3876|FLEX-P INDUSTRIES SDN.BHD. +3885|ViPower, Inc. +3886|Geniality Maple Technology Co., Ltd. +3886|Good Man Corporation +3887|Priva Design Services +3888|Jess Technology Co., Ltd. +3889|Chrysalis Development +3890|YFC-BonEagle Electric Co., Ltd. +3890|YFC-Boneagle Electric Co., Ltd. +3891|Futek Electronics, Co., Ltd. +3895|Kokuyo Co., Ltd. +3896|Nien-Yi Industrial Corp. +3905|RDC Semiconductor Co., Ltd. +3906|Nital Consulting Services, Inc. +3915|St. John Technology Co., Ltd. +3916|WORLDWIDE CABLE OPTO CORP. +3917|Microtune, Inc. +3918|Freedom Scientific +3922|WING KEI ELECTRICAL CO., LTD. +3923|Dongguan White Horse Cable Factory Ltd. +3923|Taiyo Cable (Dongguan) Co. Ltd. +3924|Kawai Musical Instruments Mfg. Co., Ltd. +3925|AmbiCom, Inc. +3932|PRAIRIECOMM, INC. +3933|NewAge International, LLC +3935|Key Technology Corporation +3936|GuangZhou Chief Tech Electronic Technology Co. Ltd. +3937|Varian Inc. +3938|Acrox Technologies Co., Ltd. +3944|TEPCO UQUEST, LTD. +3945|DIONEX CORPORATION +3946|Vibren Technologies Inc. +3955|DFI +3964|DQ Technology, Inc. +3965|NetBotz, Inc. +3966|Fluke Networks Corporation +3976|VTech Holdings Ltd. +3979|Yazaki Corporation +3980|Young Generation International Corp. +3981|Uniwill Computer Corp. +3982|Kingnet Technology Co., Ltd. +3983|SOMA NETWORKS +3991|CviLux Corporation +3992|CYBERBANK CORP. +3998|Lucent Technologies +4003|STARCONN Electronic Co., Ltd. +4004|ATL Technology +4005|SOTEC CO., LTD. +4007|EPOX COMPUTER CO., LTD. +4008|Logic Controls, Inc. +4015|Winpoint Electronic Corp. +4016|Haurtian Wire & Cable Co., Ltd. +4017|Inclose Design Inc. +4018|Conteck Co., Ltd. +4024|Wistron Corporation +4025|AACOM CORPORATION +4026|SAN SHING ELECTRONICS CO., LTD.. +4027|Bitwise Systems, Inc. +4033|MITAC INTERNATIONAL CORP. +4034|PLUG AND JACK INDUSTRIAL INC. +4038|Dataplus Supplies, Inc. +4046|Sony Ericsson Mobile Communications AB +4047|Dynastream Innovations Inc. +4048|Tulip Computers B.V. +4052|Tenovis GmbH & Co., KG +4053|Direct Access Technology, Inc. +4060|Micro Plus +4068|IN-TECH ELECTRONICS LIMITED +4069|TC&C ELECTRONIC CO.,LTD (SUNTECC, INC.) +4074|United Computer Accessories +4075|CRS ELECTRONIC CO., LTD. +4076|UMC Electronics Co., Ltd. +4077|ACCESS CO., LTD. +4078|Xsido Corporation +4079|MJ RESEARCH, INC. +4086|Core Valley Co., Ltd. +4087|CHI SHING COMPUTER ACCESSORIES CO., LTD. +4095|Aopen Inc. +4096|Speed Tech Corp. +4097|Ritronics Components (S) Pte. Ltd. +4099|SIGMA CORPORATION +4100|LG Electronics Inc. +4101|Animeta Systems, Inc. +4101|Apacer Technology Inc. +4105|Lumanate, Inc. +4106|AV Chaseway Ltd. +4107|Chou Chin Industrial Co., Ltd. +4109|NETOPIA, INC. +4112|FUKUDA DENSHI CO., LTD. +4113|Mobile Media Tech. +4114|SDKM Fibres, Wires & Cables Berhad +4115|TST-Touchless Sensor Technology AG +4116|Densitron Technologies PLC +4117|Softronics Pty. Ltd. +4118|Xiamen Hung's Enterprise Co., Ltd. +4119|SPEEDY INDUSTRIAL SUPPLIES PTE. LTD. +4130|Shinko Shoji Co., Ltd. +4133|Hyper-PALTEK +4134|Newly Corporation +4135|Time Domain +4136|Inovys Corporation +4137|Atlantic Coast Telesys +4138|RAMOS Technology Co., Ltd. +4139|Infotronic America, Inc. +4140|Etoms Electronics Corp. +4141|Winic Corporation +4143|WENZHOU YIHUA COMMUNICATED CONNECTOR CO., LTD. +4145|Comax Technology Inc. +4146|C-One Technology Corp. +4147|Nucam Corporation +4163|iCreate Technologies Corporation +4164|Chu Yuen Enterprise Co., Ltd. +4168|Targus Group International +4172|AMCO TEC International Inc. +4179|Immanuel Electronics Co., Ltd. +4180|BMS International Beheer N.V. +4181|Complex Micro Interconnection Co., Ltd. +4182|Hsin Chen Ent Co., Ltd. +4183|ON Semiconductor +4184|Western Digital Technologies, Inc. +4185|Giesecke & Devrient GmbH +4188|Freeway Electronic Wire & Cable (Dongguan) Co., Ltd. +4189|Delkin Devices, Inc. +4190|Valence Semiconductor Design Limited +4191|Chin Shong Enterprise Co., Ltd. +4192|Easthome Industrial Co., Ltd. +4202|Loyal Legend Limited +4204|Curitel Communications, Inc. +4205|San Chieh Manufacturing Ltd. +4206|ConectL +4207|Money Controls +4214|GCT Semiconductor, Inc. +4222|MIDORIYA ELECTRIC CO., LTD. +4223|KidzMouse, Inc. +4226|Shin-Etsukaken Co., Ltd. +4227|CANON ELECTRONICS INC. +4228|PANTECH CO., LTD. +4234|Chloride Power Protection +4235|Grand-tek Technology Co., Ltd. +4236|Robert Bosch GmbH +4238|Lotes Co., Ltd. +4249|Surface Optics Corporation +4255|eSOL Co., Ltd. +4256|HIROTECH, INC. +4259|MITSUBISHI MATERIALS CORPORATION +4265|SK Teletech Co., Ltd. +4266|Cables To Go +4267|USI Co., Ltd. +4268|Honeywell, Inc. +4270|Princeton Technology Corp. +4277|Comodo +4283|TM Technology Inc. +4284|Dinging Technology Co., Ltd. +4285|TMT TECHNOLOGY, INC. +4292|Silicon Laboratories, Inc. +4293|Sanei Electric Inc. +4294|Intec, Inc. +4299|eratech +4300|GBM Connector Co., Ltd. +4301|Kycon Inc. +4308|Man Boon Manufactory Ltd. +4309|Uni Class Technology Co., Ltd. +4310|Actions Semiconductor Co., Ltd. +4318|Authenex, Inc. +4319|In-Win Development Inc. +4320|Bella Corporation +4321|CABLEPLUS LTD. +4322|Nada Electronics, Ltd. +4332|Vast Technologies Inc. +4347|Pictos Technologies, Inc. +4352|VirTouch Ltd. +4353|EASYPASS INDUSTRIAL CO., LTD. +4360|BRIGHTCOM TECHNOLOGIES LTD. +4362|MOXA Technologies Co., Ltd. +4368|Analog Devices Canada Ltd. +4370|YM ELECTRIC CO., LTD. +4371|Medion AG +4381|Centon Electronics +4382|VSO Electric Co., Ltd. +4398|Master Hill Electric Wire and Cable Co., Ltd. +4399|Cellon International +4400|Tenx Technology, Inc. +4401|Integrated System Solution Corp. +4412|Arin Tech Co., Ltd. +4413|Mapower Electronics Co. Ltd. +4417|V ONE MULTIMEDIA PTE LTD +4422|Shimane SANYO Electric Co., Ltd. +4423|Ever Great Electric Wire and Cable Co., Ltd. +4427|Sphairon Technologies GmbH +4428|Tinius Olsen Testing Machine Co., Inc. +4429|Alpha Imaging Technology Corp. +4443|Salix Technology Co., Ltd. +4450|Secugen Corporation +4451|DeLorme Publishing Inc. +4452|YUAN High-Tech Development Co., Ltd. +4453|Telson Electronics Co., Ltd. +4454|Bantam Interactive Technologies +4455|Salient Systems Corporation +4456|BizConn International Corp. +4462|Gigastorage Corp. +4463|Silicon 10 Technology Corp. +4469|Sheng Yih Technologies Co., Ltd. +4469|Shengyih Steel Mold Co., Ltd. +4477|Santa Electronic Inc. +4478|JNC, Inc. +4482|Venture Corporation Limited +4483|Digital Dream Co. Europe Ltd. +4484|Kyocera Elco Corporation +4488|Bloomberg L.P. +4489|Trisat Industrial Co., Ltd. +4495|You Yang Technology Co., Ltd. +4496|Tripace +4497|Loyalty Founder Enterprise Co., Ltd. +4503|Technoimagia Co., Ltd. +4504|StarShine Technology Corp. +4505|Sierra Wireless Inc. +4506|DONG GUAN JALINK ELECTRONICES CO.,LTD +4506|ZHAN QI Technology Co., Ltd. +4515|Technovas Co., Ltd. +4520|Hoeft & Wessel AG +4522|GlobalMedia Group, LLC +4523|Exito Electronics Co., Ltd. +4527|Valence Semiconductor +4528|ATECH FLASH TECHNOLOGY +4529|New Motion Tec. Corp. +4544|Sanmos Microelectronics Corp. +4552|Fullcom Technology Corp. +4553|Monster Cable Products, Inc. +4559|Nemoto Kyorindo Co., Ltd. +4566|FUJIFILM AXIA CO., LTD. +4571|Topfield Co., Ltd. +4581|CHUFON Technology Co., Ltd. +4582|K.I. Technology Co. Ltd. +4583|Rockford Corporation +4584|NAAT Technology Corp. +4585|Wincan Technology Co., Ltd. +4586|PAN RAM International Corp. +4587|VTech Innovation L.P. dba Advanced American Telephones +4588|Hitachi Computer Peripherals Co., Ltd. +4591|Cableplus Industrial Co., Ltd. +4597|Siemens Mobile Phones +4610|KUK JE TONG SHIN CO., LTD. +4622|HUDSON SOFT CO., LTD. +4631|Goyatek Technology Inc. +4632|Geutebrueck GmbH +4633|COMPAL COMMUNICATIONS, INC. +4638|Jungsoft Co., Ltd. +4643|SKYCABLE ENTERPRISE. CO., LTD. +4649|EPO Science & Technology Inc. +4655|Takasic +4656|Chipidea-Microelectronica, S.A. +4657|CHI MEI COMMUNICATION SYSTEMS, INC. +4667|De La Rue Systems Automatizacao +4668|K-Won C & C Co., Ltd. +4674|MAC SYSTEM CO., LTD. +4682|AirVast Technology Inc. +4683|NYKO Technologies, Inc. +4689|Iwaya Corporation +4690|Nextway Co., Ltd. +4691|Erebus Limited +4698|Shintake Sangyo Co., Ltd. +4703|ADATA Technology Co., Ltd. +4705|All Ring Tech Co., Ltd. +4706|MICRO VISION CO., LTD. +4707|Opti Japan Corporation +4708|Covidien Energy-based Devices +4715|Veridian Systems +4716|Aristocrat Technologies +4717|Bel Stewart +4718|Strobe Data, Inc. +4719|TwinMOS Technologies Inc. +4720|Procomp Informatics Ltd. +4721|Foxda Technology Industrial (Shenzhen) Co., Ltd. +4722|Linear Technology Corporation +4736|Animeta Systems Inc. +4737|Gean Sen Electronic Co., Ltd. +4742|MARVELL SEMICONDUCTOR, INC. +4753|Flarion Technologies +4754|Fire International Ltd. +4756|RISO KAGAKU CORP. +4763|CyberTAN Technology Inc. +4764|Min Aik Technology Co., Ltd. +4765|Yueqing Longhua Electronics Factory +4771|KENT WORLD CO., LTD. +4772|Guangdong Matsunichi Communications Technology Co., Ltd +4775|Trendchip Technologies Corp. +4779|Honey Bee Electronic International Ltd. +4781|Asahi Seiko Co., Ltd. +4786|DICKSON Company +4787|Megaforce Company Ltd. +4792|Zhejiang Xinya Electronic Technology Co., Ltd. +4793|Freehand Systems, Inc. +4794|Sony Computer Entertainment America +4797|Sun Light Application Co., Ltd. +4809|Newmen Technology Corp. Ltd. +4817|Huawei Technologies Co., Ltd. +4818|LINE TECH INDUSTRIAL CO., LTD. +4823|BETTER WIRE FACTORY CO., LTD. +4824|Araneus Information Systems Oy +4825|DIGITFAB INTERNATIONAL CO., LTD. +4829|Alec Electronics Co.,Ltd. +4830|National Display Systems +4836|Bruel & Kjaer Sound & Vibration Meas. A/S +4841|Mindspeed Technologies +4852|Glovic Electronics Corp. +4853|Dynamic System Electronics Corp. +4855|Memorex Products, Inc. +4857|RF-LINK SYSTEMS, INC. +4858|RF Micro Devices +4862|E.U CONNECTOR(M) SDN BHD. +4870|Torcon Instruments Inc. +4871|USBest Technology Inc. +4882|ICS Electronics +4887|PC-CRAFT Co., Ltd. +4888|O'RITE TECHNOLOGY Co., Ltd. +4895|Ayuttha Technology Corp. +4899|Zeustech Company Limited +4900|H-Mod, Inc. +4905|Appairent Technologies, Inc. +4906|Envara +4907|Konica Minolta Holdings, Inc. +4908|Le Prestique International (H.K.) Ltd. +4923|FLASH SUPPORT GROUP, INC. +4924|G-Design Technology +4930|Sutter Instrument Company +4933|Sino Lite Technology Corp. +4936|Katsuragawa Electric Co., Ltd. +4950|Techpoint Electric Wire & Cable Co., Ltd. +4955|M-System Co., Ltd. +4970|Pelco +4971|STEC +4971|SimpleTech +4972|Datastor Technology Co., Ltd. +4976|Swissbit AG +4980|American Anko Co. +4981|TCL MOBILE COMMUNICATION CO., LTD. +4982|Vimtron Electronics Co., Ltd. +4989|Pericom Semiconductor Corp. +5054|Ricoh Printing Systems, Ltd. +5066|JyeTai Precision Industrial Co., Ltd. +5071|Wisair Ltd. +5073|A-Max Technology Macao Commercial Offshore Co. Ltd. +5075|AzureWave Technologies, Inc. +5084|ALEREON, INC. +5085|i.Tech Dynamic Limited +5089|Kaibo Wire & Cable (Shenzhen) Co., Ltd. +5117|Initio Corporation +5118|Phison Electronics Corp. +5122|Bowe Bell & Howell +5134|Telechips, Inc. +5136|Novatel Wireless, Inc. +5145|ABILITY ENTERPRISE CO., LTD. +5153|Sensor Technologies America, Inc. +5161|Vega Technologies Industrial (Austria) Co. +5168|RedOctane +5169|Pertech Resources, Inc. +5173|Wistron NeWeb Corp. +5174|Denali Software, Inc. +5180|Altek Corporation +5206|Extending Wire & Cable Co., Ltd. +5217|Staccato Communications +5234|Hangzhou H3C Technologies Co., Ltd. +5242|Formosa Industrial Computing, Inc. +5242|Formosa21 Inc. +5246|UPEK Inc. +5247|Hama GmbH & Co., KG +5255|DSP Group, Ltd. +5262|EVATRONIX SA +5271|Panstrong Company Ltd. +5293|CTK Corporation +5294|Printronix Inc. +5295|ATP Electronics Inc. +5296|StarTech.com Ltd. +5312|Rockwell Automation, Inc. +5314|Gemlight Computer Ltd. +5325|MOAI ELECTRONICS CORPORATION +5336|JAMER INDUSTRIES CO., LTD. +5349|SAIN Information & Communications Co., Ltd. +5357|Shure Inc. +5375|Twinhead International Corp. +5376|Ellisys +5377|Pine-Tum Enterprise Co., Ltd. +5393|BridgeCo, AG +5398|Skymedi Corporation +5404|VeriSilicon Holdings Co., Ltd. +5408|Bitwire Corp. +5421|JMicron Technology Corp. +5422|HLDS (Hitachi-LG Data Storage, Inc.) +5440|Phihong Technology Co., Ltd. +5451|PNY Technologies Inc. +5453|ConnectCounty Holdings Berhad +5454|D & M Holdings, Inc. +5460|Prolink Microsystems Corporation +5480|Sunf Pu Technology Co., Ltd +5487|Quantum Corporation +5488|ALLTOP TECHNOLOGY CO., LTD. +5499|Ketron SRL +5502|U-MEDIA Communications, Inc. +5510|Sitor Electronics (Shenzhen) Co., Ltd. +5511|SMA Technologie AG +5517|Oakley Inc. +5528|Kunshan Guoji Electronics Co., Ltd. +5538|Freescale Semiconductor, Inc. +5540|Afa Technologies, Inc. +5546|Hong Kong Gearway Electronics Co., Ltd. +5577|D-Box Technologies +5589|Coulomb Electronics Ltd. +5596|Hynix Semiconductor Inc. +5600|Seong Ji Industrial Co., Ltd. +5609|Pacific Digital Corp. +5612|Belcarra Technologies Corp. +5638|UMAX +5640|Inside Out Networks +5645|Samtec +5657|L & K Precision Technology Co., Ltd. +5650|Soft DB Inc. +5665|Wionics Research +5672|Stonestreet One, Inc. +5679|WiQuest Communications, Inc. +5681|Focus Enhancements +5694|HongLin Electronics Co., Ltd. +5706|ChipX +5728|Creatix Polymedia GmbH +5736|Actiontec Electronics, Inc. +5753|Total Phase +5762|Maxwise Production Enterprise Ltd. +5764|Godspeed Computer Corp. +5766|ZOOM Corporation +5767|Kingmax Digital Inc. +5782|Hitachi Video and Information System, Inc. +5783|VTEC TEST, INC. +5797|Shenzhen Zhengerya Technology Co., Ltd. +5804|Dongguan ChingLung Wire & Cable Co., Ltd. +5836|silex technology, Inc. +5843|Frontline Test Equipment, Inc. +5855|King Billion Electronics Co., Ltd. +5877|Futurelogic Inc. +5895|ARTIMI +5901|Avnera +5942|CANON IMAGING SYSTEMS INC. +5943|Hong Kong Applied Science and Technology Research Inst. +5955|General Atomics +5960|MQP Electronics Ltd. +5964|ASMedia Technology Inc. +5977|LucidPort Technology, Inc. +5998|UD electronic corp. +6001|Shenzhen Alex Connector Co., Ltd. +6002|System Level Solutions, Inc. +60186|Empia Technology, Inc. +6020|TopSeed Technology Corp. +6024|ShenZhen Litkconn Technology Co., Ltd. +6038|Printrex, Inc. +6039|JALCO CO., LTD. +6053|Advanced Connection Technology Inc. +6055|MICOMSOFT CO., LTD. +6083|Singim International Corp. +6095|Hip Hing Cable & Plug Mfy. Ltd. +6096|Sanford L.P. +6099|Korea Techtron Co., Ltd. +6121|DisplayLink (UK) Ltd. +6127|Lenovo +6133|K.K. Rocky +6134|Unicomp, Inc +6168|Osteosys Co., Ltd. +6185|Suzhou YuQiu Technology Co., Ltd. +6193|Gwo Jinn Industries Co., Ltd. +6194|Huizhou Shenghua Industrial Co., Ltd. +6228|Memory Devices Ltd. +6241|Tech Technology Industrial Company +6242|Teridian Semiconductor Corp. +6257|Aveo Technology Corp. +6271|Siano Mobile Silicon Ltd. +6292|SyntheSys Research, Inc. +6296|Summit Microelectronics +6297|Linkiss Co., Ltd. +6326|Mikkon Technology Limited +6353|Google Inc. +6357|Starline International Group Limited +6371|Fitilink Integrated Technology, Inc. +6394|Kuang Ying Computer Equipment Co., Ltd. +6397|FineArch Inc. +6413|Motorola GSG +6420|Alco Digital Devices Limited +6421|Nordic Semiconductor ASA +6425|Pixelworks +6434|Power 7 Technologies Corp. +6447|Avago Technologies, Pte. +6448|Shenzhen Xianhe Technology Co., Ltd. +6449|Ningbo Broad Telecommunication Co., Ltd. +6473|Lab126 +6483|Ironkey Inc. +6487|BIOS Corporation +6503|CASIO HITACHI Mobile Communications Co., Ltd. +6507|Wispro Technology Inc. +6512|Dane-Elec Corp. USA +6537|Nuconn Technology Corp. +6541|Fairchild Imaging +6543|Beceem Communications Inc. +6544|Acron Precision Industrial Co., Ltd. +6556|Richnex Microelectronics Corporation +6557|Dexxon +6559|Benica Corporation +6568|Biforst Technology Inc. +6581|B & W Group +6582|Infotech Logistic, LLC +6607|Parrot SA +6625|WeiDuan Electronic Accessory (S.Z.) Co., Ltd. +6632|Industrial Technology Research Institute +6640|Jyh Woei Industrial Co., Ltd. +6666|USB-IF non-workshop +6674|KES Co., Ltd. +6693|Amphenol East Asia Ltd. +6698|Seagate Branded Solutions +6709|Astec Power, a division of Emerson Network Power +6710|Biwin Technology Ltd. +6720|TERMINUS TECHNOLOGY INC. +6721|Action Electronics Co., Ltd. +6730|Silicon Image +6731|SafeBoot International B.V. +6753|Abbott Diabetes Care +6762|Spansion Inc. +6765|SamYoung Electronics Co., Ltd +6766|Global Unichip Corp. +6767|Sagem Orga GmbH +6772|Oberthur Technologies +6777|Bayer Health Care LLC +6779|Lumberg Connect GmbH +6786|Proconn Technology Co., Ltd. +6793|Dynalith Systems Co., Ltd. +6794|Simula Technology Inc. +6795|SGS Taiwan Ltd. +6808|Leica Camera AG +6820|Data Drive Thru, Inc. +6821|UBeacon Technologies, Inc. +6822|eFortune Technology Corp. +6830|Johnson Component & Equipments Co., Ltd. +6859|Salcomp Plc +6865|Desan Wire Co., Ltd. +6884|ic-design Reinhard Gottinger GmbH +6885|Jianduan Technology (Shenzhen) Co., Ltd +6893|High Top Precision Electronic Co., Ltd. +6894|Dongguan Chang'an Jinxia Rex Electronics Factory +6894|SHEN ZHEN REX TECHNOLOGY CO., LTD. +6895|Octekconn Incorporation +6940|CORSAIR MEMORY INC. +6944|MStar Semiconductor, Inc. +6946|WiLinx Corp. +6962|Ugobe Inc. +6966|ViXS Systems, Inc. +6983|Energizer Holdings, Inc. +6984|Plastron Precision Co., Ltd. +7001|K.S. Terminals Inc. +7002|Chao Zhou Kai Yuan Electric Co., Ltd. +7013|The Hong Kong Standards and Testing Centre Ltd. +7046|Dongguan Guanshang Electronics Co., Ltd. +7048|ShenMing Electron (Dong Guan) Co., Ltd. +7054|Amlogic, Inc. +7055|Super Talent Technology, Inc. +7062|N-Trig +7065|Shenzhen Yuanchuan Electronic +7073|JINQ CHERN ENTERPRISE CO., LTD. +7099|T & A Mobile Phones +7108|Ford Motor Co. +7118|Contac Cable Industrial Limited +7119|Sunplus Innovation Technology Inc. +7151|Shenzhen Tongyuan Network-Communication Cables Co., Ltd +7152|RealVision Inc. +7158|Orient Semiconductor Electronics, Ltd. +7181|Relm Wireless +7184|Lanterra Industrial Co., Ltd. +7194|Datel Electronics Ltd. +7195|Volkswagen of America, Inc. +7199|Goldvish S.A. +7200|Fuji Electric Device Technology Co., Ltd. +7201|ADDMM LLC +7202|ZHONGSHAN CHIANG YU ELECTRIC CO., LTD. +7206|Shanghai Haiying Electronics Co., Ltd. +7207|SHENZHEN D&S INDUSTRIES LIMITED +7217|LS Cable Ltd. +7223|Sonavation, Inc. +7229|NONIN MEDICAL INC. +7230|Wep Peripherals +7241|Cherng Weei Technology Corp. +7275|Philips & Lite-ON Digital Solutions Corporation +7276|Skydigital Inc. +7287|Kaetat Industrial Co., Ltd. +7288|Datascope Corp. +7289|Unigen Corporation +7290|LighTuning Technology Inc. +7291|Shenzhen Luxshare Precision Industry Co., Ltd. +7304|Somagic, Inc. +7305|HONGKONG WEIDIDA ELECTRON LIMITED +7310|ASTRON INTERNATIONAL CORP. +7320|ALPINE ELECTRONICS, INC. +7328|ACCARIO Inc. +7329|Symwave, Inc. +7347|Aces Electronics Co., Ltd. +7348|OPEX CORPORATION +7358|Texas Instruments - Stellaris +7359|FORTAT SKYMARK INDUSTRIAL COMPANY +7360|PlantSense +7370|NextWave Broadband Inc. +7373|Bodatong Technology (Shenzhen) Co., Ltd. +7380|adp corporation +7381|Firecomms Ltd. +7382|Antonio Precise Products Manufactory Ltd. +7390|Telecommunications Technology Association (TTA) +7391|WonTen Technology Co., Ltd. +7392|EDIMAX TECHNOLOGY CO., LTD. +7393|Amphenol KAE +7420|ANDES TECHNOLOGY CORPORATION +7421|Flextronics Digital Design Japan, LTD. +7432|NINGBO HENTEK DRAGON ELECTRONICS CO., LTD. +7433|TechFaith Wireless Technology Limited +7434|Johnson Controls, Inc. The Automotive Business Unit +7435|HAN HUA CABLE & WIRE TECHNOLOGY (J.X.) CO., LTD. +7444|ALPHA-SAT TECHNOLOGY LIMITED +7455|Diostech Co., Ltd. +7456|SAMTACK INC. +7465|Horng Tong Enterprise Co., Ltd. +7473|XINTRONIX LIMITED +7490|DRAGON JOY LIMITED +7491|Montage Technology, Inc. +7492|Adirondack Digital Imaging Systems, Inc. +7493|Qisda Corporation +7494|nSys Design Systems +7496|Shenzhen XinYonghui Precise Technology Co., Ltd. +7497|SHENZHEN LINKCONN ELECTRONICS CO., LTD. +7501|Pegatron Corporation +7502|INPHI CORPORATION +7503|ADVANCED CHIP EXPRESS INC. +7516|Fresco Logic Inc. +7517|QIXING INDUSTRIAL (HK) CO. +7519|ViVOtech, Inc. +7520|ASAP International Co., Ltd. +7529|Walta Electronic Co., Ltd. +7530|ARICENT TECHNOLOGIES (HOLDINGS) LTD. +7531|The Linux Foundation +7537|Finisar Corporation +7542|LongCheng Electronic & Communication CO., LTD. +7543|Yueqing Changling Electronic Instrument Corp., Ltd. +7544|CAMBRIDGE SEMICONDUCTOR LTD. +7545|Shenzhen My-Power Technology Co., Ltd. +7546|SHINWA INTERNATIONAL HOLDINGS LTD. +7551|Ecrio +7552|PLDA +7553|YongXin Plastic & Hardware Co., Ltd. +7556|Kechenda Plastic Electronic Factory +7557|NINGBO SHUNSHENG COMMUNICATION APPARATUS CO., LTD. +7564|Wuxi AlphaScale IC Systems, Inc. +7582|CSR, Inc. +7583|KUNMING ELECTRONICS CO., LTD. +7584|Parade Technologies, Inc. +7607|SMedia Technology Corporation +7608|HD MEDICAL INC. +7613|Terawins +7614|S.R.N. Corporation +7615|Signostics Pty. Ltd. +7618|Datalogic Mobile Inc. +7628|Document Capture Technologies, Inc. +7629|HIN KUI MACHINE & METAL INDUSTRIAL CO., LTD. +7639|REDMERE TECHNOLOGY +7640|BUFFALO KOKUYO SUPPLY INC. +7641|EFFICERE TECHNOLOGIES +7647|GDA Technologies, Inc. +7648|Shenzhen Excelstor Technology Ltd. +7649|Actions Microelectronics Co., Ltd. +7650|ENTERY INDUSTRIAL CO., LTD. +7651|SHENZHEN REX ELECTRONICS CO., LTD. +7652|DAEWOO ELECTRONICS CORPORATION +7658|Yesin Electronics Technology Co., Ltd. +7659|SHIUH CHI PRECISION INDUSTRY CO., LTD. +7665|HUATIANYUAN ELECTRONIC INDUSTRY CO., LTD. +7666|Telecommunication Metrology Center of MII +7667|CRESYN CO., LTD. +7668|SHEN ZHEN FORMAN PRECISION INDUSTRY CO., LTD. +7680|Jupiter Systems +7682|GLOBEMASTER TECHNOLOGIES CO., LTD. +7687|GETA ELECTRONICS (DONG GUAN) CO., LTD. +7688|Inventure, Inc. +7696|Point Grey Research Inc. +7697|Hoya Xponent +7708|CMS PRODUCTS +7709|Kanguru Solutions +7711|INVIA +7712|JDSU +7722|NANOFORTI INC. +7731|KOBIAN CANADA INC. +7738|Continental Automotive Systems Inc. +7741|Chipsbrand Technologies (HK) Co., Limited +7751|HUNG TA H.T.ENTERPRISE CO., LTD. +7758|Etron Technology, Inc. +7789|WAN SHIH ELECTRONIC (H.K.) CO., LTD. +7795|COMLINK ELECTRONICS CO., LTD. +7817|Vtion Information Technology (Fujian) Co., Ltd. +7843|Concraft Holding Co., Ltd. +7846|novero GmbH +7863|WIN WIN PRECISION INDUSTRIAL CO., LTD. +7881|MOSER BAER INDIA LIMITED +7867|NuCORE Technology, Inc. +7898|AIRTIES WIRELESS NETWORKS +7899|BLACKMAGIC DESIGN PTY. +7976|Cal-Comp Electronics & Communications +7977|Analogix Semiconductor, Inc. +7985|SASKEN COMMUNICATION TECH LTD. +7989|Amphenol Shouh Min Industry +7996|Chang Yang Electronics Company Ltd. +8009|ITT Corporation +8027|KYODO COMMUNICATIONS & ELECTRONICS INC. +8053|Innostor Co., Ltd. +8063|NOVA Sensors +8064|MagicPixel Inc. +8073|Dongguan Goldconn Electronics Co., Ltd. +8074|Morning Star Industrial Co., Ltd. +8108|DIFFON CORPORATION +8109|Cresta Technology Inc. +8116|Owl Computing Technologies, Inc. +8117|Siemens Enterprise Communications GmbH & Co. KG +8137|NXP Semiconductors +8172|NIAN YEONG ENTERPRISE CO., LTD. +8193|D-Link Corporation +8205|Belkin Electronic (Changzhou) Co., Ltd. +8220|Freeport Resources Enterprises Corp. +8232|DETAS TECHNOLOGY LTD. +8237|Snowbush IP (a division of Gennum) +8256|Hauppauge Computer Works, Inc. +8284|Shenzhen Tronixin Electronics Co., Ltd. +8317|CESI Technology Co., Ltd. +8334|ICT-LANTO LIMITED +8341|China Electronics Technology Limited +8342|Microconn Electronic Co., Ltd. +8367|Shenzhen CARVE Electronics Co., Ltd. +8384|FENGHUA KINGSUN CO., LTD. +8386|Sumitomo Electric Ind., Ltd., Optical Comm. R&D Lab +8408|Changzhou Xinchao Technologies, Inc. +8432|Insight Technology Incorporated +8439|SOFTHARD Technology Ltd. +8445|NOVO NORDISK A/S +8446|Elektrobit Inc. +8457|VIA Labs, Inc. +8492|Shenzhen Linoya Electronic Co., Ltd. +8494|Amphenol AssembleTech (Xiamen) Co., Ltd. +8504|iVina, Inc. +8550|JVC KENWOOD Holdings, Inc. +8551|Zhejiang Fousine Science & Technology Co., Ltd. +8563|HUIZHOU HUANGJI PRECISIONS FLEX ELECTRONICAL CO., LTD. +8564|Transcend Information, Inc. +8565|Light Blue Optics, Inc. +8566|TMC/Allion Test Labs +8583|ESPACE SERVICES MULTIMEDIAS +8584|CalDigit +8618|TAKASAKI KYODO COMPUTING CENTER CO., LTD. +8627|Dongguan Teconn Electronics Technology Co., Ltd. +8629|SHENZHEN JASON ELECTRONICS CO., LTD. +8644|Netcom Technology (HK) Limited +8658|NeoLAB Convergence +8659|Compupack Technology Co., Ltd. +8660|Eduplayer Co., Ltd. +8665|Verification Technology, Inc. +8666|Valor Auto Companion, Inc. +8667|G-Max Technology Co., Ltd. +8681|Jiafuh Metal & Plastic (ShenZhen) Co., Ltd. +8682|JUST MAKE ELECTRONICS CO., LTD. +8695|Wuerth-Elektronik eiSos GmbH & Co. KG +8705|Elan Digital Systems Ltd. +8706|Walex Electronic (Wu Xi) Co., Ltd. +8707|Shin Shin Co., Ltd. +8709|3eYamaichi Electronics Co., Ltd. +8710|Wiretek International Investment Ltd. +8711|Fuzhou Rockchip Electronics Co., Ltd. +8734|Linktec Technologies Co., Ltd. +8756|T-CONN PRECISION CORPORATION +8770|Zhihe Electronics Technology Co., Ltd. +8784|Evernew Wire & Cable Co., Ltd. +8785|QuieTek Corp. +8786|TSANSUN TECH. CO., LTD. +8793|Skypine Electronics (Shenzhen) Co., Ltd. +8804|Entourage Systems, Inc. +8815|Koyo Trading Co., Ltd. +8816|XiaMen GaoLuChang Electronics Co. Ltd. +8831|Granite River Labs +8839|Shenzhen Oversea Win Technology Co., Ltd. +8840|Digital EMC Co., Ltd. +8841|Sun Fair Electric Wire & Cable (HK) Co., Ltd. +8842|Hotron Precision Electronic Ind. Corp. +8843|Shenzhen DLK Electronics Technology Co., Ltd. +8855|Evolution Technology Corporation +8873|Valor Communication, Inc. +8874|AppliedMicro +8875|Trigence Semiconductor, Inc. +8888|Motorola MDS +8889|eTurboTouch Technology Inc. +8890|Technology Innovation International Co., Ltd. +8903|MEMUP +8904|Karming Electronic (Shenzhen) Co., Ltd. +8923|Phase One A/S +8932|Shenyang Tongzhen Precision Electronic Technology Co. +8959|Avnet +8964|Pinnacle +8979|Kunshan Jiahua Electronics Co., Ltd. +8980|INQ Mobile Limited +8981|Avery Design Systems, Inc. +8982|DongGuan Potec Electric Industrial Co., Ltd. +8983|Huawei Device Co., Ltd. +8998|CHAO KUEI MOLD INDUSTRIAL CO., LTD. +9008|Tensorcom +9009|PUZZLE LOGIC INC. +9028|HAMBURG INDUSTRIES CO., LTD. +9036|Zenverge Inc. +9037|Skype Inc. +9048|Greenconn Corporation +9049|Shenzhen Autone-Tronic Technology Co., Ltd. +9050|Top Yang Technology Enterprise Co., Ltd. +9051|KangXiang Electronic Co., Ltd. +9068|ZheJiang Chunsheng Electronics Co., Ltd. +9069|e-supplies Co., Ltd. +9090|Trigaudio, Inc. +9131|Shenzhen Zhengtong Electronics Co., Ltd. +9132|Marunix Electron Limited +9147|EMI STOP CORP. +9797|Lead Data Inc. +9808|Electronics For Imaging, Inc. +10393|Toptronic Industrial Co., Ltd. +12662|WHANAM ELECTRONICS CO., Ltd. MS division +13878|INVIBRO +14627|National Instruments +16700|Dell Inc. +16962|USB Design By Example +21827|UC-Logic Technology Corp. +21930|OnSpec Electronic Inc. +24576|TRIDENT MICROSYSTEMS (Far East) Ltd. +25452|CoreLogic, Inc. +27253|Shanghai Jujo Electronics Co., Ltd. +32902|Intel Corporation +32903|Intel Corporation +38672|Moschip Semiconductor Technology +60186|Empia Technology, Inc. diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/en.lproj/InfoPlist.strings b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..5e45963 Binary files /dev/null and b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/Resources/en.lproj/InfoPlist.strings differ diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/USBBusProber b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/USBBusProber new file mode 100755 index 0000000..06ccd58 Binary files /dev/null and b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/A/USBBusProber differ diff --git a/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/Current b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/src/mynteye/uvc/macosx/USBBusProber.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/USBBusProber/BusProbeDevice.m b/src/mynteye/uvc/macosx/USBBusProber/BusProbeDevice.m index b492c11..c33e301 100644 --- a/src/mynteye/uvc/macosx/USBBusProber/BusProbeDevice.m +++ b/src/mynteye/uvc/macosx/USBBusProber/BusProbeDevice.m @@ -1,5 +1,5 @@ /* - * Copyright © 1998-2012 Apple Inc. All rights reserved. + * Copyright � 1998-2012 Apple Inc. All rights reserved. * * @APPLE_LICENSE_HEADER_START@ * diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Headers b/src/mynteye/uvc/macosx/VVUVCKit.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Resources b/src/mynteye/uvc/macosx/VVUVCKit.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/VVUVCKit b/src/mynteye/uvc/macosx/VVUVCKit.framework/VVUVCKit new file mode 120000 index 0000000..f44c5b1 --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/VVUVCKit @@ -0,0 +1 @@ +Versions/Current/VVUVCKit \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCController.h b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCController.h new file mode 100644 index 0000000..a6cb647 --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCController.h @@ -0,0 +1,405 @@ +#import +#include +#include +#include +#include +#include +#import +//#import +#import "VVUVCKitStringAdditions.h" + +/** +\defgroup VVUVCController +*/ + + +/* +@protocol VVUVCControllerDelegate + - (void) VVUVCControllerParamsUpdated:(id)c; +@end +*/ + + +/** +\ingroup VVUVCController +Auto-exposure modes described by the USB spec, put in a typedef/enum for convenience +*/ +typedef enum { + UVC_AEMode_Undefined = 0x00, /// undefined auto exposure mode + UVC_AEMode_Manual = 0x01, /// manual exposure, manual iris + UVC_AEMode_Auto = 0x02, /// auto exposure, auto iris + UVC_AEMode_ShutterPriority = 0x04, /// manual exposure, auto iris + UVC_AEMode_AperturePriority = 0x08 /// auto exposure, manual iris +} UVC_AEMode; + + +/* this struct contains all the info necessary to get/set vals from a video control parameter (either terminal/hardware or + processing/software)- but it does not contain info about the value at all! think of this struct as a sort of function + description for the hardware which will be sent out directly via USB. instances of this struct are populated by values + from the USB specification! */ +typedef struct { + int unit; // describes whether terminal/hardware or processing/software + int selector; // the address of the "parameter" being changed- + int intendedSize; + BOOL hasMin; // whether or not the video control parameter described by this struct has a min val + BOOL hasMax; // whether or not the video control parameter described by this struct has a max + BOOL hasDef; // whether or not the video control parameter described by this struct has a default + BOOL isSigned; // whether or not the video control parameter described by this struct is a signed val + BOOL isRelative; // whether or not the video control parameter described by this struct is a relative val +} uvc_control_info_t; + + +/* these variables contain enough info to send data to/get data from the implied attribute. the + variables are global to the class (the contents won't change from instance to instance), and + conceptually act like function descriptions (instances of this class can pass references to these + variables, which can be used to get/set values). these are populated when the class is + initialized by values described in the USB specification. if uvc_control_info_t is a function + description, these variables are essentially pointers to a bunch of different functions. */ +extern uvc_control_info_t _scanCtrl; +extern uvc_control_info_t _autoExposureModeCtrl; +extern uvc_control_info_t _autoExposurePriorityCtrl; +extern uvc_control_info_t _exposureTimeCtrl; +extern uvc_control_info_t _irisCtrl; +extern uvc_control_info_t _autoFocusCtrl; +extern uvc_control_info_t _focusCtrl; +extern uvc_control_info_t _zoomCtrl; +extern uvc_control_info_t _panTiltCtrl; +extern uvc_control_info_t _panTiltRelCtrl; +extern uvc_control_info_t _rollCtrl; +extern uvc_control_info_t _rollRelCtrl; + +extern uvc_control_info_t _backlightCtrl; +extern uvc_control_info_t _brightCtrl; +extern uvc_control_info_t _contrastCtrl; +extern uvc_control_info_t _gainCtrl; +extern uvc_control_info_t _powerLineCtrl; +extern uvc_control_info_t _autoHueCtrl; +extern uvc_control_info_t _hueCtrl; +extern uvc_control_info_t _saturationCtrl; +extern uvc_control_info_t _sharpnessCtrl; +extern uvc_control_info_t _gammaCtrl; +extern uvc_control_info_t _whiteBalanceAutoTempCtrl; +extern uvc_control_info_t _whiteBalanceTempCtrl; + + +/* this struct describes a parameter- it contains a pointer to the control info that describes +which parameter, as well as the min/max/default/current value. an instance of this struct will +contain the value of the parameter and the uvc_control_info_t struct necessary to communicate with +this parameter in a camera. */ +typedef struct { + BOOL supported; // if YES, this parameter is supported. if NO, either the camera doesn't support this parameter, or the "inputTerminalID" or "processingUnitID" of the camera is wrong! + long min; // the paramter's actual min val + long max; // the parameter's actual max val + long val; // the parameter's actual val + long def; // the parameter's default val + int actualSize; + uvc_control_info_t *ctrlInfo; +} uvc_param; + + + + + +/// An instance of VVUVCController will control the UVC params for a single USB video device. This is probably the only class you'll have to create or work with in this framework. +/** +\ingroup VVUVCController +This is probably the only class you'll have to work with in this framework. The basic idea is that you create a VVUVCController for an enabled USB video device, and then either tell the controller to open its settings window or interact with it programmatically. If you're looking for a more "embedded" feel, you can remove the VVUVCController's "settingsView" from its superview and add it into your application's NSView hierarchy. +*/ +@interface VVUVCController : NSObject { + IOUSBInterfaceInterface190 **interface; + UInt32 deviceLocationID; + UInt8 interfaceNumber; // pulled from interface on generalInit! + int inputTerminalID; // the "address" of the terminal unit, which handles hardware controls like aperture/focus. if this val is wrong, the hardware controls won't be available. + int processingUnitID; // the "address" of the processing unit, which handles software controls like contrast/hue. if this val is wrong, the software controls won't be available. + + //id delegate; + uvc_param scanningMode; + uvc_param autoExposureMode; // mode functionality described by the type UVC_AEMode + uvc_param autoExposurePriority; // if 1, framerate may be varied. if 0, framerate must remain constant. + uvc_param exposureTime; + uvc_param iris; + uvc_param autoFocus; + uvc_param focus; + uvc_param zoom; + uvc_param panTilt; + uvc_param panTiltRel; + uvc_param roll; + uvc_param rollRel; + + uvc_param backlight; + uvc_param bright; + uvc_param contrast; + uvc_param gain; + uvc_param powerLine; + uvc_param autoHue; + uvc_param hue; + uvc_param saturation; + uvc_param sharpness; + uvc_param gamma; + uvc_param autoWhiteBalance; + uvc_param whiteBalance; + + // this class has its own .nib which contains a UI for interacting with the class that may be opened directly in a window, or accessed as an NSView instance for use in other UIs/software + NSNib *theNib; + NSArray *nibTopLevelObjects; + + IBOutlet id uiCtrlr; // created & owned by the nib! + IBOutlet NSWindow *settingsWindow; // by default, the UI is in a window (it's easiest to just open and close it) + IBOutlet NSView *settingsView; // you can also access the view which contains the UI so you can embed it in other apps +} + +/// Use this method to init an instance of VVUVCController from an NSString returned by the AVFoundation or QTCapture APIs as the device's unique ID. +/** +@param n The "deviceIDString" is a string returned by QuickTime and AVFoundation as the unique ID for the USB video device. Technically, this is a hex value with sixteen digits (16 hex digits = an unsigned 64-bit integer). The first 8 hex digits is the USB device's "locationID", the next 4 hex digits is the device's vendor ID, and the last 4 digits are the device's product ID. Only the locationID is needed to create the necessary USB interfaces... +*/ +- (id) initWithDeviceIDString:(NSString *)n; +/// Use this method to init an instance of VVUVCController from the USB location ID. +/** +@param locationID The location ID of the USB device you want this instance of VVUVCController to control. +*/ +- (id) initWithLocationID:(UInt32)locationID; +- (IOUSBInterfaceInterface190 **) _getControlInferaceWithDeviceInterface:(IOUSBDeviceInterface **)deviceInterface; +- (void) generalInit; + +/// Returns a mutable dict representing the current state of the video input parameters +- (NSMutableDictionary *) createSnapshot; +/// Loads a saved state dict created with the "createSnapshot" method +- (void) loadSnapshot:(NSDictionary *)s; + +- (BOOL) _sendControlRequest:(IOUSBDevRequest *)controlRequest; +- (int) _requestValType:(int)requestType forControl:(const uvc_control_info_t *)ctrl returnVal:(void **)ret; +- (BOOL) _setBytes:(void *)bytes sized:(int)size toControl:(const uvc_control_info_t *)ctrl; +- (void) _populateAllParams; // populates all the uvc_param variables in this instance, loading their min/max/default vals and determining if they're supported or not +- (void) _populateParam:(uvc_param *)param; +- (BOOL) _pushParamToDevice:(uvc_param *)param; +- (void) _resetParamToDefault:(uvc_param *)param; + +/// Resets the parameters to their default values. The default values are supplied by/stored in the device. +- (void) resetParamsToDefaults; +/// Opens a window with a GUI for interacting with the camera parameters +- (void) openSettingsWindow; +/// Closes the GUI window (if it's open). +- (void) closeSettingsWindow; + +- (void) setInterlaced:(BOOL)n; +- (BOOL) interlaced; +- (BOOL) interlacedSupported; +- (void) resetInterlaced; +/// Sets the auto exposure mode using one of the basic auto exposure modes defined in the header (vals pulled from the USB spec) +- (void) setAutoExposureMode:(UVC_AEMode)n; +/// Gets the auto exposure mode +- (UVC_AEMode) autoExposureMode; +/// Whether or not this camera supports the use of alternate auto exposure modes +- (BOOL) autoExposureModeSupported; +/// Resets the auto exposure mode to the hardware-defined default +- (void) resetAutoExposureMode; +/// Sets whether or not auto exposure will be given priority +- (void) setAutoExposurePriority:(BOOL)n; +/// Gets whether or not the camera is giving auto exposure priority +- (BOOL) autoExposurePriority; +/// Whether or not this camera supports the use of auto exposure priority +- (BOOL) autoExposurePrioritySupported; +/// Resets the auto exposure priority to the hardware-defined default +- (void) resetAutoExposurePriority; + +/// Sets the exposure time to the passed value +- (void) setExposureTime:(long)n; +/// Gets the current exposure time value being used by the camera +- (long) exposureTime; +/// Whether or not this camera supports the exposure time parameter +- (BOOL) exposureTimeSupported; +/// Resets the exposure time value to the hardware-defined default +- (void) resetExposureTime; +/// The min exposure time value +- (long) minExposureTime; +/// The max exposure time value +- (long) maxExposureTime; +/// Sets the iris to the passed value +- (void) setIris:(long)n; +/// Gets the current iris value being used by the camera +- (long) iris; +/// Whether or not this camera supports the iris parameter +- (BOOL) irisSupported; +/// Resets the iris value to the hardware-defined default +- (void) resetIris; +/// The min iris value +- (long) minIris; +/// The max iris value +- (long) maxIris; +/// Sets the auto focus to the passed value +- (void) setAutoFocus:(BOOL)n; +/// Gets the auto focus value being used by the camera +- (BOOL) autoFocus; +/// Whether or not this camera supports the auto focus parameter +- (BOOL) autoFocusSupported; +/// Resets the auto focus value to the hardware-defined default. +- (void) resetAutoFocus; +/// Sets the focus value +- (void) setFocus:(long)n; +/// Gets the focus value currently being used by the camera +- (long) focus; +/// Whether or not this camera supports the focus parameter +- (BOOL) focusSupported; +/// Resets the focus value to the hardware-defined default +- (void) resetFocus; +/// The min focus value +- (long) minFocus; +/// The max focus value +- (long) maxFocus; +/// Sets the zoom value +- (void) setZoom:(long)n; +/// Gets the current zoom value being used by the camera +- (long) zoom; +/// Whether or not this camera supports the zoom parameter +- (BOOL) zoomSupported; +/// Resets the zoom value to the hardware-defined default +- (void) resetZoom; +/// The min zoom value +- (long) minZoom; +/// The max zoom value +- (long) maxZoom; + +// pan/tilt/roll aren't enabled +- (BOOL) panSupported; +- (BOOL) tiltSupported; +- (BOOL) rollSupported; + +/// Sets the backlight to the passed value +- (void) setBacklight:(long)n; +/// Gets the backlight value currently being used by the camera +- (long) backlight; +/// Whether or not this camera supports the backlight parameter +- (BOOL) backlightSupported; +/// Resets the backlight value to the hardware-defined default +- (void) resetBacklight; +/// The min backlight value +- (long) minBacklight; +/// The max backlight value +- (long) maxBacklight; +/// Sets the bright value to the passed value +- (void) setBright:(long)n; +/// Gets the bright value currently being used by the camera +- (long) bright; +/// Whether or not this camera supports the bright parameter +- (BOOL) brightSupported; +/// Resets the bright parameter to the hardware-defined default +- (void) resetBright; +/// The min bright value +- (long) minBright; +/// The max bright value +- (long) maxBright; +/// Sets the contrast to the passed value +- (void) setContrast:(long)n; +/// Gets the contrast value currently being used by the camera +- (long) contrast; +/// Whether or not this camera supports the contrast parameter +- (BOOL) contrastSupported; +/// Resets the contrast to the hardware-defined default +- (void) resetContrast; +/// The min contrast value +- (long) minContrast; +/// The max contrast value +- (long) maxContrast; +/// Sets the gain to the passed value +- (void) setGain:(long)n; +/// Gets the gain value currently being used by the camera +- (long) gain; +/// Whether or not this camera supports the gain parameter +- (BOOL) gainSupported; +/// Resets the gain value to the hardware-defined default +- (void) resetGain; +/// The min gain value +- (long) minGain; +/// The max gain value +- (long) maxGain; +/// Sets the powerline to the passed value +- (void) setPowerLine:(long)n; +/// Gets the powerline value currently being used by the camera +- (long) powerLine; +/// Whether or not this camera supports the powerline parameter +- (BOOL) powerLineSupported; +/// Resets the powerline value to the hardware-defined default +- (void) resetPowerLine; +/// The min powerline value +- (long) minPowerLine; +/// The max powerline value +- (long) maxPowerLine; +/// Sets the auto hue to the passed value +- (void) setAutoHue:(BOOL)n; +/// The auto hue value currently being used by the camera +- (BOOL) autoHue; +/// Whether or not this camera supports the auto hue parameter +- (BOOL) autoHueSupported; +/// Resets the auto hue parameter to the hardware-defined default +- (void) resetAutoHue; +/// Sets the hue to the passed value +- (void) setHue:(long)n; +/// Gets the hue value currently being used by the camera +- (long) hue; +/// Whether or not this camera supports the hue parameter +- (BOOL) hueSupported; +/// Resets the hue parameter to the hardware-defined default +- (void) resetHue; +/// The min hue value +- (long) minHue; +/// The max hue value +- (long) maxHue; +/// Sets the saturation to the passed value +- (void) setSaturation:(long)n; +/// Gets the saturation value currently being used by the camera +- (long) saturation; +/// Whether or not this camera supports the saturation parameter +- (BOOL) saturationSupported; +/// Resets the saturation to the hardware-defined default +- (void) resetSaturation; +/// The min saturation value +- (long) minSaturation; +/// The max saturation value +- (long) maxSaturation; +/// Sets the sharpness to the passed value +- (void) setSharpness:(long)n; +/// Gets the sharpness value currently being used by the camera +- (long) sharpness; +/// Whether or not this camera supports the sharpness parameter +- (BOOL) sharpnessSupported; +/// Resets the sharpness to the hardware-defined default +- (void) resetSharpness; +/// The min sharpness value +- (long) minSharpness; +/// The max sharpness value +- (long) maxSharpness; +/// Sets the gamma to the passed value +- (void) setGamma:(long)n; +/// Gets the gamma value currently being used by the camera +- (long) gamma; +/// Whether or not this camera supports the gamma parameter +- (BOOL) gammaSupported; +/// Resets the gamma value to the hardware-defined default +- (void) resetGamma; +/// The min gamma value +- (long) minGamma; +/// The max gamma value +- (long) maxGamma; +/// Sets the auto white balance to the passed value +- (void) setAutoWhiteBalance:(BOOL)n; +/// Gets the auto white balance value currently being used by the camera +- (BOOL) autoWhiteBalance; +/// Whether or not this camera supports the auto white balance parameter +- (BOOL) autoWhiteBalanceSupported; +/// Resets the auto white balance to the hardware-defined default +- (void) resetAutoWhiteBalance; +/// Sets the white balance to the passed value +- (void) setWhiteBalance:(long)n; +/// Gets the white balance value currently being used by the camera +- (long) whiteBalance; +/// Whether or not this camera supports the white balance parameter +- (BOOL) whiteBalanceSupported; +/// Resets the white balance value to the hardware-defined default +- (void) resetWhiteBalance; +/// The min white balance value +- (long) minWhiteBalance; +/// The max white balance value +- (long) maxWhiteBalance; + + +@end diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCKit.h b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCKit.h new file mode 100644 index 0000000..a0d50e3 --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCKit.h @@ -0,0 +1,4 @@ + + +// this is the only class you should need to explicitly instantiate! +#import "VVUVCController.h" diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCKitStringAdditions.h b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCKitStringAdditions.h new file mode 100644 index 0000000..347856c --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCKitStringAdditions.h @@ -0,0 +1,7 @@ +#import + +@interface NSString (VVUVCKitStringAdditions) + +- (BOOL) containsString:(NSString *)n; + +@end diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCUIController.h b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCUIController.h new file mode 100644 index 0000000..82c9b2c --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCUIController.h @@ -0,0 +1,44 @@ +#import +#import "VVUVCUIElement.h" + + + + +@interface VVUVCUIController : NSObject { + IBOutlet id device; + + IBOutlet NSPopUpButton *autoExpButton; + IBOutlet NSButton *expPriorityButton; + IBOutlet NSButton *autoFocusButton; + //IBOutlet NSSlider *panSlider; + //IBOutlet NSSlider *tiltSlider; + //IBOutlet NSSlider *rollSlider; + + IBOutlet NSButton *autoHueButton; + IBOutlet NSButton *autoWBButton; + + IBOutlet VVUVCUIElement *expElement; + IBOutlet VVUVCUIElement *irisElement; + IBOutlet VVUVCUIElement *focusElement; + IBOutlet VVUVCUIElement *zoomElement; + + IBOutlet VVUVCUIElement *backlightElement; + IBOutlet VVUVCUIElement *brightElement; + IBOutlet VVUVCUIElement *contrastElement; + IBOutlet VVUVCUIElement *powerElement; + IBOutlet VVUVCUIElement *gammaElement; + IBOutlet VVUVCUIElement *hueElement; + IBOutlet VVUVCUIElement *satElement; + IBOutlet VVUVCUIElement *sharpElement; + IBOutlet VVUVCUIElement *gainElement; + IBOutlet VVUVCUIElement *wbElement; +} + +- (IBAction) buttonUsed:(id)sender; +- (IBAction) popUpButtonUsed:(id)sender; + +- (IBAction) resetToDefaults:(id)sender; + +- (void) _pushCameraControlStateToUI; + +@end diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCUIElement.h b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCUIElement.h new file mode 100644 index 0000000..f696c84 --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Headers/VVUVCUIElement.h @@ -0,0 +1,36 @@ +#import + + + + +@protocol VVUVCUIElementDelegate +- (void) controlElementChanged:(id)sender; +@end + + + + +@interface VVUVCUIElement : NSBox { + IBOutlet id delegate; + + BOOL enabled; + NSSlider *valSlider; + NSTextField *valField; + + int val; + int min; + int max; +} + +- (void) setEnabled:(BOOL)n; + +- (void) _resizeContents; + +- (void) uiItemUsed:(id)sender; + +@property (assign,readwrite) id delegate; +@property (assign,readwrite) int val; +@property (assign,readwrite) int min; +@property (assign,readwrite) int max; + +@end diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/Info.plist b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/Info.plist new file mode 100644 index 0000000..83fb43f --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/Info.plist @@ -0,0 +1,46 @@ + + + + + BuildMachineOSBuild + 17F77 + CFBundleDevelopmentRegion + English + CFBundleExecutable + VVUVCKit + CFBundleIdentifier + com.Vidvox.VVUVCKit + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + VVUVCKit + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 9C40b + DTPlatformVersion + GM + DTSDKBuild + 17C76 + DTSDKName + macosx10.13 + DTXcode + 0920 + DTXcodeBuild + 9C40b + NSHumanReadableCopyright + Copyright © 2014 Vidvox. All rights reserved. + + diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/VVUVCController.nib b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/VVUVCController.nib new file mode 100644 index 0000000..c6c4423 Binary files /dev/null and b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/VVUVCController.nib differ diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/en.lproj/InfoPlist.strings b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..5e45963 Binary files /dev/null and b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/Resources/en.lproj/InfoPlist.strings differ diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/VVUVCKit b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/VVUVCKit new file mode 100755 index 0000000..7b0e4b1 Binary files /dev/null and b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/A/VVUVCKit differ diff --git a/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/Current b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/src/mynteye/uvc/macosx/VVUVCKit.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/src/mynteye/uvc/macosx/uvc-vvuvckit.cc b/src/mynteye/uvc/macosx/uvc-vvuvckit.cc new file mode 100644 index 0000000..7118141 --- /dev/null +++ b/src/mynteye/uvc/macosx/uvc-vvuvckit.cc @@ -0,0 +1,90 @@ +// Copyright 2018 Slightech Co., Ltd. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include +#include "mynteye/logger.h" +#include "mynteye/uvc/uvc.h" +#include "libuvc/libuvc.h" +#include "AVfoundationCamera.h" + +// #define ENABLE_DEBUG_SPAM + +MYNTEYE_BEGIN_NAMESPACE + +namespace uvc { + +// Enumerate devices +MYNTEYE_API std::shared_ptr create_context() { + //too +} +MYNTEYE_API std::vector> query_devices( + std::shared_ptr context) { + //todo +} + +// Static device properties +MYNTEYE_API std::string get_name(const device &device) { + //todo +} +MYNTEYE_API int get_vendor_id(const device &device) { + //todo +} +MYNTEYE_API int get_product_id(const device &device) { + //todo +} + +MYNTEYE_API std::string get_video_name(const device &device) { + //todo +} + +MYNTEYE_API bool pu_control_range( + const device &device, Option option, int32_t *min, int32_t *max, + int32_t *def) { + // todo +} +MYNTEYE_API bool pu_control_query( + const device &device, Option option, pu_query query, int32_t *value) { + // todo +} + +// Access XU (Extension Unit) controls +MYNTEYE_API bool xu_control_range( + const device &device, const xu &xu, uint8_t selector, uint8_t id, + int32_t *min, int32_t *max, int32_t *def) { + //todo +} +MYNTEYE_API bool xu_control_query( // XU_QUERY_SET, XU_QUERY_GET + const device &device, const xu &xu, uint8_t selector, xu_query query, + uint16_t size, uint8_t *data) { + //todo +} + +MYNTEYE_API void set_device_mode( + device &device, int width, int height, int fourcc, int fps, // NOLINT + video_channel_callback callback) { + //todo +} +MYNTEYE_API void start_streaming(device &device, int num_transfer_bufs) { + //todo +} +MYNTEYE_API void stop_streaming(device &device) { + //todo +} + +} // namespace uvc + +MYNTEYE_END_NAMESPACE