我已经想要在相当一段时间内至少学习一些关于编程硬件的想法,并且我想在这里要求得到一些起点.我是一个有着Delphi和Objective-c经验的合理成熟的程序员,但从来没有听过设备端口/中断(我甚至不知道术语),更不用说编写一个硬件了.
从我希望能够做的开始,
我认为这是一个很好的起点,任何人都有指向硬件的指针或我如何开始这个?
我是一个学习如何为USB设备编写WDM设备驱动程序的新手,发现可用的材料太难理解了(DDK在线文档是最难读的,而且Oney的WDM设备驱动程序书不是'更好的事情).
所以,我有一个简单的问题.如果我想创建一个虚拟USB设备(例如,一个看起来像是连接到USB端口的真正USB鼠标的虚拟USB鼠标)进行测试/学习,我该从哪里开始.
到目前为止,我所理解的是HIDClass驱动程序(hidclass.sys)有一个用于usb总线(hidusb.sys)的微型驱动程序,它执行连接的USB硬件的枚举.因此,如果我想劫持硬件枚举过程并创建我自己的虚拟硬件,我是否应该在某处包含一个过滤器驱动程序来拦截与硬件枚举过程相关的一些IRP?
很抱歉,如果上述内容完全没有意义,因为我还处于学习阶段,这实际上是我认为可以帮助我学习更好地编写USB设备驱动程序的练习之一.
我运行在Linux上运行的Perl代码:
my $command = "\x{11}\x{22}\x{33}\x{44}\x{55}\x{66}\x{77}\x{88}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}"; # total of 20 bytes to transmit
my $bytesWritten = $device->bulk_write(0x01, $command, 1000);
Run Code Online (Sandbox Code Playgroud)
使用Wireshark,我发现传输的实际应用程序数据是
0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0010 00 00 00 00 00 00 00 00 11 22 33 44
Run Code Online (Sandbox Code Playgroud)
打印$bytesWritten显示传输了20个字节,但这与Wireshark捕获的不同.
可能是什么问题呢?
尝试开箱即用的东西...我有一个简单的应用程序,按下按钮,按下时,播放我的Android平板电脑的音频插孔音乐.
public void btn1 (View view) {
MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
mp.start();
}
Run Code Online (Sandbox Code Playgroud)
我现在已经添加了一个usb音频接口(通过micro usb适配器),我可以听到它的声音.
我能用这个列出声卡
AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
for (AudioDeviceInfo device : devices) {
int b = device.getId();
int d = device.getType();
CharSequence productName = device.getProductName();
}
Run Code Online (Sandbox Code Playgroud)
如何路由音乐以便我可以一次播放2种不同的音乐,一种通过USB播放,另一种通过耳机插孔播放?
是否可以从USB闪存驱动器自动启动应用程序(绕过Windows提示询问用户他想做什么)?在Windows XP或Vista上.
我查看了"autorun.inf"和"open"条目似乎只适用于Windows XP SP2 +和Vista的CD驱动器.是否可以在所有Windows版本上自动启动程序?
我不关心用户在Windows设置中是否禁用了自动运行功能.
图书馆应该;
- 易于使用,几行客户端代码应该完成很多
- 尽可能与平台无关.(如果将来是其他平台的端口) -
有C++绑定.
- 成熟稳定
我还希望通过回调通知大多数HID事件.
我考虑过以下替代方案:
*libhid - (不幸的是?)这是GPL,不能在我的应用程序中使用.
*WDK - 对我来说似乎有点低级别.我不需要那种控制
*atusbhid - 这有一个适当的抽象级别,但与Windows消息传递循环紧密相关
你们中的任何人都有其他选择吗?
我想在虚拟机上的Windows 7虚拟机中使用单声道安卓(又名monodroid),但是我的手机与adb连接有问题.当我运行"adb devices"列出存在的设备时,它显示没有问题,但是当我尝试运行"adb install",logcat或推送它时挂起.目前虚拟机中存在一个适用于此的错误,但我希望有比自己更有知识的人有一个解决方法.
https://www.virtualbox.org/ticket/6620
如果Xamarin发布了他们产品的linux端口或者我熟悉Java,那么粗略的非这个问题将是一个问题,但我认为这些问题略有不同.
在我的Android应用程序中,我通过USB-OTG从3DConnexion SpaceNavigator读取值来控制AR.Drone.
现在我想用鼠标做同样的事情.但是,Android正在抓取鼠标并显示鼠标光标.当我使用鼠标的供应商和产品ID编写设备过滤器时,我不会像使用SpaceNavigator那样得到它(strangely, both are HID -- I get no cursor with the SpaceNavigator).
有没有办法在没有光标的情况下获取原始鼠标数据?
与Android股票完美搭配.但我也会考虑改变ROM.
我有一个完美的USB主机模式应用程序.我插入设备,Android弹出允许应用APPNAME访问USB设备?权限请求窗口,我选中默认情况下使用此USB设备复选框,然后点击确定,然后启动我的应用程序,它与USB设备完美通信.
但...
然后我拔下设备并将其重新插入.Android弹出允许应用APPNAME访问USB设备?对话再次.WTH?我已经告诉Android默认情况下会这样做,那为什么还要再问我一次?
冰淇淋三明治4.0.3和Jellybean 4.1都会发生这种情况.
理想情况下,我希望Android能够记住即使在我重新启动Android设备之后,我也已经授予了对这个特定USB设备的许可.
那么为什么Android不记得我已经授予了许可?
我尝试用我的手机玩Android Studio 2.0但没有成功,我做的是: