Home | History | Annotate | Line # | Download | only in scmdctl
      1  1.1  brad /*	$NetBSD: printscmd.c,v 1.1 2021/12/07 17:39:55 brad Exp $	*/
      2  1.1  brad 
      3  1.1  brad /*
      4  1.1  brad  * Copyright (c) 2021 Brad Spencer <brad (at) anduin.eldar.org>
      5  1.1  brad  *
      6  1.1  brad  * Permission to use, copy, modify, and distribute this software for any
      7  1.1  brad  * purpose with or without fee is hereby granted, provided that the above
      8  1.1  brad  * copyright notice and this permission notice appear in all copies.
      9  1.1  brad  *
     10  1.1  brad  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     11  1.1  brad  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     12  1.1  brad  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     13  1.1  brad  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     14  1.1  brad  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
     15  1.1  brad  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
     16  1.1  brad  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     17  1.1  brad  */
     18  1.1  brad 
     19  1.1  brad #ifdef __RCSID
     20  1.1  brad __RCSID("$NetBSD: printscmd.c,v 1.1 2021/12/07 17:39:55 brad Exp $");
     21  1.1  brad #endif
     22  1.1  brad 
     23  1.1  brad /* Functions to print stuff returned from get calls mostly */
     24  1.1  brad 
     25  1.1  brad #include <inttypes.h>
     26  1.1  brad #include <stdbool.h>
     27  1.1  brad #include <stdio.h>
     28  1.1  brad #include <stdlib.h>
     29  1.1  brad #include <unistd.h>
     30  1.1  brad #include <err.h>
     31  1.1  brad #include <fcntl.h>
     32  1.1  brad #include <string.h>
     33  1.1  brad #include <limits.h>
     34  1.1  brad #include <termios.h>
     35  1.1  brad 
     36  1.1  brad #include <dev/ic/scmdreg.h>
     37  1.1  brad 
     38  1.1  brad #define EXTERN extern
     39  1.1  brad #include "scmdctl.h"
     40  1.1  brad #include "responses.h"
     41  1.1  brad #include "common.h"
     42  1.1  brad 
     43  1.1  brad #undef EXTERN
     44  1.1  brad #define EXTERN
     45  1.1  brad #include "printscmd.h"
     46  1.1  brad 
     47  1.1  brad void
     48  1.1  brad print_identify(struct scmd_identify_response *r)
     49  1.1  brad {
     50  1.1  brad 	printf("ID (ID):\t\t\t%d (0x%02X)\n",r->id,r->id);
     51  1.1  brad 	printf("Firmware version (FID):\t\t%d\n",r->fwversion);
     52  1.1  brad 	printf("Config bits (CONFIG_BITS):\t%d (0x%02X)\n",r->config_bits,r->config_bits);
     53  1.1  brad 	if (r->slv_i2c_address >= SCMD_REMOTE_ADDR_LOW &&
     54  1.1  brad 	    r->slv_i2c_address <= SCMD_REMOTE_ADDR_HIGH)
     55  1.1  brad 		printf("Slave address (SLAVE_ADDR):\t0x%02X\n",r->slv_i2c_address);
     56  1.1  brad 	else
     57  1.1  brad 		printf("Slave address (SLAVE_ADDR):\tMaster (0x%02X)\n",r->slv_i2c_address);
     58  1.1  brad }
     59  1.1  brad 
     60  1.1  brad 
     61  1.1  brad void
     62  1.1  brad print_diag(struct scmd_diag_response *r)
     63  1.1  brad {
     64  1.1  brad 	const char *outputs[] = {
     65  1.1  brad 		"Read errors USER port (U_I2C_RD_ERR):\t\t",
     66  1.1  brad 		"Write errors USER port (U_I2C_WR_ERR):\t\t",
     67  1.1  brad 		"Too much data (U_BUF_DUMPED):\t\t\t",
     68  1.1  brad 		"Read errors SLAVE port (E_I2C_RD_ERR):\t\t",
     69  1.1  brad 		"Write errors SLAVE port (E_I2C_WR_ERR):\t\t",
     70  1.1  brad 		"Main loop (LOOP_TIME):\t\t\t\t",
     71  1.1  brad 		"Number of slave polls (SLV_POOL_CNT):\t\t",
     72  1.1  brad 		"Highest slave address (SLV_TOP_ADDR):\t\t",
     73  1.1  brad 		"Master count SLAVE port errors (MST_E_ERR):\t",
     74  1.1  brad 		"Status master board (MST_E_STATUS):\t\t",
     75  1.1  brad 		"Failsafe faults (FSAFE_FAULTS):\t\t\t",
     76  1.1  brad 		"Out of range register attempts (REG_OOR_CNT):\t",
     77  1.1  brad 		"Write lock attempts (REG_RO_WRITE_CNT):\t\t",
     78  1.1  brad 		"General test word (GEN_TEST_WORD):\t\t"
     79  1.1  brad 	};
     80  1.1  brad 
     81  1.1  brad 	for(int n = 0; n < 14;n++) {
     82  1.1  brad 		printf("%s%d (0x%02X)\n",outputs[n],r->diags[n],r->diags[n]);
     83  1.1  brad 	}
     84  1.1  brad }
     85  1.1  brad 
     86  1.1  brad const char *edu_outputs[] = {
     87  1.1  brad 	"Disabled",
     88  1.1  brad 	"Enabled",
     89  1.1  brad 	"Unknown"
     90  1.1  brad };
     91  1.1  brad 
     92  1.1  brad void
     93  1.1  brad print_motor(struct scmd_motor_response *r)
     94  1.1  brad {
     95  1.1  brad 	int x;
     96  1.1  brad 
     97  1.1  brad 	if (r->driver <= 0x01)
     98  1.1  brad 		x = r->driver;
     99  1.1  brad 	else
    100  1.1  brad 		x = 2;
    101  1.1  brad 	printf("Driver enable/disable: %s (0x%02X)\n",edu_outputs[x],r->driver);
    102  1.1  brad 	for(int n = 0; n < 34;n++) {
    103  1.1  brad 		if (r->motorlevels[n] != SCMD_NO_MOTOR) {
    104  1.1  brad 			printf("Module %d motor %c: %d (0x%02X) %s %s %s\n",
    105  1.1  brad 			    n / 2,
    106  1.1  brad 			    (n & 0x01 ? 'B' : 'A'),
    107  1.1  brad 			    decode_motor_level(r->motorlevels[n]),
    108  1.1  brad 			    r->motorlevels[n],
    109  1.1  brad 			    (r->motorlevels[n] < 128 ? "(reverse)" : "(forward)"),
    110  1.1  brad 			    (r->invert[n] == true ? "(inverted)" : "(not inverted)"),
    111  1.1  brad 			    (r->bridge[n / 2] == true ? "(bridged)" : "(not bridged)")
    112  1.1  brad 			);
    113  1.1  brad 		}
    114  1.1  brad 	}
    115  1.1  brad }
    116