static void Main(string[] args) { // initialize the driver SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_OPEN_DRIVER); // ask the SBIG driver what, if any, USB cameras are plugged in SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_QUERY_USB, out SBIG.QueryUSBResults qur); for (int i = 0; i < qur.camerasFound; i++) { if (!qur.usbInfo[i].cameraFound) { Console.WriteLine($"Cam {i}: not found"); } else { Console.WriteLine( $"Cam {i}: type={qur.usbInfo[i].cameraType} " + $"name={ qur.usbInfo[i].name} " + $"ser={qur.usbInfo[i].serialNumber}"); } } // connect to the camera SBIG.UnivDrvCommand( SBIG.PAR_COMMAND.CC_OPEN_DEVICE, new SBIG.OpenDeviceParams("127.0.0.1")); var cameraType = SBIG.EstablishLink(); // query camera info var gcir0 = new SBIG.GetCCDInfoResults0(); SBIG.UnivDrvCommand( SBIG.PAR_COMMAND.CC_GET_CCD_INFO, new SBIG.GetCCDInfoParams { request = SBIG.CCD_INFO_REQUEST.CCD_INFO_IMAGING }, out gcir0); // now print it out Console.WriteLine($"Firmware version: {gcir0.firmwareVersion >> 8}.{gcir0.firmwareVersion & 0xFF}"); Console.WriteLine($"Camera type: {gcir0.cameraType}"); Console.WriteLine($"Camera name: {gcir0.name}"); Console.WriteLine($"Readout modes: {gcir0.readoutModes}"); for (int i = 0; i < gcir0.readoutModes; i++) { SBIG.READOUT_INFO ri = gcir0.readoutInfo[i]; Console.WriteLine($"Readout mode: {ri.mode}"); Console.WriteLine($"Width: {ri.width}"); Console.WriteLine($"Height: {ri.height}"); Console.WriteLine($"Gain: {ri.gain >> 8}.{ri.gain & 0xFF} e-/ADU"); } // get extended info var gcir2 = new SBIG.GetCCDInfoResults2(); SBIG.UnivDrvCommand( SBIG.PAR_COMMAND.CC_GET_CCD_INFO, new SBIG.GetCCDInfoParams { request = SBIG.CCD_INFO_REQUEST.CCD_INFO_EXTENDED }, out gcir2); // print it out Console.Write($"Bad columns: {gcir2.badColumns} = "); Console.WriteLine( $"{gcir2.columns[0]}, {gcir2.columns[1] }, " + $"{gcir2.columns[2]}, { gcir2.columns[3]}"); Console.WriteLine($"ABG: {gcir2.imagingABG}"); Console.WriteLine($"Serial number: {gcir2.serialNumber}"); // query temperature SBIG.UnivDrvCommand( SBIG.PAR_COMMAND.CC_QUERY_TEMPERATURE_STATUS, new SBIG.QueryTemperatureStatusParams() { request = SBIG.QUERY_TEMP_STATUS_REQUEST.TEMP_STATUS_ADVANCED2 }, out SBIG.QueryTemperatureStatusResults2 qtsr2); // start an exposure SBIG.StartExposureParams2 sep = new SBIG.StartExposureParams2 { ccd = SBIG.CCD_REQUEST.CCD_IMAGING, abgState = SBIG.ABG_STATE7.ABG_LOW7, openShutter = SBIG.SHUTTER_COMMAND.SC_LEAVE_SHUTTER, exposureTime = 100, //sep.width = 765; //sep.height = 510; width = 1530, height = 1020 }; SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_START_EXPOSURE, sep); // read out the image ushort[,] img = SBIG.WaitEndAndReadoutExposure(sep); //FitsUtil.WriteFitsImage("simcam.fits", img); //SBIG.SaveImageToVernacularFormat(sep, img, "foo.gif", ImageFormat.Gif); // // setup for TDI // SBIG.MiscellaneousControlParams mcp = new SBIG.MiscellaneousControlParams { fanEnable = true, ledState = SBIG.LED_STATE.LED_BLINK_HIGH, shutterCommand = SBIG.SHUTTER_COMMAND.SC_OPEN_SHUTTER }; SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_MISCELLANEOUS_CONTROL, mcp); // turn off pipelining for USB connected cameras SBIG.SetDriverControlParams sdcp = new SBIG.SetDriverControlParams { controlParameter = SBIG.DRIVER_CONTROL_PARAM.DCP_USB_FIFO_ENABLE, controlValue = 0 }; SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_SET_DRIVER_CONTROL, sdcp); // read a TDI line // input params var rlp = new SBIG.ReadoutLineParams { ccd = SBIG.CCD_REQUEST.CCD_IMAGING, pixelStart = 0, pixelLength = 1530, readoutMode = SBIG.READOUT_BINNING_MODE.RM_NX1 //SBIG.ReadoutLineParams.MakeNBinMode(SBIG.ReadoutBinningMode.RM_NX1, 4) }; // output var data = new ushort[rlp.pixelLength]; // make the call!!! SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_READOUT_LINE, rlp, out data); // do it a lot var start = DateTime.Now; for (int i = 0; i < 1000000; i++) { SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_READOUT_LINE, rlp, out data); } var end = DateTime.Now; Console.WriteLine(end - start); // clean up SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_CLOSE_DEVICE); SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_CLOSE_DRIVER); }
static void Main(string[] args) { SBIG.ActivateRelayParams arp = new SBIG.ActivateRelayParams(); SBIG.OpenDeviceParams odp; try { // parse which device to open odp = new SBIG.OpenDeviceParams(args[0]); // parse duration input ushort duration = ushort.Parse(args[3]); // parse X direction switch (args[1][0]) { case '+': arp.tXPlus = duration; break; case '-': arp.tXMinus = duration; break; case '0': break; default: throw new ArgumentException("X direction was none of +, -, or 0"); } // parse Y direction switch (args[2][0]) { case '+': arp.tYPlus = duration; break; case '-': arp.tYMinus = duration; break; case '0': break; default: throw new ArgumentException("Y direction was none of +, -, or 0"); } } catch { Console.WriteLine("SbigRelayControl <IP|USB1-8> <+|-|0 for X> <+|-|0 for Y> <10s of ms to move|0 to stop>"); return; } // // we've parsed all the input we need, so send the command! // try { // connect to the camera SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_OPEN_DRIVER); SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_OPEN_DEVICE, odp); SBIG.EstablishLink(); // // send the command! // SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_ACTIVATE_RELAY, arp); // disconnect SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_CLOSE_DEVICE); SBIG.UnivDrvCommand(SBIG.PAR_COMMAND.CC_CLOSE_DRIVER); Console.WriteLine("Success!"); } catch (Exception e) { Console.WriteLine("Error: " + e); } }