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