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(); } }