X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Fchronovu-la%2Fprotocol.c;h=3966b99e81fa994c0376089495314723d249ac8b;hb=4fff7b3c8a84a5593ddf780992355d9ebf434a90;hp=c3340d7c8fc8dbbd68a417ed630f7459fdc40fb4;hpb=6ec6c43b4738dbc7091f4a49a4ec80ea6102cb52;p=libsigrok.git
diff --git a/src/hardware/chronovu-la/protocol.c b/src/hardware/chronovu-la/protocol.c
index c3340d7c..3966b99e 100644
--- a/src/hardware/chronovu-la/protocol.c
+++ b/src/hardware/chronovu-la/protocol.c
@@ -14,8 +14,7 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * along with this program; if not, see .
*/
#include
@@ -24,7 +23,7 @@
SR_PRIV const struct cv_profile cv_profiles[] = {
{ CHRONOVU_LA8, "LA8", "ChronoVu LA8", 8, SR_MHZ(100), 2, 0.8388608 },
{ CHRONOVU_LA16, "LA16", "ChronoVu LA16", 16, SR_MHZ(200), 4, 0.042 },
- { 0, NULL, NULL, 0, 0, 0, 0.0 },
+ ALL_ZERO
};
/* LA8: channels are numbered 0-7. LA16: channels are numbered 0-15. */
@@ -301,6 +300,11 @@ SR_PRIV int cv_convert_trigger(const struct sr_dev_inst *sdi)
|| match->match == SR_TRIGGER_RISING)
devc->trigger_pattern |= channel_bit;
+ /* LA8 and LA16 support state triggering. */
+ if (match->match == SR_TRIGGER_ONE
+ || match->match == SR_TRIGGER_ZERO)
+ devc->trigger_mask |= channel_bit;
+
/* LA16 (but not LA8) supports edge triggering. */
if ((devc->prof->model == CHRONOVU_LA16)) {
if (match->match == SR_TRIGGER_RISING
@@ -401,16 +405,19 @@ SR_PRIV int cv_read_block(struct dev_context *devc)
return SR_OK;
}
-SR_PRIV void cv_send_block_to_session_bus(struct dev_context *devc, int block)
+SR_PRIV void cv_send_block_to_session_bus(const struct sr_dev_inst *sdi, int block)
{
int i, idx;
uint8_t sample, expected_sample, tmp8;
struct sr_datafeed_packet packet;
struct sr_datafeed_logic logic;
int trigger_point; /* Relative trigger point (in this block). */
+ struct dev_context *devc;
/* Note: Caller ensures devc/devc->ftdic != NULL and block > 0. */
+ devc = sdi->priv;
+
/* TODO: Implement/test proper trigger support for the LA16. */
/* Check if we can find the trigger condition in this block. */
@@ -458,7 +465,7 @@ SR_PRIV void cv_send_block_to_session_bus(struct dev_context *devc, int block)
logic.length = BS;
logic.unitsize = devc->prof->num_channels / 8;
logic.data = devc->final_buf + (block * BS);
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
return;
}
@@ -481,7 +488,7 @@ SR_PRIV void cv_send_block_to_session_bus(struct dev_context *devc, int block)
logic.length = trigger_point;
logic.unitsize = devc->prof->num_channels / 8;
logic.data = devc->final_buf + (block * BS);
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
}
/* Send the SR_DF_TRIGGER packet to the session bus. */
@@ -489,7 +496,7 @@ SR_PRIV void cv_send_block_to_session_bus(struct dev_context *devc, int block)
(block * BS) + trigger_point);
packet.type = SR_DF_TRIGGER;
packet.payload = NULL;
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
/* If at least one sample is located after the trigger... */
if (trigger_point < (BS - 1)) {
@@ -502,6 +509,6 @@ SR_PRIV void cv_send_block_to_session_bus(struct dev_context *devc, int block)
logic.length = BS - trigger_point;
logic.unitsize = devc->prof->num_channels / 8;
logic.data = devc->final_buf + (block * BS) + trigger_point;
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
}
}