/* powerpanel.h Model specific data/definitions for CyberPower text/binary protocol UPSes Copyright (C) 2007 Arjen de Korte Doug Reynolds 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. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define ENDCHAR '\r' #define IGNCHAR "" #define MAXTRIES 3 #define UPSDELAY 50000 #define SER_WAIT_SEC 0 #define SER_WAIT_USEC 250000 #define DRV_VERSION "0.22" /* * Handlers for the CyberPower binary protocol */ static int initups_bin(); static void initinfo_bin(); static void updateinfo_bin(); static void shutdown_bin(); /* * Handlers for the CyberPower text protocol */ static int initups_txt(); static void initinfo_txt(); static void updateinfo_txt(); static void shutdown_txt(); static const struct { char *version; int (*initups)(void); void (*initinfo)(void); void (*updateinfo)(void); void (*shutdown)(void); } powpan_protocol[] = { { "binary", initups_bin, initinfo_bin, updateinfo_bin, shutdown_bin }, { "text", initups_txt, initinfo_txt, updateinfo_txt, shutdown_txt }, { NULL, NULL, NULL, NULL } }; static const struct { char *cmd; char *command; int len; } powpan_cmdtab_bin[] = { { "test.failure.start", "T\230\r", 3 }, /* 20 seconds test */ { "test.failure.stop", "CT\r", 3 }, { "beeper.toggle", "B\r", 2 }, { "shutdown.reboot", "S\0\0R\0\1W\r", 8}, { "shutdown.return", "S\0\0W\r", 5 }, { "shutdown.stop", "C\r", 2 }, /* { "shutdown.stayoff", "S\0\0\W\r", 5 }, */ { NULL, NULL, 0 } }; static const struct { char *cmd; char *command; } powpan_cmdtab_txt[] = { { "test.failure.start", "T\r" }, { "test.failure.stop", "CT\r" }, { "beeper.on", "C7:1\r" }, { "beeper.off", "C7:0\r" }, { "shutdown.reboot", "S01R0001\r" }, { "shutdown.return", "Z02\r" }, { "shutdown.stop", "C\r" }, { "shutdown.stayoff", "S01\r" }, { NULL, NULL } }; typedef struct { char *val; char command; } powpan_valtab_t; static const powpan_valtab_t tran_high[] = { { "138", -9 }, { "139", -8 }, { "140", -7 }, { "141", -6 }, { "142", -5 }, { "143", -4 }, { "144", -3 }, { "145", -2 }, { "146", -1 }, { "147", 0 }, { NULL, 0 } }; static const powpan_valtab_t tran_low[] = { { "88", 0 }, { "89", 1 }, { "90", 2 }, { "91", 3 }, { "92", 4 }, { "93", 5 }, { "94", 6 }, { "95", 7 }, { "96", 8 }, { "97", 9 }, { NULL, 0 } }; static const powpan_valtab_t batt_low[] = { { "25", -6 }, { "30", -5 }, { "35", -3 }, { "40", -1 }, { "45", 0 }, { "50", 2 }, { "55", 4 }, { "60", 6 }, { NULL, 0 } }; static const powpan_valtab_t out_volt[] = { { "110", -10 }, { "120", 0 }, { "130", 10 }, { NULL, 0 } }; static const powpan_valtab_t on_or_off[] = { { "enabled", 2 }, { "disabled", 0 }, { NULL, 0 } }; static const powpan_valtab_t null_val[] = { { NULL, 0 } }; static const struct { char *var; char *get; char *set; const powpan_valtab_t *map; } powpan_vartab_bin[] = { { "input.transfer.high", "R\002\r", "Q\002%c\r", tran_high }, { "input.transfer.low", "R\004\r", "Q\004%c\r", tran_low }, { "battery.charge.low", "R\010\r", "Q\010%c\r", batt_low }, { "output.voltage.nominal", "R\030\r", "Q\030%c\r", out_volt }, { "ups.coldstart", "R\017\r", "Q\017%c\r", on_or_off }, { "unknown.variable.0x3d", "R\075\r", "Q\075%c\r", null_val }, { "unknown.variable.0x29", "R\051\r", "Q\051%c\r", null_val }, { "unknown.variable.0x2b", "R\053\r", "Q\053%c\r", null_val }, { NULL, NULL, NULL, NULL } }; static const struct { char *var; char *get; char *set; } powpan_vartab_txt[] = { { "input.transfer.high", "P6\r", "C2:%03d\r" }, { "input.transfer.low", "P7\r", "C3:%03d\r" }, { "battery.charge.low", "P8\r", "C4:%02d\r" }, { NULL, NULL, NULL } };