/// <summary> /// Get all data from camera memory. /// </summary> /// <returns></returns> public void GetStatus() { try { sysStatus = BitFun.HexToBitArray(BitFun.ByteToHex(TxRx(0x49)).Substring(0, 2)); TxRx(0x53, 0xe0, 0x01, 0x00); fpgaStatus = BitFun.HexToBitArray(BitFun.ByteToHex(TxRx(0x53, 0xe1, 0x01)).Substring(0, 2)); TxRx(0x53, 0xe0, 0x01, 0xd4); trigMode = BitFun.HexToBitArray(BitFun.ByteToHex(TxRx(0x53, 0xe1, 0x01)).Substring(0, 2)); TxRx(0x53, 0xe0, 0x01, 0xf7); testPattern = BitFun.ByteToHex(TxRx(0x53, 0xe1, 0x01)) == "4"; } catch { } }
/// <summary> /// Read from device output queue. /// </summary> private void ReadQ() { while (go) { Thread.Sleep(1); while (dataAvailable) { try { string[] msg = outQ.Dequeue().ToString().Split(','); string[] val = new string[msg.Length - 1]; for (int i = 0; i < val.Length; i++) { val[i] = msg[i + 1]; } byte[] data = new byte[2]; switch (msg[0]) { case "IP": ip = val[1]; break; case "PING": // Connected status _connected = val[0] == "PING"; break; case "WDT": watchDogState = Convert.ToBoolean(Convert.ToByte(val[0])); watchDogTime = Convert.ToInt16(val[1]); break; case "VERSION": // Version from SVN repo of code running on device version = val[0]; break; case "TIME": break; case "TEMPB": // Temperature in bytes break; case "TEMPK": // Temperature in Kelvin break; case "TEMPC": // Temperature in Celsius temp = Convert.ToDouble(val[0]); break; case "TEMPF": // Temperature in Farenheit break; case "LED_TEST": // LED testing on break; case "LED_DONE": // LED done on break; case "LED_ERROR": // LED error on break; case "KV_ENABLE": // KV enable on kVEnable = Convert.ToBoolean(Convert.ToByte(val[0])); break; case "FIL_READY": // Fil ready _filReady = Convert.ToBoolean(Convert.ToByte(val[0])); break; case "INTERLOCK": // Interlock closed interlock = Convert.ToBoolean(Convert.ToByte(val[0])); break; case "XRAYS": // Xrays detected xRaysOn = Convert.ToBoolean(Convert.ToByte(val[0])); break; case "HVPWR_ADJ": // HV adjustable volts _hvPwrAdj = Convert.ToDouble(val[0]); break; case "HVPWR_EN": // HV adj./24v enable break; case "TBPWR_EN": // Tube aux voltages (+/-5v +3.3v) enable break; case "ADC_BYTES": break; case "ADC_VOLTS": int channel = Convert.ToByte(val[0]); switch (channel) { case monVCh: monV = Convert.ToDouble(val[1]); break; case monACh: monA = Convert.ToDouble(val[1]); break; } break; case "ADC_CONVERT": break; case "ADC_SLOPE": break; case "ADC_OFFSET": break; case "ADC_DEFAULTS": break; case "DAC_BYTES": break; case "DAC_VOLTS": channel = Convert.ToByte(val[0]); switch (channel) { case 0: _setV = Convert.ToDouble(val[1]); break; case 1: _setA = Convert.ToDouble(val[1]); break; } break; case "DAC_CONVERT": break; case "DAC_SLOPE": break; case "DAC_OFFSET": break; case "DAC_DEFAULT": break; case "EXT_COMM": break; case "00@I2C_READ": for (int i = 0; i < 128; i++) { registers[i] = Convert.ToByte(val[1 + i]); } break; case "01@I2C_READ": bool[] s = BitFun.HexToBitArray(Convert.ToByte(val[1]).ToString("X2")); status["Interlock"] = s[0]; status["HV On"] = s[1]; status["HVPG"] = s[2]; status["Tube Ready"] = s[3]; status["Faulted"] = s[7]; break; case "02@I2C_READ": bool[] f = BitFun.HexToBitArray(Convert.ToByte(val[1]).ToString("X2")); faults["Booted"] = f[0]; faults["Interlock"] = f[1]; faults["Unstable"] = f[2]; faults["HV"] = f[3]; faults["Temperature"] = f[4]; faults["Timeout"] = f[5]; break; case "1B@I2C_READ": data[0] = Convert.ToByte(val[1]); data[1] = Convert.ToByte(val[2]); _setV = BitFun.ByteToInt(data, true) / bitsPerkV; data[0] = Convert.ToByte(val[3]); data[1] = Convert.ToByte(val[4]); _setA = BitFun.ByteToInt(data, true) / bitsPeruA; data[0] = Convert.ToByte(val[5]); data[1] = Convert.ToByte(val[6]); monV = BitFun.ByteToInt(data, true) / bitsPerkV; data[0] = Convert.ToByte(val[7]); data[1] = Convert.ToByte(val[8]); monA = BitFun.ByteToInt(data, true) / bitsPeruA; break; case "38@I2C_READ": kVEnable = Convert.ToByte(val[1]) == 1; break; case "128@SPI_READ": data[0] = Convert.ToByte(val[1]); data[1] = Convert.ToByte(val[2]); monV = BitFun.ByteToInt(data, true) / bitsPerkV; break; case "192@SPI_READ": data[0] = Convert.ToByte(val[1]); data[1] = Convert.ToByte(val[2]); monA = BitFun.ByteToInt(data, true) / bitsPeruA; break; } } catch { } } } }