public static void StoreMapping(HardwareData inputDataMapping) { List <ActionDataMapping> rawData = new List <ActionDataMapping>(); inputDataMapping.PushButtons.ForEach(e => { if (e.AssociatedAction != null) { rawData.Add(new ActionDataMapping() { id = e.Identifier, action = e.AssociatedAction }); } }); JArray pushButtons = JArray.FromObject(rawData); JObject obj = new JObject { { "PushButton", pushButtons } }; JsonSerializer serializer = new JsonSerializer(); using (StreamWriter streamWriter = new StreamWriter(string.Format("{0}/{1}", AppContext.BaseDirectory, ActionDataFile))) using (JsonWriter writer = new JsonTextWriter(streamWriter)) { serializer.Formatting = Formatting.Indented; serializer.Serialize(writer, obj); } }
/// <summary> /// Create an Hardware mapping from a raw json string /// </summary> /// <param name="jsonHardwareData">the hardware json description string</param> public static HardwareData LoadData(string jsonData) { HardwareData d = new HardwareData(); JToken data = JToken.Parse(jsonData); // Parses push buttons' data: JObject pushButtonObj = (JObject)data.SelectToken("PushButton"); if (pushButtonObj != null) { string type = (string)pushButtonObj.SelectToken("type"); string identifier = (string)pushButtonObj.SelectToken("identifier"); if (identifier != null) { PushButton.UpdateIdentifier(identifier); } // Check what type of pushbutton the hardware has: if (type == "list") { int btnCount = (int)pushButtonObj.SelectToken("size"); for (int i = 0; i < btnCount; i++) { d.PushButtons.Add(new PushButton(i)); } } else if (type == "matrix") { d.HasInitializedAsMatrix = true; d.MatrixLayout = (string)pushButtonObj.SelectToken("layout"); int count = (int)pushButtonObj.SelectToken("size"); for (int i = 0; i < count; i++) { d.PushButtons.Add(new PushButton(i)); } } else { //log unknown/invalid type } } // Parses rotary encoders' data: JArray rotEnc = (JArray)data.SelectToken("RotaryEncoder"); if (rotEnc != null) { for (int i = 0; i < rotEnc.Count; i++) { int id = (int)rotEnc[i].SelectToken("id"); bool hasButton = (bool)rotEnc[i].SelectToken("hasButton"); d.RotaryEncoders.Add(new RotaryEncoder(id, hasButton)); } } // Parses knobs' data JObject knobsObj = (JObject)data.SelectToken("Knobs"); if (knobsObj != null) { int knobsCount = (int)knobsObj.SelectToken("size"); for (int i = 0; i < knobsCount; i++) { d.Knobs.Add(new Knob(i)); } } return(d); }
public HardwareAction(HardwareData dataInstance) { instance = dataInstance; DispatchHardwareFragment(); }