VC# - Obsługa USB-HID.

0

Mam program, który monitoruje stan przycisku.
Problem jest taki, że wszystko się skompiluje ale z uruchomieniem to już nie jest dobrze, wciąż wyskakuje mi:

Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.

w linijce :

HidLibrary.HidReport wej = new HidLibrary.HidReport(hidusb.Capabilities.InputReportByteLength);

Mój kod to:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using HidLibrary;

namespace stm32_usb
{
    public partial class Form1 : Form
    {
        private static HidDevice hidusb;
        byte[] button = new byte[1];

       
        public Form1()
        {
            InitializeComponent();
            Thread odczyt = new Thread(odczyt_danych);
            odczyt.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            hidusb = HidDevices.Enumerate(VID, PID).FirstOrDefault();
            if (hidusb != null)
            {
                hidusb.OpenDevice();
                label1.Text = "Podłączony";

                if (button[0] == 0x01)
                    panel1.BackColor = Color.Green;
                else
                    panel1.BackColor = Color.Red;
            }
            else
            {
                label1.Text = "Nie połączony";
            }
        }

        void odczyt_danych()
        {
            HidLibrary.HidReport wej = new HidLibrary.HidReport(hidusb.Capabilities.InputReportByteLength);
            while (true)
            {
                if (hidusb != null)
                {
                    wej = hidusb.ReadReport();
                    if (wej.ReportId == 0x02)
                        button[0] = wej.Data[0];
                }
                Thread.Sleep(50);
            }
        }

    }
}
0

W metodzie odczyt_danych() (BTW, tak się nie nazywa metod!) hidusb jest null, bo wątek odczyt tworzony w konstruktorze formatki uruchamia się szybciej niż zdarzenie timer1_Tick.
Wypadałoby go najpierw zainicjalizować, a potem użyć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1