Ejemplo n.º 1
0
        public void Start(string file)
        {
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }
            if (!CanStart)
            {
                throw new InvalidOperationException("Drone not ready for OTA");
            }

            Started  = true;
            Done     = false;
            Position = 0;

            data = File.ReadAllBytes(file);
            using (var md5 = MD5.Create())
            {
                Hash = BitConverter.ToString(md5.ComputeHash(data)).Replace("-", "").ToLower();
            }

            Drone.SendPacket(new PacketBeginOTA(Hash, (uint)Size), true, (s, p) =>
            {
                if (IsRunning)
                {
                    SendData();
                }
                else
                {
                    Drone.OnDataChange += Drone_OnDataChange;
                }
            });
        }
Ejemplo n.º 2
0
        private void SendData()
        {
            if (!IsRunning)
            {
                Started = false;
                Done    = false;
                return;
            }
            OnProgress?.Invoke(this, EventArgs.Empty);

            int chunkSize = Math.Min(256, Size - Position);

            byte[] chunk = new byte[chunkSize];
            Array.Copy(data, Position, chunk, 0, chunkSize);

            byte hash = 0;

            foreach (byte b in chunk)
            {
                hash ^= b;
            }

            Drone.SendPacket(new PacketDataOTA(chunkSize, hash, chunk), true, (s, p) =>
            {
                Position += chunkSize;
                if (Position >= Size)
                {
                    Drone.SendPacket(new PacketEndOTA(false), true);
                    Done = true;
                    return;
                }
                SendData();
            });
        }
Ejemplo n.º 3
0
        public void Abort()
        {
            if (!IsRunning)
            {
                throw new InvalidOperationException("OTA not running");
            }

            Done    = false;
            Started = false;
            Drone.SendPacket(new PacketEndOTA(true), false);
            Drone.OnDataChange -= Drone_OnDataChange;
        }