Přidejte soubory projektu.
parent
627613b499
commit
85790996de
|
@ -0,0 +1,4 @@
|
|||
[*.cs]
|
||||
|
||||
# CS8600: Literál s hodnotou null nebo s možnou hodnotou null se převádí na typ, který nemůže mít hodnotu null.
|
||||
dotnet_diagnostic.CS8600.severity = silent
|
|
@ -0,0 +1,19 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Libs_SequentMicrosystems\Libs_SequentMicrosystems.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,6 @@
|
|||
@API_SequentMicrosystems_HostAddress = http://localhost:5242
|
||||
|
||||
GET {{API_SequentMicrosystems_HostAddress}}/weatherforecast/
|
||||
Accept: application/json
|
||||
|
||||
###
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.8.34309.116
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "API_SequentMicrosystems", "API_SequentMicrosystems.csproj", "{357DFFA8-F19B-4D1D-91A3-590E8C526763}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Libs_SequentMicrosystems", "..\Libs_SequentMicrosystems\Libs_SequentMicrosystems.csproj", "{65BF0CBE-211E-44BD-85CB-ACA4303A5744}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D1EBA159-E66F-40B9-9CA4-771280C2D647}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
.editorconfig = .editorconfig
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{357DFFA8-F19B-4D1D-91A3-590E8C526763}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{357DFFA8-F19B-4D1D-91A3-590E8C526763}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{357DFFA8-F19B-4D1D-91A3-590E8C526763}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{357DFFA8-F19B-4D1D-91A3-590E8C526763}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{65BF0CBE-211E-44BD-85CB-ACA4303A5744}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{65BF0CBE-211E-44BD-85CB-ACA4303A5744}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{65BF0CBE-211E-44BD-85CB-ACA4303A5744}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{65BF0CBE-211E-44BD-85CB-ACA4303A5744}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {0195FF77-403C-4F80-BEC9-1D24388A7E04}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,101 @@
|
|||
using API_SequentMicrosystems.Models;
|
||||
using API_SequentMicrosystems.Services;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
|
||||
namespace API_SequentMicrosystems.Controllers
|
||||
{
|
||||
[Route("points")]
|
||||
[ApiController]
|
||||
public class PointsController : ControllerBase
|
||||
{
|
||||
private PointsService _PointsService;
|
||||
|
||||
public PointsController(PointsService _PS)
|
||||
{
|
||||
_PointsService = _PS;
|
||||
}
|
||||
|
||||
// GET: api/<PointsController>
|
||||
/// <summary>
|
||||
/// Get all saved points
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public List<PointsModel> Get()
|
||||
{
|
||||
return _PointsService.GetPoints();
|
||||
}
|
||||
|
||||
// GET api/<PointsController>/5
|
||||
/// <summary>
|
||||
/// Read points from first to specified number
|
||||
/// </summary>
|
||||
/// <param name="max">max readed points</param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{max}")]
|
||||
public List<PointsModel> Get(int max)
|
||||
{
|
||||
return _PointsService.GetPoints().Take(max).ToList();
|
||||
}
|
||||
|
||||
// GET api/<PointsController>/5/5
|
||||
/// <summary>
|
||||
/// Read points from and to specified points positions
|
||||
/// </summary>
|
||||
/// <param name="max"></param>
|
||||
/// <param name="start"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("{max}/{start}")]
|
||||
public List<PointsModel> Get(int max, int start)
|
||||
{
|
||||
return _PointsService.GetPoints().Skip(start).Take(max).ToList();
|
||||
}
|
||||
|
||||
//DELETE api/points
|
||||
/// <summary>
|
||||
/// Delete saved points
|
||||
/// </summary>
|
||||
[HttpDelete]
|
||||
public void Delete()
|
||||
{
|
||||
_PointsService.DeletePoints();
|
||||
}
|
||||
|
||||
//GET api/points/save
|
||||
/// <summary>
|
||||
/// Save new point
|
||||
/// </summary>
|
||||
[HttpGet("save")]
|
||||
public void GetSave()
|
||||
{
|
||||
_PointsService.SavePoint();
|
||||
}
|
||||
|
||||
//GET api/points/save/300
|
||||
/// <summary>
|
||||
/// Start timer to automatic saving points in specified interval
|
||||
/// </summary>
|
||||
/// <param name="sec"></param>
|
||||
[HttpGet("save/{sec}")]
|
||||
public void GetSaveSec(int sec)
|
||||
{
|
||||
//start autosave timer
|
||||
}
|
||||
|
||||
//GET api/points/save
|
||||
/// <summary>
|
||||
/// Stop timer for automatic save points
|
||||
/// </summary>
|
||||
[HttpDelete("save")]
|
||||
public void DeleteSaveSec()
|
||||
{
|
||||
//stop autosave timer
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
using API_SequentMicrosystems.Services;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
|
||||
|
||||
namespace API_SequentMicrosystems.Controllers
|
||||
{
|
||||
[Route("RTDDA")]
|
||||
[ApiController]
|
||||
public class RTDDataAcquisitionController : ControllerBase
|
||||
{
|
||||
private RTDDAService _RTDDAservice;
|
||||
public RTDDataAcquisitionController(RTDDAService serv)
|
||||
{
|
||||
_RTDDAservice = serv;
|
||||
}
|
||||
|
||||
// GET: api/<RTDDataAcquisitionController>
|
||||
/// <summary>
|
||||
/// Read data from all configured cards
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public SortedList<byte, float[]> Get()
|
||||
{
|
||||
return _RTDDAservice.ReadAllConfiguredCard();
|
||||
}
|
||||
|
||||
// GET api/<RTDDataAcquisitionController>/All
|
||||
/// <summary>
|
||||
/// Read data from All RTD cards
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("All")]
|
||||
public SortedList<byte, float[]> GetAll()
|
||||
{
|
||||
return _RTDDAservice.ReadAllCard();
|
||||
}
|
||||
|
||||
// GET api/<RTDDataAcquisitionController>/5
|
||||
/// <summary>
|
||||
/// Read data from specified card from stack
|
||||
/// </summary>
|
||||
/// <param name="stack"></param>
|
||||
/// <returns>data from specified card</returns>
|
||||
[HttpGet("{stack}")]
|
||||
public float[] GetAll(byte stack)
|
||||
{
|
||||
return _RTDDAservice.ReadCard(stack);
|
||||
}
|
||||
|
||||
//GET api/RTDDA/Names
|
||||
/// <summary>
|
||||
/// Get Configured Names of Chanels
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Names")]
|
||||
public SortedList<byte, string[]> GetNames()
|
||||
{
|
||||
return _RTDDAservice.GetChanelsNames();
|
||||
}
|
||||
|
||||
// POST api/<RTDDataAcquisitionController>
|
||||
/// <summary>
|
||||
/// Post configured names of chanels
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
[HttpPost("Names")]
|
||||
public void PostNames([FromBody] SortedList<byte, string[]> data)
|
||||
{
|
||||
_RTDDAservice.SetChanelsNames(data);
|
||||
}
|
||||
|
||||
//GET api/RTDDA/Names/Preconfigured
|
||||
/// <summary>
|
||||
/// Get preconfigured Names for chanels
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet("Names/Preconfigured")]
|
||||
public List<string> GetNamesPreconfigured()
|
||||
{
|
||||
return _RTDDAservice.GetPreconfiguratedChanelsNames();
|
||||
}
|
||||
|
||||
//POST api/RTDDA/Names/Preconfigured
|
||||
/// <summary>
|
||||
/// Post preconfigured names for chanels
|
||||
/// </summary>
|
||||
/// <param name="data"></param>
|
||||
[HttpPost("Names/Preconfigured")]
|
||||
public void PostNamesPreconfigured([FromBody] List<string> data)
|
||||
{
|
||||
_RTDDAservice.SetPreconfiguratedChanelsNames(data);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
namespace API_SequentMicrosystems.Models
|
||||
{
|
||||
public class CardsConfig
|
||||
{
|
||||
#pragma warning disable CS8618 // Pole, které nemůže být null, musí při ukončování konstruktoru obsahovat hodnotu, která není null. Zvažte možnost deklarovat ho jako pole s možnou hodnotou null.
|
||||
public string ID { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string ShortName { get; set; }
|
||||
public string Levels { get; set; }
|
||||
public string UpdateRateMsec { get; set; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
namespace API_SequentMicrosystems.Models
|
||||
{
|
||||
public class PointsModel
|
||||
{
|
||||
public DateTime Time { get; set; }
|
||||
public SortedList<byte, float[]> RTDDA { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
using API_SequentMicrosystems.Services;
|
||||
|
||||
namespace API_SequentMicrosystems
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
|
||||
builder.Services.AddControllers();
|
||||
|
||||
builder.Services.AddSingleton<RTDDAService>();
|
||||
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
builder.Services.AddSwaggerGen();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (true)//app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
}
|
||||
|
||||
app.UseAuthorization();
|
||||
|
||||
app.Services.GetService<RTDDAService>();
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
app.Run();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:58419",
|
||||
"sslPort": 0
|
||||
}
|
||||
},
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"applicationUrl": "http://localhost:5242",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,95 @@
|
|||
using API_SequentMicrosystems.Models;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace API_SequentMicrosystems.Services
|
||||
{
|
||||
public class PointsService
|
||||
{
|
||||
|
||||
|
||||
private RTDDAService _RTDDAService;
|
||||
|
||||
public PointsService(RTDDAService _RTDDAS)
|
||||
{
|
||||
if (!Directory.Exists("Points"))
|
||||
Directory.CreateDirectory("Points");
|
||||
|
||||
_RTDDAService = _RTDDAS;
|
||||
|
||||
_points = LoadPoints();
|
||||
}
|
||||
|
||||
private List<PointsModel> _points;
|
||||
|
||||
/// <summary>
|
||||
/// Load points from File
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private List<PointsModel> LoadPoints()
|
||||
{
|
||||
try
|
||||
{
|
||||
#pragma warning disable CS8603 // Může jít o vrácený odkaz null.
|
||||
return JsonConvert.DeserializeObject<List<PointsModel>>(File.ReadAllText("Points/SavedData.json"));
|
||||
#pragma warning restore CS8603 // Může jít o vrácený odkaz null.
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save points to File
|
||||
/// </summary>
|
||||
private void SavePoints()
|
||||
{
|
||||
File.WriteAllText("Points/SavedData.json", JsonConvert.SerializeObject(_points));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get saved Points
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<PointsModel> GetPoints()
|
||||
{
|
||||
return _points;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete Points
|
||||
/// </summary>
|
||||
public void DeletePoints()
|
||||
{
|
||||
_points = new();
|
||||
SavePoints();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save data/status point
|
||||
/// </summary>
|
||||
public void SavePoint()
|
||||
{
|
||||
PointsModel pm = new PointsModel(); //initialize point object
|
||||
pm.Time = DateTime.Now; //set time of point created
|
||||
pm.RTDDA = _RTDDAService.ReadAllCard(); //save RTD data to point
|
||||
|
||||
_points.Add(pm); //add point to list
|
||||
SavePoints(); //Save updated points
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,206 @@
|
|||
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<byte> _stackLevels = new List<byte>();
|
||||
|
||||
public RTDDAService(IConfiguration configuration)
|
||||
{
|
||||
if (!Directory.Exists("RTDDA"))
|
||||
Directory.CreateDirectory("RTDDA");
|
||||
|
||||
List<CardsConfig> cardsConfig = configuration.GetSection("Cards").Get<List<CardsConfig>>();
|
||||
#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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read data from all RTD cards
|
||||
/// </summary>
|
||||
/// <returns>data from all RTD cards</returns>
|
||||
public SortedList<byte, float[]> ReadAllCard()
|
||||
{
|
||||
SortedList<byte, float[]> data = new SortedList<byte, float[]>();
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read data from all configured cards
|
||||
/// </summary>
|
||||
/// <returns>Data from all configuredd Cards</returns>
|
||||
public SortedList<byte, float[]> ReadAllConfiguredCard()
|
||||
{
|
||||
SortedList<byte, float[]> data = new SortedList<byte, float[]>();
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Read data from specified card
|
||||
/// </summary>
|
||||
/// <param name="stack">stack level ID</param>
|
||||
/// <returns>Data of selected stack card</returns>
|
||||
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<byte, string[]> ChanelsNames;
|
||||
|
||||
/// <summary>
|
||||
/// Load Chanels Names from file
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private SortedList<byte, string[]> LoadChanelsNames()
|
||||
{
|
||||
try
|
||||
{
|
||||
#pragma warning disable CS8603 // Může jít o vrácený odkaz null.
|
||||
return JsonConvert.DeserializeObject<SortedList<byte, string[]>>(File.ReadAllText("RTDDA/Names.json"));
|
||||
#pragma warning restore CS8603 // Může jít o vrácený odkaz null.
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save ChanelsNames to FIle
|
||||
/// </summary>
|
||||
private void SaveChanelsNames()
|
||||
{
|
||||
File.WriteAllText("RTDDA/Names.json", JsonConvert.SerializeObject(ChanelsNames));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get CHanelsNames
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public SortedList<byte, string[]> GetChanelsNames()
|
||||
{
|
||||
return ChanelsNames;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save Chanels Names
|
||||
/// </summary>
|
||||
/// <param name="ChN"></param>
|
||||
public void SetChanelsNames(SortedList<byte, string[]> ChN)
|
||||
{
|
||||
ChanelsNames = ChN;
|
||||
SaveChanelsNames();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region PreconfiguredChanelsNames
|
||||
private List<string> PreconfiguredChanelsNames;
|
||||
|
||||
/// <summary>
|
||||
/// Load Preconfigurated Chanels Names from file
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private List<string> LoadPreconfiguredChanelsNames()
|
||||
{
|
||||
try
|
||||
{
|
||||
#pragma warning disable CS8603 // Může jít o vrácený odkaz null.
|
||||
return JsonConvert.DeserializeObject<List<string>>(File.ReadAllText("RTDDA/PNames.json"));
|
||||
#pragma warning restore CS8603 // Může jít o vrácený odkaz null.
|
||||
}
|
||||
catch
|
||||
{
|
||||
return new();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save Preconfigurated chanels names to File
|
||||
/// </summary>
|
||||
private void SavePreconfiguratedChanelsNames()
|
||||
{
|
||||
File.WriteAllText("RTDDA/PNames.json", JsonConvert.SerializeObject(PreconfiguredChanelsNames));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get preconfigured chanels names
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public List<string> GetPreconfiguratedChanelsNames()
|
||||
{
|
||||
return PreconfiguredChanelsNames.ToList();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Save Preconfigured ChanelsNames
|
||||
/// </summary>
|
||||
/// <param name="ChN"></param>
|
||||
public void SetPreconfiguratedChanelsNames(List<string> ChN)
|
||||
{
|
||||
PreconfiguredChanelsNames = ChN;
|
||||
SavePreconfiguratedChanelsNames();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"Cards": [
|
||||
{
|
||||
"ID": "0",
|
||||
"Name": "RTD Data Acquisition 8-Layer Stackable HAT for Raspberry Pi",
|
||||
"ShortName": "RTDDA",
|
||||
"Levels": "1",
|
||||
"UpdateRateMsec": "1000"
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue