if (sleeping_time > 0) {
g_usleep(sleeping_time);
- sr_spew("Sleeping for processing %ld usec", sleeping_time);
+ sr_spew("Sleeping for processing %" PRIi64 " usec", sleeping_time);
}
}
SR_PRIV int korad_kdxxxxp_set_value(struct sr_serial_dev_inst *serial,
struct dev_context *devc)
{
- char msg[21], *cmd;
+ char msg[21];
+ const char *cmd;
float value;
int ret;
cmd = "BEEP%01.0f";
value = (devc->beep_enabled) ? 1 : 0;
break;
+ case KDXXXXP_OCP:
+ cmd = "OCP%01.0f";
+ value = (devc->ocp_enabled) ? 1 : 0;
+ break;
+ case KDXXXXP_OVP:
+ cmd = "OVP%01.0f";
+ value = (devc->ovp_enabled) ? 1 : 0;
+ break;
case KDXXXXP_SAVE:
cmd = "SAV%01.0f";
if (devc->program < 1 || devc->program > 5) {
struct dev_context *devc)
{
double value;
- int count, ret;
+ int count, ret, i;
float *target;
char status_byte;
devc->reply[count] = 0;
if (target) {
+ /* Handle the strange 'M'. */
+ if (devc->reply[0] == 'M') {
+ for (i = 1; i < count; i++)
+ devc->reply[i - 1] = devc->reply[i];
+ /* Get the last character. */
+ if ((i = korad_kdxxxxp_read_chars(serial, 1,
+ &(devc->reply[count]))) < 0)
+ return i;
+ }
value = g_ascii_strtod(devc->reply, NULL);
*target = (float)value;
sr_dbg("value: %f",value);
* 00 independent 01 series 11 parallel
*/
devc->beep_enabled = (1 << 4);
- /* status_byte & (1 << 5) Unlocked */
-
+ devc->ocp_enabled = (status_byte & (1 << 5));
devc->output_enabled = (status_byte & (1 << 6));
+ /* Velleman LABPS3005 quirk */
+ if (devc->output_enabled)
+ devc->ovp_enabled = (status_byte & (1 << 7));
sr_dbg("Status: 0x%02x", status_byte);
- sr_spew("Status: CH1: constant %s CH2: constant %s. Device is "
- "%s and %s. Buttons are %s. Output is %s ",
+ sr_spew("Status: CH1: constant %s CH2: constant %s. "
+ "Tracking would be %s. Device is "
+ "%s and %s. Buttons are %s. Output is %s "
+ "and extra byte is %s.",
(status_byte & (1 << 0)) ? "voltage" : "current",
(status_byte & (1 << 1)) ? "voltage" : "current",
+ (status_byte & (1 << 2)) ? "parallel" : "series",
(status_byte & (1 << 3)) ? "tracking" : "independent",
(status_byte & (1 << 4)) ? "beeping" : "silent",
(status_byte & (1 << 5)) ? "locked" : "unlocked",
- (status_byte & (1 << 6)) ? "enabled" : "disabled");
+ (status_byte & (1 << 6)) ? "enabled" : "disabled",
+ (status_byte & (1 << 7)) ? "true" : "false");
}
devc->reply_pending = FALSE;
case KDXXXXP_VOLTAGE_MAX:
devc->target = KDXXXXP_CURRENT;
break;
+ /* Read back what was set. */
+ case KDXXXXP_BEEP:
+ case KDXXXXP_OCP:
+ case KDXXXXP_OVP:
case KDXXXXP_OUTPUT:
devc->target = KDXXXXP_STATUS;
break;
struct dev_context *devc;
struct sr_serial_dev_inst *serial;
struct sr_datafeed_packet packet;
- struct sr_datafeed_analog analog;
+ struct sr_datafeed_analog_old analog;
int64_t t, elapsed_us;
(void)fd;
korad_kdxxxxp_get_reply(serial, devc);
/* Send the value forward. */
- packet.type = SR_DF_ANALOG;
+ packet.type = SR_DF_ANALOG_OLD;
packet.payload = &analog;
analog.channels = sdi->channels;
analog.num_samples = 1;