Ksphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget,/translations/zh_CN/wmi/devices/dell-wmi-ddvmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/zh_TW/wmi/devices/dell-wmi-ddvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/it_IT/wmi/devices/dell-wmi-ddvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ja_JP/wmi/devices/dell-wmi-ddvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/ko_KR/wmi/devices/dell-wmi-ddvmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget,/translations/sp_SP/wmi/devices/dell-wmi-ddvmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h)SPDX-License-Identifier: GPL-2.0-or-laterh]h)SPDX-License-Identifier: GPL-2.0-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhF/var/lib/git/docbuild/linux/Documentation/wmi/devices/dell-wmi-ddv.rsthKubhsection)}(hhh](htitle)}(h,Dell DDV WMI interface driver (dell-wmi-ddv)h]h,Dell DDV WMI interface driver (dell-wmi-ddv)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hMany Dell notebooks made after ~2020 support a WMI-based interface for retrieving various system data like battery temperature, ePPID, diagnostic data and fan/thermal sensor data.h]hMany Dell notebooks made after ~2020 support a WMI-based interface for retrieving various system data like battery temperature, ePPID, diagnostic data and fan/thermal sensor data.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hThis interface is likely used by the `Dell Data Vault` software on Windows, so it was called `DDV`. Currently the ``dell-wmi-ddv`` driver supports version 2 and 3 of the interface, with support for new interface versions easily added.h](h%This interface is likely used by the }(hhhhhNhNubhtitle_reference)}(h`Dell Data Vault`h]hDell Data Vault}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh' software on Windows, so it was called }(hhhhhNhNubh)}(h`DDV`h]hDDV}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubh. Currently the }(hhhhhNhNubhliteral)}(h``dell-wmi-ddv``h]h dell-wmi-ddv}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhubhh driver supports version 2 and 3 of the interface, with support for new interface versions easily added.}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhwarning)}(hThe interface is regarded as internal by Dell, so no vendor documentation is available. All knowledge was thus obtained by trial-and-error, please keep that in mind.h]h)}(hThe interface is regarded as internal by Dell, so no vendor documentation is available. All knowledge was thus obtained by trial-and-error, please keep that in mind.h]hThe interface is regarded as internal by Dell, so no vendor documentation is available. All knowledge was thus obtained by trial-and-error, please keep that in mind.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4ubah}(h]h ]h"]h$]h&]uh1j2hhhhhhhNubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h1Dell ePPID (electronic Piece Part Identification)h]h1Dell ePPID (electronic Piece Part Identification)}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThhhhhKubh)}(hThe Dell ePPID is used to uniquely identify components in Dell machines, including batteries. It has a form similar to `CC-PPPPPP-MMMMM-YMD-SSSS-FFF` and contains the following information:h](hwThe Dell ePPID is used to uniquely identify components in Dell machines, including batteries. It has a form similar to }(hjehhhNhNubh)}(h`CC-PPPPPP-MMMMM-YMD-SSSS-FFF`h]hCC-PPPPPP-MMMMM-YMD-SSSS-FFF}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeubh( and contains the following information:}(hjehhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjThhubh bullet_list)}(hhh](h list_item)}(hCountry code of origin (CC).h]h)}(hjh]hCountry code of origin (CC).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hEPart number with the first character being a filling number (PPPPPP).h]h)}(hjh]hEPart number with the first character being a filling number (PPPPPP).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h#Manufacture Identification (MMMMM).h]h)}(hjh]h#Manufacture Identification (MMMMM).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hXManufacturing Year/Month/Date (YMD) in base 36, with Y being the last digit of the year.h]h)}(hXManufacturing Year/Month/Date (YMD) in base 36, with Y being the last digit of the year.h]hXManufacturing Year/Month/Date (YMD) in base 36, with Y being the last digit of the year.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h#Manufacture Sequence Number (SSSS).h]h)}(hjh]h#Manufacture Sequence Number (SSSS).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h*Optional Firmware Version/Revision (FFF). h]h)}(h)Optional Firmware Version/Revision (FFF).h]h)Optional Firmware Version/Revision (FFF).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK$hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhKhjThhubh)}(hxThe `eppidtool `_ python utility can be used to decode and display this information.h](hThe }(hj hhhNhNubh reference)}(h1`eppidtool `_h]h eppidtool}(hj*hhhNhNubah}(h]h ]h"]h$]h&]name eppidtoolrefuri"https://pypi.org/project/eppidtooluh1j(hj ubhtarget)}(h% h]h}(h] eppidtoolah ]h"] eppidtoolah$]h&]refurij;uh1j< referencedKhj ubhC python utility can be used to decode and display this information.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK&hjThhubh)}(hAll information regarding the Dell ePPID was gathered using Dell support documentation and `this website `_.h](h[All information regarding the Dell ePPID was gathered using Dell support documentation and }(hjVhhhNhNubj))}(h;`this website `_h]h this website}(hj^hhhNhNubah}(h]h ]h"]h$]h&]name this websitej:)https://telcontar.net/KBK/Dell/date_codesuh1j(hjVubj=)}(h, h]h}(h] this-websiteah ]h"] this websiteah$]h&]refurijnuh1j<jKKhjVubh.}(hjVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK)hjThhubeh}(h]/dell-eppid-electronic-piece-part-identificationah ]h"]1dell eppid (electronic piece part identification)ah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hWMI interface descriptionh]hWMI interface description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK-ubh)}(hThe WMI interface description can be decoded from the embedded binary MOF (bmof) data using the `bmfdec `_ utility:h](h`The WMI interface description can be decoded from the embedded binary MOF (bmof) data using the }(hjhhhNhNubj))}(h*`bmfdec `_h]hbmfdec}(hjhhhNhNubah}(h]h ]h"]h$]h&]namebmfdecj:https://github.com/pali/bmfdecuh1j(hjubj=)}(h! h]h}(h]bmfdecah ]h"]bmfdecah$]h&]refurijuh1j<jKKhjubh utility:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK/hjhhubh literal_block)}(hX[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("WMI Function"), guid("{8A42EA14-4F2A-FD45-6422-0087F7A7E608}")] class DDVWmiMethodFunction { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(1), Implemented, read, write, Description("Return Battery Design Capacity.")] void BatteryDesignCapacity([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(2), Implemented, read, write, Description("Return Battery Full Charge Capacity.")] void BatteryFullChargeCapacity([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(3), Implemented, read, write, Description("Return Battery Manufacture Name.")] void BatteryManufactureName([in] uint32 arg2, [out] string argr); [WmiMethodId(4), Implemented, read, write, Description("Return Battery Manufacture Date.")] void BatteryManufactureDate([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(5), Implemented, read, write, Description("Return Battery Serial Number.")] void BatterySerialNumber([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(6), Implemented, read, write, Description("Return Battery Chemistry Value.")] void BatteryChemistryValue([in] uint32 arg2, [out] string argr); [WmiMethodId(7), Implemented, read, write, Description("Return Battery Temperature.")] void BatteryTemperature([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(8), Implemented, read, write, Description("Return Battery Current.")] void BatteryCurrent([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(9), Implemented, read, write, Description("Return Battery Voltage.")] void BatteryVoltage([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(10), Implemented, read, write, Description("Return Battery Manufacture Access(MA code).")] void BatteryManufactureAceess([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(11), Implemented, read, write, Description("Return Battery Relative State-Of-Charge.")] void BatteryRelativeStateOfCharge([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(12), Implemented, read, write, Description("Return Battery Cycle Count")] void BatteryCycleCount([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(13), Implemented, read, write, Description("Return Battery ePPID")] void BatteryePPID([in] uint32 arg2, [out] string argr); [WmiMethodId(14), Implemented, read, write, Description("Return Battery Raw Analytics Start")] void BatteryeRawAnalyticsStart([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(15), Implemented, read, write, Description("Return Battery Raw Analytics")] void BatteryeRawAnalytics([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); [WmiMethodId(16), Implemented, read, write, Description("Return Battery Design Voltage.")] void BatteryDesignVoltage([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(17), Implemented, read, write, Description("Return Battery Raw Analytics A Block")] void BatteryeRawAnalyticsABlock([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); [WmiMethodId(18), Implemented, read, write, Description("Return Version.")] void ReturnVersion([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(32), Implemented, read, write, Description("Return Fan Sensor Information")] void FanSensorInformation([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); [WmiMethodId(34), Implemented, read, write, Description("Return Thermal Sensor Information")] void ThermalSensorInformation([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); };h]hX[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("WMI Function"), guid("{8A42EA14-4F2A-FD45-6422-0087F7A7E608}")] class DDVWmiMethodFunction { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(1), Implemented, read, write, Description("Return Battery Design Capacity.")] void BatteryDesignCapacity([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(2), Implemented, read, write, Description("Return Battery Full Charge Capacity.")] void BatteryFullChargeCapacity([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(3), Implemented, read, write, Description("Return Battery Manufacture Name.")] void BatteryManufactureName([in] uint32 arg2, [out] string argr); [WmiMethodId(4), Implemented, read, write, Description("Return Battery Manufacture Date.")] void BatteryManufactureDate([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(5), Implemented, read, write, Description("Return Battery Serial Number.")] void BatterySerialNumber([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(6), Implemented, read, write, Description("Return Battery Chemistry Value.")] void BatteryChemistryValue([in] uint32 arg2, [out] string argr); [WmiMethodId(7), Implemented, read, write, Description("Return Battery Temperature.")] void BatteryTemperature([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(8), Implemented, read, write, Description("Return Battery Current.")] void BatteryCurrent([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(9), Implemented, read, write, Description("Return Battery Voltage.")] void BatteryVoltage([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(10), Implemented, read, write, Description("Return Battery Manufacture Access(MA code).")] void BatteryManufactureAceess([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(11), Implemented, read, write, Description("Return Battery Relative State-Of-Charge.")] void BatteryRelativeStateOfCharge([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(12), Implemented, read, write, Description("Return Battery Cycle Count")] void BatteryCycleCount([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(13), Implemented, read, write, Description("Return Battery ePPID")] void BatteryePPID([in] uint32 arg2, [out] string argr); [WmiMethodId(14), Implemented, read, write, Description("Return Battery Raw Analytics Start")] void BatteryeRawAnalyticsStart([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(15), Implemented, read, write, Description("Return Battery Raw Analytics")] void BatteryeRawAnalytics([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); [WmiMethodId(16), Implemented, read, write, Description("Return Battery Design Voltage.")] void BatteryDesignVoltage([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(17), Implemented, read, write, Description("Return Battery Raw Analytics A Block")] void BatteryeRawAnalyticsABlock([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); [WmiMethodId(18), Implemented, read, write, Description("Return Version.")] void ReturnVersion([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(32), Implemented, read, write, Description("Return Fan Sensor Information")] void FanSensorInformation([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); [WmiMethodId(34), Implemented, read, write, Description("Return Thermal Sensor Information")] void ThermalSensorInformation([in] uint32 arg2, [out] uint32 RawSize, [out, WmiSizeIs("RawSize") : ToInstance] uint8 RawData[]); };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK4hjhhubh)}(hXEach WMI method takes an ACPI buffer containing a 32-bit index as input argument, with the first 8 bit being used to specify the battery when using battery-related WMI methods. Other WMI methods may ignore this argument or interpret it differently. The WMI method output format varies:h]hXEach WMI method takes an ACPI buffer containing a 32-bit index as input argument, with the first 8 bit being used to specify the battery when using battery-related WMI methods. Other WMI methods may ignore this argument or interpret it differently. The WMI method output format varies:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjhhubj)}(hhh](j)}(hcif the function has only a single output, then an ACPI object of the corresponding type is returnedh]h)}(hcif the function has only a single output, then an ACPI object of the corresponding type is returnedh]hcif the function has only a single output, then an ACPI object of the corresponding type is returned}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hpif the function has multiple outputs, when an ACPI package containing the outputs in the same order is returned h]h)}(hoif the function has multiple outputs, when an ACPI package containing the outputs in the same order is returnedh]hoif the function has multiple outputs, when an ACPI package containing the outputs in the same order is returned}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKVhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1jhhhKThjhhubh)}(hxThe format of the output should be thoroughly checked, since many methods can return malformed data in case of an error.h]hxThe format of the output should be thoroughly checked, since many methods can return malformed data in case of an error.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhjhhubh)}(hThe data format of many battery-related methods seems to be based on the `Smart Battery Data Specification`, so unknown battery-related methods are likely to follow this standard in some way.h](hIThe data format of many battery-related methods seems to be based on the }(hj4hhhNhNubh)}(h"`Smart Battery Data Specification`h]h Smart Battery Data Specification}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubhT, so unknown battery-related methods are likely to follow this standard in some way.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK\hjhhubh)}(hhh](h)}(h%WMI method GetBatteryDesignCapacity()h]h%WMI method GetBatteryDesignCapacity()}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjThhhhhKaubh)}(hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhj:ubah}(h]h ]h"]h$]h&]uh1j8hjhhhhhNubeh}(h]!wmi-method-batterymanufacturedateah ]h"]#wmi method batterymanufacturedate()ah$]h&]uh1hhjhhhhhKpubh)}(hhh](h)}(h WMI method BatterySerialNumber()h]h WMI method BatterySerialNumber()}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYhhhhhK}ubh)}(h3Returns the serial number of the battery as an u16.h]h3Returns the serial number of the battery as an u16.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjYhhubeh}(h]wmi-method-batteryserialnumberah ]h"] wmi method batteryserialnumber()ah$]h&]uh1hhjhhhhhK}ubh)}(hhh](h)}(h"WMI method BatteryChemistryValue()h]h"WMI method BatteryChemistryValue()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hJReturns the chemistry of the battery as an ASCII string. Known values are:h]hJReturns the chemistry of the battery as an ASCII string. Known values are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh]j)}(h"Li-I" for Li-Ion h]h)}(h"Li-I" for Li-Ionh]h“Li-I” for Li-Ion}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubah}(h]h ]h"]h$]h&]jj7uh1jhhhKhjhhubeh}(h] wmi-method-batterychemistryvalueah ]h"]"wmi method batterychemistryvalue()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryTemperature()h]hWMI method BatteryTemperature()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hHReturns the temperature of the battery in tenth degree kelvin as an u16.h]hHReturns the temperature of the battery in tenth degree kelvin as an u16.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-batterytemperatureah ]h"]wmi method batterytemperature()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryCurrent()h]hWMI method BatteryCurrent()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h^Returns the current flow of the battery in mA as an s16. Negative values indicate discharging.h]h^Returns the current flow of the battery in mA as an s16. Negative values indicate discharging.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-batterycurrentah ]h"]wmi method batterycurrent()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryVoltage()h]hWMI method BatteryVoltage()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h8Returns the voltage flow of the battery in mV as an u16.h]h8Returns the voltage flow of the battery in mV as an u16.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-batteryvoltageah ]h"]wmi method batteryvoltage()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h%WMI method BatteryManufactureAccess()h]h%WMI method BatteryManufactureAccess()}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hhhhhKubh)}(h.Returns a manufacture-defined value as an u16.h]h.Returns a manufacture-defined value as an u16.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj=hhubeh}(h]#wmi-method-batterymanufactureaccessah ]h"]%wmi method batterymanufactureaccess()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h)WMI method BatteryRelativeStateOfCharge()h]h)WMI method BatteryRelativeStateOfCharge()}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhhhKubh)}(h9Returns the capacity of the battery in percent as an u16.h]h9Returns the capacity of the battery in percent as an u16.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjdhhubeh}(h]'wmi-method-batteryrelativestateofchargeah ]h"])wmi method batteryrelativestateofcharge()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryCycleCount()h]hWMI method BatteryCycleCount()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h1Returns the cycle count of the battery as an u16.h]h1Returns the cycle count of the battery as an u16.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-batterycyclecountah ]h"]wmi method batterycyclecount()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryePPID()h]hWMI method BatteryePPID()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h4Returns the ePPID of the battery as an ASCII string.h]h4Returns the ePPID of the battery as an ASCII string.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-batteryeppidah ]h"]wmi method batteryeppid()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h&WMI method BatteryeRawAnalyticsStart()h]h&WMI method BatteryeRawAnalyticsStart()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h>Performs an analysis of the battery and returns a status code:h]h>Performs an analysis of the battery and returns a status code:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h``0x0``: Successh]h)}(hjh](j)}(h``0x0``h]h0x0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh : Success}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h ``0x1``: Interface not supportedh]h)}(hj"h](j)}(h``0x1``h]h0x1}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubh: Interface not supported}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``0xfffffffe``: Error/Timeout h]h)}(h``0xfffffffe``: Error/Timeouth](j)}(h``0xfffffffe``h]h 0xfffffffe}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubh: Error/Timeout}(hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjEubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjhhubj9)}(h4The meaning of this method is still largely unknown.h]h)}(hjsh]h4The meaning of this method is still largely unknown.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjqubah}(h]h ]h"]h$]h&]uh1j8hjhhhhhNubeh}(h]$wmi-method-batteryerawanalyticsstartah ]h"]&wmi method batteryerawanalyticsstart()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h!WMI method BatteryeRawAnalytics()h]h!WMI method BatteryeRawAnalytics()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hVReturns a buffer usually containing 12 blocks of analytics data. Those blocks contain:h]hVReturns a buffer usually containing 12 blocks of analytics data. Those blocks contain:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h#a block number starting with 0 (u8)h]h)}(hjh]h#a block number starting with 0 (u8)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h31 bytes of unknown data h]h)}(h31 bytes of unknown datah]h31 bytes of unknown data}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjhhubj9)}(h4The meaning of this method is still largely unknown.h]h)}(hjh]h4The meaning of this method is still largely unknown.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j8hjhhhhhNubeh}(h]wmi-method-batteryerawanalyticsah ]h"]!wmi method batteryerawanalytics()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h!WMI method BatteryDesignVoltage()h]h!WMI method BatteryDesignVoltage()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h:Returns the design voltage of the battery in mV as an u16.h]h:Returns the design voltage of the battery in mV as an u16.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-batterydesignvoltageah ]h"]!wmi method batterydesignvoltage()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h'WMI method BatteryeRawAnalyticsABlock()h]h'WMI method BatteryeRawAnalyticsABlock()}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhKubh)}(hvReturns a single block of analytics data, with the second byte of the index being used for selecting the block number.h]hvReturns a single block of analytics data, with the second byte of the index being used for selecting the block number.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj-hhubh)}(h**Supported since WMI interface version 3!*h]hemphasis)}(hjNh]h(Supported since WMI interface version 3!}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jPhjLubah}(h]h ]h"]h$]h&]uh1hhhhKhj-hhubj9)}(h4The meaning of this method is still largely unknown.h]h)}(hjgh]h4The meaning of this method is still largely unknown.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjeubah}(h]h ]h"]h$]h&]uh1j8hj-hhhhhNubeh}(h]%wmi-method-batteryerawanalyticsablockah ]h"]'wmi method batteryerawanalyticsablock()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method ReturnVersion()h]hWMI method ReturnVersion()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h,Returns the WMI interface version as an u32.h]h,Returns the WMI interface version as an u32.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]wmi-method-returnversionah ]h"]wmi method returnversion()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h!WMI method FanSensorInformation()h]h!WMI method FanSensorInformation()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hiReturns a buffer containing fan sensor entries, terminated with a single ``0xff``. Those entries contain:h](hIReturns a buffer containing fan sensor entries, terminated with a single }(hjhhhNhNubj)}(h``0xff``h]h0xff}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh. Those entries contain:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(h fan type (u8)h]h)}(hjh]h fan type (u8)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h%fan speed in RPM (little endian u16) h]h)}(h$fan speed in RPM (little endian u16)h]h$fan speed in RPM (little endian u16)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjhhubeh}(h]wmi-method-fansensorinformationah ]h"]!wmi method fansensorinformation()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h%WMI method ThermalSensorInformation()h]h%WMI method ThermalSensorInformation()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hmReturns a buffer containing thermal sensor entries, terminated with a single ``0xff``. Those entries contain:h](hMReturns a buffer containing thermal sensor entries, terminated with a single }(hj-hhhNhNubj)}(h``0xff``h]h0xff}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh. Those entries contain:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](j)}(hthermal type (u8)h]h)}(hjRh]hthermal type (u8)}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjPubah}(h]h ]h"]h$]h&]uh1jhjMhhhhhNubj)}(hcurrent temperature (s8)h]h)}(hjih]hcurrent temperature (s8)}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjgubah}(h]h ]h"]h$]h&]uh1jhjMhhhhhNubj)}(hmin. temperature (s8)h]h)}(hjh]hmin. temperature (s8)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj~ubah}(h]h ]h"]h$]h&]uh1jhjMhhhhhNubj)}(hmax. temperature (s8)h]h)}(hjh]hmax. temperature (s8)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjMhhhhhNubj)}(hunknown field (u8) h]h)}(hunknown field (u8)h]hunknown field (u8)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjMhhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjhhubj9)}(h4TODO: Find out what the meaning of the last byte is.h]h)}(hjh]h4TODO: Find out what the meaning of the last byte is.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1j8hjhhhhhNubeh}(h]#wmi-method-thermalsensorinformationah ]h"]%wmi method thermalsensorinformation()ah$]h&]uh1hhjhhhhhKubeh}(h]wmi-interface-descriptionah ]h"]wmi interface descriptionah$]h&]uh1hhhhhhhhK-ubh)}(hhh](h)}(hACPI battery matching algorithmh]hACPI battery matching algorithm}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hThe algorithm used to match ACPI batteries to indices is based on information which was found inside the logging messages of the OEM software.h]hThe algorithm used to match ACPI batteries to indices is based on information which was found inside the logging messages of the OEM software.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXiBasically for each new ACPI battery, the serial numbers of the batteries behind indices 1 till 3 are compared with the serial number of the ACPI battery. Since the serial number of the ACPI battery can either be encoded as a normal integer or as a hexadecimal value, both cases need to be checked. The first index with a matching serial number is then selected.h]hXiBasically for each new ACPI battery, the serial numbers of the batteries behind indices 1 till 3 are compared with the serial number of the ACPI battery. Since the serial number of the ACPI battery can either be encoded as a normal integer or as a hexadecimal value, both cases need to be checked. The first index with a matching serial number is then selected.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hA serial number of 0 indicates that the corresponding index is not associated with an actual battery, or that the associated battery is not present.h]hA serial number of 0 indicates that the corresponding index is not associated with an actual battery, or that the associated battery is not present.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubh)}(hSome machines like the Dell Inspiron 3505 only support a single battery and thus ignore the battery index. Because of this the driver depends on the ACPI battery hook mechanism to discover batteries.h]hSome machines like the Dell Inspiron 3505 only support a single battery and thus ignore the battery index. Because of this the driver depends on the ACPI battery hook mechanism to discover batteries.}(hj, hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjhhubj9)}(hXThe ACPI battery matching algorithm currently used inside the driver is outdated and does not match the algorithm described above. The reasons for this are differences in the handling of the ToHexString() ACPI opcode between Linux and Windows, which distorts the serial number of ACPI batteries on many machines. Until this issue is resolved, the driver cannot use the above algorithm.h]h)}(hXThe ACPI battery matching algorithm currently used inside the driver is outdated and does not match the algorithm described above. The reasons for this are differences in the handling of the ToHexString() ACPI opcode between Linux and Windows, which distorts the serial number of ACPI batteries on many machines. Until this issue is resolved, the driver cannot use the above algorithm.h]hXThe ACPI battery matching algorithm currently used inside the driver is outdated and does not match the algorithm described above. The reasons for this are differences in the handling of the ToHexString() ACPI opcode between Linux and Windows, which distorts the serial number of ACPI batteries on many machines. Until this issue is resolved, the driver cannot use the above algorithm.}(hj> hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj: ubah}(h]h ]h"]h$]h&]uh1j8hjhhhhhNubeh}(h]acpi-battery-matching-algorithmah ]h"]acpi battery matching algorithmah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h)Reverse-Engineering the DDV WMI interfaceh]h)Reverse-Engineering the DDV WMI interface}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZ hhhhhMubhenumerated_list)}(hhh](j)}(h9Find a supported Dell notebook, usually made after ~2020.h]h)}(hjr h]h9Find a supported Dell notebook, usually made after ~2020.}(hjt hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjp ubah}(h]h ]h"]h$]h&]uh1jhjm hhhhhNubj)}(hKDump the ACPI tables and search for the WMI device (usually called "ADDV").h]h)}(hj h]hODump the ACPI tables and search for the WMI device (usually called “ADDV”).}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjm hhhhhNubj)}(h`_ so they can be added to the ``dell-wmi-ddv`` driver.h](hIn case the DDV WMI interface version available on your Dell notebook is not supported or you are seeing unknown fan/thermal sensors, please submit a bugreport on }(hjr hhhNhNubj))}(h)`bugzilla `_h]hbugzilla}(hjz hhhNhNubah}(h]h ]h"]h$]h&]namebugzillaj:https://bugzilla.kernel.orguh1j(hjr ubj=)}(h h]h}(h]bugzillaah ]h"]bugzillaah$]h&]refurij uh1j<jKKhjr ubh so they can be added to the }(hjr hhhNhNubj)}(h``dell-wmi-ddv``h]h dell-wmi-ddv}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr ubh driver.}(hjr hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM$hjZ hhubh)}(hKSee Documentation/admin-guide/reporting-issues.rst for further information.h]hKSee Documentation/admin-guide/reporting-issues.rst for further information.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hjZ hhubeh}(h])reverse-engineering-the-ddv-wmi-interfaceah ]h"])reverse-engineering the ddv wmi interfaceah$]h&]uh1hhhhhhhhMubeh}(h]*dell-ddv-wmi-interface-driver-dell-wmi-ddvah ]h"],dell ddv wmi interface driver (dell-wmi-ddv)ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j jQjNjjjGjDjxjujjjjjxjujjjjjVjSj}jzjjjjjjj:j7jaj^jjjjjjjjjjj*j'jj~jjjjjjjW jT j j j j u nametypes}(j jQjjGjxjjjxjjjVj}jjjj:jajjjjjj*jjjjjW j j uh}(j hjNhjjTjDj>jujojjjjjujTjj{jjjSjjzjYjjjjjjj7jj^j=jjdjjjjjjjjj'jj~j-jjjjjjjT jj jZ j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.