void Y__usb_probe_devices(int argc) { struct libusb_device_descriptor desc; libusb_device* dev; long dims[3]; int* data; int i, ret; if (argc != 1 || ! yarg_nil(0)) { y_error("expecting exactly one nil argument"); } load_device_list(); if (dev_count > 0) { dims[0] = 2; dims[1] = 7; dims[2] = dev_count; data = ypush_i(dims); for (i = 0; i < dev_count; ++i) { dev = dev_list[i]; ret = libusb_get_device_descriptor(dev, &desc); if (ret != 0) { free_dev_list(); failure("unable to get device descriptor", ret); } data[0] = libusb_get_bus_number(dev); data[1] = libusb_get_port_number(dev); data[2] = libusb_get_device_address(dev); data[3] = desc.idVendor; data[4] = desc.idProduct; data[5] = desc.iManufacturer; data[6] = desc.iSerialNumber; data += 7; } } else { ypush_nil(); } free_dev_list(); }
void camera_eval(void *obj, int argc) { tCamera *camera = (tCamera *)obj; try { ystring_t func = ygets_q(argc-1); if(strcmp(func, "start")==0){ long packetSize=8228; if(argc >1) packetSize = ygets_l(argc-2); cameraStart(camera, packetSize); cameraSnap(camera); } else if(strcmp(func, "stop")==0){ cameraStop(camera); } else if(strcmp(func, "getROI")==0){ long dims[2]={1, 4}; long *result = ypush_l(dims); tPvUint32 ROI[4]; cameraGetROI(camera, ROI); for(int i=0;i<4;i++) result[i] = ROI[i]; } else if(strcmp(func, "setROI")==0){ long ntot, dims; long *result = ygeta_l(argc-2, &ntot, &dims); tPvUint32 ROI[4]; for(int i=0;i<4;i++) ROI[i]=result[i]; cameraSetROI(camera, ROI); } else if(strcmp(func, "getExpo")==0){ tPvUint32 expo; cameraGetExpo(camera, &expo); ypush_long(expo); } else if(strcmp(func, "setExpo")==0){ long expo = ygets_l(argc-2); cameraSetExpo(camera, expo); } else if(strcmp(func, "fastsnap")==0){ long param = ygets_l(argc-2); unsigned long width = camera->Frame.Width; // Image width unsigned long height= camera->Frame.Height; // Image height long dims[4]={3, width, height, param}; if(param ==1) dims[0]=2; char resValue[16]; cameraGetPixelFormat(camera, resValue, 16); tPvFrame *buff = cameraSnap(camera, param); if(strcmp(resValue, "Mono8")==0) { short *frame = ypush_s(dims); for(long pose=0; pose<param; pose++){ unsigned char *src = (unsigned char *)buff[pose].ImageBuffer; short *dst = &frame[pose*height*width]; for(unsigned long i=0; i<width*height; i++) { dst[i] = src[i]; } } } else if(strcmp(resValue, "Mono16")==0) { int *frame = ypush_i(dims); for(long pose=0; pose<param; pose++){ unsigned short *src = (unsigned short *)buff[pose].ImageBuffer; int *dst = &frame[pose*height*width]; for(unsigned long i=0; i<width*height; i++) { dst[i] = src[i]; } } } else cout << "bad ppixel size !" << endl; } else if(strcmp(func, "snap")==0){ long param = ygets_l(argc-2); unsigned long width = camera->Frame.Width; // Image width unsigned long height= camera->Frame.Height; // Image height long dims[4]={3, width, height, param}; if(param ==1) dims[0]=2; char resValue[16]; cameraGetPixelFormat(camera, resValue, 16); if(strcmp(resValue, "Mono8")==0) { short *frame = ypush_s(dims); for(long pose=0; pose<param; pose++){ cameraSnap(camera); unsigned char *src = (unsigned char *)camera->Frame.ImageBuffer; short *dst = &frame[pose*height*width]; for(unsigned long i=0; i<width*height; i++) { dst[i] = src[i]; } } } else if(strcmp(resValue, "Mono16")==0) { int *frame = ypush_i(dims); for(long pose=0; pose<param; pose++){ cameraSnap(camera); unsigned short *src = (unsigned short *)camera->Frame.ImageBuffer; int *dst = &frame[pose*height*width]; for(unsigned long i=0; i<width*height; i++) { dst[i] = src[i]; } } } else cout << "bad ppixel size !" << endl; } else cout << "F**K !" << endl; } catch ( string msg ) { y_error(msg.c_str()); } catch ( char const * msg ) { y_error(msg); } }