ni / niveristand-aim-milStd1553-custom-device

Custom device for AIM MIL-STD-1553 hardware
MIT License
1 stars 2 forks source link

Using multiple BIUs on the same PXIe module doesn't work #50

Closed Karl-G1 closed 2 years ago

Karl-G1 commented 2 years ago

Describe the bug AIM 1553 PXIe modules can have 1, 2, or 4x BIUs. These are targeted with a CD instance per BIU, and they should be able to be controlled completely independently. For example, the same Parameters file should be able to be used for 2x CDs targeting 2x BIUs on the same module.

Currently, the buffer and buffer header IDs used to address the low-level driver API in the custom device prevents this from working.

To Reproduce Steps to reproduce the behavior:

  1. Use the parameters file below to create 2x CD instances targeting 2x BIUs on the same module
  2. Deploy and modify the Tx values on one of the Tx words
  3. See the Rx values for both CDs update

Parameters - One Message.zip

Expected behavior The Rx and Tx channels of the same configuration file deployed to 2x BIUs on the same module should be backed by separate buffers. A few different approaches are possible:

Screenshots

Today, the behavior results in the same buffer IDs being used. This makes the data read by message on both BIUs the same: ![image](https://user-images.githubusercontent.com/31290917/178025442-0b1add86-98dc-4b81-9c15-6b4e831f0886.png) ![image](https://user-images.githubusercontent.com/31290917/178027889-a35f4049-96e3-4aea-badf-16b4333409e0.png)
If different buffer IDs are used, the values are independent: ![image](https://user-images.githubusercontent.com/31290917/178027580-77133d2e-6d9a-4836-956c-fe492721322c.png) ![image](https://user-images.githubusercontent.com/31290917/178027743-1c861a6a-8fb4-4672-b5b7-c583c7ffdbbf.png)

Additional context

Buffer and Buffer Header ID from the API help: ![image](https://user-images.githubusercontent.com/31290917/178027588-04c199fa-e06e-4394-9ceb-39e3cca47d3e.png)
Karl-G1 commented 2 years ago

53 enacted the first workaround:

  • Use a fixed buffer ID range based on the BIU number It appears that 8191 buffer/header IDs are addressable (from testing on 1x and 2x BIU modules). A simple solution would be to limit the custom device to ~2000 IDs per instance, then offset by the BIU number. This would limit the maximum number of messages/endpoints that can be simulated, but it is the easiest to implement