Example #1
0
        public static Boolean SendAndReceive(ref ICommunicationInterface ci, ref PacketSpinel97 txPacket, out PacketSpinel97 rxPacket, int timeout = 500)
        {
            rxPacket = null;
            byte[] txData = txPacket.GetBin();

            ci.Write(txData, 0, txData.Length);
            //            ci.Write(txData);

            return(Receive(ref ci, out txPacket, timeout));

/*            byte[] buffer = new byte[1024];                                      // přijímací buffer
 *          int index = 0;
 *          int i;
 *
 *          int bytesToRead = 0;
 *          DateTime dt = DateTime.Now.AddMilliseconds(timeout);                 // maximální timeout pro příjem zprávy
 *          while (DateTime.Now < dt)
 *          {
 *              System.Threading.Thread.Sleep(1);
 *              bytesToRead = (int)ci.BytesToRead();
 *              if ((bytesToRead > 0) && (index + bytesToRead < 1024))
 *              {
 *                  index += ci.Read(ref buffer, index, bytesToRead);
 *                  i = GetSpinelPacket(ref buffer, index, out rxPacket);        // testujme zda je již přijat kompletní paket
 *                  if ((rxPacket != null) && (i > 0))
 *                  {
 *                      return true;
 *                  }
 *              }
 *          }
 *          return false;
 */
        }
Example #2
0
        public static Boolean Receive(ref ICommunicationInterface ci, out PacketSpinel97 rxPacket, int timeout = 500)
        {
            rxPacket = null;

            byte[] buffer = new byte[1024];                                      // přijímací buffer
            int    index  = 0;
            int    i;

            int      bytesToRead = 0;
            DateTime dt          = DateTime.Now.AddMilliseconds(timeout);        // maximální timeout pro příjem zprávy

            while (DateTime.Now < dt)
            {
                System.Threading.Thread.Sleep(1);
                bytesToRead = (int)ci.BytesToRead();
                if (bytesToRead > 0)
                {
                    Debug.Print(bytesToRead.ToString());
                }
                if ((bytesToRead > 0) && (index + bytesToRead < 1024))
                {
                    index += ci.Read(ref buffer, index, bytesToRead);
                    //Debug.Print(Papouch.Utils.PapUtils.ConvertBinToHex(buffer));
                    i = GetSpinelPacket(ref buffer, index, out rxPacket);        // testujme zda je již přijat kompletní paket
                    if ((rxPacket != null) && (i > 0))
                    {
                        //Debug.Print("packet");
                        return(true);
                    }
                }
            }
            //if (bytesToRead!=0)
            //Debug.Print("timeout");
            return(false);
        }
Example #3
0
 private bool SendAndReceive(Spinel97.PacketSpinel97 packetTx, Spinel97.PacketSpinel97 packetRx, int timeout)
 {
     if (fSpinelStack != null)
     {
         return(fSpinelStack.SendAndReceive(packetTx, out packetRx, timeout));
     }
     return(false);
 }
Example #4
0
        public bool SendAndReceive(Spinel97.PacketSpinel97 packetTx, out Spinel97.PacketSpinel97 packetRx, int timeout)
        {
            packetRx = null;

            PacketSend(packetTx);

            int rxtimeout = System.Environment.TickCount + timeout;

            while (rxtimeout > System.Environment.TickCount)
            {
                System.Threading.Thread.Sleep(10);
            }

            return(false);
        }
Example #5
0
        public static int GetSpinelPacket(ref byte[] data, int dataLength, out PacketSpinel97 packet)
        {
            packet = null;
            int i = 0;

            while (((i + 8) <= dataLength) && (data[i] == 0x2A) && (data[i] == 0x61))
            {
                i++;
            }
            if ((i + 8) < dataLength)
            {
                int len = data[i + 2] * 0x100 + data[i + 3] - 5;
                if (i + len + 8 <= dataLength)
                {
                    packet      = new PacketSpinel97();
                    packet.PRE  = data[i];
                    packet.FRM  = data[i + 1];
                    packet.ADR  = data[i + 4];
                    packet.SIG  = data[i + 5];
                    packet.INST = data[i + 6];

                    if (len > 0)
                    {
                        byte[] tmp = new byte[len];
                        Array.Copy(data, i + 7, tmp, 0, len);
                        packet.SDATA = tmp;
                    }

                    packet.SUM = data[i + 7 + len];
                    packet.CR  = data[i + 8 + len];

                    return(i + len + 8);;
                }
            }
            return(0);
        }