📄 mpc5200usbtool.c
字号:
mouseUnreg: if (usbMouseDynamicAttachUnRegister (mseAttachCallback, (pVOID) fout) != OK) fprintf (fout, "usbMouseDynamicAttachUnRegister() returned ERROR\n"); if (pMseSioChan != NULL) if ((*pMseSioChan->pDrvFuncs->callbackInstall) (pMseSioChan, SIO_CALLBACK_PUT_MOUSE_REPORT, NULL, NULL) != OK) { fprintf (fout, "callbackInstall() returned ERROR.\n"); }mouseDown: if (usbMouseDevShutdown () != OK) fprintf (fout, "usbMouseDevShutdown() returned ERROR\n"); return RET_CONTINUE; }#endif #ifdef INCLUDE_USB_MS_BULKONLY#ifndef BULK_NAME#define BULK_NAME "BULK"#endif#ifndef BULK_DRIVE_NAME1#define BULK_DRIVE_NAME1 "H:"#endif#ifndef BULK_DRIVE_NAME2#define BULK_DRIVE_NAME2 "I:"#endif#ifndef BULK_DRIVE_NAME3#define BULK_DRIVE_NAME3 "J:"#endif#ifndef BULK_DRIVE_NAME4#define BULK_DRIVE_NAME4 "K:"#endif#define BULK_DRIVE_HIDDEN_SECS 63#define BULK_DRIVE_BUFFER_SIZE 32#define BULK_DRIVE_DISPLAY_INTERVAL 10485760LOCAL THREAD_HANDLE bulkTaskId;LOCAL QUEUE_HANDLE bulkCallbackQueue;LOCAL USB_MESSAGE bulkDeviceStatus;LOCAL BLK_DEV * pBulkBlkDev = NULL; LOCAL DOS_VOL_DESC * pBulkDosVol = NULL; LOCAL USBD_NODE_ID bulkNodeId;LOCAL CBIO_DEV_ID cbio,cbio1;LOCAL int dcacheSize = 0x30000;LOCAL int fdiskNum =0;LOCAL STATUS bulkMountDrive ( USBD_NODE_ID attachCode, FILE *fout ) { pBulkBlkDev = (BLK_DEV *) usbBulkBlkDevCreate (bulkNodeId, /* pBulkBlkDev = (BLK_DEV *) usbSFFBulkBlkDevCreate (bulkNodeId, */#ifdef INCLUDE_DOSFS NULL, NULL,#else NULL, BULK_DRIVE_HIDDEN_SECS, #endif USB_SCSI_FLAG_READ_WRITE10); /* USB_SFF_FLAG_READ_WRITE10); */ /* pBulkBlkDev = (BLK_DEV *) usbCbiUfiBlkDevCreate (bulkNodeId); */ /* notice! */ if (pBulkBlkDev == NULL) { fprintf (fout, "usbBulkBlkDevCreate() returned ERROR\n"); return ERROR; }#if 0 pBulkDosVol = dosFsDevInit (BULK_DRIVE_NAME, pBulkBlkDev, NULL); if (pBulkDosVol == NULL) { fprintf (fout, "dosFsDevInit() returned ERROR\n"); return ERROR; }#endif if( fdiskNum >=1 ) { if((cbio = dcacheDevCreate(pBulkBlkDev, NULL, dcacheSize, BULK_NAME)) == NULL) { fprintf (fout, "dcacheDevCreate returned ERROR\n"); return ERROR; } } else return ERROR; if( fdiskNum >=1 ) { if((cbio1 = dpartDevCreate(cbio, fdiskNum, usrFdiskPartRead)) == NULL) { fprintf (fout, "dpartDevCreate returned ERROR\n"); return ERROR; } } else return ERROR; if( fdiskNum >=1 ) { if( dosFsDevCreate ("H:", dpartPartGet (cbio1, 0),8, 0) == ERROR ) { fprintf (fout, "dosFsDevCreate H: returned ERROR\n"); return (ERROR); } } if( fdiskNum >=2 ) { if( dosFsDevCreate ("I:", dpartPartGet (cbio1, 1),8, 0) == ERROR ) { fprintf (fout, "dosFsDevCreate I: returned ERROR\n"); return (ERROR); } } if( fdiskNum >=3 ) { if( dosFsDevCreate ("J:", dpartPartGet (cbio1, 2),8, 0) == ERROR ) { fprintf (fout, "dosFsDevCreate J: returned ERROR\n"); return (ERROR); } } if( fdiskNum >=4 ) { if( dosFsDevCreate ("K:", dpartPartGet (cbio1, 3),8, 0) == ERROR ) { fprintf (fout, "dosFsDevCreate K: returned ERROR\n"); return (ERROR); } } return OK; } LOCAL VOID bulkAttachCallback ( pVOID arg, USBD_NODE_ID nodeId, UINT16 attachCode ) { FILE *fout = (FILE *) arg; usbQueuePut (bulkCallbackQueue, (UINT16) nodeId, attachCode, (UINT32) NULL, 5000); } LOCAL VOID bulkClientThread ( pVOID param ) { FILE *fout = (FILE *) param; DEV_HDR *hdr; while (1) { usbQueueGet (bulkCallbackQueue, &bulkDeviceStatus, OSS_BLOCK); if (bulkDeviceStatus.wParam == USB_BULK_ATTACH) { bulkNodeId = (USBD_NODE_ID) bulkDeviceStatus.msg; if (usbBulkDevLock (bulkNodeId) != OK)/* if (usbSFFBulkDevLock (bulkNodeId) != OK) *//* if (usbCbiUfiDevLock (bulkNodeId) != OK) */ fprintf (fout, "usbBulkDevLock() returned ERROR\n"); if (bulkMountDrive(bulkNodeId, fout) != OK) fprintf (fout, "bulkMountDrive() returned ERROR\n"); fprintf (fout, "Bulk Device Installed as %s\n", BULK_NAME); } else if (bulkDeviceStatus.wParam == USB_BULK_REMOVE) { bulkNodeId = (USBD_NODE_ID) bulkDeviceStatus.msg; if ( (hdr = iosDevFind (BULK_NAME, NULL)) != NULL ) { iosDevDelete (hdr); fprintf (fout, "Bulk deleted\n"); } if ( (hdr = iosDevFind (BULK_DRIVE_NAME1, NULL)) != NULL ) { iosDevDelete (hdr); fprintf (fout, "Fdisk H: deleted\n"); } if ( (hdr = iosDevFind (BULK_DRIVE_NAME2, NULL)) != NULL ) { iosDevDelete (hdr); fprintf (fout, "Fdisk I: deleted\n"); } if ( (hdr = iosDevFind (BULK_DRIVE_NAME3, NULL)) != NULL ) { iosDevDelete (hdr); fprintf (fout, "Fdisk J: deleted\n"); } if ( (hdr = iosDevFind (BULK_DRIVE_NAME4, NULL)) != NULL ) { iosDevDelete (hdr); fprintf (fout, "Fdisk K: deleted\n"); } if (usbBulkDevUnlock (bulkNodeId) != OK)/* if (usbSFFBulkDevUnlock (bulkNodeId) != OK) *//* if (usbCbiUfiDevUnlock (bulkNodeId) != OK) */ { fprintf (fout, "usbBulkDevUnlock() returned ERROR\n"); return; } fprintf (fout, "%s removed and uninstalled from FS\n", BULK_NAME); bulkNodeId = NULL; pBulkDosVol = NULL; cbio = NULL; cbio1 = NULL; fdiskNum = 0; } } }LOCAL UINT16 cmdBulkInit ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { OSS_THREAD_SLEEP (1); *ppCmd = GetHexToken (*ppCmd, &fdiskNum, 1); if ((fdiskNum > 4)||(fdiskNum < 1)) { fprintf (fout, "Fdisk number is not correct!\n"); return; } if (usbBulkDevInit () == OK)/* if (usbSFFBulkDevInit () == OK) *//* if (usbCbiUfiDevInit () == OK) */ fprintf (fout, "usbBulkDevInit() returned OK\n"); else fprintf (fout, "usbBulkDevInit() returned ERROR\n"); if (usbQueueCreate (128, &bulkCallbackQueue)!=OK) { fprintf (fout, "usbQueueCreate() returned ERROR\n"); return; } if (OSS_THREAD_CREATE (bulkClientThread, (pVOID) fout, OSS_PRIORITY_INTERRUPT, "tBulkClnt", &bulkTaskId) != OK) { fprintf (fout, "usbBulkDevInit() TaskSpawn Error...!\n"); return; } if (usbBulkDynamicAttachRegister (bulkAttachCallback, (pVOID) fout) != OK)/* if (usbSFFBulkDynamicAttachRegister (bulkAttachCallback, (pVOID) fout) != OK) *//* if (usbCbiUfiDynamicAttachRegister (bulkAttachCallback, (pVOID) fout) != OK) */ fprintf (fout, "usbBulkDynamicAttachRegister() returned ERROR!\n"); return RET_CONTINUE; }#ifdef INCLUDE_DOSFSLOCAL UINT16 cmdBulkFormat ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { int ix = 0; *ppCmd = GetHexToken (*ppCmd, &ix, 1); if ((ix >fdiskNum)||(ix < 1)) { fprintf (fout, " Fdisk Number formatted is not correct!\n"); return ERROR; } if (pBulkBlkDev == NULL) { fprintf (fout, "cmdBulkFormat() ERROR USB Bulk Device not initialized\n"); return ERROR; } if (ix ==1) { if (dosFsVolFormat(BULK_DRIVE_NAME1, DOS_OPT_FAT32, NULL)==ERROR) { fprintf (fout, "cmdBulkFormat() ERROR formating\n"); return ERROR; } } if (ix ==2) { if (dosFsVolFormat(BULK_DRIVE_NAME2, DOS_OPT_FAT32, NULL)==ERROR) { fprintf (fout, "cmdBulkFormat() ERROR formating\n"); return ERROR; } } if (ix ==3) { if (dosFsVolFormat(BULK_DRIVE_NAME3, DOS_OPT_FAT32, NULL)==ERROR) { fprintf (fout, "cmdBulkFormat() ERROR formating\n"); return ERROR; } } if (ix ==4) { if (dosFsVolFormat(BULK_DRIVE_NAME4, DOS_OPT_FAT32, NULL)==ERROR) { fprintf (fout, "cmdBulkFormat() ERROR formating\n"); return ERROR; } } return RET_CONTINUE; }#endifLOCAL UINT16 bulkWrite ( long bytes, FILE *fin, FILE *fout ) { char *ptr; int fd; UINT32 i; UINT32 len=1; fd = open("H:/usbDiskTest", O_CREAT | O_WRONLY, 0); if (fd == ERROR) fprintf (fout, "bulkWrite() error opening file\n"); else fprintf (fout, "bulkWrite() file opened for write\n"); for (i=1; i<=bytes; i++) { if((i%2)==0) *ptr ='a'; else *ptr ='5'; if (len != write(fd,ptr,1)) { fprintf (fout, "bulkWrite() error writing %u to file\n",i); close(fd); return ERROR; } } close(fd); fprintf (fout, "bulkWrite() wrote %u bytes to file\n",i-1); return RET_CONTINUE; }LOCAL UINT16 bulkRead ( long bytes, FILE *fin, FILE *fout ) { char buffer[BULK_DRIVE_BUFFER_SIZE]; char *ptr; int fd; int i; int len; fd = open("H:/usbDiskTest", O_RDONLY, 0); if (fd == ERROR) fprintf (fout, "bulkRead() error opening file\n"); else fprintf (fout, "bulkRead() file opened for read\n"); while ((len=read(fd,buffer,BULK_DRIVE_BUFFER_SIZE)) > 0) { for (i=0;i<len;i++) { ptr = (buffer+i); if (bytes != 0) fprintf (fout, "%c", *ptr); } if (bytes != 0) fprintf (fout, "\n"); } fprintf (fout, "Read File ended\n"); close(fd); return RET_CONTINUE; }LOCAL UINT16 cmdBulkWrite ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { long bytes=0; *ppCmd = GetHexToken (*ppCmd, &bytes, 1); bulkWrite(bytes,fin,fout); return RET_CONTINUE; }LOCAL UINT16 cmdBulkRead ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { long bytes=0; *ppCmd = GetHexToken (*ppCmd, &bytes, 1); bulkRead(bytes,fin,fout); return RET_CONTINUE; }LOCAL UINT16 cmdBulkShow ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { usbBulkDevIoctl(pBulkBlkDev, USB_BULK_DESCRIPTOR_GET, 0); /*usbSFFBulkDevIoctl(pBulkBlkDev, USB_SFF_BULK_DESCRIPTOR_GET, 0); */ /*usbCbiUfiDevIoctl(pBulkBlkDev, USB_UFI_ALL_DESCRIPTOR_GET, 0); */ return RET_CONTINUE; }LOCAL UINT16 cmdfdiskShow ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { int fnum=0; *ppCmd = GetHexToken (*ppCmd, &fnum, 1); if ((fnum>fdiskNum)||(fnum<1)) { fprintf (fout, " Fdisk Number formatted is not correct!\n"); return ERROR; } if(fnum == 1) { dosFsShow("H:",0); } if(fnum == 2) { dosFsShow("I:",0); } if(fnum == 3) { dosFsShow("J:",0); } if(fnum == 4) { dosFsShow("K:",0); } return RET_CONTINUE; } LOCAL UINT16 cmdBulkDown ( pVOID Param, char **ppCmd, FILE *fin, FILE *fout ) { if (usbBulkDynamicAttachUnregister (bulkAttachCallback, (pVOID) fout) != OK)/* if (usbSFFBulkDynamicAttachUnregister (bulkAttachCallback, (pVOID) fout) != OK)*//* if (usbCbiUfiDynamicAttachUnregister (bulkAttachCallback, (pVOID) fout) != OK)*/ fprintf (fout, "usbBulkDynamicAttachUnregister() returned ERROR\n"); OSS_THREAD_DESTROY (bulkTaskId);#if 0 if (usbQueueDestroy (&bulkCallbackQueue)!=OK) { fprintf (fout, "usbQueueDestroy() returned ERROR\n"); return; }#endif if (usbBulkDevShutDown (OK) == OK) fprintf (fout, "usbBulkDevShutDown() returned OK\n"); else fprintf (fout, "usbBulkDevShutDown() returned ERROR\n"); return RET_CONTINUE; }#endif #endif LOCAL CMD_DESCR cmdTable [] = { #ifdef INCLUDE_USB {"UsbInit", 4, "UsbInit", "Initialize USBD", cmdUsbInit}, {"UsbDown", 4, "UsbDown", "Shut down USBD", cmdUsbDown}, {"Attach", 2, "Attach Mpc5200", "Attaches HCD to USBD", cmdAttach}, {"Detach", 2, "Detach Mpc5200", "Detaches HCD from USBD", cmdDetach}, {"UsbEnum", 4, "UsbEnum", "Enumerate USBs attached to system", cmdUsbEnum}, {"UsbStats", 4, "UsbStats n", "Display statistics for bus connected to node n", cmdUsbStats}, {"stats", 4, NULL, NULL, cmdUsbStats}, {"GetConfig", 4, "GetConfig n", "Get USB configuration for node n", cmdGetConfig}, {"gc", 2, NULL, NULL, cmdGetConfig}, {"SetConfig", 4, "SetConfig n v", "Set USB configuration to v for node n", cmdSetConfig}, {"sc", 2, NULL, NULL, cmdSetConfig}, {"GetInterface", 4, "GetInterface n i", "Get alt. setting for node n interface i", cmdGetInterface}, {"gi", 2, NULL, NULL, cmdGetInterface}, {"SetInterface", 4, "SetInterface n i as", "Set alt. setting as for node n interface i", cmdSetInterface}, {"si", 2, NULL, NULL, cmdSetInterface}, {"GetStatus", 4, "GetStatus n typ idx len", "Get USB status typ/idx for node n", cmdGetStatus}, {"gs", 2, NULL, NULL, cmdGetStatus}, {"GetAddress", 4, "GetAddress n", "Get USB address for node n", cmdGetAddress}, {"ga", 2, NULL, NULL, cmdGetAddress}, {"SetAddress", 4, "SetAddress n a", "Set USB address to a for node n", cmdSetAddress}, {"sa", 2, NULL, NULL, cmdSetAddress}, {"SetFeature", 4, "SetFeature n t fs idx", "Set USB feature t/fs/idx on node n", cmdSetFeature}, {"sf", 2, NULL, NULL, cmdSetFeature}, {"ClrFeature", 4, "ClrFeature n t fs idx", "Clear USB feature t/fs/idx on node n", cmdClrFeature}, {"cf", 2, NULL, NULL, cmdClrFeature}, {"GetDescr", 4, "GetDescr n rt t idx l len", "Get USB descr rt/t/idx (lang = l) on node n", cmdGetDescr}, {"gd", 2, NULL, NULL, cmdGetDescr}, #endif#ifdef INCLUDE_USB_KEYBOARD {"kbdInit", 4, "kbdInit", "Initializes USB keyboard application", cmdKbdInit}, {"kbdDown", 4, "kbdDown", "Shuts down USB keyboard application", cmdKbdDown}, {"kbdPoll", 4, "kbdPoll", "Polls USB keyboard for input", cmdKbdPoll},#endif#ifdef INCLUDE_USB_MOUSE {"mouseTest", 6, "mouseTest", "Tests USB mouse application", cmdMouseTest},#endif#ifdef INCLUDE_USB_MS_BULKONLY {"bulkInit", 5, "bulkInit [n]", "Initializes USB Mass Storage (Bulk) driver with Fdisk Number [n]", cmdBulkInit},#ifdef INCLUDE_DOSFS {"bulkFormat", 5, "bulkFormat", "Formats USB Mass Storage (Bulk) disk in FAT32", cmdBulkFormat},#endif {"bulkWrite", 5, "bulkWrite [n]", "Writes n bytes to File in USB Mass Storage (Bulk)", cmdBulkWrite}, {"bulkRead", 5, "bulkRead [n]", "Reads and print contents in File from USB Mass Storage (Bulk)", cmdBulkRead}, {"bulkDown", 5, "bulkDown", "Shuts down USB Mass Storage (Bulk) driver", cmdBulkDown}, {"bulkShow", 6, "bulkShow", "Shows USB Mass Storage (Bulk)device descriptor", cmdBulkShow}, {"fdiskShow", 6, "fdiskShow [n]", "Shows USB Mass Storage (Bulk)device Disk Part [n]", cmdfdiskShow},#endif {"Help", 4, "Help/?", "Displays list of supported commands.", CmdParserHelpFunc}, {"?", 1, NULL, NULL, CmdParserHelpFunc}, {"Exit", 4, "Exit/Quit/Bye", "Exits program.", CmdParserExitFunc}, {"Quit", 1, NULL, NULL, CmdParserExitFunc}, {"Bye", 3, NULL, NULL, CmdParserExitFunc}, {NULL, 0, NULL, NULL, NULL} };UINT16 usbTool (void) { UINT16 s; setvbuf (stdin, NULL, _IONBF, 0); setvbuf (stdout, NULL, _IONBF, 0); fprintf (stdout, PGM_NAME ": " PGM_DESCR ", version " PGM_VERSION "\n" PGM_COPYRIGHT "\n\n"); cmdUsbInit(0,0,0,stdout); while ((s = PromptAndExecCmd (NULL, PROMPT, stdin, stdout, cmdTable)) == RET_CONTINUE) ; if (s == RET_OK) fprintf (stdout, PGM_NAME " terminating normally.\n"); else if (s == RET_ERROR) fprintf (stdout, PGM_NAME " terminating with error.\n"); else fprintf (stdout, PGM_NAME " terminating with code %d.\n", s); return s; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -