- ret = sp_set_params(serial->data, baudrate, bits, parity, stopbits,
- flowcontrol, rts, dtr);
-
- switch (ret)
- {
- case SP_ERR_ARG:
- sr_err("Invalid arguments for setting serial port parameters.");
- return SR_ERR_ARG;
- case SP_ERR_FAIL:
- error = sp_last_error_message();
- sr_err("Error setting serial port parameters: %s.", error);
- sp_free_error_message(error);
- return SR_ERR;
+ sp_new_config(&config);
+ sp_set_config_baudrate(config, baudrate);
+ sp_set_config_bits(config, bits);
+ switch (parity) {
+ case 0:
+ sp_set_config_parity(config, SP_PARITY_NONE);
+ break;
+ case 1:
+ sp_set_config_parity(config, SP_PARITY_EVEN);
+ break;
+ case 2:
+ sp_set_config_parity(config, SP_PARITY_ODD);
+ break;
+ default:
+ return SR_ERR_ARG;
+ }
+ sp_set_config_stopbits(config, stopbits);
+ sp_set_config_rts(config, flowcontrol == 1 ? SP_RTS_FLOW_CONTROL : rts);
+ sp_set_config_cts(config, flowcontrol == 1 ? SP_CTS_FLOW_CONTROL : SP_CTS_IGNORE);
+ sp_set_config_dtr(config, dtr);
+ sp_set_config_dsr(config, SP_DSR_IGNORE);
+ sp_set_config_xon_xoff(config, flowcontrol == 2 ? SP_XONXOFF_INOUT : SP_XONXOFF_DISABLED);
+
+ ret = sp_set_config(serial->data, config);
+ sp_free_config(config);
+
+ switch (ret) {
+ case SP_ERR_ARG:
+ sr_err("Invalid arguments for setting serial port parameters.");
+ return SR_ERR_ARG;
+ case SP_ERR_FAIL:
+ error = sp_last_error_message();
+ sr_err("Error setting serial port parameters: %s.", error);
+ sp_free_error_message(error);
+ return SR_ERR;