using Raytheon.Instruments.PowerSupply; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ProgramLib { /// /// Stores voltage and current reading for each power module /// internal class PowerSupplySharedData { private object syncObj = new object(); private Dictionary syncObjDict = new Dictionary(); private Dictionary _powerSupplyDataDict = new Dictionary(); /// /// Set data for a power supply module /// public void SetData(string moduleName, double voltage, double current, PowerSupplyModuleInfo powerSupplyModuleInfo) { lock (syncObj) { if (!syncObjDict.ContainsKey(moduleName)) { // create a mutex for each module syncObjDict[moduleName] = new object(); } } lock (syncObjDict[moduleName]) { if (!_powerSupplyDataDict.ContainsKey(moduleName)) { _powerSupplyDataDict[moduleName] = new PowerSupplyData(); } _powerSupplyDataDict[moduleName]._voltage = voltage; _powerSupplyDataDict[moduleName]._current = current; _powerSupplyDataDict[moduleName]._initialized = true; _powerSupplyDataDict[moduleName]._powerSupplyModuleInfo = powerSupplyModuleInfo; } } /// /// Get data for a power supply module /// public PowerSupplyData GetData(string moduleName) { lock (syncObj) { if (!syncObjDict.ContainsKey(moduleName)) { // create a mutex for each module syncObjDict[moduleName] = new object(); } } lock (syncObjDict[moduleName]) { PowerSupplyData data = null; if (_powerSupplyDataDict.ContainsKey(moduleName)) { data = _powerSupplyDataDict[moduleName]; } return data; } } /// /// Set each power supply data to uninialized /// public void ResetAll() { foreach (KeyValuePair entry in _powerSupplyDataDict) { lock (syncObj) { if (!syncObjDict.ContainsKey(entry.Key)) { // create a mutex for each module syncObjDict[entry.Key] = new object(); } } lock (syncObjDict[entry.Key]) { entry.Value.Reset(); } } } } }