Files
RTCSync/RTCSync.cli/Services/DeviceReaders.cs
T
2026-06-25 12:19:29 +03:00

96 lines
3.1 KiB
C#

using LibUsbDotNet.LibUsb;
using RTCSync.Models;
using RTCSync.Utils;
namespace RTCSync.Services;
public class DeviceReaders
{
public static TimeModel GetTimeRTC(IUsbDevice device)
{
// Читаем все 7 байт времени начиная с регистра 0x00
var time = I2CUtils.ReadWithRetry(device, 0x68, 0x00, 8);
var timeModel = new TimeModel(time);
return timeModel;
}
public static void PrintTimeRTC(IUsbDevice device)
{
var timeModel = GetTimeRTC(device);
PrintTimeRTC(timeModel);
}
public static void PrintTimeRTC(TimeModel timeModel)
{
Console.WriteLine(timeModel.Time.ToString("HH:mm:ss dd.MM.yyyy"));
}
public static byte[] GetStatusRegister(IUsbDevice device)
{
return I2CUtils.ReadWithRetry(device, 0x68, 0x0F, 1);
}
public static void PrintStatusValues(IUsbDevice device)
{
var status = GetStatusRegister(device);
PrintStatusValues(status);
}
public static void PrintStatusValues(byte[] status)
{
var statusBits = string.Concat(status.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')));
Console.WriteLine("Status Register (0Fh):");
Console.WriteLine("| OSF | 0 | 0 | 0 | EN32kHZ | BSY | A2F | A1F |");
Console.WriteLine($"| {statusBits[0], -3} | {statusBits[1]} | {statusBits[2]} | {statusBits[3]} | {statusBits[4], -7} | {statusBits[5], -3} | {statusBits[6], -3} | {statusBits[7], -3} |");
Console.WriteLine();
}
public static byte[] GetControlRegister(IUsbDevice device)
{
return I2CUtils.ReadWithRetry(device, 0x68, 0x0E, 1);
}
public static void PrintControlValues(IUsbDevice device)
{
var control= GetControlRegister(device);
PrintControlValues(control);
}
public static void PrintControlValues(byte[] control)
{
var controlBits = string.Concat(control.Select(b => Convert.ToString(b, 2).PadLeft(8, '0')));
Console.WriteLine("Control Register (0Eh):");
Console.WriteLine("| EOSC | BBSQW | CONV | RS2 | RS1 | INTCN | A2IE | A1IE |");
Console.WriteLine($"| {controlBits[0], -4} | {controlBits[1], -5} | {controlBits[2], -4} | {controlBits[3], -3} | {controlBits[4], -3} | {controlBits[5], -5} | {controlBits[6], -4} | {controlBits[7], -4} |");
Console.WriteLine();
}
public static byte[] GetTemperatureRegisters(IUsbDevice device)
{
return I2CUtils.ReadWithRetry(device, 0x68, 0x11, 2);
}
public static void PrintTemperatureValue(IUsbDevice device)
{
var temp = GetTemperatureRegisters(device);
PrintTemperatureValue(temp);
}
public static void PrintTemperatureValue(byte[] temp)
{
float tempValue = temp[0];
if (temp[1] == 0x40)
tempValue += 0.25F;
else if (temp[1] == 0x80)
tempValue += 0.5F;
else if (temp[1] == 0xC0)
tempValue += 0.75F;
Console.WriteLine("Температура:");
Console.WriteLine(tempValue);
Console.WriteLine();
}
}