rpi-ws281x / rpi-ws281x-csharp

C# / .NET library wrapper for the rpi-ws281x library
BSD 2-Clause "Simplified" License
28 stars 17 forks source link

Exception is thrown when using .NET Core #2

Open Urmel11 opened 6 years ago

Urmel11 commented 6 years ago

As reported in issue #1, the library throws following System.ArgumentException when using .NET Core.

Unhandled Exception: System.ArgumentException: Object contains non-primitive or non-blittable data.
   at System.Runtime.InteropServices.GCHandle.InternalAlloc(Object value, GCHandleType type)
   at System.Runtime.InteropServices.GCHandle.Alloc(Object value, GCHandleType type)
   at rpi_ws281x.WS281x..ctor(Settings settings) in /home/daniel/Documents/RPI/rpi-ws281x-csharp/src/rpi_ws281x/WS281x.cs:line 28
   at TestAppCore.ColorWipe.Execute(AbortRequest request) in /home/daniel/Documents/RPI/rpi-ws281x-csharp/src/TestAppCore/ColorWipe.cs:line 27
   at TestAppCore.Program.Main(String[] args) in /home/daniel/Documents/RPI/rpi-ws281x-csharp/src/TestAppCore/Program.cs:line 38
DanielSSilva commented 6 years ago

As stated here , your code works because there's a bug on mono (how ironic is that right?). Later I'll try the given solution and report back here

DanielSSilva commented 6 years ago

I've got it working. Basically I've done what they suggested, removed the array and set 2 fields

tillig commented 5 years ago

@DanielSSilva I'm coming in late to this, but are you saying you changed ws2811_t to look like this?

    [StructLayout(LayoutKind.Sequential)]
    internal struct ws2811_t
    {
        public long render_wait_time;
        public IntPtr device;
        public IntPtr rpi_hw;
        public uint freq;
        public int dmanum;
        public ws2811_channel_t channel_0;
        public ws2811_channel_t channel_1;
    }

I did that and got past the blittable error and am now into some invalid GPIO pin errors, but that may just mean me having to work through required changes based on the above. Just wanted to make sure I'm on the right track.

DanielSSilva commented 5 years ago

Hello @tillig. IIRC what I've done was something like that yes. https://github.com/rpi-ws281x/rpi-ws281x-powershell/blob/master/src/Native/ws2811_t.cs#L16-L17 On that repo there's this project but with that small change on my side. Although that seemed to work, I've had some segmentation fault errors :( I haven't got back to it, but if you need any help ping me!

tillig commented 5 years ago

@DanielSSilva Awesome, thanks! I'm going to continue muscling through and will ping you if needed - I appreciate that offer.