X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Flink-mso19%2Fprotocol.c;h=8721ec2b0c4761e4abf675de1e0a722821575057;hb=08f023fe97e402d68106299d04726f9094f00c45;hp=5f7aa719876b11c9bd0eab0096f90e5a8d9102f2;hpb=155b680da482cea2381becb73c51cfb838bff31e;p=libsigrok.git diff --git a/src/hardware/link-mso19/protocol.c b/src/hardware/link-mso19/protocol.c index 5f7aa719..8721ec2b 100644 --- a/src/hardware/link-mso19/protocol.c +++ b/src/hardware/link-mso19/protocol.c @@ -19,6 +19,7 @@ * along with this program. If not, see . */ +#include #include "protocol.h" /* serial protocol */ @@ -29,9 +30,6 @@ static const char mso_head[] = { 0x40, 0x4c, 0x44, 0x53, 0x7e }; static const char mso_foot[] = { 0x7e }; -extern SR_PRIV struct sr_dev_driver link_mso19_driver_info; -static struct sr_dev_driver *di = &link_mso19_driver_info; - SR_PRIV int mso_send_control_message(struct sr_serial_dev_inst *serial, uint16_t payload[], int n) { @@ -43,19 +41,15 @@ SR_PRIV int mso_send_control_message(struct sr_serial_dev_inst *serial, if (serial->fd < 0) goto ret; - if (!(buf = g_try_malloc(s))) { - sr_err("Failed to malloc message buffer."); - ret = SR_ERR_MALLOC; - goto ret; - } + buf = g_malloc(s); p = buf; memcpy(p, mso_head, sizeof(mso_head)); p += sizeof(mso_head); for (i = 0; i < n; i++) { - *(uint16_t *) p = g_htons(payload[i]); - p += 2; + WB16(p, payload[i]); + p += sizeof(uint16_t); } memcpy(p, mso_foot, sizeof(mso_foot)); @@ -106,7 +100,7 @@ SR_PRIV int mso_configure_trigger(const struct sr_dev_inst *sdi) trigger_config |= 0x20; //DSO level trigger & width < trigger_width break; case 2: - trigger_config |= 0x40; //DSO level trigger & width >= trigger_width + trigger_config |= 0x40; //DSO level trigger & width >= trigger_width break; case 3: trigger_config |= 0x60; //LA combination trigger @@ -203,7 +197,7 @@ SR_PRIV int mso_dac_out(const struct sr_dev_inst *sdi, uint16_t val) return mso_send_control_message(devc->serial, ARRAY_AND_SIZE(ops)); } -SR_PRIV inline uint16_t mso_calc_raw_from_mv(struct dev_context * devc) +SR_PRIV uint16_t mso_calc_raw_from_mv(struct dev_context *devc) { return (uint16_t) (0x200 - ((devc->dso_trigger_voltage / devc->dso_probe_attn) / @@ -290,15 +284,12 @@ SR_PRIV int mso_toggle_led(struct sr_dev_inst *sdi, int state) SR_PRIV void stop_acquisition(const struct sr_dev_inst *sdi) { - struct sr_datafeed_packet packet; struct dev_context *devc; devc = sdi->priv; serial_source_remove(sdi->session, devc->serial); - /* Terminate session */ - packet.type = SR_DF_END; - sr_session_send(sdi, &packet); + std_session_send_df_end(sdi); } SR_PRIV int mso_clkrate_out(struct sr_serial_dev_inst *serial, uint16_t val) @@ -341,7 +332,7 @@ SR_PRIV int mso_check_trigger(struct sr_serial_dev_inst *serial, uint8_t *info) sr_dbg("Requesting trigger state."); ret = mso_send_control_message(serial, ARRAY_AND_SIZE(ops)); - if (info == NULL || ret != SR_OK) + if (!info || ret != SR_OK) return ret; uint8_t buf = 0; @@ -358,25 +349,10 @@ SR_PRIV int mso_receive_data(int fd, int revents, void *cb_data) { struct sr_datafeed_packet packet; struct sr_datafeed_logic logic; - struct sr_dev_inst *sdi; - GSList *l; + struct sr_dev_inst *sdi = cb_data; + struct dev_context *devc = sdi->priv; int i; - struct drv_context *drvc = di->priv; - - /* Find this device's devc struct by its fd. */ - struct dev_context *devc = NULL; - for (l = drvc->instances; l; l = l->next) { - sdi = l->data; - devc = sdi->priv; - if (devc->serial->fd == fd) - break; - devc = NULL; - } - if (!devc) - /* Shouldn't happen. */ - return TRUE; - (void)revents; uint8_t in[1024]; @@ -423,13 +399,13 @@ SR_PRIV int mso_receive_data(int fd, int revents, void *cb_data) logic.length = 1024; logic.unitsize = 1; logic.data = logic_out; - sr_session_send(cb_data, &packet); + sr_session_send(sdi, &packet); devc->num_samples += 1024; if (devc->limit_samples && devc->num_samples >= devc->limit_samples) { sr_info("Requested number of samples reached."); - sdi->driver->dev_acquisition_stop(sdi, cb_data); + sr_dev_acquisition_stop(sdi); } return TRUE;