X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Flink-mso19%2Fprotocol.c;h=8721ec2b0c4761e4abf675de1e0a722821575057;hb=7f0463840ab5d6a85daaa76850558d2b71e596cf;hp=148f0ba18933fd80ec26bd2ee171be379e582097;hpb=98fec29ecbb5093856b69311be8e937c162edded;p=libsigrok.git diff --git a/src/hardware/link-mso19/protocol.c b/src/hardware/link-mso19/protocol.c index 148f0ba1..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,8 +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; - SR_PRIV int mso_send_control_message(struct sr_serial_dev_inst *serial, uint16_t payload[], int n) { @@ -49,8 +48,8 @@ SR_PRIV int mso_send_control_message(struct sr_serial_dev_inst *serial, 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)); @@ -101,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 @@ -198,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) / @@ -285,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) @@ -353,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]; @@ -418,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;