ni / nidaqmx-python

A Python API for interacting with NI-DAQmx
Other
432 stars 154 forks source link

Event Callbacks Contain Unusable Parameters #143

Open maxxboehme opened 2 years ago

maxxboehme commented 2 years ago

Original discussion on NI's forms.

DAQmx's event callback signatures include a Task ID and callbackData parameters even though there currently isn't a way to get a task object from a Task ID or be able to pass in user provided callbackData (register_every_n_samples_acquired_into_buffer_event passes None as the data.)

Having to specify these to parameters in the signature even though they are not usable is confusing the users.

These are 2 ideas on how to improve this.

joshSonera commented 2 years ago

Is there really no way to pass user variables in for callback_data? That would be unfortunate.

maxxboehme commented 2 years ago

You can reference variables in the callback by creating an inner function (also called nested function) and Python allows you to reference variables from the enclosing function. You can see this being done in the every_n_samples_event.py example with the "callback" inner function referencing "samples" from the enclosed function.

joshSonera commented 2 years ago

Ahh I see, thank you very much!

JoKeyser commented 2 months ago

Thanks, this helped me as well.

For anyone else reading this in the future, here the perma-link to the code version referenced above by @maxxboehme :

https://github.com/ni/nidaqmx-python/blob/caf1b1cede57b5413d96077ba3ee61e243d83547/nidaqmx_examples/every_n_samples_event.py#L21

bkeryan commented 2 months ago

FYI, here are two ways to pass user variables to the callback without using local functions (untested):

(Still, we should fix this.)