public static void programDACs()
        {
            bias_index             = 0;
            bias_bytes[bias_index] = 0;
            bias_index++;
            bias_bytes[bias_index] = (byte)(outputDriverValue << 4);
            bias_index++;

            BiasName b = 0;

            for (int i = 0; i < 28; i++) //there are 28 bias voltages for this version of the chip
            {
                ChangeBias(b, (int)BiasVoltage[b]);
                b++;
            }
            ATISinterface.SendBiasValues(bias_bytes);

            //temporary file writing for debugging
            string       filename    = "binaryBiases.bin";
            FileStream   propFsBias  = new FileStream(filename, FileMode.Create);
            BinaryWriter DebugWriter = new BinaryWriter(propFsBias);

            DebugWriter.Write(bias_bytes, 0, 114);
            DebugWriter.Close();
            //end debugging

            bias_index = 0;
        }
 public static void initBiases()
 {
     if (init == false)
     {
         bias_bytes = new byte[114];
         populateLookupTables();
         programDACs();
         ATISinterface.setWire(ATISinterface.ControlSignals.BGenPower_Up);
         init = true;
     }
 }
        //  public static int firstEMSpikeThreshold = 50000;
        //        public static int secondEMSpikeThreshold = 200000;
        public ControlWindow()
        {
            InitializeComponent();
            boxEnableTD.IsChecked      = ATISinterface.getWire(ATISinterface.ControlSignals.Enable_AER_TD);
            boxEnableAPS.IsChecked     = ATISinterface.getWire(ATISinterface.ControlSignals.Enable_AER_APS);
            boxCouple.IsChecked        = ATISinterface.getWire(ATISinterface.ControlSignals.couple);
            boxTDROIinv.IsChecked      = ATISinterface.getWire(ATISinterface.ControlSignals.ROI_TD_inv);
            boxTDROI.IsChecked         = ATISinterface.getWire(ATISinterface.ControlSignals.TD_ROI_en);
            boxAPSROI.IsChecked        = ATISinterface.getWire(ATISinterface.ControlSignals.APS_ROI_en);
            boxAPSsequential.IsChecked = ATISinterface.getWire(ATISinterface.ControlSignals.sequential);

            slidePersistence.Value = 20;
        }
 private void boxEnableAPS_UnChecked(object sender, RoutedEventArgs e)
 {
     ATISinterface.clearWire(ATISinterface.ControlSignals.Enable_AER_APS);
 }
 private void boxEnableTD_Checked(object sender, RoutedEventArgs e)
 {
     ATISinterface.setWire(ATISinterface.ControlSignals.Enable_AER_TD);
 }
 private void Slider_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e)
 {
     lblPersistenceValue.Content = ((int)e.NewValue).ToString();
     persistence_us = (int)e.NewValue * 1000;
     ATISinterface.setTDfilter_value((uint)e.NewValue);
 }
 private void btnShutter_Click(object sender, RoutedEventArgs e)
 {
     ATISinterface.setWire(ATISinterface.ControlSignals.shutter);
     ATISinterface.clearWire(ATISinterface.ControlSignals.shutter);
 }
 private void btnProgROI_Click(object sender, RoutedEventArgs e)
 {
     ATISinterface.programROI();
 }
 private void boxAPSsequential_UnChecked(object sender, RoutedEventArgs e)
 {
     ATISinterface.clearWire(ATISinterface.ControlSignals.sequential);
 }
 private void boxCouple_UnChecked(object sender, RoutedEventArgs e)
 {
     ATISinterface.clearWire(ATISinterface.ControlSignals.couple);
 }
 private void boxTDROIinv_UnChecked(object sender, RoutedEventArgs e)
 {
     ATISinterface.clearWire(ATISinterface.ControlSignals.ROI_TD_inv);
 }
 private void boxTDROI_Checked(object sender, RoutedEventArgs e)
 {
     ATISinterface.setWire(ATISinterface.ControlSignals.TD_ROI_en);
 }
 private void boxAPSROI_UnChecked(object sender, RoutedEventArgs e)
 {
     ATISinterface.clearWire(ATISinterface.ControlSignals.APS_ROI_en);
 }
Esempio n. 14
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            #region "color definitions"
            //The 12 S1 colours
            List <System.Windows.Media.Color> colors = new List <System.Windows.Media.Color>();
            colors.Add(Color.FromRgb(0, 0, 0));
            colors.Add(Color.FromRgb(255, 0, 0));
            colors.Add(Color.FromRgb(255, 128, 0));
            colors.Add(Color.FromRgb(255, 255, 0));
            colors.Add(Color.FromRgb(128, 255, 0));
            colors.Add(Color.FromRgb(0, 255, 0));
            colors.Add(Color.FromRgb(0, 255, 128));
            colors.Add(Color.FromRgb(0, 255, 255));
            colors.Add(Color.FromRgb(0, 128, 255));
            colors.Add(Color.FromRgb(0, 0, 255));
            colors.Add(Color.FromRgb(128, 0, 255));
            colors.Add(Color.FromRgb(255, 0, 255));
            colors.Add(Color.FromRgb(128, 0, 128));
            BitmapPalette myPalette = new BitmapPalette(colors);

            //The 36 S2 colours
            List <System.Windows.Media.Color> fullcolors = new List <System.Windows.Media.Color>();
            fullcolors.Add(Color.FromRgb(0, 0, 0));
            fullcolors.Add(Color.FromRgb(255, 42, 0));
            fullcolors.Add(Color.FromRgb(255, 85, 0));
            fullcolors.Add(Color.FromRgb(255, 128, 0));
            fullcolors.Add(Color.FromRgb(255, 170, 0));
            fullcolors.Add(Color.FromRgb(255, 213, 0));
            fullcolors.Add(Color.FromRgb(255, 255, 0));
            fullcolors.Add(Color.FromRgb(212, 255, 0));
            fullcolors.Add(Color.FromRgb(170, 255, 0));
            fullcolors.Add(Color.FromRgb(128, 255, 0));
            fullcolors.Add(Color.FromRgb(85, 255, 0));
            fullcolors.Add(Color.FromRgb(42, 255, 0));
            fullcolors.Add(Color.FromRgb(0, 255, 0));
            fullcolors.Add(Color.FromRgb(0, 255, 42));
            fullcolors.Add(Color.FromRgb(0, 255, 85));
            fullcolors.Add(Color.FromRgb(0, 255, 128));
            fullcolors.Add(Color.FromRgb(0, 255, 170));
            fullcolors.Add(Color.FromRgb(0, 255, 212));
            fullcolors.Add(Color.FromRgb(0, 255, 255));
            fullcolors.Add(Color.FromRgb(0, 212, 255));
            fullcolors.Add(Color.FromRgb(0, 170, 255));
            fullcolors.Add(Color.FromRgb(0, 128, 255));
            fullcolors.Add(Color.FromRgb(0, 85, 255));
            fullcolors.Add(Color.FromRgb(0, 43, 255));
            fullcolors.Add(Color.FromRgb(0, 0, 255));
            fullcolors.Add(Color.FromRgb(42, 0, 255));
            fullcolors.Add(Color.FromRgb(85, 0, 255));
            fullcolors.Add(Color.FromRgb(128, 0, 255));
            fullcolors.Add(Color.FromRgb(170, 0, 255));
            fullcolors.Add(Color.FromRgb(212, 0, 255));
            fullcolors.Add(Color.FromRgb(255, 0, 255));
            fullcolors.Add(Color.FromRgb(255, 0, 212));
            fullcolors.Add(Color.FromRgb(255, 0, 170));
            fullcolors.Add(Color.FromRgb(128, 0, 128));
            fullcolors.Add(Color.FromRgb(128, 0, 85));
            fullcolors.Add(Color.FromRgb(128, 0, 43));
            BitmapPalette myfullPalette = new BitmapPalette(fullcolors);

            //The 3 TD "colours"
            List <System.Windows.Media.Color> colorsBW = new List <System.Windows.Media.Color>();
            colorsBW.Add(Color.FromRgb(128, 128, 128));
            colorsBW.Add(Color.FromRgb(0, 0, 0));
            colorsBW.Add(Color.FromRgb(255, 255, 255));
            BitmapPalette myBWPalette = new BitmapPalette(colorsBW);
            #endregion

            _TDbackBuffer  = new WriteableBitmap(304, 240, 96, 96, PixelFormats.Indexed8, myBWPalette);
            _APSbackBuffer = new WriteableBitmap(304, 240, 96, 96, PixelFormats.Gray8, null);

            ATISinterface.initATIS("ramtest.bit");
            BiasesInterface.initBiases();

            ATISinterface.setWire(ATISinterface.ControlSignals.Enable_AER_TD);
            ATISinterface.setWire(ATISinterface.ControlSignals.Enable_AER_APS);
            ATISinterface.resetFifos();

            /*
             * //init HMAX
             * ATIS.setHMAXThreshold(ATISinterface.HMAXlayer.S1, 150);
             * ATIS.setHMAXDecay(ATISinterface.HMAXlayer.S1, 1);
             * ATIS.setHMAXThreshold(ATISinterface.HMAXlayer.C1, 5); //actually a refractory period...
             * ATIS.setHMAXThreshold(ATISinterface.HMAXlayer.S2, 150);
             * ATIS.setHMAXDecay(ATISinterface.HMAXlayer.S2, 1);
             *
             * ATIS.programHMAXkernels(ATISinterface.HMAXlayer.S2, "S2Kernels.val");
             * //ATIS.programHMAXkernels(ATISinterface.HMAXlayer.S1, "S1Kernels.val");
             */

            ATISinterface.setWire(ATISinterface.ControlSignals.couple);

            AcquisitionThread();
        }
Esempio n. 15
0
        private void screenUpdate(Object source, ElapsedEventArgs e)
        {
            /*
             * _bw1.DoWork += getmorebytes;  //bytes1
             * _bw1.RunWorkerCompleted += bw1_RunWorkerCompleted;
             * _bw2.DoWork += getmorebytes;  //bytes2
             * _bw2.RunWorkerCompleted += bw2_RunWorkerCompleted;
             *
             * void init ()
             *  {
             *      _bw1.RunWorkerAsync(ref bytes1)
             *  }
             *
             *
             * bw1_RunWorkerCompleted (object sender, RunWorkerCompletedEventArgs e)
             * {
             *      _bw2.RunWorkerAsync(ref bytes2)
             *      processEvents(bytes1);
             * }
             *
             * * bw2_RunWorkerCompleted (object sender, RunWorkerCompletedEventArgs e)
             * {
             *      _bw1.RunWorkerAsync(ref bytes1)
             *      processEvents(bytes2);
             * }
             *
             *  void getmorebytes(ref byte[] bytes)
             *  {
             *      lock(bytes)
             *      {
             *
             *      }
             *  }
             *
             * void processEvents(bytes, APS, TD)
             * {
             *      lock(bytes)
             *      lock(APS)
             *      {
             *
             *      }
             * }
             *
             * void updateDisplay(APS, TD)
             * lock(APS)
             */

            if (_runningAcquisition == false)
            {
                _runningAcquisition = true;
                _pixelData          = Enumerable.Repeat((byte)0, 304 * 240).ToArray();

                APSprocessing.DrawBox(_pixelDataAPS, _boxSizeX, _boxSizeY);

                if (ATISinterface.getWire(ATISinterface.ControlSignals.Enable_AER_TD) || ATISinterface.getWire(ATISinterface.ControlSignals.Enable_AER_APS))
                {
                    byte[] DataInTD   = new byte[1];
                    int    numbytesTD = 0;

                    if (!APSprocessing._calibrated)
                    {
                        System.Threading.Thread.Sleep(50); //allow time to gather enough data for calibration
                    }
                    numbytesTD = ATISinterface.getEvents(ref DataInTD);

                    if (numbytesTD > 0)
                    {
                        var numbytesTD_written = 0;
                        stream = new MemoryStream(DataInTD);
                        reader = new BinaryReader(stream);

                        for (uint i = 0; i < numbytesTD; i += 4)
                        {
                            long timestamp = ((long)(DataInTD[i + 1] & 0x1F) << 8) + DataInTD[i] + timestamp_overflowCounter;
                            var  x         = ((DataInTD[i + 1] & 0x20) << 3) + DataInTD[i + 2];
                            var  y         = DataInTD[i + 3];
                            var  p         = (DataInTD[i + 1] & 0x80) >> 7;
                            var  type      = (DataInTD[i + 1] & 0x40) >> 6;

                            if ((y == 240) && (x == 305))
                            {
                                timestamp_overflowCounter += 1 << 13;
                            }
                            else
                            if (y > 239)
                            {
                                y_error_Counter++;
                                // these errors occur only at large Y and small X values
                            }
                            else
                            if (type == 1)         //if it is an exposure event EM
                            {
                                var evt_valid = APSprocessing.filterAPSEvent(timestamp, x, y, p, type);
                                if (evt_valid)
                                {
                                    APSprocessing.updateAPSdisplay(timestamp, x, y, p, type, _pixelDataAPS);
                                }
                                APSprocessing.processAPSevent(timestamp, x, y, p, type, evt_valid);
                            }
                            else if (type == 0)         //if it is a TD event
                            {
                                var evt_valid = TDprocessing.filterTDEvent(timestamp, x, y, p, type);
                                if (evt_valid)
                                {
                                    TDprocessing.updateTDdisplay(timestamp, x, y, p, type, _pixelData);
                                }
                                TDprocessing.processTDevent(timestamp, x, y, p, type, evt_valid);
                            }

                            /* THIS PART IS IMPORTANT, HANDLES THE SACCADES
                             * if (x == 2)
                             *  if (_logging == true)
                             *  {
                             *      _writerTD.Write(DataInTD, numbytesTD_written, (int)(i) - numbytesTD_written);
                             *      numbytesTD_written = (int)(i);
                             *      CloseLogging();
                             *      imageSlideshow.databaseImage.saveImageIndex++;
                             *      if (imageSlideshow.databaseImage.saveArrayList.Count > imageSlideshow.databaseImage.saveImageIndex)
                             *      {
                             *          propFsTD = new FileStream(imageSlideshow.databaseImage.saveArrayList[imageSlideshow.databaseImage.saveImageIndex].ToString(), FileMode.Create);
                             *          _writerTD = new BinaryWriter(propFsTD);
                             *      }else
                             *      {
                             *          //_logging = false;
                             *          motorTimer.DisableTimer();
                             *          //boxRecord.IsChecked = false;
                             *      }
                             *  }
                             */
                            //  }
                        }

                        if (ControlWindow._logging == true)
                        {
                            lock (ControlWindow.propFsTD)
                            {
                                if (ControlWindow._logging == true)
                                {
                                    ControlWindow._writerTD.Write(DataInTD, numbytesTD_written, numbytesTD - numbytesTD_written);
                                }
                            }
                        }

                        reader.Dispose();
                        stream.Dispose();
                    }

                    if (ControlWindow.clearPixelData)
                    {
                        _pixelDataAPS = Enumerable.Repeat((byte)0, 304 * 240).ToArray();
                        ControlWindow.clearPixelData = false;
                    }

                    Dispatcher.Invoke(DispatcherPriority.Send, new Action <byte[], byte[], byte[], byte[], byte[]>(HandleFrameData), _pixelData, _S1Data, _C1Data, _S2Data, _pixelDataAPS);
                    if (!APSprocessing._calibrated)
                    {
                        APSprocessing.calibrate();
                    }
                }
                _runningAcquisition = false;
            }
        }