- return cmd_opchar_replong(cmd_io, param, ret, 0, 16);
- }
- else {
- ret = rpp_port_get_val(portName, port_pin_cnt, values);
- if (ret == FAILURE) {
+ switch (port->bpch) {
+ case 1:
+ case 32:
+ {
+ uint32_t value;
+ ret = sscanf(param[2], "%i", &value);
+ if (ret == EOF || ret == 0)
+ return -CMDERR_BADPAR;
+
+ ret = port->set(port, &value, sizeof(value));
+ if (ret == FAILURE)
+ return -CMDERR_WRPERM;
+ return cmd_opchar_replong(cmd_io, param, value, 0, 16);
+ }
+ case 8: {
+ uint8_t values[16] = {0};
+ if (port->numchn > ARRAY_SIZE(values))
+ return -CMDERR_BADCFG;
+ for (i = 0; i < port->numchn; i++) {
+ ret = sscanf(param[2+i], "%hhi", &values[i]);
+ if (ret == EOF || ret == 0)
+ break;
+ }
+ ret = port->set(port, &values, sizeof(values));
+ if (ret == FAILURE)
+ return -CMDERR_WRPERM;
+ return cmd_opchar_replong(cmd_io, param, values[0], 0, 16);
+ }
+ case 16: {
+ uint16_t values[16] = {0};
+ if (port->numchn > ARRAY_SIZE(values))
+ return -CMDERR_BADCFG;
+ for (i = 0; i < port->numchn; i++) {
+ ret = sscanf(param[2+i], "%hi", &values[i]);
+ if (ret == EOF || ret == 0)
+ break;
+ }
+ ret = port->set(port, &values, sizeof(values));
+ if (ret == FAILURE)
+ return -CMDERR_WRPERM;
+ return cmd_opchar_replong(cmd_io, param, values[0], 0, 16);
+ }
+ default:
+ rpp_sci_printf("Unsupported bits-per-channel value: %d\n", port->bpch);
+ return -CMDERR_NODEV;
+ }
+ } else { /* Get values from port */
+ if (!port->get)