MoonBit EDID parser, checksum validator, display timing decoder, and monitor capability audit toolkit.
moon add BenPaoBaMingWangXing/edidkitmoon run cmd/mainmoon run cmd/auditmatch @edidkit.parse_edid_hex(@edidkit.sample_edid_hex()) {
Ok(edid) => {
println(@edidkit.edid_to_text(edid))
let audit = @edidkit.audit_edid_with_profile(
edid,
@edidkit.DisplayProfile::desktop(),
)
println(@edidkit.audit_to_json(audit))
}
Err(err) => println(err.message)
}moon check
moon build
moon test
moon run cmd/main
moon run cmd/audit
moon packagepub(all) struct AuditSummary {
status : AuditStatus
diagnostics : Int
notes : Int
warnings : Int
errors : Int
detailed_timings : Int
standard_timings : Int
established_timings : Int
} derive(Eq, Debug)pub(all) struct Descriptor {
kind : DescriptorKind
index : Int
text : String?
detailed_timing : DetailedTimingInfo?
range_limits : RangeLimits?
} derive(Eq, Debug)pub(all) struct DetailedTimingInfo {
pixel_clock_khz : Int
h_active : Int
h_blanking : Int
v_active : Int
v_blanking : Int
h_sync_offset : Int
h_sync_pulse : Int
v_sync_offset : Int
v_sync_pulse : Int
h_size_mm : Int
v_size_mm : Int
h_border : Int
v_border : Int
interlaced : Bool
positive_hsync : Bool
positive_vsync : Bool
} derive(Eq, Debug)pub(all) enum DiagnosticCode {
InvalidLength
InvalidHexLength
InvalidHexCharacter
InvalidHeader
InvalidChecksum
UnsupportedVersion
SuspiciousManufactureDate
MissingDetailedTiming
EmptyMonitorName
MissingPreferredTiming
ExtensionBlockIgnored
NonSquarePhysicalSize
UnusualGamma
UnknownDescriptor
MissingMonitorName
InvalidDisplaySize
ProfileRequirementNotMet
InterlacedModeUnsupported
RangeLimitInconsistent
} derive(Eq, Debug)pub(all) struct DisplayMode {
width : Int
height : Int
refresh_millihz : Int
pixel_clock_khz : Int?
source : ModeSource
interlaced : Bool
preferred : Bool
name : String
} derive(Eq, Debug)pub(all) struct Edid {
bytes : Array[Int]
manufacturer : ManufacturerId
product_code : Int
serial_number : Int
manufacture : ManufactureDate
version_major : Int
version_minor : Int
video_input : VideoInput
display : BasicDisplay
chromaticity : Chromaticity
established_timings : Array[EstablishedTiming]
standard_timings : Array[StandardTiming]
descriptors : Array[Descriptor]
extension_count : Int
checksum : Int
diagnostics : Array[EdidDiagnostic]
} derive(Eq, Debug)pub(all) struct EdidAudit {
status : AuditStatus
profile_name : String
diagnostics : Array[EdidDiagnostic]
summary : AuditSummary
preferred_mode : DisplayMode?
display_class : DisplayClass
} derive(Eq, Debug)fn EdidAudit::diagnostics_by_severity(self : EdidAudit, severity : Severity) -> Array[EdidDiagnostic]pub(all) struct EdidDiagnostic {
code : DiagnosticCode
severity : Severity
message : String
offset : Int?
} derive(Eq, Debug)fn EdidDiagnostic::make(code : DiagnosticCode, severity : Severity, message : String, offset : Int?) -> EdidDiagnosticpub(all) struct ProfileCheck {
profile_name : String
status : AuditStatus
score : Int
minimum_mode_met : Bool
preferred_timing_met : Bool
interlaced_policy_met : Bool
extension_policy_met : Bool
} derive(Eq, Debug)pub(all) struct StandardTiming {
width : Int
height : Int
refresh_hz : Int
aspect : AspectRatio
byte_offset : Int
valid : Bool
} derive(Eq, Debug)pub(all) struct TimingCatalogEntry {
id : String
family : TimingFamily
width : Int
height : Int
refresh_millihz : Int
pixel_clock_khz : Int
progressive : Bool
aspect : String
name : String
} derive(Eq, Debug)pub(all) struct VideoInput {
signal : VideoSignal
interface_name : String
bit_depth : String
voltage : String
sync : String
} derive(Eq, Debug)fn sample_edid_hex() -> StringMoonBit EDID parser, checksum validator, display timing decoder, and monitor capability audit toolkit.