示例#1
0
        public static bool SetAngleStringValue(this WatchVariable watchVar, ProcessStream stream, uint offset, string value, WatchVariableControl.AngleViewModeType viewMode)
        {
            var dataBytes = watchVar.GetBytesFromAngleString(stream, offset, value, viewMode);

            return(watchVar.SetBytes(stream, offset, dataBytes));
        }
示例#2
0
        public static string GetAngleStringValue(this WatchVariable watchVar, ProcessStream stream, uint offset, WatchVariableControl.AngleViewModeType viewMode, bool truncated = false)
        {
            // Get dataBytes
            var byteCount = WatchVariable.TypeSize[watchVar.Type];
            var dataBytes = stream.ReadRam(watchVar.OtherOffset ? offset + watchVar.Address
                : watchVar.Address, byteCount, watchVar.AbsoluteAddressing);

            // Make sure offset is a valid pointer
            if (watchVar.OtherOffset && offset == 0)
            {
                return("(none)");
            }

            // Make sure dataType is a valid angle type
            if (watchVar.Type != typeof(UInt32) && watchVar.Type != typeof(UInt16) &&
                watchVar.Type != typeof(Int32) && watchVar.Type != typeof(Int16))
            {
                return("Error: datatype");
            }

            // Get Uint32 value
            UInt32 dataValue = (watchVar.Type == typeof(UInt32)) ? BitConverter.ToUInt32(dataBytes, 0)
                : BitConverter.ToUInt16(dataBytes, 0);

            // Apply mask
            if (watchVar.Mask.HasValue)
            {
                dataValue = (UInt32)(dataValue & watchVar.Mask.Value);
            }

            // Truncate by 16
            if (truncated)
            {
                dataValue &= ~0x000FU;
            }

            // Print hex
            if (watchVar.UseHex)
            {
                if (viewMode == WatchVariableControl.AngleViewModeType.Recommended && WatchVariable.TypeSize[watchVar.Type] == 4)
                {
                    return("0x" + dataValue.ToString("X8"));
                }
                else
                {
                    return("0x" + ((UInt16)dataValue).ToString("X4"));
                }
            }

            switch (viewMode)
            {
            case WatchVariableControl.AngleViewModeType.Recommended:
                if (watchVar.Type == typeof(Int16))
                {
                    return(((Int16)dataValue).ToString());
                }
                else if (watchVar.Type == typeof(UInt16))
                {
                    return(((UInt16)dataValue).ToString());
                }
                else if (watchVar.Type == typeof(Int32))
                {
                    return(((Int32)dataValue).ToString());
                }
                else
                {
                    return(dataValue.ToString());
                }

            case WatchVariableControl.AngleViewModeType.Unsigned:
                return(((UInt16)dataValue).ToString());

            case WatchVariableControl.AngleViewModeType.Signed:
                return(((Int16)(dataValue)).ToString());

            case WatchVariableControl.AngleViewModeType.Degrees:
                return((((UInt16)dataValue) * (360d / 65536)).ToString());

            case WatchVariableControl.AngleViewModeType.Radians:
                return((((UInt16)dataValue) * (2 * Math.PI / 65536)).ToString());
            }

            return("Error: ang. parse");
        }
示例#3
0
        public static byte[] GetBytesFromAngleString(this WatchVariable watchVar, ProcessStream stream, uint offset, string value, WatchVariableControl.AngleViewModeType viewMode)
        {
            if (watchVar.Type != typeof(UInt32) && watchVar.Type != typeof(UInt16) &&
                watchVar.Type != typeof(Int32) && watchVar.Type != typeof(Int16))
            {
                return(null);
            }

            UInt32 writeValue = 0;

            // Print hex
            if (ParsingUtilities.IsHex(value))
            {
                ParsingUtilities.TryParseHex(value, out writeValue);
            }
            else
            {
                switch (viewMode)
                {
                case WatchVariableControl.AngleViewModeType.Signed:
                case WatchVariableControl.AngleViewModeType.Unsigned:
                case WatchVariableControl.AngleViewModeType.Recommended:
                    int tempValue;
                    if (int.TryParse(value, out tempValue))
                    {
                        writeValue = (uint)tempValue;
                    }
                    else if (!uint.TryParse(value, out writeValue))
                    {
                        return(null);
                    }
                    break;


                case WatchVariableControl.AngleViewModeType.Degrees:
                    double degValue;
                    if (!double.TryParse(value, out degValue))
                    {
                        return(null);
                    }
                    writeValue = (UInt16)(degValue / (360d / 65536));
                    break;

                case WatchVariableControl.AngleViewModeType.Radians:
                    double radValue;
                    if (!double.TryParse(value, out radValue))
                    {
                        return(null);
                    }
                    writeValue = (UInt16)(radValue / (2 * Math.PI / 65536));
                    break;
                }
            }

            var byteCount = WatchVariable.TypeSize[watchVar.Type];

            return(BitConverter.GetBytes(writeValue).Take(byteCount).ToArray());
        }