using API_SequentMicrosystems.Models; using Libs_SequentMicrosystems; using Newtonsoft.Json; namespace API_SequentMicrosystems.Services { public class RTDDAService { private RTDStackLevelReader _stackLevelReader = new RTDStackLevelReader(); public readonly List _stackLevels = new List(); public RTDDAService(IConfiguration configuration) { if (!Directory.Exists("RTDDA")) Directory.CreateDirectory("RTDDA"); List cardsConfig = configuration.GetSection("Cards").Get>(); #pragma warning disable CS8604 // Může jít o argument s odkazem null. CardsConfig config = cardsConfig.Where(x => x.ID == "0").First(); #pragma warning restore CS8604 // Může jít o argument s odkazem null. foreach (char c in config.Levels.ToCharArray()) { try { _stackLevels.Add(byte.Parse(c.ToString())); } catch { Console.WriteLine($"Char {c} is not convertable to byte"); } } ChanelsNames = LoadChanelsNames(); //ChanelsNames PreconfiguredChanelsNames = LoadPreconfiguredChanelsNames(); //ChanelsPreconfiguredNames } /// /// Read data from all RTD cards /// /// data from all RTD cards public SortedList ReadAllCard() { SortedList data = new SortedList(); for (byte i = 0; i < 8; i++) //loop for read all stack levels { try { data.Add(i, ReadCard(i)); //read stack level } catch { Console.WriteLine($"RTD stack {i} is not available"); } } return data; //return data } /// /// Read data from all configured cards /// /// Data from all configuredd Cards public SortedList ReadAllConfiguredCard() { SortedList data = new SortedList(); for (byte i = 0; i < 8; i++) //loop for read all stack levels { if (_stackLevels.Contains(i)) { try { data.Add(i, ReadCard(i)); //read stack level } catch { Console.WriteLine($"RTD stack {i} is not available"); } } } return data; //return data } /// /// Read data from specified card /// /// stack level ID /// Data of selected stack card public float[] ReadCard(byte stack) { try { return _stackLevelReader.GetStack(stack); //return data from specified card } catch { return new float[0]; //if card read get error, return empty array } } #region ChanelsName private SortedList ChanelsNames; /// /// Load Chanels Names from file /// /// private SortedList LoadChanelsNames() { try { #pragma warning disable CS8603 // Může jít o vrácený odkaz null. return JsonConvert.DeserializeObject>(File.ReadAllText("RTDDA/Names.json")); #pragma warning restore CS8603 // Může jít o vrácený odkaz null. } catch { return new(); } } /// /// Save ChanelsNames to FIle /// private void SaveChanelsNames() { File.WriteAllText("RTDDA/Names.json", JsonConvert.SerializeObject(ChanelsNames)); } /// /// Get CHanelsNames /// /// public SortedList GetChanelsNames() { return ChanelsNames; } /// /// Save Chanels Names /// /// public void SetChanelsNames(SortedList ChN) { ChanelsNames = ChN; SaveChanelsNames(); } #endregion #region PreconfiguredChanelsNames private List PreconfiguredChanelsNames; /// /// Load Preconfigurated Chanels Names from file /// /// private List LoadPreconfiguredChanelsNames() { try { #pragma warning disable CS8603 // Může jít o vrácený odkaz null. return JsonConvert.DeserializeObject>(File.ReadAllText("RTDDA/PNames.json")); #pragma warning restore CS8603 // Může jít o vrácený odkaz null. } catch { return new(); } } /// /// Save Preconfigurated chanels names to File /// private void SavePreconfiguratedChanelsNames() { File.WriteAllText("RTDDA/PNames.json", JsonConvert.SerializeObject(PreconfiguredChanelsNames)); } /// /// Get preconfigured chanels names /// /// public List GetPreconfiguratedChanelsNames() { return PreconfiguredChanelsNames.ToList(); } /// /// Save Preconfigured ChanelsNames /// /// public void SetPreconfiguratedChanelsNames(List ChN) { PreconfiguredChanelsNames = ChN; SavePreconfiguratedChanelsNames(); } #endregion } }