96 lines
3.1 KiB
C#
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();
|
|
}
|
|
|
|
|
|
} |