2525#define EXTRA_PROCESSING_TIME_MS 450
2626
2727SR_PRIV int korad_kaxxxxp_send_cmd (struct sr_serial_dev_inst * serial ,
28- const char * cmd )
28+ const char * cmd , bool add_newline )
2929{
3030 int ret ;
3131
@@ -34,6 +34,8 @@ SR_PRIV int korad_kaxxxxp_send_cmd(struct sr_serial_dev_inst *serial,
3434 sr_err ("Error sending command: %d." , ret );
3535 return ret ;
3636 }
37+ if (add_newline )
38+ serial_write_blocking (serial , "\n" , 1 , 0 );
3739
3840 return ret ;
3941}
@@ -71,7 +73,7 @@ SR_PRIV int korad_kaxxxxp_send_cmd(struct sr_serial_dev_inst *serial,
7173 * larger initial timeout period before receive data is seen.
7274 */
7375SR_PRIV int korad_kaxxxxp_read_chars (struct sr_serial_dev_inst * serial ,
74- size_t count , char * buf )
76+ size_t count , char * buf , bool strip_newline )
7577{
7678 int timeout_first , timeout_later , timeout ;
7779 size_t retries_first , retries_later , retries ;
@@ -146,6 +148,11 @@ SR_PRIV int korad_kaxxxxp_read_chars(struct sr_serial_dev_inst *serial,
146148 timeout = timeout_later ;
147149 retries = retries_later ;
148150 }
151+
152+ if (strip_newline && buf [received - 1 ] == 0x0a ) {
153+ buf [-- received ] = 0x00 ;
154+ }
155+
149156 /* TODO Escape non-printables? Seen those with status queries. */
150157 sr_dbg ("got %zu bytes, received: '%s'." , received , buf );
151158
@@ -259,7 +266,7 @@ SR_PRIV int korad_kaxxxxp_set_value(struct sr_serial_dev_inst *serial,
259266 }
260267
261268 if (ret == SR_OK && msg [0 ]) {
262- ret = korad_kaxxxxp_send_cmd (serial , msg );
269+ ret = korad_kaxxxxp_send_cmd (serial , msg , devc -> model -> quirks & KORAD_QUIRK_NEWLINE );
263270 devc -> next_req_time = next_req_time (devc , TRUE, target );
264271 }
265272
@@ -282,36 +289,40 @@ SR_PRIV int korad_kaxxxxp_get_value(struct sr_serial_dev_inst *serial,
282289 give_device_time_to_process (devc );
283290
284291 value = NULL ;
285- count = 5 ;
292+ count = 6 ;
293+
294+ bool newline_quirk = devc -> model -> quirks & KORAD_QUIRK_NEWLINE ;
286295
287296 switch (target ) {
288297 case KAXXXXP_CURRENT :
289298 /* Read current from device. */
290- ret = korad_kaxxxxp_send_cmd (serial , "IOUT1?" );
299+ ret = korad_kaxxxxp_send_cmd (serial , "IOUT1?" , newline_quirk );
291300 value = & (devc -> current );
292301 break ;
293302 case KAXXXXP_CURRENT_LIMIT :
294303 /* Read set current from device. */
295- ret = korad_kaxxxxp_send_cmd (serial , "ISET1?" );
304+ ret = korad_kaxxxxp_send_cmd (serial , "ISET1?" , newline_quirk );
296305 value = & (devc -> current_limit );
297306 break ;
298307 case KAXXXXP_VOLTAGE :
299308 /* Read voltage from device. */
300- ret = korad_kaxxxxp_send_cmd (serial , "VOUT1?" );
309+ ret = korad_kaxxxxp_send_cmd (serial , "VOUT1?" , newline_quirk );
301310 value = & (devc -> voltage );
302311 break ;
303312 case KAXXXXP_VOLTAGE_TARGET :
304313 /* Read set voltage from device. */
305- ret = korad_kaxxxxp_send_cmd (serial , "VSET1?" );
314+ ret = korad_kaxxxxp_send_cmd (serial , "VSET1?" , newline_quirk );
306315 value = & (devc -> voltage_target );
307316 break ;
308317 case KAXXXXP_STATUS :
309318 case KAXXXXP_OUTPUT :
310319 case KAXXXXP_OCP :
311320 case KAXXXXP_OVP :
312321 /* Read status from device. */
313- ret = korad_kaxxxxp_send_cmd (serial , "STATUS?" );
322+ ret = korad_kaxxxxp_send_cmd (serial , "STATUS?" , newline_quirk );
314323 count = 1 ;
324+ if (newline_quirk )
325+ count = 2 ;
315326 break ;
316327 default :
317328 sr_err ("Don't know how to query %d." , target );
@@ -324,7 +335,7 @@ SR_PRIV int korad_kaxxxxp_get_value(struct sr_serial_dev_inst *serial,
324335
325336 devc -> next_req_time = next_req_time (devc , FALSE, target );
326337
327- if ((ret = korad_kaxxxxp_read_chars (serial , count , reply )) < 0 ) {
338+ if ((ret = korad_kaxxxxp_read_chars (serial , count , reply , newline_quirk )) < 0 ) {
328339 g_mutex_unlock (& devc -> rw_mutex );
329340 return ret ;
330341 }
0 commit comments