TengChenLi 2014-07-25 09:15
浏览 202
已采纳

如何将下列方法(C程序)改成用java实现


//打开设备
int ctUsb_open(int devId)
{
    int handle = -1;
    CTUsbMsg msg;
    int msglen, incnt;
    memset(&msg, 0, sizeof(msg));
    snprintf(msg.msgData, sizeof(msg.msgData), "OPEN");
    msg.msgLen = strlen(msg.msgData) + sizeof(devId);
    memcpy(&msg.msgData[4], &devId, sizeof(devId));

    int xreason;
    handle = ctUsb_connect(USB_ADMIN_DATA_PORT);

    if (handle > 0)
    {
        write(handle, &msg, msg.msgLen + sizeof(msg.msgLen));
        incnt = ctUsb_msgRecive(handle, &msglen, sizeof(msglen));
        if (incnt > 0)
        {
            ctUsb_msgRecive(handle, &xreason, msglen);
        }
    }

    g_errno = xreason;

    return handle;
}
//创建socket连接
static int ctUsb_connect(int portNum)
{
    int sockfd, addrsize;

    struct sockaddr_in seraddr;

    memset(&seraddr, 0, sizeof(seraddr));

    seraddr.sin_family = AF_INET;
    seraddr.sin_port = htons(portNum);
    seraddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    addrsize = sizeof(struct sockaddr_in);
    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0)
    {
        printf("could not create socket\n");
    }

    if (connect(sockfd, (struct sockaddr*)&seraddr, addrsize) == -1)
    {
        printf("could not connect usbAdmin\n");
        close(sockfd);
        sockfd = -1;
    }

    return sockfd;
}
/**
 * 配置设备属性
 * @param handle(IN)
 * @param request(IN)
 * @param arg(IN/OUT)
 * @param reason(OUT)
 * @return Result
 */
int ctUsb_ioctl(int handle, int request, void *arg, int arglen)
{
    CTUsbMsg msg;
    int len, xreason, n;
    int requestx = request;
   
    memset(&msg, 0, sizeof(msg));
    snprintf(msg.msgData, sizeof(msg.msgData), "IOCTL");
    len = strlen(msg.msgData);

    memcpy(&msg.msgData[len], &requestx, sizeof(requestx));
    memcpy(&msg.msgData[len + 4], &arglen, sizeof(arglen));

    if (arg != NULL)
    {
        memcpy(&msg.msgData[len + 8], arg, arglen);
    }

    msg.msgLen = 5 + sizeof(requestx) + arglen;

    write(handle, &msg, msg.msgLen + sizeof(msg.msgLen));

    n = ctUsb_msgRecive(handle, &len, sizeof(len));

    if (n > 0)
    {
        ctUsb_msgRecive(handle, (char*)arg, len);
    }

    n = ctUsb_msgRecive(handle, &len, sizeof(len));

    if (n > 0)
    {
        ctUsb_msgRecive(handle, &xreason, len);
    }

    g_errno = xreason;

    return 0;
}

为了方便理解,我用java写一个调用的方法:
public static void main(String[] args){
    int handle=open(devcId);//创建socket连接  此处handle是什么意思,接着调用ctUsb_ioctl方法要把此handle 传给 ctUsb_ioctl方法,(我自己的理解表示socket对象,但在java中要 怎么用int 类型的变量代表一个socket对象呢)
    ctUsb_ioctl(handle,......)//
}

 

请大家帮忙给分析一下 C的程序流程,考虑用java如何实现!!!先拜谢了!!

  • 写回答

1条回答 默认 最新

  • renminzdb2 2014-07-25 15:00
    关注

    我可以帮你实现 但是现在不在电脑旁 先mark下 回头出码要分

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 数字取证课程 关于FAT文件系统的操作
  • ¥15 如何使用js实现打印时每页设置统一的标题
  • ¥15 安装TIA PortalV15.1报错
  • ¥15 能把水桶搬到饮水机的机械设计
  • ¥15 Android Studio中如何把H5逻辑放在Assets 文件夹中以实现将h5代码打包为apk
  • ¥15 使用小程序wx.createWebAudioContext()开发节拍器
  • ¥15 关于#爬虫#的问题:请问HMDB代谢物爬虫的那个工具可以提供一下吗
  • ¥15 vue3+electron打包获取本地视频属性,文件夹里面有ffprobe.exe 文件还会报错这是什么原因呢?
  • ¥20 用51单片机控制急停。
  • ¥15 孟德尔随机化结果不一致