コード例 #1
0
        public void WriteDataRef(string dataRef, dynamic newValue, XPlanePluginIcd.DataRefDataType dataRefDataType)
        {
            var query = new XPlanePluginIcd.DynamicQuery
            {
                DataRef      = dataRef,
                DataType     = dataRefDataType,
                QueryType    = XPlanePluginIcd.XplaneQueryType.Write,
                IntValues    = new int[256],
                FloatValues  = new float[256],
                DoubleValues = new double[256]
            };

            switch (dataRefDataType)
            {
            case XPlanePluginIcd.DataRefDataType.XplmTypeInt:
                query.IntValues[0] = newValue;
                query.ValueCount   = 1;
                break;

            case XPlanePluginIcd.DataRefDataType.XplmTypeIntArray:
                newValue.CopyTo(query.IntValues, 0);
                query.ValueCount = (byte)newValue.Length;
                break;

            case XPlanePluginIcd.DataRefDataType.XplmTypeFloat:
                query.FloatValues[0] = newValue;
                query.ValueCount     = 1;
                break;

            case XPlanePluginIcd.DataRefDataType.XplmTypeFloatArray:
                newValue.CopyTo(query.FloatValues, 0);
                query.ValueCount = (byte)newValue.Length;
                break;

            case XPlanePluginIcd.DataRefDataType.XplmTypeDouble:
                query.DoubleValues[0] = newValue;
                query.ValueCount      = 1;
                break;

            case XPlanePluginIcd.DataRefDataType.XplmTypeData:
                query.TextValue  = newValue;
                query.ValueCount = (byte)newValue.Length;
                break;

            default:
                throw new NotSupportedException();
            }

            _sharedMemoryCommand.Write(query);
        }
コード例 #2
0
        private dynamic ReadData(string dataRef, XPlanePluginIcd.DataRefDataType dataRefDataType, int valueCount)
        {
            _sharedMemoryCommand.Write(new XPlanePluginIcd.DynamicQuery
            {
                DataRef    = dataRef,
                DataType   = dataRefDataType,
                QueryType  = XPlanePluginIcd.XplaneQueryType.Read,
                ValueCount = (byte)valueCount,
            });

            var didRespond = _signal.WaitOne(2000);

            if (didRespond)
            {
                switch (dataRefDataType)
                {
                case XPlanePluginIcd.DataRefDataType.XplmTypeInt:
                    return(_response.IntValues[0]);

                case XPlanePluginIcd.DataRefDataType.XplmTypeIntArray:
                    return(_response.IntValues.Take(valueCount).ToArray());

                case XPlanePluginIcd.DataRefDataType.XplmTypeFloat:
                    return(_response.FloatValues[0]);

                case XPlanePluginIcd.DataRefDataType.XplmTypeFloatArray:
                    return(_response.FloatValues.Take(valueCount).ToArray());

                case XPlanePluginIcd.DataRefDataType.XplmTypeDouble:
                    return(_response.DoubleValues[0]);

                case XPlanePluginIcd.DataRefDataType.XplmTypeData:
                    return(_response.TextValue);

                default:
                    break;
                }
            }
            return(-999);
        }