ddc-node-rs 2.0.0

DDC/CI high level library for Rust (cross platform)
Documentation
const {
  displayGetVcpFeature, displaySetVcpFeature, displaySetTableVcpFeature, displayManagerGetByIndex, displayManagerList
} = require('./ddc_node_rs.node')

class Display {
  constructor (data) {
    if (Number.isInteger(data)) {
      const index = data
      data = displayManagerGetByIndex(index)
    }
    this.index = data.index
    this.backend = data.backend
    if (Object.hasOwn(data, 'edidData')) this.edidData = data.edidData
    if (Object.hasOwn(data, 'version')) this.version = data.version
    if (Object.hasOwn(data, 'mccsVersion')) this.mccsVersion = data.mccsVersion
    this.displayId = data.displayId
    if (Object.hasOwn(data, 'serial')) this.serial = data.serial
    if (Object.hasOwn(data, 'serialNumber')) this.serialNumber = data.serialNumber
    if (Object.hasOwn(data, 'modelId')) this.modelId = data.modelId
    if (Object.hasOwn(data, 'modelName')) this.modelName = data.modelName
    if (Object.hasOwn(data, 'manufacturerId')) this.manufacturerId = data.manufacturerId
    if (Object.hasOwn(data, 'manufactureYear')) this.manufactureYear = data.manufactureYear
    if (Object.hasOwn(data, 'manufactureWeek')) this.manufactureWeek = data.manufactureWeek
  }

  getVcpFeature (featureCode) {
    return displayGetVcpFeature(this.index, featureCode)
  }

  setVcpFeature (featureCode, value) {
    displaySetVcpFeature(this.index, featureCode, value)
  }

  setTableVcpFeature (featureCode, data, offset) {
    displaySetTableVcpFeature(this.index, featureCode, data, offset)
  }
}

class DisplayManager {
  constructor (queries) {
    if (Array.isArray(queries)) {
      this._queries = queries
    } else if (queries === undefined || queries === null) {
      this._queries = []
    } else {
      this._queries = [queries]
    }
  }

  get queries () {
    return this._queries
  }

  set queries (queries) {
    this._queries = queries
  }

  addQueries (queries) {
    let newQueries
    if (Array.isArray(queries)) {
      newQueries = queries
    } else if (queries === undefined || queries === null) {
      newQueries = []
    } else {
      newQueries = [queries]
    }
    this.queries = this.queries + newQueries
    return this
  }

  static getByIndex (index) {
    const display = displayManagerGetByIndex(index)
    return new Display(display)
  }

  collect () {
    return displayManagerList(this.queries).map(display => new Display(display))
  }

  list = this.collect
}

const VCPFeatures = {
  PresetOperation: {
    CodePage: 0x00,
    RestoreFactoryColorDefaults: 0x08,
    RestoreFactoryDefaults: 0x04,
    RestoreFactoryGeometryDefaults: 0x06,
    RestoreFactoryLuminanceContrastDefaults: 0x05,
    RestoreFactoryTvDefaults: 0x0a,
    SaveRestoreSettings: 0xb0
  },
  ImageAdjustment: {
    SixAxisHueControlBlue: 0x9f,
    SixAxisHueControlCyan: 0x9e,
    SixAxisHueControlGreen: 0x9d,
    SixAxisHueControlMagenta: 0xa0,
    SixAxisHueControlRed: 0x9b,
    SixAxisHueControlYellow: 0x9c,
    SixAxisSaturationControlBlue: 0x5d,
    SixAxisSaturationControlCyan: 0x5c,
    SixAxisSaturationControlGreen: 0x5b,
    SixAxisSaturationControlMagenta: 0x5e,
    SixAxisSaturationControlRed: 0x59,
    SixAxisSaturationControlYellow: 0x5a,
    AdjustZoom: 0x7c,
    AutoColorSetup: 0x1f,
    AutoSetup: 0x1e,
    AutoSetupOnOff: 0xa2,
    BacklightControl: 0x13,
    BacklightLevelBlue: 0x71,
    BacklightLevelGreen: 0x6f,
    BacklightLevelRed: 0x6d,
    BacklightLevelWhite: 0x6b,
    BlockLutOperation: 0x75,
    Clock: 0x0e,
    ClockPhase: 0x3e,
    ColorSaturation: 0x8a,
    ColorTemperatureIncrement: 0x0b,
    ColorTemperatureRequest: 0x0c,
    Contrast: 0x12,
    DisplayApplication: 0xdc,
    FleshToneEnhancement: 0x11,
    Focus: 0x1c,
    Gamma: 0x72,
    GrayScaleExpansion: 0x2e,
    HorizontalMoire: 0x56,
    Hue: 0x90,
    Luminance: 0x10,
    LutSize: 0x73,
    ScreenOrientation: 0xaa,
    SelectColorPreset: 0x14,
    Sharpness: 0x87,
    SinglePointLutOperation: 0x74,
    StereoVideoMode: 0xd4,
    TvBlackLevelLuminance: 0x92,
    TvContrast: 0x8e,
    TvSharpness: 0x8c,
    UserColorVisionCompensation: 0x17,
    VelocityScanModulation: 0x88,
    VerticalMoire: 0x58,
    VideoBlackLevelBlue: 0x70,
    VideoBlackLevelGreen: 0x6e,
    VideoBlackLevelRed: 0x6c,
    VideoGainBlue: 0x1a,
    VideoGainGreen: 0x18,
    VideoGainRed: 0x16,
    WindowBackground: 0x9a,
    WindowControlOnOff: 0xa4,
    WindowSelect: 0xa5,
    WindowSize: 0xa6,
    WindowTransparency: 0xa7
  },

  DisplayControl: {
    DisplayControllerId: 0xc8,
    DisplayFirmwareLevel: 0xc9,
    DisplayUsageTime: 0xc6,
    HorizontalFrequency: 0xac,
    ImageMode: 0xdb,
    OsdButtonLevelControl: 0xca,
    OsdLanguage: 0xcc,
    PowerMode: 0xd6,
    SourceColorCoding: 0xb5,
    SourceTimingMode: 0xb4,
    Version: 0xdf,
    VerticalFrequency: 0xae
  },

  Geometry: {
    BottomCornerFlare: 0x4a,
    BottomCornerHook: 0x4c,
    DisplayScaling: 0x86,
    HorizontalConvergenceMG: 0x29,
    HorizontalConvergenceRB: 0x28,
    HorizontalKeystone: 0x42,
    HorizontalLinearity: 0x2a,
    HorizontalLinearityBalance: 0x2c,
    HorizontalMirror: 0x82,
    HorizontalParallelogram: 0x40,
    HorizontalPincushion: 0x24,
    HorizontalPincushionBalance: 0x26,
    HorizontalPosition: 0x20,
    HorizontalSize: 0x22,
    Rotation: 0x44,
    ScanMode: 0xda,
    TopCornerFlare: 0x46,
    TopCornerHook: 0x48,
    VerticalConvergenceMG: 0x39,
    VerticalConvergenceRB: 0x38,
    VerticalKeystone: 0x43,
    VerticalLinearity: 0x3a,
    VerticalLinearityBalance: 0x3c,
    VerticalMirror: 0x84,
    VerticalParallelogram: 0x41,
    VerticalPincushion: 0x34,
    VerticalPincushionBalance: 0x36,
    VerticalPosition: 0x30,
    VerticalSize: 0x32,
    WindowPositionBrX: 0x97,
    WindowPositionBrY: 0x98,
    WindowPositionTlX: 0x95,
    WindowPositionTlY: 0x96
  },

  Miscellaneous: {
    ActiveControl: 0x52,
    AmbientLightSensor: 0x66,
    ApplicationEnableKey: 0xc6,
    AssetTag: 0xd2,
    AuxiliaryDisplayData: 0xcf,
    AuxiliaryDisplaySize: 0xce,
    AuxiliaryPowerOutput: 0xd7,
    Degauss: 0x01,
    DisplayDescriptorLength: 0xc2,
    DisplayIdentificationDataOperation: 0x87,
    DisplayTechnologyType: 0xb6,
    EnableDisplayOfDisplayDescriptor: 0xc4,
    FlatPanelSubPixelLayout: 0xb2,
    InputSource: 0x60,
    NewControlValue: 0x02,
    OutputSelect: 0xd0,
    PerformancePreservation: 0x54,
    RemoteProcedureCall: 0x76,
    ScratchPad: 0xde,
    SoftControls: 0x03,
    StatusIndicators: 0xcd,
    TransmitDisplayDescriptor: 0xc3,
    TvChannelUpDown: 0x8b
  },

  Audio: {
    AudioBalanceLR: 0x93,
    AudioBass: 0x91,
    AudioJackConnectionStatus: 0x65,
    AudioMicrophoneVolume: 0x64,
    AudioMute: 0x8d,
    AudioProcessorMode: 0x94,
    AudioSpeakerSelect: 0x63,
    AudioSpeakerVolume: 0x62,
    AudioTreble: 0x8f
  },

  DigitalPacketVideoLink: {
    BodyCrcErrorCount: 0xbc,
    ClientId: 0xbd,
    HeaderErrorCount: 0xbb,
    LinkControl: 0xbe,
    MonitorStatus: 0xb7,
    MonitorXOrigin: 0xb9,
    MonitorYOrigin: 0xba,
    PacketCount: 0xb8
  }
}

module.exports = {
  Display,
  DisplayManager,
  VCPFeatures
}