コード例 #1
0
        private void Button1_Click(object sender, EventArgs e)
        {
            if (is_USB_device_connected)
            {
                HID_write_buffer[0] = 0x00; /* must equal to 0x00. */

                HID_write_buffer[1] = 0x55;
                HID_write_buffer[2] = 0xAA;
                UserHIDAPI.HID_Write(target_hid_device, HID_write_buffer, HID_write_buffer.Length);
            }
            else
            {
                MessageBox.Show("USB device is not connected!");
            }
        }
コード例 #2
0
        private void USB_Background_Receive()
        {
            int  ret = 0;
            bool is_thread_close_needed = false;

retry:
            if (0 != UserHIDAPI.HID_Init())
            {
                ret = -1;

                goto exit_0;
            }

            IntPtr target_hid_device_info = UserHIDAPI.HID_Enumerate(VIDtest, PIDtest);

            if (IntPtr.Zero == target_hid_device_info)
            {
                ret = -2;

                goto exit_1;
            }

            target_hid_device = UserHIDAPI.HID_Open(VIDtest, PIDtest, IntPtr.Zero);
            if (IntPtr.Zero == target_hid_device)
            {
                ret = -3;

                goto exit_2;
            }

            is_USB_device_connected = true;

            while (true)
            {
                int read_hid_data_amount = UserHIDAPI.HID_Read_Timeout(target_hid_device, HID_read_buffer, HID_read_buffer.Length, USB_COMMUNICATION_TIMEOUT_IN_MILLISECONDS);
                if (0 > read_hid_data_amount)
                {
                    if (!thread_main.IsAlive)
                    {
                        is_thread_close_needed = true;

                        goto exit_3;
                    }

                    ret = -5;

                    goto exit_3;
                }
                else if (0 == read_hid_data_amount)
                {
                    if (!thread_main.IsAlive)
                    {
                        is_thread_close_needed = true;

                        goto exit_3;
                    }

                    continue;
                }

                string read_hid_data = String.Empty;
                for (int i = 0; i < HID_read_buffer.Length; i++)
                {
                    read_hid_data += HID_read_buffer[i].ToString("X2") + " ";
                    if (15 == (i % 16))
                    {
                        read_hid_data += "\n";
                    }
                }

                try
                {
                    RichTextBox_Show(read_hid_data);
                }
                catch
                {
                    is_thread_close_needed = true;

                    goto exit_3;
                }
            }

exit_3:
            UserHIDAPI.HID_Close(target_hid_device);

exit_2:
            UserHIDAPI.HID_Free_Enumeration(target_hid_device_info);

exit_1:
            if (0 != UserHIDAPI.HID_Exit())
            {
                ret = -4;
            }

exit_0:
            string stringresult = "ret = " + ret + ": ";

            switch (ret)
            {
            case -1:
                stringresult += "fail HID_Init()";
                break;

            case -2:
                stringresult += "fail HID_Enumerate()";
                break;

            case -3:
                stringresult += "fail HID_Open()";
                break;

            case -4:
                stringresult += "fail HID_Exit()";
                break;

            case -5:
                stringresult += "fail HID_Read_Timeout()";
                break;

            default:
                stringresult += "fail unknown";
                break;
            }
            stringresult += "\n";

            is_USB_device_connected = false;

            if (is_thread_close_needed)
            {
                return;
            }

            try
            {
                RichTextBox_Show(stringresult);
            }
            catch
            {
                return;
            }

            goto retry;
        }