@@ -99,6 +99,12 @@ DEFINE_uint32(sigrok_samples, 200, "Set the Sigrok sample count.");
9999DEFINE_uint32 (sigrok_time, 2000 , " Set the Sigrok sample time in ms." );
100100DEFINE_string (sigrok_device, " demo" , " Set the Sigrok device to use." );
101101
102+ #ifdef HAVE_LIBSIGROK_DEV_INST_OPAQUE
103+ #define SIGROK_DRIVER_FROM_INSTANCE (sdi ) sr_dev_inst_driver_get(sdi)
104+ #else
105+ #define SIGROK_DRIVER_FROM_INSTANCE (sdi ) sdi->driver
106+ #endif // HAVE_LIBSIGROK_DEV_INST_OPAQUE
107+
102108// void OnReadData(U64 device_id, U8 *data, uint32_t data_length,
103109// void *user_data);
104110// void OnError(U64 device_id, void *user_data);
@@ -148,8 +154,6 @@ class LogicReader {
148154 CommandPrinter m_command_printer;
149155 Mutex m_data_mu;
150156// std::queue<U8*> m_free_data;
151- // uint8_t* copy_data;
152- uint8_t copy_data[5000000 ];
153157
154158
155159 void ProcessData (uint8_t *data, uint64_t data_length);
@@ -164,11 +168,7 @@ class LogicReader {
164168static void sigrok_feed_callback (const struct sr_dev_inst *sdi,
165169 const struct sr_datafeed_packet *packet,
166170 void *cb_data) {
167- #ifdef HAVE_LIBSIGROK_DEV_INST_OPAQUE
168- sr_dev_driver *driver = sr_dev_inst_driver_get (sdi);
169- #else
170- sr_dev_driver *driver = sdi->driver ;
171- #endif // HAVE_LIBSIGROK_DEV_INST_OPAQUE
171+ sr_dev_driver *driver = SIGROK_DRIVER_FROM_INSTANCE (sdi);
172172
173173 OLA_DEBUG << " Got feed callback for " << driver->name ;
174174
@@ -337,32 +337,20 @@ void *SigrokThread::Run() {
337337 }
338338
339339 GVariant *gvar;
340- sr_config_get (
341- #ifdef HAVE_LIBSIGROK_DEV_INST_OPAQUE
342- sr_dev_inst_driver_get (sdi),
343- #else
344- sdi->driver ,
345- #endif // HAVE_LIBSIGROK_DEV_INST_OPAQUE
346- sdi, NULL , SR_CONF_SAMPLERATE, &gvar);
340+ sr_config_get (SIGROK_DRIVER_FROM_INSTANCE (sdi), sdi, NULL , SR_CONF_SAMPLERATE, &gvar);
347341 OLA_INFO << " Initial sample rate is " << g_variant_get_uint64 (gvar) << " Hz" ;
348342 g_variant_unref (gvar);
349343
350- if ((ret = sr_config_set (
351- sdi, NULL , SR_CONF_SAMPLERATE,
344+ if ((ret = sr_config_set (sdi, NULL , SR_CONF_SAMPLERATE,
352345 g_variant_new_uint64 (FLAGS_sample_rate))) != SR_OK) {
353346 OLA_FATAL << " Error setting config sample rate via libsigrok driver "
354347 << driver->name << " (" << sr_strerror_name (ret) << " ): "
355348 << sr_strerror (ret);
356349 return NULL ;
357350 }
358351
359- sr_config_get (
360- #ifdef HAVE_LIBSIGROK_DEV_INST_OPAQUE
361- sr_dev_inst_driver_get (sdi),
362- #else
363- sdi->driver ,
364- #endif // HAVE_LIBSIGROK_DEV_INST_OPAQUE
365- sdi, NULL , SR_CONF_SAMPLERATE, &gvar);
352+ sr_config_get (SIGROK_DRIVER_FROM_INSTANCE (sdi), sdi, NULL ,
353+ SR_CONF_SAMPLERATE, &gvar);
366354 OLA_INFO << " New sample rate is " << g_variant_get_uint64 (gvar) << " Hz" ;
367355 g_variant_unref (gvar);
368356
@@ -373,15 +361,16 @@ void *SigrokThread::Run() {
373361// return NULL;
374362// }
375363
376- /* if (sr_dev_has_option(sdi, SR_CONF_LIMIT_MSEC)) {
364+ if (sr_dev_has_option (sdi, SR_CONF_LIMIT_MSEC)) {
377365 gvar = g_variant_new_uint64 (FLAGS_sigrok_time);
378366 if (sr_config_set (sdi, NULL , SR_CONF_LIMIT_MSEC, gvar) != SR_OK) {
379367 OLA_FATAL << " Failed to configure time limit." ;
380368 return NULL ;
381369 }
382370 } else if (sr_dev_has_option (sdi, SR_CONF_SAMPLERATE)) {
383371 // Convert to samples based on the samplerate.
384- sr_config_get(sdi->driver, sdi, NULL, SR_CONF_SAMPLERATE, &gvar);
372+ sr_config_get (SIGROK_DRIVER_FROM_INSTANCE (sdi), sdi, NULL ,
373+ SR_CONF_SAMPLERATE, &gvar);
385374 uint64_t limit_samples = (g_variant_get_uint64 (gvar) *
386375 (FLAGS_sigrok_time / (uint64_t )1000 ));
387376 g_variant_unref (gvar);
@@ -394,21 +383,21 @@ void *SigrokThread::Run() {
394383 OLA_FATAL << " Failed to configure time-based sample limit." ;
395384 return NULL ;
396385 }
397- }*/
386+ }
398387
399- // Just samples based
388+ /* // Just samples based
400389 gvar = g_variant_new_uint64(FLAGS_sigrok_samples);
401390 if (sr_config_set(sdi, NULL, SR_CONF_LIMIT_SAMPLES, gvar) != SR_OK) {
402391 OLA_FATAL << "Failed to configure time-based sample limit.";
403392 return NULL;
404- }
393+ }*/
405394
406395#ifdef HAVE_LIBSIGROK_CONTEXT
407396 if ((ret = sr_session_datafeed_callback_add (sr_sess, sigrok_feed_callback,
408- & m_reader)) != SR_OK) {
397+ m_reader)) != SR_OK) {
409398#else
410399 if ((ret = sr_session_datafeed_callback_add (sigrok_feed_callback,
411- & m_reader)) != SR_OK) {
400+ m_reader)) != SR_OK) {
412401#endif // HAVE_LIBSIGROK_SESSION
413402 OLA_FATAL << " Error adding session datafeed callback via libsigrok ("
414403 << sr_strerror_name (ret) << " ): " << sr_strerror (ret);
@@ -527,19 +516,11 @@ void LogicReader::DataReceived(uint8_t *data, uint64_t data_length) {
527516// for (unsigned int i = 0 ; i < data_length; i++) {
528517// OLA_DEBUG << "Got sample (before) " << ToHex(data[i]);
529518// }
530- OLA_DEBUG << " Copied..." ;
531- // uint8_t* copy_data;
532- // copy_data = new uint8_t[data_length];
533- // copy_data = (uint8_t*) malloc(data_length);
534- memcpy (copy_data, data, data_length);
535519 // ola::strings::FormatData(&std::cout, copy_data, data_length);
536520// OLA_DEBUG << "Got " << logic->length << " samples";
537521 OLA_DEBUG << " Got " << data_length << " samples" ;
538- // TODO(Peter): The callback segfaults, but this works...
539- LogicReader::ProcessData (copy_data, data_length);
540- // m_ss->Execute(
541- // NewSingleCallback(this, &LogicReader::ProcessData, data, data_length));
542- // NewSingleCallback(this, &LogicReader::ProcessData, copy_data, data_length));
522+ m_ss->Execute (
523+ NewSingleCallback (this , &LogicReader::ProcessData, data, data_length));
543524// NewSingleCallback(this, &LogicReader::ProcessData, data_length));
544525// NewSingleCallback(this, &LogicReader::ProcessData, logic));
545526// for (unsigned int i = 0 ; i < data_length; i++) {
@@ -599,7 +580,6 @@ void LogicReader::ProcessData(uint8_t *data, uint64_t data_length) {
599580// OLA_DEBUG << "Got sample " << ToHex(data[i]);
600581// }
601582 m_signal_processor.Process (data, data_length, 0x01 );
602- // m_signal_processor.Process(copy_data, data_length, 0x01);
603583// DevicesManagerInterface::DeleteU8ArrayPtr(data);
604584
605585 /*
0 commit comments