/*---------------------------------------------------------------------------*/ PROCESS_THREAD(ftp_process, ev, data) { uip_ipaddr_t ipaddr; uip_ipaddr_t *ipaddrptr; PROCESS_BEGIN(); ftpc_init(); memset(statustext, 0, sizeof(statustext)); memset(remotefiles, 0, sizeof(remotefiles)); memset(localfiles, 0, sizeof(localfiles)); memset(leftptr, 0, sizeof(leftptr)); memset(midptr, 0, sizeof(midptr)); memset(rightptr, 0, sizeof(rightptr)); ptrstate = PTRSTATE_REMOTEFILES; localptr = remoteptr = 0; connection = NULL; ctk_window_new(&window, 3 + FILES_WIDTH * 2, 3 + FILES_HEIGHT, "FTP Client"); CTK_WIDGET_ADD(&window, &localtextlabel); CTK_WIDGET_ADD(&window, &remotetextlabel); CTK_WIDGET_ADD(&window, &leftptrlabel); CTK_WIDGET_ADD(&window, &localfileslabel); CTK_WIDGET_ADD(&window, &midptrlabel); CTK_WIDGET_ADD(&window, &remotefileslabel); CTK_WIDGET_ADD(&window, &rightptrlabel); CTK_WIDGET_ADD(&window, &reloadbutton); #if CTK_CONF_WINDOWS CTK_WIDGET_ADD(&window, &connectionbutton); #else /* CTK_CONF_WINDOWS */ CTK_WIDGET_ADD(&window, &usagetextlabel); #endif /* CTK_CONF_WINDOWS */ CTK_WIDGET_ADD(&window, &quitbutton); CTK_WIDGET_ADD(&window, &statuslabel); #if CTK_CONF_WINDOWS CTK_WIDGET_FOCUS(&window, &connectionbutton); #endif /* CTK_CONF_WINDOWS */ #if CTK_CONF_WINDOWS ctk_window_open(&window); showptr(); start_loaddir(); ptractive = 1; #else /* CTK_CONF_WINDOWS */ make_connectionwindow(); ctk_window_open(&connectionwindow); #endif /* CTK_CONF_WINDOWS */ while(1) { PROCESS_WAIT_EVENT(); if(ev == PROCESS_EVENT_CONTINUE) { if(cfs_readdir(&dir, &dirent) == 0 && localfileptr < FILES_HEIGHT) { strncpy(&localfiles[localfileptr * FILES_WIDTH], dirent.name, FILES_WIDTH); CTK_WIDGET_REDRAW(&localfileslabel); ++localfileptr; process_post(&ftp_process, PROCESS_EVENT_CONTINUE, NULL); } else{ cfs_closedir(&dir); } } else if(ev == PROCESS_EVENT_EXIT) { quit(); } else if(ev == tcpip_event) { ftpc_appcall(data); #if UIP_UDP } else if(ev == resolv_event_found) { /* Either found a hostname, or not. */ if((char *)data != NULL && resolv_lookup((char *)data, &ipaddrptr) == RESOLV_STATUS_CACHED) { connection = ftpc_connect(ipaddrptr, UIP_HTONS(21)); show_statustext("Connecting to ", hostname); } else { show_statustext("Host not found: ", hostname); } #endif /* UIP_UDP */ } else if( #if CTK_CONF_WINDOWCLOSE ev == ctk_signal_window_close && #endif /* CTK_CONF_WINDOWCLOSE */ data == (process_data_t)&window) { quit(); } else if(ev == ctk_signal_widget_activate) { if((struct ctk_button *)data == &quitbutton) { quit(); } else if((struct ctk_button *)data == &cancelbutton) { #if CTK_CONF_WINDOWS ctk_dialog_close(); #else /* CTK_CONF_WINDOWS */ ctk_window_close(&dialog); ctk_window_open(&window); #endif /* CTK_CONF_WINDOWS */ ptractive = 1; } else if((struct ctk_button *)data == &downloadbutton) { #if CTK_CONF_WINDOWS ctk_dialog_close(); #else /* CTK_CONF_WINDOWS */ ctk_window_close(&dialog); ctk_window_open(&window); #endif /* CTK_CONF_WINDOWS */ ptractive = 1; close_file(); fd = cfs_open(localfilename, CFS_WRITE); if(fd != -1) { show_statustext("Downloading ", remotefilename); ftpc_get(connection, remotefilename); } else { show_statustext("Could not create ", localfilename); } } else if((struct ctk_button *)data == &reloadbutton) { start_loaddir(); #if CTK_CONF_WINDOWS } else if((struct ctk_button *)data == &connectionbutton) { ptractive = 0; make_connectionwindow(); ctk_dialog_open(&connectionwindow); } else if((struct ctk_button *)data == &closebutton) { ctk_dialog_close(); ptractive = 1; #endif /* CTK_CONF_WINDOWS */ } else if((struct ctk_button *)data == &anonymousbutton) { strcpy(username, "anonymous"); strcpy(password, "contiki@ftp"); CTK_WIDGET_REDRAW(&userentry); CTK_WIDGET_REDRAW(&passwordentry); #if CTK_CONF_WINDOWS } else if((struct ctk_button *)data == &closeconnectionbutton) { ctk_dialog_close(); ptractive = 1; ftpc_close(connection); #endif /* CTK_CONF_WINDOWS */ } else if((struct ctk_button *)data == &connectbutton) { #if CTK_CONF_WINDOWS ctk_dialog_close(); #else /* CTK_CONF_WINDOWS */ ctk_window_close(&connectionwindow); ctk_window_open(&window); showptr(); start_loaddir(); #endif /* CTK_CONF_WINDOWS */ ptractive = 1; #if UIP_UDP if(uiplib_ipaddrconv(hostname, &ipaddr) == 0) { if(resolv_lookup(hostname, &ipaddrptr) != RESOLV_STATUS_CACHED) { resolv_query(hostname); show_statustext("Resolving host ", hostname); break; } connection = ftpc_connect(ipaddrptr, UIP_HTONS(21)); show_statustext("Connecting to ", hostname); } else { connection = ftpc_connect(&ipaddr, UIP_HTONS(21)); show_statustext("Connecting to ", hostname); } #else /* UIP_UDP */ uiplib_ipaddrconv(hostname, &ipaddr); connection = ftpc_connect(&ipaddr, UIP_HTONS(21)); show_statustext("Connecting to ", hostname); #endif /* UIP_UDP */ } /* if((struct ctk_button *)data == &closebutton) { ftpc_close(connection); }*/ } else if(ptractive && ev == ctk_signal_keypress) { if((ctk_arch_key_t)(size_t)data == ' ') { if(ptrstate == PTRSTATE_LOCALFILES) { ptrstate = PTRSTATE_REMOTEFILES; } else { ptrstate = PTRSTATE_LOCALFILES; } } else if((ctk_arch_key_t)(size_t)data == CH_CURS_UP) { clearptr(); if(ptrstate == PTRSTATE_LOCALFILES) { if(localptr > 0) { --localptr; } } else { if(remoteptr > 0) { --remoteptr; } } } else if((ctk_arch_key_t)(size_t)data == CH_CURS_DOWN) { clearptr(); if(ptrstate == PTRSTATE_LOCALFILES) { if(localptr < FILES_HEIGHT - 1) { ++localptr; } } else { if(remoteptr < FILES_HEIGHT - 1) { ++remoteptr; } } } else if((ctk_arch_key_t)(size_t)data == CH_ENTER) { if(ptrstate == PTRSTATE_LOCALFILES) { strncpy(localfilename, &localfiles[localptr * FILES_WIDTH], FILES_WIDTH); strncpy(remotefilename, &localfiles[localptr * FILES_WIDTH], FILES_WIDTH); ptractive = 0; make_uploaddialog(); #if CTK_CONF_WINDOWS ctk_dialog_open(&dialog); #else /* CTK_CONF_WINDOWS */ ctk_window_close(&window); ctk_window_open(&dialog); #endif /* CTK_CONF_WINDOWS */ } else { strncpy(localfilename, &remotefiles[remoteptr * FILES_WIDTH], FILES_WIDTH); strncpy(remotefilename, &remotefiles[remoteptr * FILES_WIDTH], FILES_WIDTH); ftpc_cwd(connection, remotefilename); /* make_downloaddialog(); ctk_dialog_open(&dialog);*/ } } else if((ctk_arch_key_t)(size_t)data == 'u') { ftpc_cdup(connection); } if(ptractive) { showptr(); } } } PROCESS_END(); }
int main(void) { uint8_t ret = 0; //int32_t loopback_ret; #if defined (__USE_LPCOPEN) #if !defined(NO_BOARD_LIB) // Read clock settings and update SystemCoreClock variable SystemCoreClockUpdate(); // Set up and initialize all required blocks and // functions related to the board hardware Board_Init(); // Set the LED to the state of "On" Board_LED_Set(0, true); //Board_LED_Set(1, true); //Board_LED_Set(2, true); #endif #endif SPI_Init(); W5500_Init(); Net_Conf(gWIZNETINFO); #ifdef _MAIN_DEBUG_ uint8_t tmpstr[6] = {0,}; ctlwizchip(CW_GET_ID,(void*)tmpstr); /* printf("\r\n=======================================\r\n"); printf(" WIZnet %s EVB Demos v%d.%.2d\r\n", tmpstr, VER_H, VER_L); printf("=======================================\r\n"); printf(">> W5500 based FTP Client Example\r\n"); printf("=======================================\r\n"); */ Display_Net_Conf(); // Print out the network information to serial terminal #endif /* Enable and setup SysTick Timer at a periodic rate */ SysTick_Config(SystemCoreClock / TICKRATE_HZ1); /* Initialize buttons on the W5500 EVB board */ Board_Buttons_Init(); g_sdcard_done = 0; #if defined(F_APP_FTPC) ftpc_init(gWIZNETINFO.ip); #endif ret = flash_mount(); if(ret > 0) { display_SDcard_Info(ret); } while(1) { /* Button: SW1 */ if(Check_Buttons_Pressed() == BUTTONS_BUTTON1) { printf("\r\n########## SW1 was pressed.\r\n"); printf("########## Data flash flag was cleared.\r\n"); printf("########## Please reset a target.\r\n"); release_factory_flag(); } #if defined(F_APP_FTPC) ftpc_run(gFTPBUF); #endif /* Loopback Test: TCP Server and UDP */ // Test for Ethernet data transfer validation { //loopback_tcps(SOCK_TCPS, gDATABUF, PORT_TCPS); //loopback_udps(SOCK_UDPS, gDATABUF, PORT_UDPS); //loopback_ret = loopback_tcpc(SOCK_TCPS, gDATABUF, destip, destport); //if(loopback_ret < 0) printf("loopback ret: %ld\r\n", loopback_ret); // TCP Socket Error code } } return 0 ; }