void Camera::serialInit(unsigned int serialIndex){ try { unsigned int * numSerialPorts; numSerialPorts = (unsigned int *) malloc(32); char *portID= NULL; unsigned int bufferSize= 512; portID = (char *) malloc(bufferSize); if (clSerialInit(serialIndex, &serialRefPtr) == CL_ERR_PORT_IN_USE or clSerialInit(serialIndex, &serialRefPtr) == CL_ERR_INVALID_INDEX) return; serialRefPtr = (void*) malloc(10); if (clSerialInit(serialIndex, &serialRefPtr) == CL_ERR_NO_ERR) printf("PORT %d IS OPENED\n", serialIndex); char *buf = NULL; unsigned int buflen = 10; if (clGetSerialPortIdentifier(serialIndex, buf, &buflen) != CL_ERR_BUFFER_TOO_SMALL) return; buf = (char*) malloc (buflen); if (clGetSerialPortIdentifier(serialIndex, buf, &buflen) == CL_ERR_NO_ERR) printf("port %i is identified as %s\n", serialIndex, buf); free(buf); } catch (exception& e) { cout << "An exception occurred. Exception: " << e.what() << '\n'; } }
DWORD CPco_cl_com::Open_Cam_Ext(DWORD num,SC2_OpenStruct *open) { int err; initmode=num & ~0xFF; num=num&0xFF; if(num>PCO_SC2_DRIVER_ENTRY_SIZE) { writelog(ERROR_M,(PCO_HANDLE)1,"Open_Cam_Ext: No more entries left return NODRIVER"); return PCO_ERROR_DRIVER_NODRIVER | PCO_ERROR_DRIVER_CAMERALINK; } if(connected&(1<<num)) { writelog(ERROR_M,(PCO_HANDLE)1,"Open_Cam_Ext: camera is already connected"); return PCO_ERROR_DRIVER_NODRIVER | PCO_ERROR_DRIVER_CAMERALINK; } hdriver=(void*)(0x100+num); camerarev=0; tab_timeout.command=PCO_SC2_COMMAND_TIMEOUT; tab_timeout.image=PCO_SC2_IMAGE_TIMEOUT_L; tab_timeout.transfer=PCO_SC2_COMMAND_TIMEOUT; transferpar.baudrate=9600; transferpar.DataFormat=PCO_CL_DATAFORMAT_5x12; unsigned int num_port=0; { char manufacturerName[500]; unsigned int bufferSize; unsigned int version; char type[500]; unsigned int buffersize; bufferSize=sizeof(manufacturerName); buffersize=sizeof(type); // if(clGetNumSerialPorts) { clGetNumSerialPorts(&num_port); if(num>=num_port) { hdriver=NULL; writelog(ERROR_M,(PCO_HANDLE)1,"Open_Cam_Ext: board %d reqested, only %d ports found return NODRIVER",num,num_port); return PCO_ERROR_DRIVER_NODRIVER | PCO_ERROR_DRIVER_CAMERALINK; } } // if(clGetManufacturerInfo) { clGetManufacturerInfo(manufacturerName,&bufferSize,&version); writelog(INIT_M,(PCO_HANDLE)1,"Open_Cam_Ext: ManufacturerName %s",manufacturerName); } // if(clGetSerialPortIdentifier) { for(unsigned int i=0;i<num_port;i++) { clGetSerialPortIdentifier(i,type,&buffersize); writelog(INIT_M,(PCO_HANDLE)1,"Open_Cam_Ext: PortIdentifier %d: %s",i,type); } } } err=clSerialInit(num,(void**)&serialRef); if(err<0) { writelog(ERROR_M,(PCO_HANDLE)1,"Open_Cam_Ext: Cannot open serial Cameralink Device %d %d",num,err); hdriver=NULL; serialRef=NULL; return PCO_ERROR_DRIVER_NODRIVER | PCO_ERROR_DRIVER_CAMERALINK; } boardnr=num; //check if camera is connected, error should be timeout //get camera descriptor to get maximal size of ccd //scan for other baudrates than default 9600baud SC2_Simple_Telegram com; err=PCO_NOERROR; err=scan_camera(); if(err!=PCO_NOERROR) { writelog(ERROR_M,hdriver,"Open_Cam_Ext: Control command failed with 0x%x, no camera connected",err); clSerialClose(serialRef); boardnr=-1; hdriver=NULL; serialRef=NULL; return PCO_ERROR_DRIVER_NOTINIT | PCO_ERROR_DRIVER_CAMERALINK; } com.wCode=GET_CAMERA_DESCRIPTION; com.wSize=sizeof(SC2_Simple_Telegram); err=Control_Command(&com,sizeof(com), &description,sizeof(SC2_Camera_Description_Response)); if(err!=PCO_NOERROR) writelog(ERROR_M,hdriver,"Open_Cam_Ext: GET_CAMERA_DESCRIPTION failed with 0x%x",err); get_actual_cl_config(); get_firmwarerev(); get_lut_info(); char evname[25]; sprintf(evname,"%s%d",COM_MUTEX_NAME,num); /* hComMutex=CreateMutex(NULL,FALSE,evname); int e=GetLastError(); writelog(INIT_M,hdriver,"Open_Cam_Ext: Mutex 0x%x name %s created",hComMutex,evname); hComMutex=CreateMutex(NULL,FALSE,NULL); writelog(INIT_M,hdriver,"Open_Cam_Ext: GetLastError returned %d",e); */ if(transferpar.baudrate!=115200) set_baudrate(115200); connected|=(1<<boardnr); return PCO_NOERROR; }