public byte[] XPLMGetDatab(uint XPLMDataRefHandle) { if (XPLMDataRefHandle == 0) { return(null); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatab, "", XPLMDataRefHandle, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_byte_array)) { return(data.Data.Take(data.DataLength).ToArray()); } return(null); }
public byte[] XPLMGetDatab(string XPLMDataRefName) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return(null); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatab, XPLMDataRefName, 0, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_byte_array)) { return(data.Data.Take(data.DataLength).ToArray()); } return(null); }
public void XPLMSetDatab(uint XPLMDataRefHandle, byte[] value) { if (XPLMDataRefHandle == 0) { return; } XPLMDataStruct.XPLMData data = new XPLMDataStruct.XPLMData(); data.DataLength = value.Count(); data.DataType = XPLMDataStruct.XPLMDataTypeList.dtype_byte_array; data.Data = new byte[65565]; Buffer.BlockCopy(value, 0, data.Data, 0, value.Count()); connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMSetDatavi, "", XPLMDataRefHandle, data); }
public void XPLMSetDatab(string XPLMDataRefName, byte[] value) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return; } XPLMDataStruct.XPLMData data = new XPLMDataStruct.XPLMData(); data.DataLength = value.Count(); data.DataType = XPLMDataStruct.XPLMDataTypeList.dtype_byte_array; data.Data = new byte[65565]; Buffer.BlockCopy(value, 0, data.Data, 0, value.Count()); connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMSetDatavi, XPLMDataRefName, 0, data); }
public void XPLMSetDatad(uint XPLMDataRefHandle, double value) { if (XPLMDataRefHandle == 0) { return; } XPLMDataStruct.XPLMData data = new XPLMDataStruct.XPLMData(); data.DataLength = 8; data.DataType = XPLMDataStruct.XPLMDataTypeList.dtype_double; data.Data = new byte[65565]; byte[] doubleval = BitConverter.GetBytes(value); Buffer.BlockCopy(doubleval, 0, data.Data, 0, 8); connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMSetDatad, "", XPLMDataRefHandle, data); }
public double XPLMGetDatad(string XPLMDataRefName) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return(0); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatad, XPLMDataRefName, 0, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_float)) { double i = BitConverter.ToDouble(data.Data, 0); return(i); } return(0); }
public double XPLMGetDatad(uint XPLMDataRefHandle) { if (XPLMDataRefHandle == 0) { return(0); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDataf, "", XPLMDataRefHandle, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_float)) { double i = BitConverter.ToDouble(data.Data, 0); return(i); } return(0); }
/// <summary> /// This Routines return 1 if you can set data to given DataRef /// </summary> /// <param name="XPLMDataRefHandle">DataRef Handle</param> /// <returns>0 = false; 1 = true</returns> public int XPLMGetDatai(uint XPLMDataRefHandle) { if (XPLMDataRefHandle == 0) { return(0); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatai, "", XPLMDataRefHandle, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_int)) { Int16 i = BitConverter.ToInt16(data.Data, 0); return(i); } return(0); }
/// <summary> /// This Routines return 1 if you can set data to given DataRef /// </summary> /// <param name="XPLMDataRef">DataRefName</param> /// <returns>0 = false; 1 = true</returns> public int XPLMGetDatai(string XPLMDataRefName) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return(0); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatai, XPLMDataRefName, 0, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_int)) { Int16 i = BitConverter.ToInt16(data.Data, 0); return(i); } return(0); }
public void XPLMSetDatad(string XPLMDataRefName, double value) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return; } XPLMDataStruct.XPLMData data = new XPLMDataStruct.XPLMData(); data.DataLength = 8; data.DataType = XPLMDataStruct.XPLMDataTypeList.dtype_double; data.Data = new byte[65565]; byte[] doubleval = BitConverter.GetBytes(value); Buffer.BlockCopy(doubleval, 0, data.Data, 0, 8); connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMSetDatad, XPLMDataRefName, 0, data); }
/// <summary> /// This Routines return 1 if you can set data to given DataRef /// </summary> /// <param name="XPLMDataRef">DataRefName</param> /// <returns>0 = false; 1 = true</returns> public uint XPLMFindDataRef(string XPLMDataRefName) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return(0); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMFindDataRef, XPLMDataRefName, 0, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_handle)) { UInt32 i = BitConverter.ToUInt32(data.Data, 0); return(i); } return(0); }
public void XPLMSetDatavi(uint XPLMDataRefHandle, Int16[] value) { if (XPLMDataRefHandle == 0) { return; } XPLMDataStruct.XPLMData data = new XPLMDataStruct.XPLMData(); data.DataLength = 2 * value.Count(); data.DataType = XPLMDataStruct.XPLMDataTypeList.dtype_int_array; data.Data = new byte[65565]; for (int x = 0; x < value.Count(); x++) { byte[] intval = BitConverter.GetBytes(value[x]); Buffer.BlockCopy(intval, 0, data.Data, x * 2, 2); } connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMSetDatavi, "", XPLMDataRefHandle, data); }
public void XPLMSetDatavf(string XPLMDataRefName, Single[] value) { if (string.IsNullOrEmpty(XPLMDataRefName)) { return; } XPLMDataStruct.XPLMData data = new XPLMDataStruct.XPLMData(); data.DataLength = 4 * value.Count(); data.DataType = XPLMDataStruct.XPLMDataTypeList.dtype_float_array; data.Data = new byte[65565]; for (int x = 0; x < value.Count(); x++) { byte[] floatval = BitConverter.GetBytes(value[x]); Buffer.BlockCopy(floatval, 0, data.Data, x * 4, 4); } connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMSetDatavf, XPLMDataRefName, 0, data); }
public Int16[] XPLMGetDatavi(uint XPLMDataRefHandle) { if (XPLMDataRefHandle == 0) { return(null); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatavi, "", XPLMDataRefHandle, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_int_array)) { Int16[] i = new Int16[data.DataLength / 2]; for (int x = 0; x < data.DataLength / 2; x++) { i[x] = BitConverter.ToInt16(data.Data, x * 2); } return(i); } return(null); }
public float[] XPLMGetDatavf(uint XPLMDataRefHandle) { if (XPLMDataRefHandle == 0) { return(null); } XPLMDataStruct.XPLMData data = connector.Write(XPLMCommandStruct.XPLMCommandList.CMD_XPLMGetDatavf, "", XPLMDataRefHandle, new XPLMDataStruct.XPLMData()); if ((data.Data != null) && (data.DataLength > 0) && (data.DataType == XPLMDataStruct.XPLMDataTypeList.dtype_float_array)) { float[] i = new float[data.DataLength / 4]; for (int x = 0; x < data.DataLength / 4; x++) { i[x] = BitConverter.ToSingle(data.Data, x * 4); } return(i); } return(null); }
} // Write /// <summary> /// reads the data from shared memory an copy it to struct /// </summary> /// <returns>struct with data</returns> private XPLMDataStruct.XPLMData ReadData() { try{ // define buffer byte[] byteArray = new byte[Marshal.SizeOf(typeof(XPLMDataStruct.XPLMData))]; // read daza from shared memory mmfa_data.ReadArray <byte>(0, byteArray, 0, Marshal.SizeOf(typeof(XPLMDataStruct.XPLMData))); // get handle of buffer GCHandle handle = GCHandle.Alloc(byteArray, GCHandleType.Pinned); // copy buffer to struct XPLMDataStruct.XPLMData data = (XPLMDataStruct.XPLMData)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(XPLMDataStruct.XPLMData)); // free handle handle.Free(); // return data return(data); } catch { // on error null return(new XPLMDataStruct.XPLMData()); } } // ReadData
} // open /// <summary> /// writes a command to shared memory /// XPLMDataRef or XPLMDataRefHandle can be used. /// If both will given then only XPLMDataRefHandle is used. /// </summary> /// <param name="cmd">command</param> /// <param name="XPLMDataRef">data ref name string</param> /// <param name="XPLMDataRefHandle">data ref handle</param> /// <param name="data">data for command i.g. write values</param> /// <returns>struct with return data from command</returns> public XPLMDataStruct.XPLMData Write(XPLMCommandStruct.XPLMCommandList cmd, string XPLMDataRef, uint XPLMDataRefHandle, XPLMDataStruct.XPLMData data) { try{ // connector should be initialized and open if (!initialized) { throw new Exception("XLMPConnetor is not initialized!"); } if (!opened) { throw new Exception("XLMPConnetor is not opened!"); } XPLMCommandStruct.XPLMCommand newCommand = new XPLMCommandStruct.XPLMCommand(); // create command newCommand.Command = cmd; if (XPLMDataRefHandle > 0) { newCommand.XPLMDataRefName = ""; newCommand.XPLMDataRefHandle = XPLMDataRefHandle; } else { newCommand.XPLMDataRefName = XPLMDataRef; newCommand.XPLMDataRefHandle = 0; } // convert struct command to byte array byte[] byteArray = ConvertStructToByteArray(newCommand); // data available? if (data.DataLength > 0) { // convert struct data to array byte byte[] dataByteArray = ConvertStructToByteArray(data); // write data to shared memory lock_data.WaitOne(); mmfa_data.WriteArray(0, dataByteArray, 0, dataByteArray.Length); lock_data.ReleaseMutex(); } else { data = new XPLMDataStruct.XPLMData(); } // write command to shared memory lock_command.WaitOne(); mmfa_command.WriteArray(0, byteArray, 0, byteArray.Length); lock_command.ReleaseMutex(); // set event to indicate the plugin that a command is send command_eventwaithandle.Set(); // no reply by set commands if (data.DataLength == 0) { // wait for reply until timeout int timeout_index = 0; while (timeout_index < Timeout) { // ask if reply event is set from plugin var isNewDataAvailable = data_eventwaithandle.WaitOne(1000); // data available? if (isNewDataAvailable) { // read data data = this.ReadData(); // reset event data_eventwaithandle.Reset(); // break while break; } // raise timeout index timeout_index++; } } // return data return(data); } catch { // on error null return(new XPLMDataStruct.XPLMData()); } } // Write