/* * (c) 2012 Juergen Beisert * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #include #include #include #include #include #include #include /* default timeout in [sec] */ static unsigned timeout = CONFIG_CMD_WD_DEFAULT_TIMOUT; static int do_wd(int argc, char *argv[]) { struct watchdog *wd = watchdog_get_default(); int opt; int rc; while ((opt = getopt(argc, argv, "d:")) > 0) { switch (opt) { case 'd': wd = watchdog_get_by_name(optarg); break; default: return COMMAND_ERROR_USAGE; } } if (optind < argc) { if (isdigit(*argv[optind])) { timeout = simple_strtoul(argv[optind], NULL, 0); } else { printf("numerical parameter expected\n"); return COMMAND_ERROR_USAGE; } } rc = watchdog_set_timeout(wd, timeout); if (rc < 0) { switch (rc) { case -EINVAL: printf("Timeout value out of range\n"); break; case -ENOSYS: printf("Watchdog cannot be disabled\n"); break; case -ENODEV: printf("Watchdog device doesn't exist.\n"); break; default: printf("Watchdog fails: '%s'\n", strerror(-rc)); break; } return COMMAND_ERROR; } return 0; } BAREBOX_CMD_HELP_START(wd) BAREBOX_CMD_HELP_TEXT("Enable the watchdog to bark in TIME seconds.") BAREBOX_CMD_HELP_TEXT("When TIME is 0, the watchdog gets disabled,") BAREBOX_CMD_HELP_TEXT("Without a parameter the watchdog will be re-triggered.") BAREBOX_CMD_HELP_TEXT("Options:") BAREBOX_CMD_HELP_OPT("-d DEVICE\t", "watchdog name (default is highest priority watchdog)") BAREBOX_CMD_HELP_END BAREBOX_CMD_START(wd) .cmd = do_wd, BAREBOX_CMD_DESC("enable/disable/trigger the watchdog") BAREBOX_CMD_OPTS("[-d DEVICE] [TIME]") BAREBOX_CMD_GROUP(CMD_GRP_HWMANIP) BAREBOX_CMD_HELP(cmd_wd_help) BAREBOX_CMD_COMPLETE(device_complete) BAREBOX_CMD_END