/* * LED I/O */ int uoak_led_status(struct uoak_softc *sc, enum uoak_target target, uint8_t *mode) { memset(&sc->sc_rcmd, 0, sizeof(struct uoak_rcmd)); sc->sc_rcmd.target = target; sc->sc_rcmd.datasize = 0x1; USETW(&sc->sc_rcmd.cmd, OAK_CMD_LEDMODE); if (uoak_get_cmd(sc) < 0) return EIO; *mode = sc->sc_buf[1]; return 0; }
int uoak_get_report_mode(struct uoak_softc *sc, enum uoak_target target) { memset(&sc->sc_rcmd, 0, sizeof(struct uoak_rcmd)); sc->sc_rcmd.target = target; sc->sc_rcmd.datasize = 0x1; USETW(&sc->sc_rcmd.cmd, OAK_CMD_REPORTMODE); if (uoak_get_cmd(sc) < 0) return EIO; sc->sc_config[target].report_mode = sc->sc_buf[1]; return 0; }
/* * Functions to access device configurations. * OAK sensor have some storages to store its configuration. * (RAM, FLASH and others) */ int uoak_get_device_name(struct uoak_softc *sc, enum uoak_target target) { memset(&sc->sc_rcmd, 0, sizeof(struct uoak_rcmd)); sc->sc_rcmd.target = target; sc->sc_rcmd.datasize = 0x15; USETW(&sc->sc_rcmd.cmd, OAK_CMD_DEVNAME); if (uoak_get_cmd(sc) < 0) return EIO; strlcpy(sc->sc_config[target].devname, sc->sc_buf+1, sizeof(sc->sc_config[target].devname)); return 0; }
int uoak_get_sample_rate(struct uoak_softc *sc, enum uoak_target target) { uint16_t result; memset(&sc->sc_rcmd, 0, sizeof(struct uoak_rcmd)); sc->sc_rcmd.target = target; sc->sc_rcmd.datasize = 0x2; USETW(&sc->sc_rcmd.cmd, OAK_CMD_SAMPLERATE); if (uoak_get_cmd(sc) < 0) return EIO; result = (sc->sc_buf[2] << 8) + sc->sc_buf[1]; sc->sc_config[target].sample_rate = result; return 0; }
int uoakv_get_sensor_setting(struct uoakv_softc *sc, enum uoak_target target) { struct uoak_softc *scc = &sc->sc_uoak_softc; uint8_t result; memset(&scc->sc_rcmd, 0, sizeof(struct uoak_rcmd)); scc->sc_rcmd.target = target; scc->sc_rcmd.datasize = 0x1; USETW(&scc->sc_rcmd.cmd, OAK_CMD_SENSORSETTING); if (uoak_get_cmd(scc) < 0) return EIO; result = scc->sc_buf[1]; sc->sc_inputmode[target] = (result & OAK_V_SENSOR_INPUTMODEMASK); return 0; }
int uoakv_get_channel_setting(struct uoakv_softc *sc, enum uoak_target target, int ch) { struct uoak_softc *scc = &sc->sc_uoak_softc; uint16_t cmd, result; memset(&scc->sc_rcmd, 0, sizeof(struct uoak_rcmd)); scc->sc_rcmd.target = target; scc->sc_rcmd.datasize = 0x2; #define OAK_V_CHANNEL_IDX_OFFSET 3 cmd = (ch + OAK_V_CHANNEL_IDX_OFFSET); USETW(&scc->sc_rcmd.cmd, cmd); if (uoak_get_cmd(scc) < 0) return EIO; result = (scc->sc_buf[2] << 8) + scc->sc_buf[1]; sc->sc_sensor[ch].offset[target] = result; return 0; }