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)); }
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"); }
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()); }