我正在寻求通过USB连接到计算机的简单继电器开关控制电源供电.
继电器开关甚至不是USB设备,它只是一个简单的开关,需要USB电压才能打开它.当电压降至阈值以下时,开关将关闭灯.
我的问题是我无法控制USB端口的电源输出.我很高兴在Windows或Linux上使用任何语言(但最好是Java,因为我已经习惯了).
我正在编写一个安装程序来将应用程序安装到USB驱动器上.该应用程序仅用于USB驱动器,因此可以通过自动选择要安装的USB驱动器为用户节省额外的步骤.
我可能会探索使用Nullsoft或MSI进行安装,但由于我最熟悉.NET,因此我最初计划在.NET上尝试自定义.NET安装程序或安装程序组件.
是否可以使用.NET在Windows上确定USB闪存驱动器的驱动器号?怎么样?
什么是在Android设备上访问USB作为串口的最佳方式(HTC Magic)?
我正在考虑一个OBD-II接口.我可以在标准手机上执行此操作,还是更需要修改固件?
在我的应用程序(Delphi)中,我需要列出所有USB存储设备.这些可以是闪存棒或外部存储驱动器.
有一种Jvcl成分JvDriveCombo,它具有DriveType性能-问题是,如果我选择DriveType := Fixed,除了外部驱动器的话,它也列出了内部驱动器(C:\,D:\等).但是,我只想列出外部驱动器.
我相信有DeviceIoControl功能(我在MSDN上看到它),但我不知道如何使用它.
我想知道是否有人可以用正确的方式/代码来帮助我列出USB存储设备?
谢谢.
编辑:
我刚刚找到了一些示例代码并在此处发布:
uses .... jwawinbase, JwaWinIoctl;
procedure TForm1.Button1Click(Sender: TObject);
var
DriveCmdStr: string;
DriveHandle: THandle;
ADriveLetter: string;
hp: STORAGE_HOTPLUG_INFO;
rlen: DWORD;
begin
ADriveLetter := 'H';
DriveCmdStr := Format('\\.\%s:', [ADriveLetter]);
DriveHandle := CreateFile(PChar(DriveCmdStr), GENERIC_READ, FILE_SHARE_WRITE,
nil, OPEN_EXISTING, 0, 0);
if DriveHandle = INVALID_HANDLE_VALUE then
Exit;
DeviceIoControl(DriveHandle, IOCTL_STORAGE_GET_HOTPLUG_INFO, nil, 0, @hp,
SizeOf(hp), @rlen, nil);
CloseHandle(DriveHandle);
if hp.MediaRemovable then
showmessage('media removable');
end;
Run Code Online (Sandbox Code Playgroud)
现在我想知道如何枚举所有的驱动器号.哪个是最有效的功能?
我正在寻找两件事之一
1 - 使用弗洛里安图书馆的代码的工作示例:http://www.florian-leitner.de/index.php/2007/08/03/hid-usb-driver-library/
这似乎是更好的(只有???)C#/ HID库之一,但作者已经走了MIA,我似乎无法获得一个代码示例.我的代码是:
{
USBHIDDRIVER.USBInterface usb = new USBInterface(myvid,mypid);
if (usb.Connect())
MessageBox.Show(”connection!”);
else
MessageBox.Show(”FAIL”);
usb.enableUsbBufferEvent(new System.EventHandler(myEventCacher));
usb.startRead();
}
private void myEventCacher(object sender, EventArgs e)
{
string content = e.ToString();
MessageBox.Show(content);
}
Run Code Online (Sandbox Code Playgroud)
连接部分可以工作,但事件proc永远不会被触发.所以我想知道是否有人在事件处理程序触发时有这个库代码的工作示例.
2 - 如果有一个更好的库来处理C#/ HID交互,我想听听它.
我有一个运行openmediavault的存储服务器,它基于debian.操作系统是直接插在主板上的USB 3.0 Stick(没有USB-Hub或......).系统运行良好大约3个月和2天前我得到了这个错误:
usb 1-3: device descriptor read/64, error -110
usb 1-3: device not accepting address 33, error -110
usb 1-3: device not accepting address 34, error -110
hub 1-0:1.0: unable to enumerate USB device on port 3
Run Code Online (Sandbox Code Playgroud)
当我重新启动服务器时,一切都很好.第二天我面临同样的错误......
我该怎么做才能解决这个问题.我不想放弃3TB的数据......
我想检测用户何时插入或移除USB声卡.当这种情况发生时,我已经成功地抓住了这个事件,但是我不知道插入了什么.
我尝试了一个基于这个问题的方法:
string query =
"SELECT * FROM __InstanceCreationEvent " +
"WITHIN 2 "
+ "WHERE TargetInstance ISA 'Win32_PnPEntity'";
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
watcher.Start();
Run Code Online (Sandbox Code Playgroud)
当我通过EventArrived事件收到通知时,我不知道如何确定刚刚插入的设备的实际名称.我已经浏览了每个属性,无法用它做出正面或反面.
我也尝试了不同的查询:
var query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent where EventType = 1 or EventType = 2");
var watcher = new ManagementEventWatcher(query);
watcher.EventArrived += watcher_EventArrived;
watcher.Stopped += watcher_Stopped;
watcher.Query = query;
watcher.Start();
Run Code Online (Sandbox Code Playgroud)
但也无济于事.有没有办法找到插入或删除的设备的名称.
最重要的是,我想知道什么时候插入USB声卡或从系统中删除.它应该适用于Windows 7和Vista(虽然我只会满足于Win7).
编辑:根据获胜提交者的建议,我创建了一个包含所有功能的完整解决方案.
我想在Ubuntu 14中使用我的ACR122U非接触式智能卡读卡器.所以我安装了我需要的包和驱动程序.
最后,当我想使用阅读器时,我收到以下错误:
rc@rc-System-Product-Name:~/Desktop/itsme$ sudo nfc-list
[sudo] password for rc:
nfc-list uses libnfc 1.7.0
error libnfc.driver.acr122_usb Unable to claim USB interface (Device or resource busy)
nfc-list: ERROR: Unable to open NFC device: acr122_usb:001:020
rc@rc-System-Product-Name:~/Desktop/itsme$
rc@rc-System-Product-Name:~/Desktop/itsme$ sudo mfoc -O output.txt
error libnfc.driver.acr122_usb Unable to claim USB interface (Device or resource busy)
No NFC device found.
rc@rc-System-Product-Name:~/Desktop/itsme$
Run Code Online (Sandbox Code Playgroud)
我的读者似乎正在使用内核工具.我搜索了很多.有很多人已经有同样的问题,但我找不到他们的答案.
有没有人知道如何解决这个问题?(通过回收设备,例如)
总结(我们做了什么,我们尝试了什么):
基本上,目的是通过使用adb源代码在两台Linux计算机之间通过usb建立adb协议.
Envinronment是Ubuntu 16.0.4.有一个android-tools-adbd(adb守护程序)包准备在池中使用,其源可用.
此链接上的源(adbd)可与gcc选项-stc = c ++ 14兼容,默认情况下(或gcc 5.2)在16.0.4中受支持.
我们可以使用adb connect(依赖于TCP/IP)从源代码构建软件包或使用已构建的软件包成功构建软件包.如果两台计算机连接到同一网络,则通过TCP/IP进行adb连接没有问题.
不幸的是,我们无法使用A到A(两个都是)电缆在两台计算机之间设置USB连接.ADB小工具无法正常工作,并且所有设备都无法识别其他设备.除了ADB小工具之外,我们无法确定是否需要显式驱动程序.
问题是(真正的问题需要回答):
如何在两台Linux计算机之间设置USB协议,以便通过USB完成adb通信?
它有什么解决方案吗?
[ - -编辑 - -]
笔记:
日复一日,小问题离开了.对于那些想要参与的人; 我们正在遵循本指南.
(内核版本4.4.0-38-通用)
运行正确的udc(USB设备控制器)驱动程序时遇到问题.激活ConfigFS后modprobe usb_f_fs,xdg-adbd (可从源链接执行,adbd)正常工作,直到if(...)检测到udc驱动程序.我们尝试了运行,modprobe musb_hdrc但没有看到明确的驱动程序名称/sys/class/udc.
(2016年9月27日)
我正在编写自己的操作系统.到目前为止,我的代码超过512字节,这太大了,无法容纳在简单的引导扇区中.
据我所知,我现在必须编写一个读取任意代码的引导加载程序,这些代码可能会也可能不会超过一个512字节的扇区.
引导程序需要:
这也是提出涉及操作系统开发的Stack Overflow问题的一个很好的起点.程序员经常很难创建一个Minimal,Complete和Verifiable示例.一个常见的样板/模板将允许其他Stack Overflow用户希望通过有限的大惊小怪来帮助测试代码.
我将如何构建这样一个可重用的引导程序?
usb ×10
android ×2
c# ×2
.net ×1
acr122 ×1
adb ×1
adb-drivers ×1
assembly ×1
bootloader ×1
controls ×1
debian ×1
delphi ×1
device ×1
drives ×1
external ×1
hard-drive ×1
hid ×1
nfc ×1
osdev ×1
peripherals ×1
serial-port ×1
ubuntu ×1
wmi ×1
x86 ×1