⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usrusbtool.c

📁 SL811 USB接口芯片用于VxWorks系统的驱动源代码
💻 C
📖 第 1 页 / 共 5 页
字号:

LOCAL UINT16 cmdGetStatus
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    long statusType;
    long index;
    long length;
    UINT8 bfr [256];
    UINT16 actLen;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &statusType, -1);
    *ppCmd = GetHexToken (*ppCmd, &index, -1);
    *ppCmd = GetHexToken (*ppCmd, &length, -1);


    /* Validate parameters */

    if (nodeId == -1 || statusType == -1 || index == -1 || length == -1)
	{
	fprintf (fout, "Must specify a node id, status type, and index.\n");
	return RET_CONTINUE;
	}

    if (length > sizeof (bfr))
	{
	fprintf (fout, "length must be 0x%x or less.\n", 
	    (unsigned int) sizeof (bfr));
	return RET_CONTINUE;
	}


    /* Execute function. */

    if ((s = usbdStatusGet (usbdClientHandle, (GENERIC_HANDLE) nodeId, statusType, index, 
	length, bfr, &actLen)) != OK)
	fprintf (fout, "usbdStatusGet() returned %d\n", s);
    else
	{
	fprintf (fout, "actLen = 0x%x (%d) bytes\n", actLen, actLen);
	displayMem (actLen, bfr, fout);
	}

    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdGetAddress - get USB address for a node
*
* RETURNS:  RET_CONTINUE;
*/

LOCAL UINT16 cmdGetAddress
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    UINT16 address;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);


    /* Validate parameters */

    if (nodeId == -1)
	{
	fprintf (fout, "Must specify a node id.\n");
	return RET_CONTINUE;
	}


    /* Execute function. */

    if ((s = usbdAddressGet (usbdClientHandle, (GENERIC_HANDLE) nodeId, &address))
	!= OK)
	fprintf (fout, "usbdAddressGet() returned %d\n", s);
    else
	fprintf (fout, "current address = 0x%x\n", address);


    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdSetAddress - set USB address for a node
*
* RETURNS:  RET_CONTINUE;
*/

LOCAL UINT16 cmdSetAddress
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    long address;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &address, -1);


    /* Validate parameters */

    if (nodeId == -1 || address == -1)
	{
	fprintf (fout, "Must specify a node id and address value.\n");
	return RET_CONTINUE;
	}


    /* Execute function. */

    s = usbdAddressSet (usbdClientHandle, (GENERIC_HANDLE) nodeId, (UINT16) address);
    fprintf (fout, "usbdAddressnSet() returned %d\n", s);

    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdSetFeature - set a USB feature
*
* RETURNS:  RET_CONTINUE;
*/

LOCAL UINT16 cmdSetFeature
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    long featureType;
    long feature;
    long index;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &featureType, -1);
    *ppCmd = GetHexToken (*ppCmd, &feature, -1);
    *ppCmd = GetHexToken (*ppCmd, &index, -1);


    /* Validate parameters */

    if (nodeId == -1 || featureType == -1 || feature == -1 || index == -1)
	{
	fprintf (fout, "Must specify a node id, feature type, selector, and index.\n");
	return RET_CONTINUE;
	}


    /* Execute function. */

    s = usbdFeatureSet (usbdClientHandle, (GENERIC_HANDLE) nodeId, featureType, feature, index);
    fprintf (fout, "usbdFeatureSet() returned %d\n", s);

    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdClrFeature - clear a USB feature
*
* RETURNS:  RET_CONTINUE;
*/

LOCAL UINT16 cmdClrFeature
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    long featureType;
    long feature;
    long index;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &featureType, -1);
    *ppCmd = GetHexToken (*ppCmd, &feature, -1);
    *ppCmd = GetHexToken (*ppCmd, &index, -1);


    /* Validate parameters */

    if (nodeId == -1 || featureType == -1 || feature == -1 || index == -1)
	{
	fprintf (fout, "Must specify a node id, feature type, selector, and index.\n");
	return RET_CONTINUE;
	}


    /* Execute function. */

    s = usbdFeatureClear (usbdClientHandle, (GENERIC_HANDLE) nodeId, featureType, feature, index);
    fprintf (fout, "usbdFeatureClear() returned %d\n", s);

    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdGetDescr - retrieve a USB descriptor
*
* RETURNS:  RET_CONTINUE;
*/

LOCAL UINT16 cmdGetDescr
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    long requestType;
    long descriptorType;
    long index;
    long languageId;
    long length;
    UINT8 bfr [256];
    UINT16 actLen;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &requestType, -1);
    *ppCmd = GetHexToken (*ppCmd, &descriptorType, -1);
    *ppCmd = GetHexToken (*ppCmd, &index, -1);
    *ppCmd = GetHexToken (*ppCmd, &languageId, -1);
    *ppCmd = GetHexToken (*ppCmd, &length, -1);


    /* Validate parameters */

    if (nodeId == -1 || requestType == -1 || descriptorType == -1 || index == -1 
	|| languageId == -1 || length == -1)
	{
	fprintf (fout, "Must specify a node id, descr. type, index, language, and length.\n");
	return RET_CONTINUE;
	}

    if (length > sizeof (bfr))
	{
	fprintf (fout, "length must be 0x%x or less.\n", 
	    (unsigned int) sizeof (bfr));
	return RET_CONTINUE;
	}


    /* Execute function. */

    s = usbdDescriptorGet (usbdClientHandle, (GENERIC_HANDLE) nodeId, requestType, 
	descriptorType, index, languageId, length, bfr, &actLen);

    if (s != OK)
	fprintf (fout, "usbdDescriptorGet() returned %d\n", s);
    else
	{
	fprintf (fout, "actLen = 0x%x (%d) bytes\n", actLen, actLen);
	displayMem (actLen, bfr, fout);
	}

    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdGetSynchFrame - retrieve current synch frame from a device endpoint
*
* RETURNS:  RET_CONTINUE;
*/

LOCAL UINT16 cmdGetSynchFrame
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    long endpoint;
    UINT16 synchFrame;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &endpoint, -1);


    /* Validate parameters */

    if (nodeId == -1 || endpoint == -1)
	{
	fprintf (fout, "Must specify a node id and endpoint.\n");
	return RET_CONTINUE;
	}


    /* Execute function. */

    if ((s = usbdSynchFrameGet (usbdClientHandle, (GENERIC_HANDLE) nodeId, endpoint, 
	&synchFrame)) != OK)
	fprintf (fout, "usbdSynchFrameGet() returned %d\n", s);
    else
	fprintf (fout, "synch frame = 0x%4.4x\n", FROM_LITTLEW (synchFrame));

    return RET_CONTINUE;
    }


/*************************************************************************
*
* cmdGetCurrentFrame - retrieve current frame for a USB
*
* RETURNS:  RET_CONTINUE
*/

LOCAL UINT16 cmdGetCurrentFrame
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    long nodeId;
    UINT32 frameNo;
    UINT32 frameWindow;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);


    /* Validate parameters */

    if (nodeId == -1)
	{
	fprintf (fout, "Must specify a node id.\n");
	return RET_CONTINUE;
	}


    /* Execute function. */

    if ((s = usbdCurrentFrameGet (usbdClientHandle, (GENERIC_HANDLE) nodeId, 
	&frameNo, &frameWindow)) != OK)
	fprintf (fout, "usbdCurrentFrameGet() returned %d\n", s);
    else
	{
	fprintf (fout, "frame number = %ld\n", (long) frameNo);
	fprintf (fout, "frame window = %ld\n", (long) frameWindow);
	}

    return RET_CONTINUE;
    }


/*************************************************************************
*
* enterThread - waits for user to press [enter]
*
* RETURNS:  N/A
*/

LOCAL VOID enterThread
    (
    pVOID param
    )

    {
    FILE *fout = (FILE *) param;
    char bfr [256];

    fprintf (fout, "Press [enter] to terminate polling.\n");
    gets (bfr);
    enterPressed = TRUE;
    }


/*************************************************************************
*
* irpCallback - called when IRP completes
*
* RETURNS:  N/A
*/

LOCAL VOID irpCallback
    (
    pVOID pIrp
    )

    {
    irpCallbackInvoked = TRUE;
    }


/*************************************************************************
*
* cmdIntPoll - polls interrupt endpoint for input
*
* Continuously reads IN packets from interrupt endpoint until key 
* pressed.
*
* RETURNS:  RET_CONTINUE
*/

LOCAL UINT16 cmdIntPoll
    (
    pVOID Param,		/* Generic parameter passed down */
    char **ppCmd,		/* Ptr to remainder of cmd line */
    FILE *fin,			/* stream for input (if any) */
    FILE *fout			/* stream for output (if any) */
    )

    {
    THREAD_HANDLE thread;
    long nodeId;
    long endpoint;
    long length;
    USBD_PIPE_HANDLE handle;
    char bfr [256];
    USB_IRP irp;
    UINT16 s;

    /* Extract parameters. */

    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);
    *ppCmd = GetHexToken (*ppCmd, &endpoint, -1);
    *ppCmd = GetHexToken (*ppCmd, &length, USB_MIN_CTRL_PACKET_SIZE);


    /* Validate parameters */

    if (nodeId == -1 || endpoint == -1)
	{
	fprintf (fout, "Must specify a node id and endpoint.\n");
	return RET_CONTINUE;
	}

    if (length > sizeof (bfr))
	{
	fprintf (fout, "Length must be %d or less.\n", (int) sizeof (bfr));
	return RET_CONTINUE;
	}


    /* Create a pipe to talk to this endpoint */

    if ((s = usbdPipeCreate (usbdClientHandle, (GENERIC_HANDLE) nodeId, (UINT16) endpoint, 0, 0,
	USB_XFRTYPE_INTERRUPT, USB_DIR_IN, length, length, INT_PIPE_SRVC_INTERVAL,
	&handle)) != OK)
	{
	fprintf (fout, "usbdPipeCreate() returned %d\n", s);
	return RET_CONTINUE;
	}


    /* Create thread to watch for keypress */

    enterPressed = FALSE;

    if (OSS_THREAD_CREATE (enterThread, (pVOID) fout, OSS_PRIORITY_INHERIT, "tEnter",
	&thread) != OK)
	goto pipe_done;

    while (!enterPressed)
	{
	/* initialize IRP */

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

	irp.irpLen = sizeof (irp);
	irp.userCallback = irpCallback;
	irp.transferLen = length;
	irp.bfrCount = 1;
	irp.bfrList [0].pid = USB_PID_IN;
	irp.bfrList [0].pBfr = bfr;
	irp.bfrList [0].bfrLen = length;
    
	irpCallbackInvoked = FALSE;

	if ((s = usbdTransfer (usbdClientHandle, handle, &irp)) != OK)
	    {
	    fprintf (fout, "usbdTransfer() returned %d\n", s);
	    break;
	    }

	while (!enterPressed && !irpCallbackInvoked)
	    OSS_THREAD_SLEEP (1);

	if (irpCallbackInvoked)
	    {
	    if (irp.result != OK)
		{
		fprintf (fout, "irp.result == %d\n", irp.result);
		break;
		}

	    fprintf (fout, "actLen = %d: ", irp.bfrList [0].actLen);
	    displayMem (irp.bfrList [0].actLen, bfr, fout);
	    }
	else
	    {
	    if ((s = usbdTransferAbort (usbdClientHandle, handle, &irp)) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -