// Get field value from table entry. // Returns null if not found. public object GetField(string parameterNameOrIndex, string fieldNameOrId) { if (!String.IsNullOrWhiteSpace(parameterNameOrIndex)) { DeviceParameter d = Find(parameterNameOrIndex); if (d != null) { switch (DeviceParameter.GetFieldId(fieldNameOrId)) { case DeviceParameter.FieldId.IndexField: return(d.ParamIndex); case DeviceParameter.FieldId.CategoryField: return(d.ParamCategory); case DeviceParameter.FieldId.VariableKindField: return(d.ParamVarKind); case DeviceParameter.FieldId.SizeField: return(d.ParamSize); case DeviceParameter.FieldId.StorageFlagsField: return(d.ParamStorageFlags); case DeviceParameter.FieldId.MinValueField: return(d.MinValue); case DeviceParameter.FieldId.MaxValueField: return(d.MaxValue); case DeviceParameter.FieldId.DefaultValueField: return(d.DefaultValue); case DeviceParameter.FieldId.RamValueField: return(d.RamValue); case DeviceParameter.FieldId.EepromValueField: return(d.EEPromValue); case DeviceParameter.FieldId.NameField: return(d.ParamName); default: break; } } } return(null); }
// Update a field in a table entry. Create new entry if necessary. // Returns null on success, otherwise error message. public string PutField(string parameterNameOrIndex, string fieldNameOrId, object value) { string result = null; if (!String.IsNullOrWhiteSpace(parameterNameOrIndex) && value != null) { DeviceParameter d = Find(parameterNameOrIndex); bool isNew = (d == null); if (isNew) { d = new DeviceParameter(parameterNameOrIndex); } switch (DeviceParameter.GetFieldId(fieldNameOrId)) { case DeviceParameter.FieldId.IndexField: try { int v = (int)value; if (v >= 0) { if (!isNew && d.ParamIndex >= 0) { IndexTable.Remove(d.ParamIndex); } d.ParamIndex = v; isNew = true; } else { result = "Error: negative index."; } } catch (Exception) { result = "Error: invalid index type."; } break; case DeviceParameter.FieldId.CategoryField: try { int v = (int)value; if (v >= 0) { d.ParamCategory = v; } else { result = "Error: negative category."; } } catch (Exception) { result = "Error: invalid category type."; } break; case DeviceParameter.FieldId.VariableKindField: try { VariableKind v = VariableValue.StringToVK(value.ToString()); d.ParamVarKind = v; if (v == VariableKind.VK_None) { result = "Error: bad representation kind."; } } catch (Exception) { result = "Error: invalid representation kind type."; } break; case DeviceParameter.FieldId.SizeField: try { int v = (int)value; if (v >= 0) { d.ParamSize = v; } else { d.ParamSize = VariableValue.DataSize(d.ParamVarKind); } } catch (Exception) { result = "Error: invalid size value."; } break; case DeviceParameter.FieldId.StorageFlagsField: try { StorageFlags v = VariableValue.StringToSF(value.ToString()); d.ParamStorageFlags = v; if (v == StorageFlags.SF_None) { result = "Error: bad storage flags."; } } catch (Exception) { result = "Error: invalid storage flags type."; } break; case DeviceParameter.FieldId.MinValueField: try { d.MinValue = new VariableValue(d.ParamVarKind, value.ToString()); } catch (Exception) { result = "Error: invalid min value type."; } break; case DeviceParameter.FieldId.MaxValueField: try { d.MaxValue = new VariableValue(d.ParamVarKind, value.ToString()); } catch (Exception) { result = "Error: invalid max value type."; } break; case DeviceParameter.FieldId.DefaultValueField: try { d.DefaultValue = new VariableValue(d.ParamVarKind, value.ToString()); } catch (Exception) { result = "Error: invalid default value type."; } break; case DeviceParameter.FieldId.RamValueField: try { d.RamValue = new VariableValue(d.ParamVarKind, value.ToString()); } catch (Exception) { result = "Error: invalid ram value type."; } break; case DeviceParameter.FieldId.EepromValueField: try { d.EEPromValue = new VariableValue(d.ParamVarKind, value.ToString()); } catch (Exception) { result = "Error: invalid Eeprom value type."; } break; case DeviceParameter.FieldId.NameField: try { string s = value.ToString().Trim().ToLower(); if (!isNew && !String.IsNullOrWhiteSpace(d.ParamName)) { NameTable.Remove(d.ParamName); } d.ParamName = s; isNew = true; } catch (Exception) { result = "Error: invalid index type."; } break; default: result = "Error: invalid field name or Id."; break; } if (isNew && result == null) { Add(d); } } return(result); }