Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ user = []
dumbbuffer = []

[build-dependencies]
gcc = "0.3.32"
bindgen = "0.19.0"
cc = "1.0"
bindgen = "0.65.1"

[dependencies]
libc = "0.2.15"
Expand Down
25 changes: 17 additions & 8 deletions build.rs
Original file line number Diff line number Diff line change
@@ -1,21 +1,30 @@
extern crate gcc;
extern crate bindgen;

use std::path::PathBuf;
use std::env;

// Compile and link to the drm-shim
fn compile_drm_shim() {
gcc::Config::new()
cc::Build::new()
.file("src/ffi/cc/drm_shim.c")
.debug(false)
.compile("libffi.a");
}

// Generate rust bindings to access drm structs
fn generate_shim_bindings() {
let builder = bindgen::Builder::new("src/ffi/cc/drm_shim.c");
match builder.generate() {
Ok(b) => b.write_to_file("src/ffi/drm_shim.rs").unwrap(),
Err(e) => panic!(e)
};
let bindings = bindgen::Builder::default()
.header("src/ffi/cc/drm_shim.c")
.generate()
// Unwrap the Result and panic on failure.
.expect("Unable to generate bindings");

// let out_path = PathBuf::from(env::var("OUT_DIR").unwrap());
// bindings
// .write_to_file(out_path.join("drm_shim.rs"))
// .expect("Couldn't write bindings!");
bindings
.write_to_file("src/ffi/drm_shim.rs")
.expect("Couldn't write bindings!");
}

pub fn main() {
Expand Down
40 changes: 20 additions & 20 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -404,35 +404,35 @@ impl<'a> Connectors<'a> {
#[derive(Debug, PartialEq, Clone, Copy)]
/// The type of interface a `Connector` is.
pub enum ConnectorInterface {
Unknown = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_Unknown as isize,
VGA = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_VGA as isize,
DVII = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_DVII as isize,
DVID = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_DVID as isize,
DVIA = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_DVIA as isize,
Composite = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_Composite as isize,
SVideo = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_SVIDEO as isize,
LVDS = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_LVDS as isize,
Component = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_Component as isize,
NinePinDIN = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_9PinDIN as isize,
DisplayPort = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_DisplayPort as isize,
HDMIA = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_HDMIA as isize,
HDMIB = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_HDMIB as isize,
TV = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_TV as isize,
EDP = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_eDP as isize,
Virtual = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_VIRTUAL as isize,
DSI = ffi::ConnectorInterface::FFI_DRM_MODE_CONNECTOR_DSI as isize,
Unknown = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_Unknown as isize,
VGA = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_VGA as isize,
DVII = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_DVII as isize,
DVID = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_DVID as isize,
DVIA = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_DVIA as isize,
Composite = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_Composite as isize,
SVideo = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_SVIDEO as isize,
LVDS = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_LVDS as isize,
Component = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_Component as isize,
NinePinDIN = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_9PinDIN as isize,
DisplayPort = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_DisplayPort as isize,
HDMIA = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_HDMIA as isize,
HDMIB = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_HDMIB as isize,
TV = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_TV as isize,
EDP = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_eDP as isize,
Virtual = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_VIRTUAL as isize,
DSI = ffi::ConnectorInterface_FFI_DRM_MODE_CONNECTOR_DSI as isize,
}

#[derive(Debug, PartialEq, Clone, Copy)]
/// The state of a `Connector`.
pub enum ConnectorState {
/// The `Connector` is plugged in and ready for use.
Connected = ffi::Connection::FFI_DRM_MODE_CONNECTED as isize,
Connected = ffi::Connection_FFI_DRM_MODE_CONNECTED as isize,
/// The `Connector` is unplugged.
Disconnected = ffi::Connection::FFI_DRM_MODE_DISCONNECTED as isize,
Disconnected = ffi::Connection_FFI_DRM_MODE_DISCONNECTED as isize,
/// Sometimes a `Connector` will have an unkown state. It is safe to use,
/// but may not provide the expected functionality.
Unknown = ffi::Connection::FFI_DRM_MODE_UNKNOWN as isize
Unknown = ffi::Connection_FFI_DRM_MODE_UNKNOWN as isize
}

impl From<u32> for ConnectorInterface {
Expand Down