/// <summary> /// Convert strings into a range... /// </summary> /// <param name="a_twty">Data type</param> /// <param name="a_intptr">Pointer to the data</param> /// <param name="a_asz">List of strings</param> /// <returns>Empty string or an error string</returns> public string SetRangeItem(TWTY a_twty, IntPtr a_intptr, string[] a_asz) { TW_RANGE twrange = default(TW_RANGE); TW_RANGE_MACOSX twrangemacosx = default(TW_RANGE_MACOSX); TW_RANGE_FIX32 twrangefix32 = default(TW_RANGE_FIX32); TW_RANGE_FIX32_MACOSX twrangefix32macosx = default(TW_RANGE_FIX32_MACOSX); // Index by type... switch (a_twty) { default: return ("Set Capability: (unrecognized item type)..." + a_twty); case TWTY.INT8: { if (ms_platform == Platform.MACOSX) { twrangemacosx.ItemType = (uint)a_twty; twrangemacosx.MinValue = (uint)sbyte.Parse(a_asz[3]); twrangemacosx.MaxValue = (uint)sbyte.Parse(a_asz[4]); twrangemacosx.StepSize = (uint)sbyte.Parse(a_asz[5]); twrangemacosx.DefaultValue = (uint)sbyte.Parse(a_asz[6]); twrangemacosx.CurrentValue = (uint)sbyte.Parse(a_asz[7]); Marshal.StructureToPtr(twrangemacosx, a_intptr, true); } else { twrange.ItemType = a_twty; twrange.MinValue = (uint)sbyte.Parse(a_asz[3]); twrange.MaxValue = (uint)sbyte.Parse(a_asz[4]); twrange.StepSize = (uint)sbyte.Parse(a_asz[5]); twrange.DefaultValue = (uint)sbyte.Parse(a_asz[6]); twrange.CurrentValue = (uint)sbyte.Parse(a_asz[7]); Marshal.StructureToPtr(twrange, a_intptr, true); } return (""); } case TWTY.INT16: { if (ms_platform == Platform.MACOSX) { twrangemacosx.ItemType = (uint)a_twty; twrangemacosx.MinValue = (uint)short.Parse(a_asz[3]); twrangemacosx.MaxValue = (uint)short.Parse(a_asz[4]); twrangemacosx.StepSize = (uint)short.Parse(a_asz[5]); twrangemacosx.DefaultValue = (uint)short.Parse(a_asz[6]); twrangemacosx.CurrentValue = (uint)short.Parse(a_asz[7]); Marshal.StructureToPtr(twrangemacosx, a_intptr, true); } else { twrange.ItemType = a_twty; twrange.MinValue = (uint)short.Parse(a_asz[3]); twrange.MaxValue = (uint)short.Parse(a_asz[4]); twrange.StepSize = (uint)short.Parse(a_asz[5]); twrange.DefaultValue = (uint)short.Parse(a_asz[6]); twrange.CurrentValue = (uint)short.Parse(a_asz[7]); Marshal.StructureToPtr(twrange, a_intptr, true); } return (""); } case TWTY.INT32: { if (ms_platform == Platform.MACOSX) { twrangemacosx.ItemType = (uint)a_twty; twrangemacosx.MinValue = (uint)int.Parse(a_asz[3]); twrangemacosx.MaxValue = (uint)int.Parse(a_asz[4]); twrangemacosx.StepSize = (uint)int.Parse(a_asz[5]); twrangemacosx.DefaultValue = (uint)int.Parse(a_asz[6]); twrangemacosx.CurrentValue = (uint)int.Parse(a_asz[7]); Marshal.StructureToPtr(twrangemacosx, a_intptr, true); } else { twrange.ItemType = a_twty; twrange.MinValue = (uint)int.Parse(a_asz[3]); twrange.MaxValue = (uint)int.Parse(a_asz[4]); twrange.StepSize = (uint)int.Parse(a_asz[5]); twrange.DefaultValue = (uint)int.Parse(a_asz[6]); twrange.CurrentValue = (uint)int.Parse(a_asz[7]); Marshal.StructureToPtr(twrange, a_intptr, true); } return (""); } case TWTY.UINT8: { if (ms_platform == Platform.MACOSX) { twrangemacosx.ItemType = (uint)a_twty; twrangemacosx.MinValue = (uint)byte.Parse(a_asz[3]); twrangemacosx.MaxValue = (uint)byte.Parse(a_asz[4]); twrangemacosx.StepSize = (uint)byte.Parse(a_asz[5]); twrangemacosx.DefaultValue = (uint)byte.Parse(a_asz[6]); twrangemacosx.CurrentValue = (uint)byte.Parse(a_asz[7]); Marshal.StructureToPtr(twrangemacosx, a_intptr, true); } else { twrange.ItemType = a_twty; twrange.MinValue = (uint)byte.Parse(a_asz[3]); twrange.MaxValue = (uint)byte.Parse(a_asz[4]); twrange.StepSize = (uint)byte.Parse(a_asz[5]); twrange.DefaultValue = (uint)byte.Parse(a_asz[6]); twrange.CurrentValue = (uint)byte.Parse(a_asz[7]); Marshal.StructureToPtr(twrange, a_intptr, true); } return (""); } case TWTY.BOOL: case TWTY.UINT16: { if (ms_platform == Platform.MACOSX) { twrangemacosx.ItemType = (uint)a_twty; twrangemacosx.MinValue = (uint)ushort.Parse(a_asz[3]); twrangemacosx.MaxValue = (uint)ushort.Parse(a_asz[4]); twrangemacosx.StepSize = (uint)ushort.Parse(a_asz[5]); twrangemacosx.DefaultValue = (uint)ushort.Parse(a_asz[6]); twrangemacosx.CurrentValue = (uint)ushort.Parse(a_asz[7]); Marshal.StructureToPtr(twrangemacosx, a_intptr, true); } else { twrange.ItemType = a_twty; twrange.MinValue = (uint)ushort.Parse(a_asz[3]); twrange.MaxValue = (uint)ushort.Parse(a_asz[4]); twrange.StepSize = (uint)ushort.Parse(a_asz[5]); twrange.DefaultValue = (uint)ushort.Parse(a_asz[6]); twrange.CurrentValue = (uint)ushort.Parse(a_asz[7]); Marshal.StructureToPtr(twrange, a_intptr, true); } return (""); } case TWTY.UINT32: { if (ms_platform == Platform.MACOSX) { twrangemacosx.ItemType = (uint)a_twty; twrangemacosx.MinValue = uint.Parse(a_asz[3]); twrangemacosx.MaxValue = uint.Parse(a_asz[4]); twrangemacosx.StepSize = uint.Parse(a_asz[5]); twrangemacosx.DefaultValue = uint.Parse(a_asz[6]); twrangemacosx.CurrentValue = uint.Parse(a_asz[7]); Marshal.StructureToPtr(twrangemacosx, a_intptr, true); } else { twrange.ItemType = a_twty; twrange.MinValue = uint.Parse(a_asz[3]); twrange.MaxValue = uint.Parse(a_asz[4]); twrange.StepSize = uint.Parse(a_asz[5]); twrange.DefaultValue = uint.Parse(a_asz[6]); twrange.CurrentValue = uint.Parse(a_asz[7]); Marshal.StructureToPtr(twrange, a_intptr, true); } return (""); } case TWTY.FIX32: { double dMinValue = Convert.ToDouble(a_asz[3]); double dMaxValue = Convert.ToDouble(a_asz[4]); double dStepSize = Convert.ToDouble(a_asz[5]); double dDefaultValue = Convert.ToDouble(a_asz[6]); double dCurrentValue = Convert.ToDouble(a_asz[7]); if (ms_platform == Platform.MACOSX) { twrangefix32macosx.ItemType = (uint)a_twty; twrangefix32macosx.MinValue.Whole = (short)dMinValue; twrangefix32macosx.MinValue.Frac = (ushort)((dMinValue - (double)twrangefix32macosx.MinValue.Whole) * 65536.0); twrangefix32macosx.MaxValue.Whole = (short)dMaxValue; twrangefix32macosx.MaxValue.Frac = (ushort)((dMaxValue - (double)twrangefix32macosx.MaxValue.Whole) * 65536.0); twrangefix32macosx.StepSize.Whole = (short)dStepSize; twrangefix32macosx.StepSize.Frac = (ushort)((dStepSize - (double)twrangefix32macosx.StepSize.Whole) * 65536.0); twrangefix32macosx.DefaultValue.Whole = (short)dDefaultValue; twrangefix32macosx.DefaultValue.Frac = (ushort)((dDefaultValue - (double)twrangefix32macosx.DefaultValue.Whole) * 65536.0); twrangefix32macosx.CurrentValue.Whole = (short)dCurrentValue; twrangefix32macosx.CurrentValue.Frac = (ushort)((dCurrentValue - (double)twrangefix32macosx.CurrentValue.Whole) * 65536.0); Marshal.StructureToPtr(twrangefix32macosx, a_intptr, true); } else { twrangefix32.ItemType = a_twty; twrangefix32.MinValue.Whole = (short)dMinValue; twrangefix32.MinValue.Frac = (ushort)((dMinValue - (double)twrangefix32.MinValue.Whole) * 65536.0); twrangefix32.MaxValue.Whole = (short)dMaxValue; twrangefix32.MaxValue.Frac = (ushort)((dMaxValue - (double)twrangefix32.MaxValue.Whole) * 65536.0); twrangefix32.StepSize.Whole = (short)dStepSize; twrangefix32.StepSize.Frac = (ushort)((dStepSize - (double)twrangefix32.StepSize.Whole) * 65536.0); twrangefix32.DefaultValue.Whole = (short)dDefaultValue; twrangefix32.DefaultValue.Frac = (ushort)((dDefaultValue - (double)twrangefix32.DefaultValue.Whole) * 65536.0); twrangefix32.CurrentValue.Whole = (short)dCurrentValue; twrangefix32.CurrentValue.Frac = (ushort)((dCurrentValue - (double)twrangefix32.CurrentValue.Whole) * 65536.0); Marshal.StructureToPtr(twrangefix32, a_intptr, true); } return (""); } } }
/// <summary> /// Convert the contents of a capability to a string that we can show in /// our simple GUI... /// </summary> /// <param name="a_twty">Data type</param> /// <param name="a_intptr">Pointer to the data</param> /// <param name="a_iIndex">Index of the item in the data</param> /// <returns>Data in CSV form</returns> public string GetIndexedItem(TWTY a_twty, IntPtr a_intptr, int a_iIndex) { IntPtr intptr; // Index by type... switch (a_twty) { default: return ("Get Capability: (unrecognized item type)..." + a_twty); case TWTY.INT8: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(1 * a_iIndex)); sbyte i8Value = (sbyte)Marshal.PtrToStructure(intptr, typeof(sbyte)); return (i8Value.ToString()); } case TWTY.INT16: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(2 * a_iIndex)); short i16Value = (short)Marshal.PtrToStructure(intptr, typeof(short)); return (i16Value.ToString()); } case TWTY.INT32: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(4 * a_iIndex)); int i32Value = (int)Marshal.PtrToStructure(intptr, typeof(int)); return (i32Value.ToString()); } case TWTY.UINT8: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(1 * a_iIndex)); byte u8Value = (byte)Marshal.PtrToStructure(intptr, typeof(byte)); return (u8Value.ToString()); } case TWTY.BOOL: case TWTY.UINT16: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(2 * a_iIndex)); ushort u16Value = (ushort)Marshal.PtrToStructure(intptr, typeof(ushort)); return (u16Value.ToString()); } case TWTY.UINT32: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(4 * a_iIndex)); uint u32Value = (uint)Marshal.PtrToStructure(intptr, typeof(uint)); return (u32Value.ToString()); } case TWTY.FIX32: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(4 * a_iIndex)); TW_FIX32 twfix32 = (TW_FIX32)Marshal.PtrToStructure(intptr, typeof(TW_FIX32)); return (((double)twfix32.Whole + ((double)twfix32.Frac / 65536.0)).ToString()); } case TWTY.FRAME: { CSV csv = new CSV(); intptr = (IntPtr)((ulong)a_intptr + (ulong)(16 * a_iIndex)); TW_FRAME twframe = (TW_FRAME)Marshal.PtrToStructure(intptr, typeof(TW_FRAME)); csv.Add(((double)twframe.Left.Whole + ((double)twframe.Left.Frac / 65536.0)).ToString()); csv.Add(((double)twframe.Top.Whole + ((double)twframe.Top.Frac / 65536.0)).ToString()); csv.Add(((double)twframe.Right.Whole + ((double)twframe.Right.Frac / 65536.0)).ToString()); csv.Add(((double)twframe.Bottom.Whole + ((double)twframe.Bottom.Frac / 65536.0)).ToString()); return (csv.Get()); } case TWTY.STR32: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(34 * a_iIndex)); TW_STR32 twstr32 = (TW_STR32)Marshal.PtrToStructure(intptr, typeof(TW_STR32)); return (twstr32.Get()); } case TWTY.STR64: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(66 * a_iIndex)); TW_STR64 twstr64 = (TW_STR64)Marshal.PtrToStructure(intptr, typeof(TW_STR64)); return (twstr64.Get()); } case TWTY.STR128: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(130 * a_iIndex)); TW_STR128 twstr128 = (TW_STR128)Marshal.PtrToStructure(intptr, typeof(TW_STR128)); return (twstr128.Get()); } case TWTY.STR255: { intptr = (IntPtr)((ulong)a_intptr + (ulong)(256 * a_iIndex)); TW_STR255 twstr255 = (TW_STR255)Marshal.PtrToStructure(intptr, typeof(TW_STR255)); return (twstr255.Get()); } } }
/// <summary> /// Convert the value of a string into a capability... /// </summary> /// <param name="a_twon">Container type</param> /// <param name="a_twty">Data type</param> /// <param name="a_intptr">Point to the data</param> /// <param name="a_iIndex">Index for item in the data</param> /// <param name="a_szValue">CSV value to be used to set the data</param> /// <returns>Empty string or an error string</returns> public string SetIndexedItem(TWON a_twon, TWTY a_twty, IntPtr a_intptr, int a_iIndex, string a_szValue) { IntPtr intptr; // Index by type... switch (a_twty) { default: return ("Set Capability: (unrecognized item type)..." + a_twty); case TWTY.INT8: { // We do this to make sure the entire Item value is overwritten... if (a_twon == TWON.ONEVALUE) { int i32Value = sbyte.Parse(a_szValue); Marshal.StructureToPtr(i32Value, a_intptr, true); return (""); } // These items have to be packed on the type sizes... else { sbyte i8Value = sbyte.Parse(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(1 * a_iIndex)); Marshal.StructureToPtr(i8Value, intptr, true); return (""); } } case TWTY.INT16: { // We do this to make sure the entire Item value is overwritten... if (a_twon == TWON.ONEVALUE) { int i32Value = short.Parse(a_szValue); Marshal.StructureToPtr(i32Value, a_intptr, true); return (""); } // These items have to be packed on the type sizes... else { short i16Value = short.Parse(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(2 * a_iIndex)); Marshal.StructureToPtr(i16Value, intptr, true); return (""); } } case TWTY.INT32: { int i32Value = int.Parse(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(4 * a_iIndex)); Marshal.StructureToPtr(i32Value, intptr, true); return (""); } case TWTY.UINT8: { // We do this to make sure the entire Item value is overwritten... if (a_twon == TWON.ONEVALUE) { uint u32Value = byte.Parse(a_szValue); Marshal.StructureToPtr(u32Value, a_intptr, true); return (""); } // These items have to be packed on the type sizes... else { byte u8Value = byte.Parse(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(1 * a_iIndex)); Marshal.StructureToPtr(u8Value, intptr, true); return (""); } } case TWTY.BOOL: case TWTY.UINT16: { // We do this to make sure the entire Item value is overwritten... if (a_twon == TWON.ONEVALUE) { uint u32Value = ushort.Parse(a_szValue); Marshal.StructureToPtr(u32Value, a_intptr, true); return (""); } else { ushort u16Value = ushort.Parse(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(2 * a_iIndex)); Marshal.StructureToPtr(u16Value, intptr, true); return (""); } } case TWTY.UINT32: { uint u32Value = uint.Parse(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(4 * a_iIndex)); Marshal.StructureToPtr(u32Value, intptr, true); return (""); } case TWTY.FIX32: { TW_FIX32 twfix32 = default(TW_FIX32); twfix32.Whole = (short)Convert.ToDouble(a_szValue); twfix32.Frac = (ushort)((Convert.ToDouble(a_szValue) - (double)twfix32.Whole) * 65536.0); intptr = (IntPtr)((ulong)a_intptr + (ulong)(4 * a_iIndex)); Marshal.StructureToPtr(twfix32, intptr, true); return (""); } case TWTY.FRAME: { TW_FRAME twframe = default(TW_FRAME); string[] asz = CSV.Parse(a_szValue); twframe.Left.Whole = (short)Convert.ToDouble(asz[0]); twframe.Left.Frac = (ushort)((Convert.ToDouble(asz[0]) - (double)twframe.Left.Whole) * 65536.0); twframe.Top.Whole = (short)Convert.ToDouble(asz[1]); twframe.Top.Frac = (ushort)((Convert.ToDouble(asz[1]) - (double)twframe.Top.Whole) * 65536.0); twframe.Right.Whole = (short)Convert.ToDouble(asz[2]); twframe.Right.Frac = (ushort)((Convert.ToDouble(asz[2]) - (double)twframe.Right.Whole) * 65536.0); twframe.Bottom.Whole = (short)Convert.ToDouble(asz[3]); twframe.Bottom.Frac = (ushort)((Convert.ToDouble(asz[3]) - (double)twframe.Bottom.Whole) * 65536.0); intptr = (IntPtr)((ulong)a_intptr + (ulong)(16 * a_iIndex)); Marshal.StructureToPtr(twframe, intptr, true); return (""); } case TWTY.STR32: { TW_STR32 twstr32 = default(TW_STR32); twstr32.Set(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(34 * a_iIndex)); Marshal.StructureToPtr(twstr32, intptr, true); return (""); } case TWTY.STR64: { TW_STR64 twstr64 = default(TW_STR64); twstr64.Set(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(66 * a_iIndex)); Marshal.StructureToPtr(twstr64, intptr, true); return (""); } case TWTY.STR128: { TW_STR128 twstr128 = default(TW_STR128); twstr128.Set(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(130 * a_iIndex)); Marshal.StructureToPtr(twstr128, intptr, true); return (""); } case TWTY.STR255: { TW_STR255 twstr255 = default(TW_STR255); twstr255.Set(a_szValue); intptr = (IntPtr)((ulong)a_intptr + (ulong)(256 * a_iIndex)); Marshal.StructureToPtr(twstr255, intptr, true); return (""); } } }
/// <summary> /// The common start to every capability csv... /// </summary> /// <param name="a_cap">Capability number</param> /// <param name="a_twon">Container</param> /// <param name="a_twty">Data type</param> /// <returns></returns> private CSV Common(CAP a_cap, TWON a_twon, TWTY a_twty) { CSV csv = new CSV(); // Add the capability... string szCap = a_cap.ToString(); if (!szCap.Contains("_")) { szCap = "0x" + ((ushort)a_cap).ToString("X"); } // Build the CSV... csv.Add(szCap); csv.Add("TWON_" + a_twon); csv.Add("TWTY_" + a_twty); // And return it... return (csv); }