sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/watchdog/watchdog-apimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/watchdog/watchdog-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/watchdog/watchdog-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/watchdog/watchdog-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/watchdog/watchdog-apimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/watchdog/watchdog-apimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hThe Linux Watchdog driver APIh]hThe Linux Watchdog driver API}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/watchdog/watchdog-api.rsthKubh paragraph)}(hLast reviewed: 10/05/2007h]hLast reviewed: 10/05/2007}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h8Copyright 2002 Christer Weingel h](h!Copyright 2002 Christer Weingel <}(h!Copyright 2002 Christer Weingel }(h>hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hSome parts of this document are copied verbatim from the sbc60xxwdt driver which is (c) Copyright 2000 Jakob Oestergaard h](hzSome parts of this document are copied verbatim from the sbc60xxwdt driver which is (c) Copyright 2000 Jakob Oestergaard <}(hzSome parts of this document are copied verbatim from the sbc60xxwdt driver which is (c) Copyright 2000 Jakob Oestergaard }(hhhhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(h=This document describes the state of the Linux 2.4.18 kernel.h]h=This document describes the state of the Linux 2.4.18 kernel.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(h Introductionh]h Introduction}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hA Watchdog Timer (WDT) is a hardware circuit that can reset the computer system in case of a software fault. You probably knew that already.h]hA Watchdog Timer (WDT) is a hardware circuit that can reset the computer system in case of a software fault. You probably knew that already.}(hj1hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hXUsually a userspace daemon will notify the kernel watchdog driver via the /dev/watchdog special device file that userspace is still alive, at regular intervals. When such a notification occurs, the driver will usually tell the hardware watchdog that everything is in order, and that the watchdog should wait for yet another little while to reset the system. If userspace fails (RAM error, kernel bug, whatever), the notifications cease to occur, and the hardware watchdog will reset the system (causing a reboot) after the timeout occurs.h]hXUsually a userspace daemon will notify the kernel watchdog driver via the /dev/watchdog special device file that userspace is still alive, at regular intervals. When such a notification occurs, the driver will usually tell the hardware watchdog that everything is in order, and that the watchdog should wait for yet another little while to reset the system. If userspace fails (RAM error, kernel bug, whatever), the notifications cease to occur, and the hardware watchdog will reset the system (causing a reboot) after the timeout occurs.}(hj?hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hThe Linux watchdog API is a rather ad-hoc construction and different drivers implement different, and sometimes incompatible, parts of it. This file is an attempt to document the existing usage and allow future driver writers to use it as a reference.h]hThe Linux watchdog API is a rather ad-hoc construction and different drivers implement different, and sometimes incompatible, parts of it. This file is an attempt to document the existing usage and allow future driver writers to use it as a reference.}(hjMhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hThe simplest APIh]hThe simplest API}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahhhhhK&ubh)}(hXAll drivers support the basic mode of operation, where the watchdog activates as soon as /dev/watchdog is opened and will reboot unless the watchdog is pinged within a certain time, this time is called the timeout or margin. The simplest way to ping the watchdog is to write some data to the device. So a very simple watchdog daemon would look like this source file: see samples/watchdog/watchdog-simple.ch]hXAll drivers support the basic mode of operation, where the watchdog activates as soon as /dev/watchdog is opened and will reboot unless the watchdog is pinged within a certain time, this time is called the timeout or margin. The simplest way to ping the watchdog is to write some data to the device. So a very simple watchdog daemon would look like this source file: see samples/watchdog/watchdog-simple.c}(hjthjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK(hjahhubh)}(hA more advanced driver could for example check that a HTTP server is still responding before doing the write call to ping the watchdog.h]hA more advanced driver could for example check that a HTTP server is still responding before doing the write call to ping the watchdog.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hjahhubh)}(hXWhen the device is closed, the watchdog is disabled, unless the "Magic Close" feature is supported (see below). This is not always such a good idea, since if there is a bug in the watchdog daemon and it crashes the system will not reboot. Because of this, some of the drivers support the configuration option "Disable watchdog shutdown on close", CONFIG_WATCHDOG_NOWAYOUT. If it is set to Y when compiling the kernel, there is no way of disabling the watchdog once it has been started. So, if the watchdog daemon crashes, the system will reboot after the timeout has passed. Watchdog devices also usually support the nowayout module parameter so that this option can be controlled at runtime.h]hXWhen the device is closed, the watchdog is disabled, unless the “Magic Close” feature is supported (see below). This is not always such a good idea, since if there is a bug in the watchdog daemon and it crashes the system will not reboot. Because of this, some of the drivers support the configuration option “Disable watchdog shutdown on close”, CONFIG_WATCHDOG_NOWAYOUT. If it is set to Y when compiling the kernel, there is no way of disabling the watchdog once it has been started. So, if the watchdog daemon crashes, the system will reboot after the timeout has passed. Watchdog devices also usually support the nowayout module parameter so that this option can be controlled at runtime.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK2hjahhubeh}(h]the-simplest-apiah ]h"]the simplest apiah$]h&]uh1hhhhhhhhK&ubh)}(hhh](h)}(hMagic Close featureh]hMagic Close feature}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK?ubh)}(hXIf a driver supports "Magic Close", the driver will not disable the watchdog unless a specific magic character 'V' has been sent to /dev/watchdog just before closing the file. If the userspace daemon closes the file without sending this special character, the driver will assume that the daemon (and userspace in general) died, and will stop pinging the watchdog without disabling it first. This will then cause a reboot if the watchdog is not re-opened in sufficient time.h]hXIf a driver supports “Magic Close”, the driver will not disable the watchdog unless a specific magic character ‘V’ has been sent to /dev/watchdog just before closing the file. If the userspace daemon closes the file without sending this special character, the driver will assume that the daemon (and userspace in general) died, and will stop pinging the watchdog without disabling it first. This will then cause a reboot if the watchdog is not re-opened in sufficient time.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKAhjhhubeh}(h]magic-close-featureah ]h"]magic close featureah$]h&]uh1hhhhhhhhK?ubh)}(hhh](h)}(h The ioctl APIh]h The ioctl API}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKJubh)}(h1All conforming drivers also support an ioctl API.h]h1All conforming drivers also support an ioctl API.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjhhubh)}(h$Pinging the watchdog using an ioctl:h]h$Pinging the watchdog using an ioctl:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKNhjhhubh)}(hAll drivers that have an ioctl interface support at least one ioctl, KEEPALIVE. This ioctl does exactly the same thing as a write to the watchdog device, so the main loop in the above program could be replaced with::h]hAll drivers that have an ioctl interface support at least one ioctl, KEEPALIVE. This ioctl does exactly the same thing as a write to the watchdog device, so the main loop in the above program could be replaced with:}(hAll drivers that have an ioctl interface support at least one ioctl, KEEPALIVE. This ioctl does exactly the same thing as a write to the watchdog device, so the main loop in the above program could be replaced with:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKPhjhhubh literal_block)}(hGwhile (1) { ioctl(fd, WDIOC_KEEPALIVE, 0); sleep(10); }h]hGwhile (1) { ioctl(fd, WDIOC_KEEPALIVE, 0); sleep(10); }}(hhhj ubah}(h]h ]h"]h$]h&] xml:spacepreserveuh1jhhhKUhjhhubh)}(h%the argument to the ioctl is ignored.h]h%the argument to the ioctl is ignored.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKZhjhhubeh}(h] the-ioctl-apiah ]h"] the ioctl apiah$]h&]uh1hhhhhhhhKJubh)}(hhh](h)}(hSetting and getting the timeouth]hSetting and getting the timeout}(hj4hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hhhhhK]ubh)}(hXFor some drivers it is possible to modify the watchdog timeout on the fly with the SETTIMEOUT ioctl, those drivers have the WDIOF_SETTIMEOUT flag set in their option field. The argument is an integer representing the timeout in seconds. The driver returns the real timeout used in the same variable, and this timeout might differ from the requested one due to limitation of the hardware::h]hXFor some drivers it is possible to modify the watchdog timeout on the fly with the SETTIMEOUT ioctl, those drivers have the WDIOF_SETTIMEOUT flag set in their option field. The argument is an integer representing the timeout in seconds. The driver returns the real timeout used in the same variable, and this timeout might differ from the requested one due to limitation of the hardware:}(hXFor some drivers it is possible to modify the watchdog timeout on the fly with the SETTIMEOUT ioctl, those drivers have the WDIOF_SETTIMEOUT flag set in their option field. The argument is an integer representing the timeout in seconds. The driver returns the real timeout used in the same variable, and this timeout might differ from the requested one due to limitation of the hardware:hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK_hj/hhubj)}(hpint timeout = 45; ioctl(fd, WDIOC_SETTIMEOUT, &timeout); printf("The timeout was set to %d seconds\n", timeout);h]hpint timeout = 45; ioctl(fd, WDIOC_SETTIMEOUT, &timeout); printf("The timeout was set to %d seconds\n", timeout);}(hhhjOubah}(h]h ]h"]h$]h&]jjuh1jhhhKfhj/hhubh)}(hThis example might actually print "The timeout was set to 60 seconds" if the device has a granularity of minutes for its timeout.h]hThis example might actually print “The timeout was set to 60 seconds” if the device has a granularity of minutes for its timeout.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKjhj/hhubh)}(hoStarting with the Linux 2.4.18 kernel, it is possible to query the current timeout using the GETTIMEOUT ioctl::h]hnStarting with the Linux 2.4.18 kernel, it is possible to query the current timeout using the GETTIMEOUT ioctl:}(hnStarting with the Linux 2.4.18 kernel, it is possible to query the current timeout using the GETTIMEOUT ioctl:hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKmhj/hhubj)}(hZioctl(fd, WDIOC_GETTIMEOUT, &timeout); printf("The timeout was is %d seconds\n", timeout);h]hZioctl(fd, WDIOC_GETTIMEOUT, &timeout); printf("The timeout was is %d seconds\n", timeout);}(hhhjzubah}(h]h ]h"]h$]h&]jjuh1jhhhKphj/hhubeh}(h]setting-and-getting-the-timeoutah ]h"]setting and getting the timeoutah$]h&]uh1hhhhhhhhK]ubh)}(hhh](h)}(h Pretimeoutsh]h Pretimeouts}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKtubh)}(hXSome watchdog timers can be set to have a trigger go off before the actual time they will reset the system. This can be done with an NMI, interrupt, or other mechanism. This allows Linux to record useful information (like panic information and kernel coredumps) before it resets::h]hXSome watchdog timers can be set to have a trigger go off before the actual time they will reset the system. This can be done with an NMI, interrupt, or other mechanism. This allows Linux to record useful information (like panic information and kernel coredumps) before it resets:}(hXSome watchdog timers can be set to have a trigger go off before the actual time they will reset the system. This can be done with an NMI, interrupt, or other mechanism. This allows Linux to record useful information (like panic information and kernel coredumps) before it resets:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKvhjhhubj)}(h=pretimeout = 10; ioctl(fd, WDIOC_SETPRETIMEOUT, &pretimeout);h]h=pretimeout = 10; ioctl(fd, WDIOC_SETPRETIMEOUT, &pretimeout);}(hhhjubah}(h]h ]h"]h$]h&]jjuh1jhhhK|hjhhubh)}(hXENote that the pretimeout is the number of seconds before the time when the timeout will go off. It is not the number of seconds until the pretimeout. So, for instance, if you set the timeout to 60 seconds and the pretimeout to 10 seconds, the pretimeout will go off in 50 seconds. Setting a pretimeout to zero disables it.h]hXENote that the pretimeout is the number of seconds before the time when the timeout will go off. It is not the number of seconds until the pretimeout. So, for instance, if you set the timeout to 60 seconds and the pretimeout to 10 seconds, the pretimeout will go off in 50 seconds. Setting a pretimeout to zero disables it.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h9There is also a get function for getting the pretimeout::h]h8There is also a get function for getting the pretimeout:}(h8There is also a get function for getting the pretimeout:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h`ioctl(fd, WDIOC_GETPRETIMEOUT, &timeout); printf("The pretimeout was is %d seconds\n", timeout);h]h`ioctl(fd, WDIOC_GETPRETIMEOUT, &timeout); printf("The pretimeout was is %d seconds\n", timeout);}(hhhjubah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubh)}(h3Not all watchdog drivers will support a pretimeout.h]h3Not all watchdog drivers will support a pretimeout.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h] pretimeoutsah ]h"] pretimeoutsah$]h&]uh1hhhhhhhhKtubh)}(hhh](h)}(h'Get the number of seconds before rebooth]h'Get the number of seconds before reboot}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hSome watchdog drivers have the ability to report the remaining time before the system will reboot. The WDIOC_GETTIMELEFT is the ioctl that returns the number of seconds before reboot::h]hSome watchdog drivers have the ability to report the remaining time before the system will reboot. The WDIOC_GETTIMELEFT is the ioctl that returns the number of seconds before reboot:}(hSome watchdog drivers have the ability to report the remaining time before the system will reboot. The WDIOC_GETTIMELEFT is the ioctl that returns the number of seconds before reboot:hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(h]ioctl(fd, WDIOC_GETTIMELEFT, &timeleft); printf("The timeout was is %d seconds\n", timeleft);h]h]ioctl(fd, WDIOC_GETTIMELEFT, &timeleft); printf("The timeout was is %d seconds\n", timeleft);}(hhhjubah}(h]h ]h"]h$]h&]jjuh1jhhhKhjhhubeh}(h]'get-the-number-of-seconds-before-rebootah ]h"]'get the number of seconds before rebootah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hEnvironmental monitoringh]hEnvironmental monitoring}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hhhhhKubh)}(hXAll watchdog drivers are required return more information about the system, some do temperature, fan and power level monitoring, some can tell you the reason for the last reboot of the system. The GETSUPPORT ioctl is available to ask what the device can do::h]hXAll watchdog drivers are required return more information about the system, some do temperature, fan and power level monitoring, some can tell you the reason for the last reboot of the system. The GETSUPPORT ioctl is available to ask what the device can do:}(hXAll watchdog drivers are required return more information about the system, some do temperature, fan and power level monitoring, some can tell you the reason for the last reboot of the system. The GETSUPPORT ioctl is available to ask what the device can do:hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubj)}(h@struct watchdog_info ident; ioctl(fd, WDIOC_GETSUPPORT, &ident);h]h@struct watchdog_info ident; ioctl(fd, WDIOC_GETSUPPORT, &ident);}(hhhjUubah}(h]h ]h"]h$]h&]jjuh1jhhhKhj5hhubh)}(h,the fields returned in the ident struct are:h]h,the fields returned in the ident struct are:}(hjehjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubh block_quote)}(hhh]htable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhj}ubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK-uh1jhj}ubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(hidentityh]hidentity}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h(a string identifying the watchdog driverh]h(a string identifying the watchdog driver}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hfirmware_versionh]hfirmware_version}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h-the firmware version of the card if availableh]h-the firmware version of the card if available}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hoptionsh]hoptions}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h+a flags describing what the device supportsh]h+a flags describing what the device supports}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]colsKuh1j{hjxubah}(h]h ]h"]h$]h&]uh1jvhjsubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(hthe options field can have the following bits set, and describes what kind of information that the GET_STATUS and GET_BOOT_STATUS ioctls can return.h]hthe options field can have the following bits set, and describes what kind of information that the GET_STATUS and GET_BOOT_STATUS ioctls can return.}(hj_hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjqubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjqubj)}(hhh]j)}(hhh](j)}(hhh]h)}(hWDIOF_OVERHEATh]hWDIOF_OVERHEAT}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hReset due to CPU overheath]hReset due to CPU overheat}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]colsKuh1j{hjnubah}(h]h ]h"]h$]h&]uh1jvhjkubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(hUThe machine was last rebooted by the watchdog because the thermal limit was exceeded:h]hUThe machine was last rebooted by the watchdog because the thermal limit was exceeded:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj)}(hhh]j)}(hhh](j)}(hhh]h)}(hWDIOF_FANFAULTh]hWDIOF_FANFAULT}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Fan failedh]h Fan failed}(hj(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj#ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j{hjubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(h6A system fan monitored by the watchdog card has failedh]h6A system fan monitored by the watchdog card has failed}(hj[hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjmubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjmubj)}(hhh]j)}(hhh](j)}(hhh]h)}(h WDIOF_EXTERN1h]h WDIOF_EXTERN1}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hExternal relay 1h]hExternal relay 1}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]colsKuh1j{hjjubah}(h]h ]h"]h$]h&]uh1jvhjgubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(hExternal monitoring relay/source 1 was triggered. Controllers intended for real world applications include external monitoring pins that will trigger a reset.h]hExternal monitoring relay/source 1 was triggered. Controllers intended for real world applications include external monitoring pins that will trigger a reset.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]j)}(hhh](j)}(hhh]h)}(h WDIOF_EXTERN2h]h WDIOF_EXTERN2}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hExternal relay 2h]hExternal relay 2}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j{hjubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(h0External monitoring relay/source 2 was triggeredh]h0External monitoring relay/source 2 was triggered}(hjWhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjiubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjiubj)}(hhh]j)}(hhh](j)}(hhh]h)}(hWDIOF_POWERUNDERh]hWDIOF_POWERUNDER}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hPower bad/power faulth]hPower bad/power fault}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]colsKuh1j{hjfubah}(h]h ]h"]h$]h&]uh1jvhjcubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(h-The machine is showing an undervoltage statush]h-The machine is showing an undervoltage status}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]j)}(hhh](j)}(hhh]h)}(hWDIOF_CARDRESETh]hWDIOF_CARDRESET}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hCard previously reset the CPUh]hCard previously reset the CPU}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j{hjubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(h/The last reboot was caused by the watchdog cardh]h/The last reboot was caused by the watchdog card}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjeubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjeubj)}(hhh]j)}(hhh](j)}(hhh]h)}(hWDIOF_POWEROVERh]hWDIOF_POWEROVER}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hPower over voltageh]hPower over voltage}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj|ubah}(h]h ]h"]h$]h&]uh1jhjeubeh}(h]h ]h"]h$]h&]colsKuh1j{hjbubah}(h]h ]h"]h$]h&]uh1jvhj_ubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(hThe machine is showing an overvoltage status. Note that if one level is under and one over both bits will be set - this may seem odd but makes sense.h]hThe machine is showing an overvoltage status. Note that if one level is under and one over both bits will be set - this may seem odd but makes sense.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5hhubjr)}(hhh]jw)}(hhh]j|)}(hhh](j)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1jhjubj)}(hhh]j)}(hhh](j)}(hhh]h)}(hWDIOF_KEEPALIVEPINGh]hWDIOF_KEEPALIVEPING}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hKeep alive ping replyh]hKeep alive ping reply}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]colsKuh1j{hjubah}(h]h ]h"]h$]h&]uh1jvhjubah}(h]h ]h"]h$]h&]uh1jqhj5hhhhhNubh)}(h