Skip to content
This repository was archived by the owner on Oct 11, 2020. It is now read-only.

Commit 46419a5

Browse files
committed
Add very basic parser for header and display
0 parents  commit 46419a5

File tree

3 files changed

+67
-0
lines changed

3 files changed

+67
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/target/
2+
**/*.rs.bk
3+
Cargo.lock

Cargo.toml

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[package]
2+
name = "edid"
3+
version = "0.1.0"
4+
authors = ["emersion"]
5+
6+
[dependencies]
7+
nom = "3.2.0"

src/lib.rs

+57
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#[macro_use]
2+
extern crate nom;
3+
4+
use nom::{le_u8, le_u16, le_u32};
5+
6+
#[derive(Debug, PartialEq)]
7+
struct Header {
8+
vendor: u16,
9+
product: u16,
10+
serial: u32,
11+
version: u8,
12+
revision: u8,
13+
}
14+
15+
named!(header<&[u8], Header>, do_parse!(
16+
tag!(&[0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00][..])
17+
>> vendor: le_u16
18+
>> product: le_u16
19+
>> serial: le_u32
20+
>> le_u8 // week
21+
>> le_u8 // year
22+
>> version: le_u8
23+
>> revision: le_u8
24+
>> (Header{vendor, product, serial, version, revision})
25+
));
26+
27+
#[derive(Debug, PartialEq)]
28+
struct Display {
29+
video_input: u8,
30+
width: u8, // cm
31+
height: u8, // cm
32+
gamma: u8, // datavalue = (gamma*100)-100 (range 1.00–3.54)
33+
features: u8,
34+
}
35+
36+
named!(display<&[u8], Display>, do_parse!(
37+
video_input: le_u8
38+
>> width: le_u8
39+
>> height: le_u8
40+
>> gamma: le_u8
41+
>> features: le_u8
42+
>> (Display{video_input, width, height, gamma, features})
43+
));
44+
45+
named!(edid<&[u8], (Header, Display)>, tuple!(header, display));
46+
47+
#[cfg(test)]
48+
mod tests {
49+
use super::*;
50+
51+
#[test]
52+
fn test_host() {
53+
let d = include_bytes!("/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-VGA-1/edid");
54+
let r = edid(d).unwrap();
55+
println!("{:?}", r);
56+
}
57+
}

0 commit comments

Comments
 (0)