using System.Collections.Generic;
using Raytheon.Instruments.PowerSupply;
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();
_powerSupplyDataDict[moduleName] = new PowerSupplyData();
}
}
lock (syncObjDict[moduleName])
{
_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();
_powerSupplyDataDict[moduleName] = new PowerSupplyData();
}
}
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();
}
}
}
}
}