📄 mpc5200usbtool.c
字号:
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 + -