/// <summary> /// udp pid_dataを取り込む。 /// </summary> public void set_udp_pid_data(byte[] bytes, ref KV_PID_DATA kpd) { GCHandle gch = GCHandle.Alloc(bytes, GCHandleType.Pinned); kpd = (KV_PID_DATA)Marshal.PtrToStructure(gch.AddrOfPinnedObject(), typeof(KV_PID_DATA)); gch.Free(); }
/// <summary> /// KV1000用byte列に変換 エンディアンも違う /// </summary> public byte[] ToBytes(KV_PID_DATA obj) { int size = Marshal.SizeOf(typeof(KV_PID_DATA)); IntPtr ptr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(obj, ptr, false); byte[] bytes = new byte[size]; Marshal.Copy(ptr, bytes, 0, size); Marshal.FreeHGlobal(ptr); return(bytes); }
/// <summary> /// PID 受信データ処理 /// </summary> private void Pid_Data_Set(KV_PID_DATA kpdr) { //IDがゼロでなければコピー if (kpdr.mt2_wide_id != 0) { kv_pid_data.mt2_wide_time = kpdr.mt2_wide_time; kv_pid_data.mt2_wide_id = kpdr.mt2_wide_id; kv_pid_data.mt2_wide_az = kpdr.mt2_wide_az; kv_pid_data.mt2_wide_alt = kpdr.mt2_wide_alt; kv_pid_data.mt2_wide_vk = kpdr.mt2_wide_vk; } if (kpdr.wide_id != 0) { kv_pid_data.wide_time = kpdr.wide_time; kv_pid_data.wide_id = kpdr.wide_id; kv_pid_data.wide_az = kpdr.wide_az; kv_pid_data.wide_alt = kpdr.wide_alt; kv_pid_data.wide_vk = kpdr.wide_vk; } if (kpdr.sf_id != 0) { kv_pid_data.sf_time = kpdr.sf_time; kv_pid_data.sf_id = kpdr.sf_id; kv_pid_data.sf_az = kpdr.sf_az; kv_pid_data.sf_alt = kpdr.sf_alt; kv_pid_data.sf_vk = kpdr.sf_vk; } if (kpdr.fine_id != 0) { kv_pid_data.fine_time = kpdr.fine_time; kv_pid_data.fine_id = kpdr.fine_id; kv_pid_data.fine_az = kpdr.fine_az; kv_pid_data.fine_alt = kpdr.fine_alt; kv_pid_data.fine_vk = kpdr.fine_vk; send_udp_data(); udp_send_on = 0; } }