It looks like the data I’m sending it is reasonable (hold the same position, parallel arrays have correct/matching sizes, empty count:10, retain:no, last point:no).
Can you tell me what “attribute” it might be complaining about?
The error quoted above is in a parameter validation function. There are a variety of ways in which it might throw an error. That section has the following logic.
If you have RSIMotionAttrMaskOUTPUT enabled, throw an error if the outputCount <= 0 or if the output object is NULL.
You may be hitting other attribute or arg invalid cases. If you show me the error message, I can tell you more directly what failed.
Yeah that matches up with the case where you have the OUTPUT AttrMask but no actual Outputs added. You could tell an Output to set to the value it already is if you want to avoid this error AND not change anything.
First, I was clearly doing something the wrong way by separating the logic of filling the container and the logic of conditionally calling the APIs based on its contents.
Speaking of documentation, is there a topic for synchronized outputs? I couldn’t find anything but API docs and some code samples where only a single move/burst was being commanded. In my situation, I am continuously filling a motion buffer, and sometimes have outputs that need to be turned on/off with that data.
That aside, I set breakpoints at the places in my code where the sync outputs calls were being made, and I definitely saw calls to StreamingOutputsEnableSet(true) without any call(s) to StreamingOutputAdd(...) and MovePT(...) didn’t throw an exception. I don’t know how common it is, that this happens. I might be oversimplifying my description, but are there ways (other than the one you just described) where setting the attribute and not adding any outputs won’t fail?