printscmd.c revision 1.1 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