#ifdef TARGET_HAS_SPI
#include "drv/spi.h"
#endif
+#include <drv/endian.h>
#include "cmdproc_utils.h"
#define MIN(a, b) ((a) < (b) ? (a) : (b))
for (i = 0; i < ARRAY_SIZE(port_desc); i++) {
const struct port_desc *port = &port_desc[i];
const char *rw[4] = { "N/A", "WO", "RO", "RW" };
- const char *type = "";
+ char note[30] = "";
#ifdef TARGET_HAS_SPI
if (port->set == port_spi_set)
- type = "SPI";
+ snprintf(note, sizeof(note), "SPI, %s", port->cfg.spi.chip);
#endif
rpp_sci_printf("%-10s %s %dx%db%s%s%s\r\n",
port->name,
rw[(port->set ? 1 : 0) | (port->get ? 2 : 0)],
port->numchn, port->bpch,
- *type ? " (": "",
- type,
- *type ? ")" : "");
+ *note ? " (": "",
+ note,
+ *note ? ")" : "");
}
return 1;
}
return cmd_opchar_replong(cmd_io, param, value, 0, 16);
}
case 16: {
- uint16_t value;
- ret = sscanf(param[2], "%hi", &value);
- if (ret == EOF || ret == 0)
- break;
- ret = port->set(port, &value, sizeof(value));
+ uint16_t value[8];
+ int i, n;
+ char *p = param[2];
+ assert(port->numchn <= ARRAY_SIZE(value));
+
+ for (i = 0; i < port->numchn; i++) {
+ ret = sscanf(param[2], "%hi%n", &value[i], &n);
+ if (ret == EOF || ret == 0)
+ break;
+ value[i] = cpu_to_be16(value[i]);
+ p += n;
+ }
+
+ ret = port->set(port, &value, port->numchn * 2);
if (ret == FAILURE)
return -CMDERR_WRPERM;
- return cmd_opchar_replong(cmd_io, param, value, 0, 16);
+ if (port->numchn == 1)
+ return cmd_opchar_replong(cmd_io, param, be16_to_cpu(value[0]), 0, 16);
+ else {
+ for (i = 0; i < port->numchn; i++)
+ rpp_sci_printf("%#x ", be16_to_cpu(value[i]));
+ rpp_sci_printf("\n");
+ return 0;
+ }
}
case 24: {
uint32_t value;