void create_err(string msg)
 {
     rxIndex      = 0;
     CommState    = ReceiverStates.WaitingStart;
     timerEnabled = false;
     Console.WriteLine(msg);
 }
Beispiel #2
0
 /// <summary>
 /// Tasks to perform when user stop playing
 /// </summary>
 private void EndReceiveTasks()
 {
     startButton.Text    = "Start receiving";
     startButton.Enabled = true;
     stopButton.Enabled  = false;
     ReceiverState       = ReceiverStates.Stopped;
 }
Beispiel #3
0
        private void StartReceiving()
        {
            #region guard
            if (ReceiverState != ReceiverStates.Stopped)
            {
                return;
            }
            #endregion


            // Reset all
            InitReceiveTasks();

            ReceiverState = ReceiverStates.Receiving;
            timerReceiver.Start();

            try
            {
                inDevice.StartRecording();
            }
            catch (Exception ex)
            {
                ReceiverState = ReceiverStates.Stopped;
                MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }
Beispiel #4
0
        public frmExternalMidiPlay(InputDevice inputdevice, OutputDevice outputdevice)
        {
            InitializeComponent();

            stopButton.Enabled  = false;
            startButton.Enabled = true;

            outDevice = outputdevice;
            inDevice  = inputdevice;

            context = SynchronizationContext.Current;

            // Input Midi device
            if (!InitInputDevice())
            {
                startButton.Enabled = false;
                stopButton.Enabled  = false;
            }

            // Init patch & Channel of Output device
            InitOutputDevice();

            InitlstInstruments();

            ReceiverState          = ReceiverStates.Stopped;
            timerReceiver.Interval = 100;
        }
Beispiel #5
0
        private void StopReceiving()
        {
            #region guard
            if (ReceiverState != ReceiverStates.Receiving)
            {
                return;
            }
            #endregion

            try
            {
                inDevice.StopRecording();
                inDevice.Reset();

                // tells timer receiver to stop all
                ReceiverState = ReceiverStates.Stopping;
            }
            catch (Exception ex)
            {
                ReceiverState = ReceiverStates.Stopped;
                MessageBox.Show(ex.Message, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            }
        }
 void packetFormerCheck()
 {
     if (CommState == ReceiverStates.WaitingStart)
     {
         //ждем новый пакет
         //статус может изменить таймер таймаута
         if (rxIndex == 0)
         {
             return;
         }
         if (rxIndex > 0 && rxBuf[0] != Utils.PACKET_START)
         {
             rxIndex = 0;
             create_err("Неправильный стартовый пакет");
             return;
         }
         else
         {
             CommState    = ReceiverStates.ReceivingSize;
             rxPackSize   = 0;
             timerEnabled = true;
             timerCounter = 0;
         }
     }
     if (CommState == ReceiverStates.ReceivingSize)
     {
         if (rxIndex > 3)
         {
             int inPacksize = rxBuf[1] | rxBuf[2] << 8;
             if (inPacksize < EMPTY_SIZE)
             {
                 create_err("Слишком маленький пакет");
                 return;
             }
             if (inPacksize > MAX_BUF_SIZE_RX - EMPTY_SIZE)
             {
                 create_err("Входящий пакет с слишком большим размером");
                 return;
             }
             rxPackSize = inPacksize;
             CommState  = ReceiverStates.ReceivingPacket;
         }
         else
         {
             return;
         }
     }
     if (CommState == ReceiverStates.ReceivingPacket)
     {
         if (rxIndex >= rxPackSize)
         {
             //Пакет пришел. останавливаем таймер и проверяем его
             timerEnabled = false;
             CommState    = ReceiverStates.Processing;
         }
     }
     if (CommState == ReceiverStates.ReceivingTimeout)
     {
         create_err("Таймаут получения пакета");
     }
     if (CommState == ReceiverStates.Processing)
     {
         //останавливаем таймер таймаута так как пришел весь пакет
         timerEnabled = false;
         //check CRC
         byte crc = 0;
         //265-2=263
         for (int i = 0; i < rxPackSize - 2; i++)
         {
             crc += rxBuf[i];
         }
         byte crcXOR = (byte)(crc ^ (byte)0xAA);
         //если контрольная сумма сошлась
         if (crc == rxBuf[rxPackSize - 2] &&
             crcXOR == rxBuf[rxPackSize - 1])
         {
             enqeueIncomingPacket();
             rxIndex   = 0;
             CommState = ReceiverStates.WaitingStart;
         }
         else
         {//crc error
             create_err("Ошибка CRC");
             return;
         }
     }
 }