简体   繁体   English

八进制常量错误(libusb)

[英]octal constant error (libusb)

I am running Ubuntu 12.04 compiling a c++ file which has the following code 我正在运行Ubuntu 12.04编译具有以下代码的c ++文件

#include <iostream>
#include <libusb-1.0/libusb.h>

using namespace std;

int main(){
    //pointer to pointer of device used to retrieve a list of devices
    libusb_device **devs;
    libusb_device_handle *dev_handle; //a device handle
    libusb_context *ctx = NULL; //A LIBUSB session
    int r;// for return values
    ssize_t cnt; //holding number of devices in list
    r = libusb_init(&ctx); // initialize the library for the session we just declared

    if(r < 0){
        cout <<"init error "<<r<< endl;
        return 1;
    }

    libusb_set_debug(ctx, 3); // set verbosity level to 3, as suggested in the documentation
    cnt = libusb_get_device_list(ctx, &devs); //get the list of devices

    if (cnt < 0) {
        cout <<"Get Device Error "<< endl; // there was an error
        return 1;
    }

    cout << cnt <<" Device in list " << endl;
    //dev_handle = libusb_open_device_with_vid_pid(ctx, 0951, 1689); // these are vendor id and product id   //simon's usb(duracell)1516:1213
    dev_handle = libusb_open_device_with_vid_pid(ctx, 0951, 1689); //these are vendorID and productID I found for my usb device

    if (dev_handle == NULL){
        cout <<"Cannot open device "<< endl;
    }else{
        cout << "Device opened" << endl;
    }

    libusb_free_device_list(devs, 1);// free the list unref the devices in it

    unsigned char *data = new unsigned char[4];//data to write
    data[0] = 'a'; data[1] = 'b'; data[2] = 'c'; data[3] = 'd';//some dummy values

    int actual; //used to find how many bytes were written

    if (libusb_kernel_driver_active(dev_handle, 0) == 1){// findout if kernal driver attached
        cout << "Kernal Driver Active" << endl;
        if (libusb_detach_kernel_driver(dev_handle, 0) == 0 ){  //detach it
            cout<< "Kernal Driver Detached" << endl;
        }
    }

    r = libusb_claim_interface(dev_handle, 0);// claim interface 0 (the first) of devices

    if(r < 0){
        cout <<"Cannot claim interface "<<endl;
        return 1;
    }

    cout <<"Claimed interface "<<endl;

    cout<<"data->"<<data<<"<-"<<endl; // just to see the data we want to write : abcd
    cout<<"Writing data..."<<endl;

    r = libusb_bulk_transfer(dev_handle, (2 | LIBUSB_ENDPOINT_OUT), data, 4, &actual, 0);//my device's out endpoint was 2, found withe trial - the device had two endpoints: 2 and 129

    if(r == 0 && actual == 4){  // we wrote 4 bytes successfully
        cout<<"Writing successfull"<<endl;
    }else{
        cout<<"write error"<<endl;
    }

    r = libusb_release_interface(dev_handle, 0); // release the claimed interface

    if(r!=0) {
        cout<<"Cannot Release Interface"<<endl;
        return 1;
    }
    cout<<"Released interface"<<endl;
    libusb_close(dev_handle); // close the device we opened
    libusb_exit(ctx); // need to be called to end the

    delete[] data;// delete the allocated memory for data
    return 0;
}

but when i compile the above code using the following command line (these are the product id and vendor id of my usb) 但是当我使用以下命令行编译以上代码时(这些是我的USB的产品ID和供应商ID)

dev_handle = libusb_open_device_with_vid_pid(ctx, 0951, 1689);

the compiler throws the following error 编译器抛出以下错误

transfer_data_libusb.cpp:30:55: error: invalid digit "9" in octal constant

Someone had adviced me to remove the leading zero ie ("951" instead of "0951") but when i do that, the file gets compiled successfully, but when i rnu the compiled version this throws the following error 有人建议我删除前导零,即(“ 951”而不是“ 0951”),但是当我这样做时,文件会成功编译,但是当我rnu的编译版本会引发以下错误

7 Device in list 
Cannot open device 
Segmentation fault (core dumped)

dont know what should I do can you please help btw i use the following command to compile the above code 不知道该怎么办,请您帮忙。我使用以下命令编译以上代码

g++ transfer_data_libusb.cpp $(pkg-config --libs libusb-1.0) -o transfer_data_libusb

thank you very much for you time 非常感谢您的时间

Your number is probably in hexadecimal. 您的数字可能是十六进制的。 Use: 采用:

0x951

instead of your 0951 . 而不是你的0951

And: 和:

0x1689

instead of your 1689 . 而不是您的1689

If you see the other numbers in (I assume it is your product): 如果您在(我认为是您的产品)中看到其他数字:

http://usbspeed.nirsoft.net/?g=32gb http://usbspeed.nirsoft.net/?g=32gb

they have a to f characters, so it means the format should be hexadecimal. 它们具有从af字符,因此这意味着格式应为十六进制。

When your call fails 通话失败时

dev_handle = libusb_open_device_with_vid_pid(ctx, 0951, 1689); 

dev_handle will be NULL. dev_handle将为NULL。

if (dev_handle == NULL){
    cout <<"Cannot open device "<< endl;
    //treat error here and quit

You need to stop operating on dev_handle then. 然后您需要停止对dev_handle操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 LIBUSB编译错误 - LIBUSB compile error libusb_open在jni android中返回LIBUSB_ERROR_ACCESS - libusb_open return LIBUSB_ERROR_ACCESS in jni android libusb_open 在 windows 10 上返回 LIBUSB_ERROR_NOT_SUPPORTED - libusb_open returns LIBUSB_ERROR_NOT_SUPPORTED on windows 10 如何解决ros中的&#39;libusb的未定义引用&#39;错误? - How to solve the 'undefined reference to libusb' error in ros? C编译:错误:程序中出现流浪“ \\ 4”; 八进制流量? - C Compiling: error: stray '\4' in program ; octal flow? libusb:错误[submit_bulk_transfer]提交失败错误-1 errno = 2 - 我对LibUSB做错了什么? - libusb: error [submit_bulk_transfer] submiturb failed error -1 errno=2 - What am I doing wrong with LibUSB? 使用Libusb 1.0发送中断传输会返回LIBUSB_ERROR_IO,但在接收时不会 - Sending a interrupt transfer using Libusb 1.0 returns an LIBUSB_ERROR_IO but not when receiving libusb_get_string_descriptor_ascii()超时错误? - libusb_get_string_descriptor_ascii() timeout error? 错误:无效使用非静态成员函数&#39;int test :: hotplug_callback(libusb_context *,libusb_device *,libusb_hotplug_event,void *)&#39; - error: invalid use of non-static member function ‘int test::hotplug_callback(libusb_context*, libusb_device*, libusb_hotplug_event, void*)’ 语法错误&#39;常量错误 - Syntax error 'constant error
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM