我正在寻找一种通过USB接口读取接线电压并返回数据的设备.我将如何编程来解释这些数据以及我将使用哪种语言?
编辑:如果有帮助,该项目将为不支持全面ODB2数据端口的旧引擎开发数字转速计.因此,它将读取直流电路上的电压并具有精确的图形界面.我完全不知道从哪里开始,但我决心让它发挥作用!这是为了窗户.
我开发了一个USB设备,通过简单但专有的界面和一些自定义Linux驱动程序与linux通信.我的目标是在没有编写Windows驱动程序的情况下将其移植到Windows.我想要做的是找到一个开源或内置类驱动程序的Windows,看起来像Windows中的COM端口.然后我将定制嵌入式软件以匹配虚拟COM端口期望看到的协议和描述符.
我的想法是,我可以将我的设备插入Windows机器,并且会出现相对高速的COM端口,而我不得不为它开发Windows驱动程序.
我一直在看USB CDC(通信设备类)文档,它看起来很有希望,但我不知道哪个子接口最好用,以便它显示为COM端口.
这里有没有人做过这样的工作或者可以提供一些见解?特别:
谢谢
对于家庭作业,我写了一个字符设备驱动程序.它似乎工作正常.我可以读写它.问题是,当我读取设备时,它无休止地循环,反复打印出消息缓冲区的内容.
这似乎应该是相当直接的.只需使用copy_to_user(),但事实证明这是非常有问题的.
无论如何,这是代码.我认为问题出在gdev_read()函数中.printk用作调试和谈话点,因为我必须在课堂上展示项目.
/*
* Implement a generic character pseudo-device driver
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/cdev.h>
#include <linux/types.h>
#include <linux/vmalloc.h>
#include <asm/uaccess.h>
/* you need these, or the kernel will be tainted */
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("A simple sample character device driver");
/*
* function prototypes
*/
int init_module(void);
void cleanup_module(void);
static ssize_t gdev_read(struct file *, char *, size_t, loff_t *);
static ssize_t gdev_write(struct file *, const char *, size_t, loff_t *);
static int gdev_open(struct inode *, struct …Run Code Online (Sandbox Code Playgroud) 如何创建自己的生物请求以从磁盘驱动器读取扇区?
我正在尝试以下但它冻结了系统.
static void read_bio()
{
struct bio *b;
struct page *p;
b = bio_alloc(GFP_KERNEL, 1);
if (!b) {
printk(KERN_INFO "bio allocation failed\n");
}
bio_init(b);
b->bi_sector = 10000;
b->bi_bdev = bd; /* "/dev/sda1" */
b->bi_end_io = bio_end_clone;
p = alloc_page(GFP_KERNEL);
if (!p) {
printk(KERN_INFO "page allocation failed\n");
}
bio_add_page(b, p, PAGE_SIZE, 0);
b->bi_private = p;
bio_get(b);
submit_bio(READ, b);
printk(KERN_DEBUG "submit read request\n");
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将当前的XPDM镜像驱动程序移植到Windows 8.Microsoft
在Windows 8下完全禁用镜像驱动程序,但在MSDN上它说
基于镜像驱动程序体系结构的远程显示驱动程序模型也可以从Windows 8开始运行.有关详细信息,请参阅远程显示驱动程序.
并在远程显示驱动程序页面上,它说:
远程显示驱动程序基于Windows 2000镜像驱动程序模型,用于在远程会话中呈现桌面.
但是,我可以在网站上找到"远程显示驱动程序"的更多信息,除了这个和MSDN上的这个链接.我唯一的信息是它基于Win2K镜像驱动程序模型,但我不知道应该做些什么来使它与Windows 8兼容.
我试图将XPDM镜像驱动程序代码库移植到Visual Studio 2012中,并且我使用了相同的inf文件.代码可以在Windows 8上成功编译和部署,但内核不会加载显示驱动程序.
显示驱动程序名为accdrv.dll,微型端口驱动程序为mirror.sys.调试内核时,只加载mirror.sys.
有没有可以找到"远程显示驱动程序"信息的地方?所以我可以继续这项工作吗?
我正在设计一个Linux角色设备驱动程序.我想在ioctl()系统调用中发生错误时设置errno.
long my_own_ioctl(struct file *file, unsigned int req, unsigned long arg)
{
long ret = 0;
BOOL isErr = FALSE;
// some operation
// ...
if (isErr) {
// set errno
// ... <--- What should I do?
ret = -1;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能实现这一目标?提前谢谢你!
请允许我更详细地解释我的申请.
我的设备位于/ dev/myCharDev中.我的用户空间应用程序是这样的:
#define _COMMAND (1)
#define _ERROR_COMMAND_PARAMETER (-1)
int main()
{
int fd = open("/dev/myCharDec", O_RDONLY);
int errnoCopy;
if (fd) {
if (ioctl(fd, _COMMAND, _ERROR_COMMAND_PARAMETER) < 0) { // should cause error in …Run Code Online (Sandbox Code Playgroud) 我对DMA和中断I/O之间的差异有点不清楚.(目前正在阅读操作系统概念,第7版).
具体来说,我不确定在任何一种情况下中断何时发生,并且在两种情况下在哪些点上CPU都可以自由地进行其他工作.我一直在阅读的东西,但不一定和解:
中断驱动
DMA
我们有一个3米的微触摸显示屏.它通过usb与我的debian系统相连,并被认为是人机界面(hid).我正在尝试访问并推送实时信息......如果它被触及我想知道哪里(x,y)并将它通过netcat传递给另一台主机.
不幸的是,我只能使用原始数据
cat /dev/input/event2 | hexdump
Run Code Online (Sandbox Code Playgroud)
要么
evtest
你得到的hexcode似乎没有记录......
有人知道如何获取这些信息吗?必须有一种从十六进制代码中提取它的方法.不幸的是我不知道如何解释hexcode.我找不到其记录的任何来源......
有没有办法让内核能够实时提供我想要的信息?作为一个解决方案,可能有一个X-Server可以告诉我的解决方案?触摸屏的行为类似于X中的鼠标.我实际上已经尝试通过xlib获取鼠标的x,y位置.但它太慢了,不会告诉我是否有人在接触......
提前致谢!
evtest样本输出:
Event: time 1425319271.595631, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 51
Event: time 1425319271.595631, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 10304
Event: time 1425319271.595631, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 30629
Event: time 1425319271.595631, type 3 (EV_ABS), code 48 (ABS_MT_TOUCH_MAJOR), value 893
Event: time 1425319271.595631, type 3 (EV_ABS), code 49 (ABS_MT_TOUCH_MINOR), value 414
Event: time 1425319271.595631, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: …Run Code Online (Sandbox Code Playgroud) 编辑:此处报告的问题:https://github.com/signal11/hidapi/issues/276
Inkling是Wacom的笔设备.(InklingReader)是一个开源项目,可以从中获取实时数据.
我正在尝试整理InklingReader以使用HIDAPI而不是libusb (因为它在更高级别工作:HID而不是原始USB,所以更紧凑和更合适.此外,libusb在最近的OSX上失败).
HID API是一个小型lib:一个.h,一个(每个平台).c.
我的代码看起来像这样:
unsigned short inklingVendorId = 0x056a, inklingProductId = 0x0221;
if (hid_init() == FAIL) return;
handle = hid_open(inklingVendorId, inklingProductId, nullptr);
Run Code Online (Sandbox Code Playgroud)
在Windows上hid_open失败.单步执行揭示了这里的失败点:
// path = "\\\\?\\hid#vid_056a&pid_0221&mi_00&col01#8&1ea90857&0&0000#"
// "{4d1e55b2-f16f-11cf-88cb-001111000030}"
//
static HANDLE open_device(const char *path, BOOL enumerate)
{
HANDLE handle;
DWORD desired_access = (enumerate)? 0: (GENERIC_WRITE | GENERIC_READ);
DWORD share_mode = FILE_SHARE_READ|FILE_SHARE_WRITE;
// enumerate = 0
handle = CreateFileA(path,
desired_access,
share_mode,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,/*FILE_ATTRIBUTE_NORMAL,*/
0); …Run Code Online (Sandbox Code Playgroud) 在我的OpenGL渲染引擎中,当我按下一个开始发出一些新的OpenGL调用的键后,我正在崩溃1帧.
以下是崩溃的调用堆栈,它是一个CVDisplayLink线程.
0 libsystem_kernel.dylib 0x00007fff94d89f06 __pthread_kill + 10
1 libsystem_pthread.dylib 0x00007fff88d3e4ec pthread_kill + 90
2 libsystem_c.dylib 0x00007fff980246e7 abort + 129
3 libGPUSupportMercury.dylib 0x00007fff983a3e5c gpusGenerateCrashLog + 158
4 com.apple.driver.AppleIntelHD5000GraphicsGLDriver 0x000000010f750d4b gpusKillClientExt + 9
5 libGPUSupportMercury.dylib 0x00007fff983a5204 gpusSubmitDataBuffers + 162
6 com.apple.driver.AppleIntelHD5000GraphicsGLDriver 0x000000010f2ac3f2 IntelCommandBuffer::getNew(GLDContextRec*) + 48
7 com.apple.driver.AppleIntelHD5000GraphicsGLDriver 0x000000010f399849 intelSubmitCommands + 171
8 com.apple.driver.AppleIntelHD5000GraphicsGLDriver 0x000000010f3996c2 gldPresentFramebufferData + 142
9 GLEngine 0x000000010f0ddc81 glSwap_Exec + 97
10 com.apple.GLEngineProfiler 0x000000010d759265 0x10d60b000 + 1368677
11 com.apple.opengl 0x00007fff8ed15ffe CGLFlushDrawable + 66
12 com.apple.AppKit 0x00007fff8846509f -[NSOpenGLContext flushBuffer] + …Run Code Online (Sandbox Code Playgroud)