1*421949a3Ssevan /* $NetBSD: eltsub.c,v 1.4 2018/01/23 21:06:26 sevan Exp $ */
2f249807bSmjacob /* $FreeBSD: $ */
3f249807bSmjacob /* $OpenBSD: $ */
4f249807bSmjacob /*
5f249807bSmjacob * Copyright (c) 2000 by Matthew Jacob
6f249807bSmjacob * All rights reserved.
7f249807bSmjacob *
8f249807bSmjacob * Redistribution and use in source and binary forms, with or without
9f249807bSmjacob * modification, are permitted provided that the following conditions
10f249807bSmjacob * are met:
11f249807bSmjacob * 1. Redistributions of source code must retain the above copyright
12f249807bSmjacob * notice, this list of conditions, and the following disclaimer,
13f249807bSmjacob * without modification, immediately at the beginning of the file.
14f249807bSmjacob * 2. The name of the author may not be used to endorse or promote products
15f249807bSmjacob * derived from this software without specific prior written permission.
16f249807bSmjacob *
17f249807bSmjacob * Alternatively, this software may be distributed under the terms of the
18f249807bSmjacob * the GNU Public License ("GPL").
19f249807bSmjacob *
20f249807bSmjacob * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21f249807bSmjacob * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22f249807bSmjacob * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23f249807bSmjacob * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
24f249807bSmjacob * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25f249807bSmjacob * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26f249807bSmjacob * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27f249807bSmjacob * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28f249807bSmjacob * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29f249807bSmjacob * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30f249807bSmjacob * SUCH DAMAGE.
31f249807bSmjacob *
32f249807bSmjacob * Matthew Jacob
33f249807bSmjacob * Feral Software
34f249807bSmjacob * mjacob@feral.com
35f249807bSmjacob */
36f249807bSmjacob
37f249807bSmjacob #include <unistd.h>
38f249807bSmjacob #include <stdlib.h>
39f249807bSmjacob #include <stdio.h>
40f249807bSmjacob #include <sys/ioctl.h>
41f249807bSmjacob #include SESINC
42f249807bSmjacob
43*421949a3Ssevan char *geteltnm(int);
44*421949a3Ssevan static char *scode2ascii(u_char);
45*421949a3Ssevan char *stat2ascii(int, u_char *);
4666df2a49Smjacob
47f249807bSmjacob char *
geteltnm(int type)48*421949a3Ssevan geteltnm(int type)
49f249807bSmjacob {
50f249807bSmjacob static char rbuf[132];
51f249807bSmjacob
52f249807bSmjacob switch (type) {
53f249807bSmjacob case SESTYP_UNSPECIFIED:
54f249807bSmjacob sprintf(rbuf, "Unspecified");
55f249807bSmjacob break;
56f249807bSmjacob case SESTYP_DEVICE:
57f249807bSmjacob sprintf(rbuf, "Device");
58f249807bSmjacob break;
59f249807bSmjacob case SESTYP_POWER:
60f249807bSmjacob sprintf(rbuf, "Power supply");
61f249807bSmjacob break;
62f249807bSmjacob case SESTYP_FAN:
63f249807bSmjacob sprintf(rbuf, "Cooling element");
64f249807bSmjacob break;
65f249807bSmjacob case SESTYP_THERM:
66f249807bSmjacob sprintf(rbuf, "Temperature sensors");
67f249807bSmjacob break;
68f249807bSmjacob case SESTYP_DOORLOCK:
69f249807bSmjacob sprintf(rbuf, "Door Lock");
70f249807bSmjacob break;
71f249807bSmjacob case SESTYP_ALARM:
72f249807bSmjacob sprintf(rbuf, "Audible alarm");
73f249807bSmjacob break;
74f249807bSmjacob case SESTYP_ESCC:
75f249807bSmjacob sprintf(rbuf, "Enclosure services controller electronics");
76f249807bSmjacob break;
77f249807bSmjacob case SESTYP_SCC:
78f249807bSmjacob sprintf(rbuf, "SCC controller electronics");
79f249807bSmjacob break;
80f249807bSmjacob case SESTYP_NVRAM:
81f249807bSmjacob sprintf(rbuf, "Nonvolatile cache");
82f249807bSmjacob break;
83f249807bSmjacob case SESTYP_UPS:
84f249807bSmjacob sprintf(rbuf, "Uninterruptible power supply");
85f249807bSmjacob break;
86f249807bSmjacob case SESTYP_DISPLAY:
87f249807bSmjacob sprintf(rbuf, "Display");
88f249807bSmjacob break;
89f249807bSmjacob case SESTYP_KEYPAD:
90f249807bSmjacob sprintf(rbuf, "Key pad entry device");
91f249807bSmjacob break;
92f249807bSmjacob case SESTYP_SCSIXVR:
93f249807bSmjacob sprintf(rbuf, "SCSI port/transceiver");
94f249807bSmjacob break;
95f249807bSmjacob case SESTYP_LANGUAGE:
96f249807bSmjacob sprintf(rbuf, "Language");
97f249807bSmjacob break;
98f249807bSmjacob case SESTYP_COMPORT:
99f249807bSmjacob sprintf(rbuf, "Communication Port");
100f249807bSmjacob break;
101f249807bSmjacob case SESTYP_VOM:
102f249807bSmjacob sprintf(rbuf, "Voltage Sensor");
103f249807bSmjacob break;
104f249807bSmjacob case SESTYP_AMMETER:
105f249807bSmjacob sprintf(rbuf, "Current Sensor");
106f249807bSmjacob break;
107f249807bSmjacob case SESTYP_SCSI_TGT:
108f249807bSmjacob sprintf(rbuf, "SCSI target port");
109f249807bSmjacob break;
110f249807bSmjacob case SESTYP_SCSI_INI:
111f249807bSmjacob sprintf(rbuf, "SCSI initiator port");
112f249807bSmjacob break;
113f249807bSmjacob case SESTYP_SUBENC:
114f249807bSmjacob sprintf(rbuf, "Simple sub-enclosure");
115f249807bSmjacob break;
116f249807bSmjacob default:
117f249807bSmjacob (void) sprintf(rbuf, "<Type 0x%x>", type);
118f249807bSmjacob break;
119f249807bSmjacob }
120f249807bSmjacob return (rbuf);
121f249807bSmjacob }
122f249807bSmjacob
123f249807bSmjacob static char *
scode2ascii(u_char code)1245fbc0033Sdrochner scode2ascii(u_char code)
125f249807bSmjacob {
126f249807bSmjacob static char rbuf[32];
127f249807bSmjacob switch (code & 0xf) {
128f249807bSmjacob case SES_OBJSTAT_UNSUPPORTED:
129f249807bSmjacob sprintf(rbuf, "status not supported");
130f249807bSmjacob break;
131f249807bSmjacob case SES_OBJSTAT_OK:
132f249807bSmjacob sprintf(rbuf, "ok");
133f249807bSmjacob break;
134f249807bSmjacob case SES_OBJSTAT_CRIT:
135f249807bSmjacob sprintf(rbuf, "critical");
136f249807bSmjacob break;
137f249807bSmjacob case SES_OBJSTAT_NONCRIT:
138f249807bSmjacob sprintf(rbuf, "non-critical");
139f249807bSmjacob break;
140f249807bSmjacob case SES_OBJSTAT_UNRECOV:
141f249807bSmjacob sprintf(rbuf, "unrecoverable");
142f249807bSmjacob break;
143f249807bSmjacob case SES_OBJSTAT_NOTINSTALLED:
144f249807bSmjacob sprintf(rbuf, "not installed");
145f249807bSmjacob break;
146f249807bSmjacob case SES_OBJSTAT_UNKNOWN:
147f249807bSmjacob sprintf(rbuf, "unknown status");
148f249807bSmjacob break;
149f249807bSmjacob case SES_OBJSTAT_NOTAVAIL:
150f249807bSmjacob sprintf(rbuf, "status not available");
151f249807bSmjacob break;
152f249807bSmjacob default:
153f249807bSmjacob sprintf(rbuf, "unknown status code %x", code & 0xf);
154f249807bSmjacob break;
155f249807bSmjacob }
156f249807bSmjacob return (rbuf);
157f249807bSmjacob }
158f249807bSmjacob
159f249807bSmjacob
160f249807bSmjacob char *
stat2ascii(int eletype,u_char * cstat)161*421949a3Ssevan stat2ascii(int eletype, u_char *cstat)
162f249807bSmjacob {
163f249807bSmjacob static char ebuf[256], *scode;
164f249807bSmjacob
165f249807bSmjacob scode = scode2ascii(cstat[0]);
166f249807bSmjacob sprintf(ebuf, "Status=%s (bytes=0x%02x 0x%02x 0x%02x 0x%02x)",
167f249807bSmjacob scode, cstat[0], cstat[1], cstat[2], cstat[3]);
168f249807bSmjacob return (ebuf);
169f249807bSmjacob }
170