using System;
using Unosquare.RaspberryIO.Abstractions;
namespace Unosquare.WiringPi {
///
/// Represents the WiringPi system info.
///
///
public class SystemInfo : ISystemInfo {
private static readonly Object Lock = new Object();
private static Boolean _revGetted;
private static BoardRevision _boardRevision = BoardRevision.Rev2;
///
public BoardRevision BoardRevision => GetBoardRevision();
///
public Version LibraryVersion {
get {
String[] libParts = Native.WiringPi.WiringPiLibrary.Split('.');
Int32 major = Int32.Parse(libParts[libParts.Length - 2]);
Int32 minor = Int32.Parse(libParts[libParts.Length - 1]);
return new Version(major, minor);
}
}
internal static BoardRevision GetBoardRevision() {
lock(Lock) {
if(_revGetted) {
return _boardRevision;
}
Int32 val = Native.WiringPi.PiBoardRev();
_boardRevision = val == 1 ? BoardRevision.Rev1 : BoardRevision.Rev2;
_revGetted = true;
}
return _boardRevision;
}
}
}