public DroneInfo(PacketBuffer buffer) { Name = buffer.ReadString(); ModelName = buffer.ReadString(); SerialCode = buffer.ReadString(); BuildName = buffer.ReadString().Trim().Replace(' ', '_'); BuildVersion = buffer.ReadByte(); ResetReason = (ResetReason)buffer.ReadByte(); ResetException = (ResetException)buffer.ReadByte(); ResetEpc = buffer.ReadUInt(); ResetExcvaddr = buffer.ReadUInt(); if (ResetReason != ResetReason.Exception) { ResetException = ResetException.None; } StopReason = (StopReason)buffer.ReadByte(); GyroSensor = buffer.ReadString(); Magnetometer = buffer.ReadString(); BaroSensor = buffer.ReadString(); }
private void HandlePacket(byte[] packet, IPEndPoint sender) { try { using (MemoryStream stream = new MemoryStream(packet)) { PacketBuffer buffer = new PacketBuffer(stream); if (packet.Length < 3 || buffer.ReadByte() != 'F' || buffer.ReadByte() != 'L' || buffer.ReadByte() != 'Y') { Log.Debug("DroneList: Invalid magic value!"); return; } if (buffer.ReadByte() != (byte)HelloPacketType.Answer) { return; } DroneEntry entry = new DroneEntry(); entry.Address = sender.Address; entry.LastFound = DateTime.Now; entry.Name = buffer.ReadString(); entry.Model = buffer.ReadString(); entry.SerialCode = buffer.ReadString(); entry.FirmwareVersion = buffer.ReadByte(); AddDrone(entry); } } catch (Exception e) { Log.Error("Error while searching for drones:"); Log.Error(e); } }
private void HandleDataPacket(byte[] packet) { using (MemoryStream stream = new MemoryStream(packet)) { PacketBuffer buffer = new PacketBuffer(stream); if (buffer.Size < 3 || buffer.ReadByte() != 'F' || buffer.ReadByte() != 'L' || buffer.ReadByte() != 'Y') return; int revision = buffer.ReadInt(); DataPacketType type = (DataPacketType)buffer.ReadByte(); lastDataTime = Environment.TickCount; switch (type) { case DataPacketType.Drone: if (!CheckRevision(lastDataDroneRevision, revision)) return; DroneState state = (DroneState)buffer.ReadByte(); QuadMotorValues motorValues = new QuadMotorValues(buffer); GyroData gyro = new GyroData(buffer); float batteryVoltage = buffer.ReadFloat(); int wifiRssi = buffer.ReadInt(); Data = new DroneData(state, motorValues, gyro, batteryVoltage, wifiRssi); lastDataDroneRevision = revision; break; case DataPacketType.Log: if (!CheckRevision(lastDataLogRevision, revision)) return; int lines = buffer.ReadInt(); for (int i = 0; i < lines; i++) { string msg = buffer.ReadString(); if (OnLogMessage == null) Log.Info("[Drone] " + msg); else OnLogMessage(msg + Environment.NewLine); } lastDataLogRevision = revision; break; case DataPacketType.Debug: if (!CheckRevision(lastDataDebugRevision, revision)) return; DebugData = new DebugData(buffer); lastDataDebugRevision = revision; break; } } }
public Entry(PacketBuffer buffer) { Name = buffer.ReadString(); TimeMicros = buffer.ReadUInt(); TimeMaxMicros = buffer.ReadUInt(); }
private void HandleDataPacket(byte[] packet) { using (MemoryStream stream = new MemoryStream(packet)) { PacketBuffer buffer = new PacketBuffer(stream); if (buffer.Size < 3 || buffer.ReadByte() != 'F' || buffer.ReadByte() != 'L' || buffer.ReadByte() != 'Y') { return; } int revision = buffer.ReadInt(); DataPacketType type = (DataPacketType)buffer.ReadByte(); lastDataTime = Environment.TickCount; switch (type) { case DataPacketType.Drone: if (!CheckRevision(lastDataDroneRevision, revision)) { return; } DroneState state = (DroneState)buffer.ReadByte(); QuadMotorValues motorValues = new QuadMotorValues(buffer); GyroData gyro = new GyroData(buffer); float batteryVoltage = buffer.ReadFloat(); int wifiRssi = buffer.ReadInt(); Data = new DroneData(state, motorValues, gyro, batteryVoltage, wifiRssi); lastDataDroneRevision = revision; break; case DataPacketType.Log: if (!CheckRevision(lastDataLogRevision, revision)) { return; } int lines = buffer.ReadInt(); for (int i = 0; i < lines; i++) { string msg = buffer.ReadString(); if (OnLogMessage == null) { Log.Info("[Drone] " + msg); } else { OnLogMessage(msg + Environment.NewLine); } } lastDataLogRevision = revision; break; case DataPacketType.Debug: if (!CheckRevision(lastDataDebugRevision, revision)) { return; } DebugData = new DebugData(buffer); lastDataDebugRevision = revision; break; } } }
private void HandlePacket(byte[] packet, IPEndPoint sender) { try { using (MemoryStream stream = new MemoryStream(packet)) { PacketBuffer buffer = new PacketBuffer(stream); if (packet.Length < 3 || buffer.ReadByte() != 'F' || buffer.ReadByte() != 'L' || buffer.ReadByte() != 'Y') { Log.Debug("Hello: Invalid magic value!"); return; } if (buffer.ReadByte() != (byte)HelloPacketType.Answer) return; DroneEntry entry = new DroneEntry(); entry.Address = sender.Address; entry.LastFound = DateTime.Now; entry.Name = buffer.ReadString(); entry.Model = buffer.ReadString(); entry.SerialCode = buffer.ReadString(); entry.FirmwareVersion = buffer.ReadByte(); AddDrone(entry); } } catch (Exception e) { Log.Error(e.ToString()); } }
private void HandleDataPacket(byte[] packet) { using (MemoryStream stream = new MemoryStream(packet)) { PacketBuffer buffer = new PacketBuffer(stream); if (buffer.Size < 3 || buffer.ReadByte() != 'F' || buffer.ReadByte() != 'L' || buffer.ReadByte() != 'Y') { return; } int revision = buffer.ReadInt(); DataPacketType type = (DataPacketType)buffer.ReadByte(); lastDataTime = Environment.TickCount; switch (type) { case DataPacketType.Drone: if (!CheckRevision(lastDataDroneRevision, revision)) { return; } DroneState state = (DroneState)buffer.ReadByte(); QuadMotorValues motorValues = new QuadMotorValues(buffer); SensorData sensor = new SensorData(buffer); float batteryVoltage = buffer.ReadFloat(); int wifiRssi = buffer.ReadInt(); Data = new DroneData(state, motorValues, sensor, batteryVoltage, wifiRssi); lastDataDroneRevision = revision; break; case DataPacketType.Log: if (!CheckRevision(lastDataLogRevision, revision)) { return; } int lines = buffer.ReadInt(); for (int i = 0; i < lines; i++) { string msg = buffer.ReadString(); DroneLog.AddLine(msg); } lastDataLogRevision = revision; break; case DataPacketType.DebugOutput: if (!CheckRevision(lastDataOutputRevision, revision)) { return; } DebugOutputData = new OutputData(buffer); lastDataOutputRevision = revision; NotifyDebugDataChanged(); break; case DataPacketType.DebugProfiler: if (!CheckRevision(lastDataProfilerRevision, revision)) { return; } DebugProfilerData = new ProfilerData(buffer); lastDataProfilerRevision = revision; NotifyDebugDataChanged(); break; } } }