sphinx.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)}(hThe following failure codes are valid for a permanent failure:h]h>The following failure codes are valid for a permanent failure:}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj$hhubjD)}(hb- fuse blown (``0x0``) - cell imbalance (``0x1``) - overvoltage (``0x2``) - fet failure (``0x3``) h]j)}(hhh](j)}(hfuse blown (``0x0``)h]h)}(hjIh](h fuse blown (}(hjKhhhNhNubj)}(h``0x0``h]h0x0}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubh)}(hjKhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjGubah}(h]h ]h"]h$]h&]uh1jhjDubj)}(hcell imbalance (``0x1``)h]h)}(hjrh](hcell imbalance (}(hjthhhNhNubj)}(h``0x1``h]h0x1}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubh)}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjpubah}(h]h ]h"]h$]h&]uh1jhjDubj)}(hovervoltage (``0x2``)h]h)}(hjh](h overvoltage (}(hjhhhNhNubj)}(h``0x2``h]h0x2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjDubj)}(hfet failure (``0x3``) h]h)}(hfet failure (``0x3``)h](h fet failure (}(hjhhhNhNubj)}(h``0x3``h]h0x3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhj@ubah}(h]h ]h"]h$]h&]uh1jChhhKhj$hhubh)}(heThe last two bits of the failure code are to be ignored when the battery signals a permanent failure.h]heThe last two bits of the failure code are to be ignored when the battery signals a permanent failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj$hhubh)}(h;The following failure codes a valid for a overheat failure:h]h;The following failure codes a valid for a overheat failure:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj$hhubjD)}(hw- overheat at start of charging (``0x5``) - overheat during charging (``0x7``) - overheat during discharging (``0x8``) h]j)}(hhh](j)}(h'overheat at start of charging (``0x5``)h]h)}(hjh](hoverheat at start of charging (}(hjhhhNhNubj)}(h``0x5``h]h0x5}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h"overheat during charging (``0x7``)h]h)}(hjFh](hoverheat during charging (}(hjHhhhNhNubj)}(h``0x7``h]h0x7}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubh)}(hjHhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjDubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h&overheat during discharging (``0x8``) h]h)}(h%overheat during discharging (``0x8``)h](hoverheat during discharging (}(hjqhhhNhNubj)}(h``0x8``h]h0x8}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh)}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjmubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jChhhKhj$hhubh)}(h@The following failure codes are valid for a overcurrent failure:h]h@The following failure codes are valid for a overcurrent failure:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj$hhubjD)}(hS- overcurrent during charging (``0x6``) - overcurrent during discharging (``0xb``) h]j)}(hhh](j)}(h%overcurrent during charging (``0x6``)h]h)}(hjh](hovercurrent during charging (}(hjhhhNhNubj)}(h``0x6``h]h0x6}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h)overcurrent during discharging (``0xb``) h]h)}(h(overcurrent during discharging (``0xb``)h](h overcurrent during discharging (}(hjhhhNhNubj)}(h``0xb``h]h0xb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1jChhhKhj$hhubeh}(h]#wmi-method-batterymanufactureaccessah ]h"]%wmi method batterymanufactureaccess()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h)WMI method BatteryRelativeStateOfCharge()h]h)WMI method BatteryRelativeStateOfCharge()}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(h9Returns the capacity of the battery in percent as an u16.h]h9Returns the capacity of the battery in percent as an u16.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]'wmi-method-batteryrelativestateofchargeah ]h"])wmi method batteryrelativestateofcharge()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryCycleCount()h]hWMI method BatteryCycleCount()}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhhhhKubh)}(h1Returns the cycle count of the battery as an u16.h]h1Returns the cycle count of the battery as an u16.}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFhhubeh}(h]wmi-method-batterycyclecountah ]h"]wmi method batterycyclecount()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method BatteryePPID()h]hWMI method BatteryePPID()}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjmhhhhhKubh)}(h4Returns the ePPID of the battery as an ASCII string.h]h4Returns the ePPID of the battery as an ASCII string.}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjmhhubeh}(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)}(hjh](j)}(h``0x1``h]h0x1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh: Interface not supported}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``0xfffffffe``: Error/Timeout h]h)}(h``0xfffffffe``: Error/Timeouth](j)}(h``0xfffffffe``h]h 0xfffffffe}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh: Error/Timeout}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjhhubhnote)}(h4The meaning of this method is still largely unknown.h]h)}(hj0 h]h4The meaning of this method is still largely unknown.}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj. ubah}(h]h ]h"]h$]h&]uh1j, hjhhhhhNubeh}(h]$wmi-method-batteryerawanalyticsstartah ]h"]&wmi method batteryerawanalyticsstart()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h!WMI method BatteryeRawAnalytics()h]h!WMI method BatteryeRawAnalytics()}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hhhhhKubh)}(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:}(hj^ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjM hhubj)}(hhh](j)}(h#a block number starting with 0 (u8)h]h)}(hjq h]h#a block number starting with 0 (u8)}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjo ubah}(h]h ]h"]h$]h&]uh1jhjl hhhhhNubj)}(h31 bytes of unknown data h]h)}(h31 bytes of unknown datah]h31 bytes of unknown data}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjl hhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjM hhubj- )}(h4The meaning of this method is still largely unknown.h]h)}(hj h]h4The meaning of this method is still largely unknown.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1j, hjM hhhhhNubeh}(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&]uh1hhj hhhhhKubh)}(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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]wmi-method-batterydesignvoltageah ]h"]!wmi method batterydesignvoltage()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h'WMI method BatteryeRawAnalyticsABlock()h]h'WMI method BatteryeRawAnalyticsABlock()}(hj hhhNhNubah}(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)}(hj h]h(Supported since WMI interface version 3!}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhhhKhj hhubj- )}(h4The meaning of this method is still largely unknown.h]h)}(hj$ h]h4The meaning of this method is still largely unknown.}(hj& hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj" ubah}(h]h ]h"]h$]h&]uh1j, hj hhhhhNubeh}(h]%wmi-method-batteryerawanalyticsablockah ]h"]'wmi method batteryerawanalyticsablock()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(hWMI method ReturnVersion()h]hWMI method ReturnVersion()}(hjD hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA hhhhhKubh)}(h,Returns the WMI interface version as an u32.h]h,Returns the WMI interface version as an u32.}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjA hhubeh}(h]wmi-method-returnversionah ]h"]wmi method returnversion()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h!WMI method FanSensorInformation()h]h!WMI method FanSensorInformation()}(hjk hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh hhhhhKubh)}(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 }(hjy hhhNhNubj)}(h``0xff``h]h0xff}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy ubh. Those entries contain:}(hjy hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjh hhubj)}(hhh](j)}(h fan type (u8)h]h)}(hj h]h fan type (u8)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(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)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhKhjh hhubeh}(h]wmi-method-fansensorinformationah ]h"]!wmi method fansensorinformation()ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h%WMI method ThermalSensorInformation()h]h%WMI method ThermalSensorInformation()}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh. Those entries contain:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhj hhubj)}(hhh](j)}(hthermal type (u8)h]h)}(hj h]hthermal type (u8)}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hcurrent temperature (s8)h]h)}(hj& h]hcurrent temperature (s8)}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj$ ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hmin. temperature (s8)h]h)}(hj= h]hmin. temperature (s8)}(hj? hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hj; ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hmax. temperature (s8)h]h)}(hjT h]hmax. temperature (s8)}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjR ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hunknown field (u8) h]h)}(hunknown field (u8)h]hunknown field (u8)}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hji ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]jj7uh1jhhhM hj hhubj- )}(h4TODO: Find out what the meaning of the last byte is.h]h)}(hj h]h4TODO: Find out what the meaning of the last byte is.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj ubah}(h]h ]h"]h$]h&]uh1j, hj hhhhhNubeh}(h]#wmi-method-thermalsensorinformationah ]h"]%wmi method thermalsensorinformation()ah$]h&]uh1hhjhhhhhMubeh}(h]wmi-interface-descriptionah ]h"]wmi interface descriptionah$]h&]uh1hhhhhhhhK-ubh)}(hhh](h)}(hACPI battery matching algorithmh]hACPI battery matching algorithm}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhMubh)}(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&]uh1hhhhMhj hhubh)}(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&]uh1hhhhMhj hhubh)}(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&]uh1hhhhMhj hhubh)}(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&]uh1hhhhM!hj hhubeh}(h]acpi-battery-matching-algorithmah ]h"]acpi battery matching algorithmah$]h&]uh1hhhhhhhhMubh)}(hhh](h)}(h)Reverse-Engineering the DDV WMI interfaceh]h)Reverse-Engineering the DDV WMI interface}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhM&ubhenumerated_list)}(hhh](j)}(h9Find a supported Dell notebook, usually made after ~2020.h]h)}(hj h]h9Find a supported Dell notebook, usually made after ~2020.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM(hj ubah}(h]h ]h"]h$]h&]uh1jhj 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”).}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM)hj, ubah}(h]h ]h"]h$]h&]uh1jhj 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 }(hj hhhNhNubj))}(h)`bugzilla `_h]hbugzilla}(hj hhhNhNubah}(h]h ]h"]h$]h&]namebugzillaj:https://bugzilla.kernel.orguh1j(hj ubj=)}(h h]h}(h]bugzillaah ]h"]bugzillaah$]h&]refurij/ uh1j<jKKhj ubh so they can be added to the }(hj hhhNhNubj)}(h``dell-wmi-ddv``h]h dell-wmi-ddv}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh driver.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhM:hj hhubh)}(hKSee Documentation/admin-guide/reporting-issues.rst for further information.h]hKSee Documentation/admin-guide/reporting-issues.rst for further information.}(hjY hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM?hj hhubeh}(h])reverse-engineering-the-ddv-wmi-interfaceah ]h"])reverse-engineering the ddv wmi interfaceah$]h&]uh1hhhhhhhhM&ubeh}(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}(jt jq jQjNjjjGjDjxjuj j jjjxjujjjjj=j:jdjajjjjjjj!jjjjCj@jjjgjjjJ jG j j j j j> j; je jb j j j j j j jl ji j9 j6 u nametypes}(jt jQjjGjxj jjxjjj=jdjjjj!jjCjjjjJ j j j> je j j j jl j9 uh}(jq hjNhjjTjDj>jujoj jjjjujTjj{jjj:jjaj@jjgjjjjjjjj$j@jjgjFjjmjG jj jM j j j; j jb jA j jh j j j j ji j j6 j0 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.