public void TestEncodeDecode()
        {
            Encoder encoder = new Encoder();

              encoder.SystemReset();
              Assert.AreEqual(1,encoder.Count);

              encoder.SampleRate = 50; // Set to 50 Hz
              Assert.AreEqual(6,encoder.Count);

              Console.WriteLine(encoder);

              encoder.RequestFirmwareInformation();
              Assert.AreEqual(9,encoder.Count);

              Console.WriteLine(encoder);

              //encoder.DigitalWrite(9,1);

              //encoder.AnalogWrite(15, 64);
              //Assert.AreEqual(15,encoder.Count);

              //encoder.DigitalWrite(11,1);
              //Assert.AreEqual(15,encoder.Count);

              //encoder.AnalogWrite(1, 768);
              //Assert.AreEqual(18,encoder.Count);

              Console.WriteLine(encoder);

              for (int i = 0; i < 16; i++) {
            for (int j = 0; j < 256; j++) {
              encoder.AnalogWrite(i, j );
            }
              }

              // Console.WriteLine(encoder);

              encoder.DigitalWrite(new int[128]);

              encoder.DigitalWrite(new int[] { 1, 1, 0, 0, 0, 0, 0, 0});

              Console.WriteLine(encoder);

              /// ------------------------------------
              // Decode the formerly encoded stream

              Decoder decoder = new Decoder();
              decoder.AnalogEvent  +=  OnAnalog;
              decoder.DigitalEvent += OnDigital;
              decoder.SysexEvent += OnSysex;

              decoder.Parse(encoder.BaseStream);

              Assert.That (true);
        }
        public void TestPartialData()
        {
            Console.WriteLine("Testing partial data insertion...");

              Decoder decoder = new Decoder();
              decoder.AnalogEvent  +=  OnAnalog;
              decoder.DigitalEvent += OnDigital;
              decoder.SysexEvent += OnSysex;

              Stream stream = new MemoryStream();

              stream.Write(new byte[] { 0xFF, 0xF0, 0x7A }, 0, 3);

              Console.WriteLine("First parse!");
              decoder.Parse(stream);
              Console.WriteLine("Internal buffer {0}: {1}",decoder.buffer.Count.ToString(),BitConverter.ToString(decoder.buffer.ToArray()));

              stream.Close();
              stream = new MemoryStream();
              stream.Write(new byte[] { 0x14, 0x00, 0xF7 }, 0, 3);

              Console.WriteLine("Second parse!");
              decoder.Parse(stream);
              Console.WriteLine("Internal buffer {0}: {1}",decoder.buffer.Count.ToString(),BitConverter.ToString(decoder.buffer.ToArray()));
        }
        public void TestWithPort()
        {
            SerialPort port;

              // port = new SerialPort("/dev/tty.usbserial-00002014",57600);
              port = new SerialPort("/dev/tty.usbserial-A9007VQg",57600);

              Encoder encoder = new Encoder();

              encoder.RequestCapabilityReport();
              encoder.RequestFirmwareInformation();

              Decoder decoder = new Decoder();
              decoder.AnalogEvent  += OnAnalog;
              decoder.DigitalEvent += OnDigital;
              decoder.SysexEvent   += OnSysex;
              decoder.FirmwareReportEvent += (sender, args) => {
            FirmwareReportEventArgs firmware = args as FirmwareReportEventArgs;
            Console.WriteLine("Firmware version report: {0} ({1}.{2})",firmware.Name,firmware.Major,firmware.Minor);
              };

              port.Open();
              while(!port.IsOpen){}

              Thread.Sleep(5000);

              Console.WriteLine("Sending encoder to port");
              port.ReadExisting(); // Clear the receive buffer
              port.Write(encoder.BaseStream.ToArray(),0, (int) encoder.Count);

              Thread.Sleep(1000);

              Console.WriteLine("Bytes to read {0}",port.BytesToRead);

              while (port.BytesToRead > 0) {
            decoder.Push((byte) port.ReadByte());
              }

              decoder.ToString();
              //Thread.Sleep(5000);

              port.Close();

              Console.WriteLine("Test with serial port done");
        }