int disconn_main(int argc, char *argv[]) #endif { /* First check if the USB mass storage device is already connected */ if (!g_composite.cmphandle) { printf("disconn_main: ERROR: Not connected\n"); return 1; } check_test_memory_usage("Since MS connection"); /* Then disconnect the device and uninitialize the USB mass storage driver */ composite_uninitialize(g_composite.cmphandle); g_composite.cmphandle = NULL; printf("disconn_main: Disconnected\n"); check_test_memory_usage("After composite_uninitialize()"); /* Dump debug memory usage */ final_memory_usage("Final memory usage"); return 0; }
int msdis_main(int argc, char *argv[]) { /* First check if the USB mass storage device is already connected */ if (!g_usbstrg.mshandle) { message("msdis: ERROR: Not connected\n"); return 1; } check_test_memory_usage("Since MS connection"); /* Then disconnect the device and uninitialize the USB mass storage driver */ usbstrg_uninitialize(g_usbstrg.mshandle); g_usbstrg.mshandle = NULL; message("msdis: Disconnected\n"); check_test_memory_usage("After usbstrg_uninitialize()"); /* Dump debug memory usage */ final_memory_usage("Final memory usage"); return 0; }
int conn_main(int argc, char *argv[]) #endif { int ret; /* If this program is implemented as the NSH 'msconn' command, then we need to * do a little error checking to assure that we are not being called re-entrantly. */ #ifdef CONFIG_NSH_BUILTIN_APPS /* Check if there is a non-NULL USB mass storage device handle (meaning that the * USB mass storage device is already configured). */ if (g_composite.cmphandle) { printf("conn_main: ERROR: Already connected\n"); return 1; } #endif #ifdef CONFIG_SYSTEM_COMPOSITE_DEBUGMM # ifdef CONFIG_CAN_PASS_STRUCTS g_composite.mmstart = mallinfo(); g_composite.mmprevious = g_composite.mmstart; # else (void)mallinfo(&g_composite.mmstart); memcpy(&g_composite.mmprevious, &g_composite.mmstart, sizeof(struct mallinfo)); # endif #endif /* Perform architecture-specific initialization */ printf("conn_main: Performing architecture-specific intialization\n"); ret = composite_archinitialize(); if (ret < 0) { printf("conn_main: composite_archinitialize failed: %d\n", -ret); return 1; } check_test_memory_usage("After composite_archinitialize()"); /* Initialize the USB composite device device */ g_composite.cmphandle = composite_initialize(); if (!g_composite.cmphandle) { printf("conn_main: composite_initialize failed\n"); return 1; } check_test_memory_usage("After composite_initialize()"); #if CONFIG_USBDEV_TRACE && CONFIG_USBDEV_TRACE_INITIALIDSET != 0 /* If USB tracing is enabled and tracing of initial USB events is specified, * then dump all collected trace data to stdout */ sleep(5); ret = dumptrace(); if (ret < 0) { goto errout; } #endif /* It this program was configued as an NSH command, then just exit now. * Also, if signals are not enabled (and, hence, sleep() is not supported. * then we have not real option but to exit now. */ #if !defined(CONFIG_NSH_BUILTIN_APPS) && !defined(CONFIG_DISABLE_SIGNALS) /* Otherwise, this thread will hang around and monitor the USB activity */ /* Open the serial driver */ ret = open_serial(); if (ret < 0) { goto errout; } /* Now looping */ for (;;) { /* Sleep for a bit */ fflush(stdout); sleep(5); /* Echo any serial data */ ret = echo_serial(); if (ret < 0) { goto errout; } /* Dump trace data */ # ifdef CONFIG_USBDEV_TRACE printf("\n" "conn_main: USB TRACE DATA:\n"); ret = dumptrace(); if (ret < 0) { goto errout; } check_test_memory_usage("After usbtrace_enumerate()"); # else printf("conn_main: Still alive\n"); # endif } #else printf("conn_main: Connected\n"); check_test_memory_usage("After composite device connection"); #endif /* Dump debug memory usage */ printf("conn_main: Exiting\n"); #if !defined(CONFIG_NSH_BUILTIN_APPS) && !defined(CONFIG_DISABLE_SIGNALS) close(g_composite.infd); close(g_composite.outfd); #endif #ifdef CONFIG_NSH_BUILTIN_APPS #endif final_memory_usage("Final memory usage"); return 0; errout: #if !defined(CONFIG_NSH_BUILTIN_APPS) && !defined(CONFIG_DISABLE_SIGNALS) close(g_composite.infd); close(g_composite.outfd); #endif composite_uninitialize(g_composite.cmphandle); final_memory_usage("Final memory usage"); return 1; }
int MAIN_NAME(int argc, char *argv[]) { FAR void *handle; int ret; /* If this program is implemented as the NSH 'msconn' command, then we need to * do a little error checking to assure that we are not being called re-entrantly. */ #ifdef CONFIG_EXAMPLES_USBSTRG_BUILTIN /* Check if there is a non-NULL USB mass storage device handle (meaning that the * USB mass storage device is already configured). */ if (g_usbstrg.mshandle) { message(MAIN_NAME_STRING ": ERROR: Already connected\n"); return 1; } #endif #ifdef CONFIG_EXAMPLES_USBSTRG_DEBUGMM # ifdef CONFIG_CAN_PASS_STRUCTS g_usbstrg.mmstart = mallinfo(); g_usbstrg.mmprevious = g_usbstrg.mmstart; # else (void)mallinfo(&g_usbstrg.mmstart); memcpy(&g_usbstrg.mmprevious, &g_usbstrg.mmstart, sizeof(struct mallinfo)); # endif #endif /* Initialize USB trace output IDs */ usbtrace_enable(TRACE_BITSET); check_test_memory_usage("After usbtrace_enable()"); /* Register block drivers (architecture-specific) */ message(MAIN_NAME_STRING ": Creating block drivers\n"); ret = usbstrg_archinitialize(); if (ret < 0) { message(MAIN_NAME_STRING ": usbstrg_archinitialize failed: %d\n", -ret); return 2; } check_test_memory_usage("After usbstrg_archinitialize()"); /* Then exports the LUN(s) */ message(MAIN_NAME_STRING ": Configuring with NLUNS=%d\n", CONFIG_EXAMPLES_USBSTRG_NLUNS); ret = usbstrg_configure(CONFIG_EXAMPLES_USBSTRG_NLUNS, &handle); if (ret < 0) { message(MAIN_NAME_STRING ": usbstrg_configure failed: %d\n", -ret); usbstrg_uninitialize(handle); return 3; } message(MAIN_NAME_STRING ": handle=%p\n", handle); check_test_memory_usage("After usbstrg_configure()"); message(MAIN_NAME_STRING ": Bind LUN=0 to %s\n", CONFIG_EXAMPLES_USBSTRG_DEVPATH1); ret = usbstrg_bindlun(handle, CONFIG_EXAMPLES_USBSTRG_DEVPATH1, 0, 0, 0, false); if (ret < 0) { message(MAIN_NAME_STRING ": usbstrg_bindlun failed for LUN 1 using %s: %d\n", CONFIG_EXAMPLES_USBSTRG_DEVPATH1, -ret); usbstrg_uninitialize(handle); return 4; } check_test_memory_usage("After usbstrg_bindlun()"); #if CONFIG_EXAMPLES_USBSTRG_NLUNS > 1 message(MAIN_NAME_STRING ": Bind LUN=1 to %s\n", CONFIG_EXAMPLES_USBSTRG_DEVPATH2); ret = usbstrg_bindlun(handle, CONFIG_EXAMPLES_USBSTRG_DEVPATH2, 1, 0, 0, false); if (ret < 0) { message(MAIN_NAME_STRING ": usbstrg_bindlun failed for LUN 2 using %s: %d\n", CONFIG_EXAMPLES_USBSTRG_DEVPATH2, -ret); usbstrg_uninitialize(handle); return 5; } check_test_memory_usage("After usbstrg_bindlun() #2"); #if CONFIG_EXAMPLES_USBSTRG_NLUNS > 2 message(MAIN_NAME_STRING ": Bind LUN=2 to %s\n", CONFIG_EXAMPLES_USBSTRG_DEVPATH3); ret = usbstrg_bindlun(handle, CONFIG_EXAMPLES_USBSTRG_DEVPATH3, 2, 0, 0, false); if (ret < 0) { message(MAIN_NAME_STRING ": usbstrg_bindlun failed for LUN 3 using %s: %d\n", CONFIG_EXAMPLES_USBSTRG_DEVPATH3, -ret); usbstrg_uninitialize(handle); return 6; } check_test_memory_usage("After usbstrg_bindlun() #3"); #endif #endif ret = usbstrg_exportluns(handle); if (ret < 0) { message(MAIN_NAME_STRING ": usbstrg_exportluns failed: %d\n", -ret); usbstrg_uninitialize(handle); return 7; } check_test_memory_usage("After usbstrg_exportluns()"); /* It this program was configued as an NSH command, then just exit now. * Also, if signals are not enabled (and, hence, sleep() is not supported. * then we have not real option but to exit now. */ #if !defined(CONFIG_EXAMPLES_USBSTRG_BUILTIN) && !defined(CONFIG_DISABLE_SIGNALS) /* Otherwise, this thread will hang around and monitor the USB storage activity */ for (;;) { msgflush(); sleep(5); # ifdef CONFIG_USBDEV_TRACE message("\nuser_start: USB TRACE DATA:\n"); ret = usbtrace_enumerate(usbstrg_enumerate, NULL); if (ret < 0) { message(MAIN_NAME_STRING ": usbtrace_enumerate failed: %d\n", -ret); usbstrg_uninitialize(handle); return 8; } check_test_memory_usage("After usbtrace_enumerate()"); # else message(MAIN_NAME_STRING ": Still alive\n"); # endif } #elif defined(CONFIG_EXAMPLES_USBSTRG_BUILTIN) /* Return the USB mass storage device handle so it can be used by the 'misconn' * command. */ message(MAIN_NAME_STRING ": Connected\n"); g_usbstrg.mshandle = handle; check_test_memory_usage("After MS connection"); #else /* defined(CONFIG_DISABLE_SIGNALS) */ /* Just exit */ message(MAIN_NAME_STRING ": Exiting\n"); /* Dump debug memory usage */ final_memory_usage("Final memory usage"); #endif return 0; }