/* private static T ReadUsingMarshalUnsafe<T>(byte[] data) where T : struct { unsafe { fixed (byte* p = &data[0]) { return (T)Marshal.PtrToStructure(new IntPtr(p), typeof(T)); } } } */ void initializeDataPackets() { VData = new VesselData(); VData.id = 1; HPacket = new HandShakePacket(); HPacket.id = 0; HPacket.M1 = 1; HPacket.M2 = 2; HPacket.M3 = 3; CPacket = new ControlPacket(); VControls.ControlGroup = new Boolean[11]; VControlsOld.ControlGroup = new Boolean[11]; }
private void HandShake() { HPacket = (HandShakePacket)ByteArrayToStructure(buffer, HPacket); //HPacket = ReadUsingMarshalUnsafe<HandShakePacket>(buffer); Debug.Log("KSPSerialIO: Handshake received - " + HPacket.M1.ToString() + HPacket.M2.ToString() + HPacket.M3.ToString()); }
// same as Port_ReceivedEvent just without the event args public void ProcessData() { while (Port.IsOpen && Port.BytesToRead > 0) { if (processCOM ()) { switch (id) { case HSPid: HPacket = (HandShakePacket)ByteArrayToStructure (buffer, HPacket); Invoke ("HandShake", 0); if ((HPacket.M1 == 3) && (HPacket.M2 == 1) && (HPacket.M3 == 4)) { DisplayFound = true; } else { DisplayFound = false; } break; case Cid: VesselControls (); //Invoke("VesselControls", 0); break; default: Invoke ("Unimplemented", 0); break; } } } }
private void Port_ReceivedEvent(object sender, SerialDataReceivedEventArgs e) { while (Port.BytesToRead > 0) { if (processCOM ()) { switch (id) { case HSPid: HPacket = (HandShakePacket)ByteArrayToStructure (buffer, HPacket); Invoke ("HandShake", 0); if ((HPacket.M1 == 3) && (HPacket.M2 == 1) && (HPacket.M3 == 4)) { DisplayFound = true; } else { DisplayFound = false; } break; case Cid: VesselControls (); //Invoke("VesselControls", 0); break; default: Invoke ("Unimplemented", 0); break; } } } }
//This replace the event, we have to call that ourself + pass it from private to public public void EventCallDirectly() { Debug.Log ("KSPSerialIO : Calling our event, trying to read ..."); Debug.Log (Port.BytesToRead); while (Port.BytesToRead > 0 && Port.IsOpen) { Debug.Log ("KSPSerialIO : Calling succefull ..."); if (processCOM()) { switch (id) { case HSPid: HPacket = (HandShakePacket)ByteArrayToStructure(buffer, HPacket); Invoke("HandShake", 0); if ((HPacket.M1 == 3) && (HPacket.M2 == 1) && (HPacket.M3 == 4)) { DisplayFound = true; } else { DisplayFound = false; } break; case Cid: VesselControls(); //Invoke("VesselControls", 0); break; default: Invoke("Unimplemented", 0); break; } } } }