]> sigrok.org Git - libsigrok.git/blobdiff - src/hardware/link-mso19/protocol.c
scpi-pps: don't break SCPI devices when scanning for HP-IB devices
[libsigrok.git] / src / hardware / link-mso19 / protocol.c
index ca85ffaf60dfd920599446b9fe42871430bfedbc..8721ec2b0c4761e4abf675de1e0a722821575057 100644 (file)
@@ -19,6 +19,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <config.h>
 #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->context;
-
-       /* 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;