+ uint16_t readcount, delaycount;
+ uint8_t changrp_mask;
+
+ if (!(sdi = get_sigrok_device_instance(device_instances, device_index)))
+ return SIGROK_ERR;
+
+ if (sdi->status != ST_ACTIVE)
+ return SIGROK_ERR;
+
+ readcount = limit_samples / 4;
+
+ memset(trigger_config, 0, 16);
+ trigger_config[num_stages-1] |= 0x08;
+ if (trigger_mask[0]) {
+ delaycount = readcount * (1 - capture_ratio / 100.0);
+ trigger_at = (readcount - delaycount) * 4 - num_stages;
+
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_MASK_0,
+ reverse32(trigger_mask[0])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_VALUE_0,
+ reverse32(trigger_value[0])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_CONFIG_0,
+ trigger_config[0]) != SIGROK_OK)
+ return SIGROK_ERR;
+
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_MASK_1,
+ reverse32(trigger_mask[1])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_VALUE_1,
+ reverse32(trigger_value[1])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_CONFIG_1,
+ trigger_config[1]) != SIGROK_OK)
+ return SIGROK_ERR;
+
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_MASK_2,
+ reverse32(trigger_mask[2])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_VALUE_2,
+ reverse32(trigger_value[2])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_CONFIG_2,
+ trigger_config[2]) != SIGROK_OK)
+ return SIGROK_ERR;
+
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_MASK_3,
+ reverse32(trigger_mask[3])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_VALUE_3,
+ reverse32(trigger_value[3])) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_CONFIG_3,
+ trigger_config[3]) != SIGROK_OK)
+ return SIGROK_ERR;
+ } else {
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_MASK_0,
+ trigger_mask[0]) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_VALUE_0,
+ trigger_value[0]) != SIGROK_OK)
+ return SIGROK_ERR;
+ if (send_longcommand(sdi->serial->fd, CMD_SET_TRIGGER_CONFIG_0,
+ 0x00000008) != SIGROK_OK)
+ return SIGROK_ERR;
+ delaycount = readcount;
+ }