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

📄 mpc5200usbtool.c

📁 MPC5200 BSP 支持ATA,USB, I2C,扩展网口
💻 C
📖 第 1 页 / 共 3 页
字号:
    s = usbdConfigurationSet (usbdClientHandle, (GENERIC_HANDLE) nodeId, (UINT16) configuration, 0);    fprintf (fout, "usbdConfigurationSet() returned %d\n", s);    return RET_CONTINUE;    }LOCAL UINT16 cmdGetInterface    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout		    )    {    long nodeId;    long index;    UINT16 altSetting;    UINT16 s;    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    *ppCmd = GetHexToken (*ppCmd, &index, -1);    if (nodeId == -1 || index == -1)	{	fprintf (fout, "Must specify a node id and interface number.\n");	return RET_CONTINUE;	}    if ((s = usbdInterfaceGet (usbdClientHandle, (GENERIC_HANDLE) nodeId, index, &altSetting))	!= OK)	fprintf (fout, "usbdInterfaceGet() returned %d\n", s);    else	fprintf (fout, "alternate setting = 0x%x\n", altSetting);    return RET_CONTINUE;    }LOCAL UINT16 cmdSetInterface    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout		    )    {    long nodeId;    long index;    long altSetting;    UINT16 s;    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    *ppCmd = GetHexToken (*ppCmd, &index, -1);    *ppCmd = GetHexToken (*ppCmd, &altSetting, -1);    if (nodeId == -1 || index == -1 || altSetting == -1)	{	fprintf (fout, "Must specify a node id, interface number, and alt. setting.\n");	return RET_CONTINUE;	}    s = usbdInterfaceSet (usbdClientHandle, (GENERIC_HANDLE) nodeId, index, altSetting);    fprintf (fout, "usbdInterfaceSet() returned %d\n", s);    return RET_CONTINUE;    }#endif    LOCAL VOID displayMem    (    UINT16 bfrLen,    pUINT8 pBfr,    FILE *fout    )    {    int i,j;    for (i = 0; i < bfrLen; i += 16)	{	for (j = i; j < bfrLen && j < i+16; j++)	    {	    fprintf (fout, "%2.2x ", pBfr [j]);	    if (j % 16 == 7)		fprintf (fout, " ");	    }	fprintf (fout, " ");	for (j = i; j < bfrLen && j < i+16; j++)	    {	    fprintf (fout, "%c", (pBfr [j] >= 32 && pBfr [j] <= 127) ? 		pBfr [j] : '.');	    }	fprintf (fout, "\n");	}    }#ifdef INCLUDE_USB    LOCAL UINT16 cmdGetStatus    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    long nodeId;    long statusType;    long index;    long length;    UINT8 bfr [256];    UINT16 actLen;    UINT16 s;     *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    *ppCmd = GetHexToken (*ppCmd, &statusType, -1);    *ppCmd = GetHexToken (*ppCmd, &index, -1);    *ppCmd = GetHexToken (*ppCmd, &length, -1);    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;	}    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;    }LOCAL UINT16 cmdGetAddress    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    long nodeId;    UINT16 address;    UINT16 s;    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    if (nodeId == -1)	{	fprintf (fout, "Must specify a node id.\n");	return RET_CONTINUE;	}    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;    }LOCAL UINT16 cmdSetAddress    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout		    )    {    long nodeId;    long address;    UINT16 s;    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    *ppCmd = GetHexToken (*ppCmd, &address, -1);    if (nodeId == -1 || address == -1)	{	fprintf (fout, "Must specify a node id and address value.\n");	return RET_CONTINUE;	}    s = usbdAddressSet (usbdClientHandle, (GENERIC_HANDLE) nodeId, (UINT16) address);    fprintf (fout, "usbdAddressnSet() returned %d\n", s);    return RET_CONTINUE;    }LOCAL UINT16 cmdSetFeature    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    long nodeId;    long featureType;    long feature;    long index;    UINT16 s;    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    *ppCmd = GetHexToken (*ppCmd, &featureType, -1);    *ppCmd = GetHexToken (*ppCmd, &feature, -1);    *ppCmd = GetHexToken (*ppCmd, &index, -1);    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;	}    s = usbdFeatureSet (usbdClientHandle, (GENERIC_HANDLE) nodeId, featureType, feature, index);    fprintf (fout, "usbdFeatureSet() returned %d\n", s);    return RET_CONTINUE;    }LOCAL UINT16 cmdClrFeature    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    long nodeId;    long featureType;    long feature;    long index;    UINT16 s;    *ppCmd = GetHexToken (*ppCmd, &nodeId, -1);    *ppCmd = GetHexToken (*ppCmd, &featureType, -1);    *ppCmd = GetHexToken (*ppCmd, &feature, -1);    *ppCmd = GetHexToken (*ppCmd, &index, -1);    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;	}    s = usbdFeatureClear (usbdClientHandle, (GENERIC_HANDLE) nodeId, featureType, feature, index);    fprintf (fout, "usbdFeatureClear() returned %d\n", s);    return RET_CONTINUE;    }LOCAL UINT16 cmdGetDescr    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout		    )    {    long nodeId;    long requestType;    long descriptorType;    long index;    long languageId;    long length;    UINT8 bfr [256];    UINT16 actLen;    UINT16 s;      *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);    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;	}    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;    }LOCAL VOID enterThread    (    pVOID param    )    {    FILE *fout = (FILE *) param;    char bfr [256];    fprintf (fout, "Press [enter] to terminate polling.\n");    gets (bfr);    enterPressed = TRUE;    }#ifdef INCLUDE_USB_KEYBOARDLOCAL UINT16 cmdKbdInit    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    if (usbKeyboardDevInit () == OK)	fprintf (fout, "usbKeyboardDevInit() returned OK\n");    else	fprintf (fout, "usbKeyboardDevInit() returned ERROR\n");    return RET_CONTINUE;    }LOCAL UINT16 cmdKbdDown    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    if (usbKeyboardDevShutdown () == OK)	fprintf (fout, "usbKeyboardDevShutdown() returned OK\n");    else	fprintf (fout, "usbKeyboardDevShutdown() returned ERROR\n");    return RET_CONTINUE;    }LOCAL SIO_CHAN *pKbdSioChan;LOCAL VOID kbdAttachCallback    (    pVOID arg,			        SIO_CHAN *pChan,		        UINT16 attachCode		        )    {    FILE *fout = (FILE *) arg;    fprintf (fout, "pChan = %p, attach code = %s\n", pChan,	(attachCode == USB_KBD_ATTACH) ? "USB_KBD_ATTACH" : "USB_KBD_REMOVE");    if (attachCode == USB_KBD_ATTACH)	{	if (pKbdSioChan == NULL)	    {	    if (usbKeyboardSioChanLock (pChan) != OK)		fprintf (fout, "usbKeyboardSioChanLock() returned ERROR\n");	    else		pKbdSioChan = pChan;	    }	else	    {	    fprintf (fout, "Another channel already in use, ignored.\n");	    }	}    else	{	if (pChan == pKbdSioChan)	    {	    if (usbKeyboardSioChanUnlock (pChan) != OK)		fprintf (fout, "usbKeyboardSioChanUnlock() returned ERROR\n");	    pKbdSioChan = NULL;	    }	}    }LOCAL UINT16 cmdKbdPoll    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    THREAD_HANDLE thread;    char inChar;    pKbdSioChan = NULL;    if (usbKeyboardDynamicAttachRegister (kbdAttachCallback, (pVOID) fout) != OK)	{	fprintf (fout, "usbKeyboardDynamicAttachRegister() returned ERROR\n");	return RET_CONTINUE;	}    enterPressed = FALSE;    if (OSS_THREAD_CREATE (enterThread, (pVOID) fout, OSS_PRIORITY_INHERIT, "tEnter",	&thread) != OK)	goto pipe_done;    fprintf (fout, "Press CTRL-Z to terminate polling.\n");    while (!enterPressed)	{	if (pKbdSioChan != NULL)	    {	    if ((*pKbdSioChan->pDrvFuncs->pollInput) (pKbdSioChan, &inChar) == OK)		{		fprintf (fout, "ASCII %3d", inChar);		if (inChar >= 32)		    fprintf (fout, " '%c'", inChar);		fprintf (fout, "\n");		if (inChar == CTRL_Z)		    {		    fprintf (fout, "Stopped by CTRL-Z\n");		    break;		    }		}	    }	OSS_THREAD_SLEEP (1);	}    OSS_THREAD_DESTROY (thread);pipe_done:      if (usbKeyboardDynamicAttachUnRegister (kbdAttachCallback, (pVOID) fout) != OK)	fprintf (fout, "usbKeyboardDynamicAttachUnRegister() returned ERROR\n");    return RET_CONTINUE;    }#endif	#ifdef INCLUDE_USB_MOUSELOCAL long mouseX;LOCAL long mouseY;LOCAL BOOL mouseButtons_1_2;LOCAL VOID showMouseState    (    FILE *fout,    UINT8 buttons    )    {    fprintf (fout, "\rx:%5ld  y:%5ld  B1:%3.3s B2:%3.3s B3:%3.3s",	mouseX, mouseY, 	(buttons & MOUSE_BUTTON_1) == 0 ? "UP " : "DWN",	(buttons & MOUSE_BUTTON_2) == 0 ? "UP " : "DWN",	(buttons & MOUSE_BUTTON_3) == 0 ? "UP " : "DWN");    }LOCAL long signExtend    (    char value    )    {    if ((value & 0x80) != 0)	return value | 0xffffff00;        return value;    }LOCAL STATUS mseRptCallback    (    void *arg,    pHID_MSE_BOOT_REPORT pReport    )    {    FILE *fout = (FILE *) arg;    long xChange = signExtend (pReport->xDisplacement);    long yChange = signExtend (pReport->yDisplacement);    mouseX += xChange;    mouseY += yChange;    showMouseState (fout, pReport->buttonState);				if ( (pReport->buttonState & MOUSE_BUTTON_1) &&         (pReport->buttonState & MOUSE_BUTTON_2)   )        {          mouseButtons_1_2 = TRUE;        }     return OK;    }LOCAL SIO_CHAN *pMseSioChan;LOCAL VOID mseAttachCallback    (    pVOID arg,			        SIO_CHAN *pChan,		       UINT16 attachCode		       )    {    FILE *fout = (FILE *) arg;    fprintf (fout, "pChan = %p, attach code = %s\n", pChan,	(attachCode == USB_MSE_ATTACH) ? "USB_MSE_ATTACH" : "USB_MSE_REMOVE");    if (attachCode == USB_MSE_ATTACH)	{	if (pMseSioChan == NULL)	    {	    if (usbMouseSioChanLock (pChan) != OK)		fprintf (fout, "usbMouseSioChanLock() returned ERROR\n");	    else		{		pMseSioChan = pChan;		if (pMseSioChan != NULL)		    {		    if ((*pMseSioChan->pDrvFuncs->callbackInstall) (pMseSioChan,				SIO_CALLBACK_PUT_MOUSE_REPORT, 	 	 		(STATUS  (*) (void *, ...)) mseRptCallback, 				fout) != OK)			{			fprintf (fout, "callbackInstall() returned ERROR.\n");			}		    }		}	    }	else	    {	    fprintf (fout, "Another channel already in use, ignored.\n");	    }	}    else	{	if (pChan == pMseSioChan)	    {	    if (usbMouseSioChanUnlock (pChan) != OK)		fprintf (fout, "usbMouseSioChanUnlock() returned ERROR\n");	    pMseSioChan = NULL;	    }	}    }LOCAL UINT16 cmdMouseTest    (    pVOID Param,		    char **ppCmd,		    FILE *fin,			    FILE *fout			    )    {    THREAD_HANDLE thread;    if (usbMouseDevInit () != OK)	{	fprintf (fout, "usbMouseDevInit() returned ERROR\n");	return RET_CONTINUE;	}    pMseSioChan = NULL;    mouseX = 0;    mouseY = 0;    if (usbMouseDynamicAttachRegister (mseAttachCallback, (pVOID) fout) != OK)	{	fprintf (fout, "usbMouseDynamicAttachRegister() returned ERROR\n");	goto mouseDown;	}    enterPressed = FALSE;		mouseButtons_1_2 = FALSE;				fprintf (fout, "Press mouse buttons 1 & 2 at the same time to terminate polling.\n");		    if (OSS_THREAD_CREATE (enterThread, (pVOID) fout, OSS_PRIORITY_INHERIT, "tEnter",	&thread) != OK)	{	fprintf (fout, "Failed to create tEnter thread.\n");	goto mouseUnreg;	}    while (pMseSioChan == NULL)	{	if (enterPressed)	    goto threadDone;	OSS_THREAD_SLEEP (1);	}    showMouseState (fout, 0);    while (!enterPressed && !mouseButtons_1_2)		OSS_THREAD_SLEEP (1);    fprintf (fout, "\n");threadDone:    OSS_THREAD_DESTROY (thread);

⌨️ 快捷键说明

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