+ build_lut_entry(masks[0], masks[0], lut->m0d);
+ build_lut_entry(masks[1], masks[1], lut->m1d);
+
+ /* Add glue logic */
+ if (masks[0] || masks[1]) {
+ /* Transition trigger. */
+ if (masks[0] & sigma->trigger.risingmask)
+ add_trigger_function(OP_RISE, FUNC_OR, 0, 0, &lut->m3);
+ if (masks[0] & sigma->trigger.fallingmask)
+ add_trigger_function(OP_FALL, FUNC_OR, 0, 0, &lut->m3);
+ if (masks[1] & sigma->trigger.risingmask)
+ add_trigger_function(OP_RISE, FUNC_OR, 1, 0, &lut->m3);
+ if (masks[1] & sigma->trigger.fallingmask)
+ add_trigger_function(OP_FALL, FUNC_OR, 1, 0, &lut->m3);
+ } else {
+ /* Only value/mask trigger. */
+ lut->m3 = 0xffff;
+ }
+
+ /* Triggertype: event. */
+ lut->params.selres = 3;
+
+ return SR_OK;
+}
+
+static int hw_start_acquisition(int device_index, gpointer session_data)
+{
+ struct sr_device_instance *sdi;
+ struct sigma *sigma;
+ struct sr_datafeed_packet packet;
+ struct sr_datafeed_header header;
+ struct clockselect_50 clockselect;
+ int frac, triggerpin, ret;
+ uint8_t triggerselect;
+ struct triggerinout triggerinout_conf;
+ struct triggerlut lut;
+
+ session_data = session_data;
+
+ if (!(sdi = sr_get_device_instance(device_instances, device_index)))
+ return SR_ERR;
+
+ sigma = sdi->priv;
+
+ /* If the samplerate has not been set, default to 200 KHz. */
+ if (sigma->cur_firmware == -1) {
+ if ((ret = set_samplerate(sdi, SR_KHZ(200))) != SR_OK)
+ return ret;
+ }
+
+ /* Enter trigger programming mode. */
+ sigma_set_register(WRITE_TRIGGER_SELECT1, 0x20, sigma);
+
+ /* 100 and 200 MHz mode. */
+ if (sigma->cur_samplerate >= SR_MHZ(100)) {
+ sigma_set_register(WRITE_TRIGGER_SELECT1, 0x81, sigma);
+
+ /* Find which pin to trigger on from mask. */
+ for (triggerpin = 0; triggerpin < 8; ++triggerpin)
+ if ((sigma->trigger.risingmask | sigma->trigger.fallingmask) &
+ (1 << triggerpin))
+ break;
+
+ /* Set trigger pin and light LED on trigger. */
+ triggerselect = (1 << LEDSEL1) | (triggerpin & 0x7);
+
+ /* Default rising edge. */
+ if (sigma->trigger.fallingmask)
+ triggerselect |= 1 << 3;
+
+ /* All other modes. */
+ } else if (sigma->cur_samplerate <= SR_MHZ(50)) {
+ build_basic_trigger(&lut, sigma);