Compare commits
11 Commits
v2.0.0
...
opimizatio
Author | SHA1 | Date | |
---|---|---|---|
8508482bc4 | |||
c2b6716e43 | |||
580241080d | |||
c29dc21040 | |||
b840aa13a2 | |||
b6b808b306 | |||
924ceea741 | |||
86726229f0 | |||
2857b805d9 | |||
065b096c92 | |||
f36dd4352a |
Binary file not shown.
@ -252,7 +252,9 @@
|
|||||||
* @brief Socket Interrupt Mask Register(R/W)
|
* @brief Socket Interrupt Mask Register(R/W)
|
||||||
* @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR2.
|
* @details Each bit of \ref _IMR_ corresponds to each bit of \ref IR2.
|
||||||
* When a bit of \ref _IMR_ is and the corresponding bit of \ref IR2 is Interrupt will be issued.
|
* When a bit of \ref _IMR_ is and the corresponding bit of \ref IR2 is Interrupt will be issued.
|
||||||
* In other words, if a bit of \ref SIMR is an interrupt will be not issued even if the corresponding bit of \ref IR is
|
* In other words, if a bit of \ref _IMR_, an interrupt will be not issued even if the corresponding bit of \ref IR2 is set
|
||||||
|
* @note This Register is same operated as <b>SMIR<b> of W5100, W5300 and W5550.\n
|
||||||
|
* So, \ref setSIMR() set a value to _IMR_ for integrating with ioLibrary
|
||||||
*/
|
*/
|
||||||
#define _IMR_ (_W5200_IO_BASE_ + (0x0016)) // Socket Interrupt Mask
|
#define _IMR_ (_W5200_IO_BASE_ + (0x0016)) // Socket Interrupt Mask
|
||||||
|
|
||||||
@ -375,6 +377,8 @@
|
|||||||
* </table>
|
* </table>
|
||||||
* - \ref IM_IR7 : IP Conflict Interrupt Mask
|
* - \ref IM_IR7 : IP Conflict Interrupt Mask
|
||||||
* - \ref IM_IR5 : PPPoE Close Interrupt Mask
|
* - \ref IM_IR5 : PPPoE Close Interrupt Mask
|
||||||
|
* @note This Register is same operated as <b>_IMR_<b> of W5100, W5300 and W5550.\n
|
||||||
|
* So, \ref setIMR() set a value to IMR2 for integrating with ioLibrary
|
||||||
*/
|
*/
|
||||||
#define IMR2 (_W5200_IO_BASE_ + (0x0036)) // Interrupt Mask
|
#define IMR2 (_W5200_IO_BASE_ + (0x0036)) // Interrupt Mask
|
||||||
|
|
||||||
@ -1328,21 +1332,31 @@ void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup Common_register_access_function_W5200
|
* @ingroup Common_register_access_function_W5200
|
||||||
* @brief Set \ref _IMR_ register
|
* @brief Set \ref IMR2 register
|
||||||
* @param (uint8_t)imr Value to set @ref _IMR_ register.
|
* @param (uint8_t)imr Value to set @ref IMR2 register.
|
||||||
* @sa getIMR()
|
* @sa getIMR()
|
||||||
*/
|
*/
|
||||||
|
//M20150410 : Replace _IMR_ with IMR2 for integrating with ioLibrary
|
||||||
|
/*
|
||||||
#define setIMR(imr) \
|
#define setIMR(imr) \
|
||||||
WIZCHIP_WRITE(_IMR_, imr)
|
WIZCHIP_WRITE(_IMR_, imr)
|
||||||
|
*/
|
||||||
|
#define setIMR(imr) \
|
||||||
|
WIZCHIP_WRITE(IMR2, imr)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup Common_register_access_function_W5200
|
* @ingroup Common_register_access_function_W5200
|
||||||
* @brief Get \ref _IMR_ register
|
* @brief Get \ref IMR2 register
|
||||||
* @return uint8_t. Value of @ref _IMR_ register.
|
* @return uint8_t. Value of @ref IMR2 register.
|
||||||
* @sa setIMR()
|
* @sa setIMR()
|
||||||
*/
|
*/
|
||||||
|
//M20150410 : Replace _IMR_ with IMR2 for integrating with ioLibrary
|
||||||
|
/*
|
||||||
#define getIMR() \
|
#define getIMR() \
|
||||||
WIZCHIP_READ(_IMR_)
|
WIZCHIP_READ(_IMR_)
|
||||||
|
*/
|
||||||
|
#define getIMR() \
|
||||||
|
WIZCHIP_READ(IMR2)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup Common_register_access_function_W5200
|
* @ingroup Common_register_access_function_W5200
|
||||||
@ -1492,23 +1506,34 @@ void WIZCHIP_WRITE_BUF(uint32_t AddrSel, uint8_t* pBuf, uint16_t len);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup Common_register_access_function_W5200
|
* @ingroup Common_register_access_function_W5200
|
||||||
* @brief Set \ref IMR2 register
|
* @brief Set \ref _IMR_ register
|
||||||
* @param (uint8_t)imr2 Value to set \ref IMR2 register.
|
* @param (uint8_t)imr2 Value to set \ref IMR2 register.
|
||||||
* @sa getIMR2()
|
* @sa getIMR2()
|
||||||
|
* @note If possible, Don't use this function. Instead, Use setSIMR() for compatible with ioLibrary.
|
||||||
*/
|
*/
|
||||||
|
//M20150410 : Replace IMR2 with _IMR_ for integrating with ioLibrary
|
||||||
|
/*
|
||||||
#define setIMR2(imr2) \
|
#define setIMR2(imr2) \
|
||||||
WIZCHIP_WRITE(IMR2, (imr2 & 0xA0))
|
WIZCHIP_WRITE(IMR2, (imr2 & 0xA0))
|
||||||
|
*/
|
||||||
|
#define setIMR2(imr2) \
|
||||||
|
WIZCHIP_WRITE(_IMR_, (imr2 & 0xA0))
|
||||||
#define setSIMR(imr2) setIMR2(imr2)
|
#define setSIMR(imr2) setIMR2(imr2)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @ingroup Common_register_access_function_W5200
|
* @ingroup Common_register_access_function_W5200
|
||||||
* @brief Get \ref IMR2 register
|
* @brief Get \ref _IMR_ register
|
||||||
* @return uint8_t. Value of \ref IMR2 register.
|
* @return uint8_t. Value of \ref IMR2 register.
|
||||||
* @sa setIMR2()
|
* @sa setIMR2()
|
||||||
*/
|
*/
|
||||||
|
//M20150410 : Replace IMR2 with _IMR_ for integrating with ioLibrary
|
||||||
|
/*
|
||||||
#define getIMR2() \
|
#define getIMR2() \
|
||||||
(WIZCHIP_READ(IMR2) & 0xA0)
|
(WIZCHIP_READ(IMR2) & 0xA0)
|
||||||
#define getSIMR() getIMR2()
|
*/
|
||||||
|
#define getIMR2() \
|
||||||
|
(WIZCHIP_READ(_IMR_) & 0xA0)
|
||||||
|
#define getSIMR() getIMR2()
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
// Socket N register I/O function //
|
// Socket N register I/O function //
|
||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
|
@ -171,7 +171,7 @@ int8_t close(uint8_t sn)
|
|||||||
while( getSn_CR(sn) );
|
while( getSn_CR(sn) );
|
||||||
/* clear all interrupt of the socket. */
|
/* clear all interrupt of the socket. */
|
||||||
setSn_IR(sn, 0xFF);
|
setSn_IR(sn, 0xFF);
|
||||||
//A20130325 : Release the sock_io_mode of socket n.
|
//A20150401 : Release the sock_io_mode of socket n.
|
||||||
sock_io_mode &= ~(1<<sn);
|
sock_io_mode &= ~(1<<sn);
|
||||||
//
|
//
|
||||||
sock_is_sending &= ~(1<<sn);
|
sock_is_sending &= ~(1<<sn);
|
||||||
@ -317,7 +317,9 @@ int32_t send(uint8_t sn, uint8_t * buf, uint16_t len)
|
|||||||
/* wait to process the command... */
|
/* wait to process the command... */
|
||||||
while(getSn_CR(sn));
|
while(getSn_CR(sn));
|
||||||
sock_is_sending |= (1 << sn);
|
sock_is_sending |= (1 << sn);
|
||||||
return len;
|
//M20150409 : Explicit Type Casting
|
||||||
|
//return len;
|
||||||
|
return (int32_t)len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -359,7 +361,9 @@ int32_t recv(uint8_t sn, uint8_t * buf, uint16_t len)
|
|||||||
wiz_recv_data(sn, buf, len);
|
wiz_recv_data(sn, buf, len);
|
||||||
setSn_CR(sn,Sn_CR_RECV);
|
setSn_CR(sn,Sn_CR_RECV);
|
||||||
while(getSn_CR(sn));
|
while(getSn_CR(sn));
|
||||||
return len;
|
//M20150409 : Explicit Type Casting
|
||||||
|
//return len;
|
||||||
|
return (int32_t)len;
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port)
|
int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t port)
|
||||||
@ -433,16 +437,22 @@ int32_t sendto(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16_t
|
|||||||
else if(tmp & Sn_IR_TIMEOUT)
|
else if(tmp & Sn_IR_TIMEOUT)
|
||||||
{
|
{
|
||||||
setSn_IR(sn, Sn_IR_TIMEOUT);
|
setSn_IR(sn, Sn_IR_TIMEOUT);
|
||||||
len = SOCKERR_TIMEOUT;
|
//M20150409 : Fixed the lost of sign bits by type casting.
|
||||||
break;
|
//len = (uint16_t)SOCKERR_TIMEOUT;
|
||||||
|
//break;
|
||||||
|
#if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
|
||||||
|
if(taddr) setSUBR((uint8_t*)&taddr);
|
||||||
|
#endif
|
||||||
|
return SOCKERR_TIMEOUT;
|
||||||
}
|
}
|
||||||
////////////
|
////////////
|
||||||
}
|
}
|
||||||
#if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
|
#if _WIZCHIP_ < 5500 //M20150401 : for WIZCHIP Errata #4, #5 (ARP errata)
|
||||||
if(taddr) setSUBR((uint8_t*)&taddr);
|
if(taddr) setSUBR((uint8_t*)&taddr);
|
||||||
#endif
|
#endif
|
||||||
|
//M20150409 : Explicit Type Casting
|
||||||
return len;
|
//return len;
|
||||||
|
return (int32_t)len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -489,7 +499,7 @@ int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16
|
|||||||
setSn_CR(sn,Sn_CR_RECV);
|
setSn_CR(sn,Sn_CR_RECV);
|
||||||
while(getSn_CR(sn));
|
while(getSn_CR(sn));
|
||||||
// read peer's IP address, port number & packet length
|
// read peer's IP address, port number & packet length
|
||||||
addr[0] = head[0];
|
addr[0] = head[0];
|
||||||
addr[1] = head[1];
|
addr[1] = head[1];
|
||||||
addr[2] = head[2];
|
addr[2] = head[2];
|
||||||
addr[3] = head[3];
|
addr[3] = head[3];
|
||||||
@ -564,7 +574,9 @@ int32_t recvfrom(uint8_t sn, uint8_t * buf, uint16_t len, uint8_t * addr, uint16
|
|||||||
//if(sock_remained_size[sn] != 0) sock_pack_info[sn] |= 0x01;
|
//if(sock_remained_size[sn] != 0) sock_pack_info[sn] |= 0x01;
|
||||||
if(sock_remained_size[sn] != 0) sock_pack_info[sn] |= PACK_REMAINED;
|
if(sock_remained_size[sn] != 0) sock_pack_info[sn] |= PACK_REMAINED;
|
||||||
//
|
//
|
||||||
return pack_len;
|
//M20150409 : Explicit Type Casting
|
||||||
|
//return pack_len;
|
||||||
|
return (int32_t)pack_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -341,7 +341,9 @@ typedef enum
|
|||||||
SIK_RECEIVED = (1 << 2), ///< data received
|
SIK_RECEIVED = (1 << 2), ///< data received
|
||||||
SIK_TIMEOUT = (1 << 3), ///< timeout occurred
|
SIK_TIMEOUT = (1 << 3), ///< timeout occurred
|
||||||
SIK_SENT = (1 << 4), ///< send ok
|
SIK_SENT = (1 << 4), ///< send ok
|
||||||
SIK_ALL = 0x1F, ///< all interrupt
|
//M20150410 : Remove the comma of last member
|
||||||
|
//SIK_ALL = 0x1F, ///< all interrupt
|
||||||
|
SIK_ALL = 0x1F ///< all interrupt
|
||||||
}sockint_kind;
|
}sockint_kind;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,103 +1,37 @@
|
|||||||
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include "stdio_private.h"
|
|
||||||
#include "socket.h"
|
|
||||||
#include "ftpc.h"
|
#include "ftpc.h"
|
||||||
#include "mmcHandler.h"
|
|
||||||
|
|
||||||
/* FTP Responses */
|
|
||||||
#define R_150 150 /* File status ok; opening data conn */
|
|
||||||
#define R_200 200 /* 'Generic' command ok */
|
|
||||||
#define R_220 220 /* Service ready for new user. */
|
|
||||||
#define R_226 226 /* Closing data connection. File transfer/abort successful */
|
|
||||||
#define R_227 227 /* Entering passive mode (h1,h2,h3,h4,p1,p2) */
|
|
||||||
#define R_230 230 /* User logged in, proceed */
|
|
||||||
#define R_331 331 /* User name okay, need password. */
|
|
||||||
|
|
||||||
#define TransferAscii 0x41
|
|
||||||
#define TransferBinary 0x49
|
|
||||||
#define ConnectActive 1
|
|
||||||
#define ConnectPassive 0
|
|
||||||
|
|
||||||
un_l2cval remote_ip;
|
un_l2cval remote_ip;
|
||||||
uint16_t remote_port;
|
uint16_t remote_port;
|
||||||
un_l2cval local_ip;
|
un_l2cval local_ip;
|
||||||
uint16_t local_port;
|
uint16_t local_port;
|
||||||
uint8_t connect_state_controlc = 0;
|
uint8_t connect_state_control_ftpc = 0;
|
||||||
uint8_t connect_state_datac = 0;
|
uint8_t connect_state_data_ftpc = 0;
|
||||||
uint8_t gModeActivePassiveflag = 0;
|
uint8_t gModeActivePassiveflag = 0;
|
||||||
struct ftpd ftp;
|
uint8_t FTP_destip[4] = {192, 168, 10, 230}; // For FTP client examples; destination network info
|
||||||
|
uint16_t FTP_destport = 21; // For FTP client examples; destination network info
|
||||||
enum CommandFirst {
|
|
||||||
f_nocmd,
|
|
||||||
f_dir,
|
|
||||||
f_put,
|
|
||||||
f_get,
|
|
||||||
};
|
|
||||||
enum CommandSecond {
|
|
||||||
s_nocmd,
|
|
||||||
s_dir,
|
|
||||||
s_put,
|
|
||||||
s_get,
|
|
||||||
};
|
|
||||||
struct Command {
|
|
||||||
enum CommandFirst First;
|
|
||||||
enum CommandSecond Second;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Command Command;
|
|
||||||
|
|
||||||
int current_yearc = 2014;
|
|
||||||
int current_monthc = 12;
|
|
||||||
int current_dayc = 31;
|
|
||||||
int current_hourc = 10;
|
|
||||||
int current_minc = 10;
|
|
||||||
int current_secc = 30;
|
|
||||||
|
|
||||||
uint8_t gMenuStart = 0;
|
uint8_t gMenuStart = 0;
|
||||||
uint8_t gDataSockReady = 0;
|
uint8_t gDataSockReady = 0;
|
||||||
uint8_t gDataPutGetStart = 0;
|
uint8_t gDataPutGetStart = 0;
|
||||||
uint8_t gModeAsciiBinary = 0;
|
|
||||||
uint8_t gModeActivePassive = ConnectPassive;
|
|
||||||
|
|
||||||
static uint8_t gMsgBuf[20]={0,};
|
static uint8_t gMsgBuf[20]={0,};
|
||||||
|
|
||||||
// For FTP client examples; destination network info
|
struct ftpc ftpc;
|
||||||
uint8_t FTP_destip[4] = {192, 168, 0, 230};
|
struct Command Command;
|
||||||
uint16_t FTP_destport = 21;
|
|
||||||
extern int Board_UARTGetCharBlocking(void);
|
|
||||||
|
|
||||||
uint8_t* User_Keyboard_MSG()
|
|
||||||
{
|
|
||||||
uint8_t i=0;
|
|
||||||
do{
|
|
||||||
gMsgBuf[i] = Board_UARTGetCharBlocking();
|
|
||||||
i++;
|
|
||||||
}while(gMsgBuf[i-1]!=0x0d);
|
|
||||||
gMsgBuf[i-1]=0;
|
|
||||||
return gMsgBuf;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ftpc_init(uint8_t * src_ip)
|
void ftpc_init(uint8_t * src_ip)
|
||||||
{
|
{
|
||||||
ftp.state = FTPS_NOT_LOGIN;
|
ftpc.dsock_mode = ACTIVE_MODE;
|
||||||
ftp.dsock_mode = ACTIVE_MODE;
|
|
||||||
local_ip.cVal[0] = src_ip[0];
|
local_ip.cVal[0] = src_ip[0];
|
||||||
local_ip.cVal[1] = src_ip[1];
|
local_ip.cVal[1] = src_ip[1];
|
||||||
local_ip.cVal[2] = src_ip[2];
|
local_ip.cVal[2] = src_ip[2];
|
||||||
local_ip.cVal[3] = src_ip[3];
|
local_ip.cVal[3] = src_ip[3];
|
||||||
local_port = 35000;
|
local_port = 35000;
|
||||||
strcpy(ftp.workingdir, "/");
|
strcpy(ftpc.workingdir, "/");
|
||||||
socket(CTRL_SOCK, Sn_MR_TCP, IPPORT_FTP, 0x0);
|
socket(CTRL_SOCK, Sn_MR_TCP, FTP_destport, 0x0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t ftpc_run(uint8_t * dbuf)
|
uint8_t ftpc_run(uint8_t * dbuf)
|
||||||
{
|
{
|
||||||
|
#ifndef Need_UARTGetCharBlocking_func
|
||||||
uint16_t size = 0;
|
uint16_t size = 0;
|
||||||
long ret = 0;
|
long ret = 0;
|
||||||
uint32_t send_byte, recv_byte;
|
uint32_t send_byte, recv_byte;
|
||||||
@ -111,10 +45,10 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
switch(getSn_SR(CTRL_SOCK))
|
switch(getSn_SR(CTRL_SOCK))
|
||||||
{
|
{
|
||||||
case SOCK_ESTABLISHED :
|
case SOCK_ESTABLISHED :
|
||||||
if(!connect_state_controlc){
|
if(!connect_state_control_ftpc){
|
||||||
printf("%d:FTP Connected\r\n", CTRL_SOCK);
|
printf("%d:FTP Connected\r\n", CTRL_SOCK);
|
||||||
strcpy(ftp.workingdir, "/");
|
strcpy(ftpc.workingdir, "/");
|
||||||
connect_state_controlc = 1;
|
connect_state_control_ftpc = 1;
|
||||||
}
|
}
|
||||||
if(gMenuStart){
|
if(gMenuStart){
|
||||||
gMenuStart = 0;
|
gMenuStart = 0;
|
||||||
@ -123,16 +57,18 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
printf("----------------------------------------\r\n");
|
printf("----------------------------------------\r\n");
|
||||||
printf("1> View FTP Server Directory\r\n");
|
printf("1> View FTP Server Directory\r\n");
|
||||||
printf("2> View My Directory\r\n");
|
printf("2> View My Directory\r\n");
|
||||||
printf("3> Sets the type of file to be transferred. Current state : %s\r\n", (gModeAsciiBinary==TransferAscii)?"Ascii":"Binary");
|
printf("3> Sets the type of file to be transferred. Current state : %s\r\n", (ftpc.type==ASCII_TYPE)?"Ascii":"Binary");
|
||||||
printf("4> Sets Data Connection. Current state : %s\r\n", (gModeActivePassive==ConnectActive)?"Active":"Passive");
|
printf("4> Sets Data Connection. Current state : %s\r\n", (ftpc.dsock_mode==ACTIVE_MODE)?"Active":"Passive");
|
||||||
printf("5> Put File to Server\r\n");
|
printf("5> Put File to Server\r\n");
|
||||||
printf("6> Get File from Server\r\n");
|
printf("6> Get File from Server\r\n");
|
||||||
|
#if defined(F_FILESYSTEM)
|
||||||
printf("7> Delete My File\r\n");
|
printf("7> Delete My File\r\n");
|
||||||
|
#endif
|
||||||
printf("----------------------------------------\r\n");
|
printf("----------------------------------------\r\n");
|
||||||
while(1){
|
while(1){
|
||||||
msg_c=Board_UARTGetCharBlocking();
|
msg_c=ftp_getc();
|
||||||
if(msg_c=='1'){
|
if(msg_c=='1'){
|
||||||
if(gModeActivePassive==ConnectPassive){
|
if(ftpc.dsock_mode==PASSIVE_MODE){
|
||||||
sprintf(dat,"PASV\r\n");
|
sprintf(dat,"PASV\r\n");
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
Command.First = f_dir;
|
Command.First = f_dir;
|
||||||
@ -151,7 +87,7 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(msg_c=='5'){
|
else if(msg_c=='5'){
|
||||||
if(gModeActivePassive==ConnectPassive){
|
if(ftpc.dsock_mode==PASSIVE_MODE){
|
||||||
sprintf(dat,"PASV\r\n");
|
sprintf(dat,"PASV\r\n");
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
Command.First = f_put;
|
Command.First = f_put;
|
||||||
@ -169,7 +105,7 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(msg_c=='6'){
|
else if(msg_c=='6'){
|
||||||
if(gModeActivePassive==ConnectPassive){
|
if(ftpc.dsock_mode==PASSIVE_MODE){
|
||||||
sprintf(dat,"PASV\r\n");
|
sprintf(dat,"PASV\r\n");
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
Command.First = f_get;
|
Command.First = f_get;
|
||||||
@ -187,10 +123,14 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(msg_c=='2'){
|
else if(msg_c=='2'){
|
||||||
scan_files(ftp.workingdir, dbuf, (int *)&size);
|
#if defined(F_FILESYSTEM)
|
||||||
|
scan_files(ftpc.workingdir, dbuf, (int *)&size);
|
||||||
printf("\r\n%s\r\n", dbuf);
|
printf("\r\n%s\r\n", dbuf);
|
||||||
getMountedMemorySize(SPI_FLASHM, &totalSize, &availableSize);
|
#else
|
||||||
printf(" - Available Memory Size : %ld kB / %ld kB ( %ld kB is used )\r\n", availableSize, totalSize, (totalSize - availableSize));
|
if (strncmp(ftpc.workingdir, "/$Recycle.Bin", sizeof("/$Recycle.Bin")) != 0)
|
||||||
|
size = sprintf(dbuf, "drwxr-xr-x 1 ftp ftp 0 Dec 31 2014 $Recycle.Bin\r\n-rwxr-xr-x 1 ftp ftp 512 Dec 31 2014 test.txt\r\n");
|
||||||
|
printf("\r\n%s\r\n", dbuf);
|
||||||
|
#endif
|
||||||
gMenuStart = 1;
|
gMenuStart = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -198,16 +138,16 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
printf("1> ASCII\r\n");
|
printf("1> ASCII\r\n");
|
||||||
printf("2> BINARY\r\n");
|
printf("2> BINARY\r\n");
|
||||||
while(1){
|
while(1){
|
||||||
msg_c=Board_UARTGetCharBlocking();
|
msg_c=ftp_getc();
|
||||||
if(msg_c=='1'){
|
if(msg_c=='1'){
|
||||||
sprintf(dat,"TYPE %c\r\n", TransferAscii);
|
sprintf(dat,"TYPE %c\r\n", TransferAscii);
|
||||||
gModeAsciiBinary = TransferAscii;
|
ftpc.type = ASCII_TYPE;
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(msg_c=='2'){
|
else if(msg_c=='2'){
|
||||||
sprintf(dat,"TYPE %c\r\n", TransferBinary);
|
sprintf(dat,"TYPE %c\r\n", TransferBinary);
|
||||||
gModeAsciiBinary = TransferBinary;
|
ftpc.type = IMAGE_TYPE;
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -221,13 +161,13 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
printf("1> ACTIVE\r\n");
|
printf("1> ACTIVE\r\n");
|
||||||
printf("2> PASSIVE\r\n");
|
printf("2> PASSIVE\r\n");
|
||||||
while(1){
|
while(1){
|
||||||
msg_c=Board_UARTGetCharBlocking();
|
msg_c=ftp_getc();
|
||||||
if(msg_c=='1'){
|
if(msg_c=='1'){
|
||||||
gModeActivePassive = ConnectActive;
|
ftpc.dsock_mode=ACTIVE_MODE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if(msg_c=='2'){
|
else if(msg_c=='2'){
|
||||||
gModeActivePassive = ConnectPassive;
|
ftpc.dsock_mode=PASSIVE_MODE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -237,10 +177,11 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
gMenuStart = 1;
|
gMenuStart = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#if defined(F_FILESYSTEM)
|
||||||
else if(msg_c=='7'){
|
else if(msg_c=='7'){
|
||||||
printf(">del filename?");
|
printf(">del filename?");
|
||||||
sprintf(ftp.filename, "/%s\r\n", User_Keyboard_MSG());
|
sprintf(ftpc.filename, "/%s\r\n", User_Keyboard_MSG());
|
||||||
if (f_unlink((const char *)ftp.filename) != 0){
|
if (f_unlink((const char *)ftpc.filename) != 0){
|
||||||
printf("\r\nCould not delete.\r\n");
|
printf("\r\nCould not delete.\r\n");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -249,6 +190,7 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
gMenuStart = 1;
|
gMenuStart = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else{
|
else{
|
||||||
printf("\r\nRetry...\r\n");
|
printf("\r\nRetry...\r\n");
|
||||||
}
|
}
|
||||||
@ -262,17 +204,17 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
case f_put:
|
case f_put:
|
||||||
printf(">put filename?");
|
printf(">put file name?");
|
||||||
sprintf(dat,"STOR %s\r\n", User_Keyboard_MSG());
|
sprintf(dat,"STOR %s\r\n", User_Keyboard_MSG());
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
case f_get:
|
case f_get:
|
||||||
printf(">get filename?");
|
printf(">get file name?");
|
||||||
sprintf(dat,"RETR %s\r\n", User_Keyboard_MSG());
|
sprintf(dat,"RETR %s\r\n", User_Keyboard_MSG());
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("shit!!!! Command.First = default\r\n");
|
printf("Command.First = default\r\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -301,7 +243,7 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
break;
|
break;
|
||||||
case SOCK_CLOSED :
|
case SOCK_CLOSED :
|
||||||
printf("%d:FTPStart\r\n",CTRL_SOCK);
|
printf("%d:FTPStart\r\n",CTRL_SOCK);
|
||||||
if((ret=socket(CTRL_SOCK, Sn_MR_TCP, IPPORT_FTP, 0x0)) != CTRL_SOCK){
|
if((ret=socket(CTRL_SOCK, Sn_MR_TCP, FTP_destport, 0x0)) != CTRL_SOCK){
|
||||||
printf("%d:socket() error:%ld\r\n", CTRL_SOCK, ret);
|
printf("%d:socket() error:%ld\r\n", CTRL_SOCK, ret);
|
||||||
close(CTRL_SOCK);
|
close(CTRL_SOCK);
|
||||||
return ret;
|
return ret;
|
||||||
@ -313,7 +255,7 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
printf("%d:Connect error\r\n",CTRL_SOCK);
|
printf("%d:Connect error\r\n",CTRL_SOCK);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
connect_state_controlc = 0;
|
connect_state_control_ftpc = 0;
|
||||||
printf("%d:Connectting...\r\n",CTRL_SOCK);
|
printf("%d:Connectting...\r\n",CTRL_SOCK);
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
@ -322,15 +264,14 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
|
|
||||||
switch(getSn_SR(DATA_SOCK)){
|
switch(getSn_SR(DATA_SOCK)){
|
||||||
case SOCK_ESTABLISHED :
|
case SOCK_ESTABLISHED :
|
||||||
if(!connect_state_datac){
|
if(!connect_state_data_ftpc){
|
||||||
printf("%d:FTP Data socket Connected\r\n", DATA_SOCK);
|
printf("%d:FTP Data socket Connected\r\n", DATA_SOCK);
|
||||||
connect_state_datac = 1;
|
connect_state_data_ftpc = 1;
|
||||||
//gDataSockReady = 1;
|
|
||||||
}
|
}
|
||||||
if(gDataPutGetStart){
|
if(gDataPutGetStart){
|
||||||
switch(Command.Second){
|
switch(Command.Second){
|
||||||
case s_dir:
|
case s_dir:
|
||||||
printf("waitng...\r\n");
|
printf("dir waiting...\r\n");
|
||||||
if((size = getSn_RX_RSR(DATA_SOCK)) > 0){ // Don't need to check SOCKERR_BUSY because it doesn't not occur.
|
if((size = getSn_RX_RSR(DATA_SOCK)) > 0){ // Don't need to check SOCKERR_BUSY because it doesn't not occur.
|
||||||
printf("ok\r\n");
|
printf("ok\r\n");
|
||||||
memset(dbuf, 0, _MAX_SS);
|
memset(dbuf, 0, _MAX_SS);
|
||||||
@ -347,17 +288,19 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
}
|
}
|
||||||
printf("Rcvd Data:\n\r%s\n\r", dbuf);
|
printf("Rcvd Data:\n\r%s\n\r", dbuf);
|
||||||
gDataPutGetStart = 0;
|
gDataPutGetStart = 0;
|
||||||
|
Command.Second = s_nocmd;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case s_put:
|
case s_put:
|
||||||
printf("waitng...\r\n");
|
printf("put waiting...\r\n");
|
||||||
if(strlen(ftp.workingdir) == 1)
|
if(strlen(ftpc.workingdir) == 1)
|
||||||
sprintf(ftp.filename, "/%s", (uint8_t *)gMsgBuf);
|
sprintf(ftpc.filename, "/%s", (uint8_t *)gMsgBuf);
|
||||||
else
|
else
|
||||||
sprintf(ftp.filename, "%s/%s", ftp.workingdir, (uint8_t *)gMsgBuf);
|
sprintf(ftpc.filename, "%s/%s", ftpc.workingdir, (uint8_t *)gMsgBuf);
|
||||||
ftp.fr = f_open(&(ftp.fil), (const char *)ftp.filename, FA_READ);
|
#if defined(F_FILESYSTEM)
|
||||||
if(ftp.fr == FR_OK){
|
ftpc.fr = f_open(&(ftpc.fil), (const char *)ftpc.filename, FA_READ);
|
||||||
remain_filesize = ftp.fil.fsize;
|
if(ftpc.fr == FR_OK){
|
||||||
|
remain_filesize = ftpc.fil.fsize;
|
||||||
printf("f_open return FR_OK\r\n");
|
printf("f_open return FR_OK\r\n");
|
||||||
do{
|
do{
|
||||||
memset(dbuf, 0, _MAX_SS);
|
memset(dbuf, 0, _MAX_SS);
|
||||||
@ -365,8 +308,8 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
send_byte = _MAX_SS;
|
send_byte = _MAX_SS;
|
||||||
else
|
else
|
||||||
send_byte = remain_filesize;
|
send_byte = remain_filesize;
|
||||||
ftp.fr = f_read(&(ftp.fil), (void *)dbuf, send_byte , (UINT *)&blocklen);
|
ftpc.fr = f_read(&(ftpc.fil), (void *)dbuf, send_byte , (UINT *)&blocklen);
|
||||||
if(ftp.fr != FR_OK){
|
if(ftpc.fr != FR_OK){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
printf("#");
|
printf("#");
|
||||||
@ -374,25 +317,35 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
remain_filesize -= blocklen;
|
remain_filesize -= blocklen;
|
||||||
}while(remain_filesize != 0);
|
}while(remain_filesize != 0);
|
||||||
printf("\r\nFile read finished\r\n");
|
printf("\r\nFile read finished\r\n");
|
||||||
ftp.fr = f_close(&(ftp.fil));
|
ftpc.fr = f_close(&(ftpc.fil));
|
||||||
gDataPutGetStart = 0;
|
|
||||||
disconnect(DATA_SOCK);
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
printf("File Open Error: %d\r\n", ftp.fr);
|
printf("File Open Error: %d\r\n", ftpc.fr);
|
||||||
ftp.fr = f_close(&(ftp.fil));
|
ftpc.fr = f_close(&(ftpc.fil));
|
||||||
gDataPutGetStart = 0;
|
|
||||||
disconnect(DATA_SOCK);
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
remain_filesize = strlen(ftpc.filename);
|
||||||
|
do{
|
||||||
|
memset(dbuf, 0, _MAX_SS);
|
||||||
|
blocklen = sprintf(dbuf, "%s", ftpc.filename);
|
||||||
|
printf("########## dbuf:%s\r\n", dbuf);
|
||||||
|
send(DATA_SOCK, dbuf, blocklen);
|
||||||
|
remain_filesize -= blocklen;
|
||||||
|
}while(remain_filesize != 0);
|
||||||
|
#endif
|
||||||
|
gDataPutGetStart = 0;
|
||||||
|
Command.Second = s_nocmd;
|
||||||
|
disconnect(DATA_SOCK);
|
||||||
break;
|
break;
|
||||||
case s_get:
|
case s_get:
|
||||||
printf("waitng...\r\n");
|
printf("get waiting...\r\n");
|
||||||
if(strlen(ftp.workingdir) == 1)
|
if(strlen(ftpc.workingdir) == 1)
|
||||||
sprintf(ftp.filename, "/%s", (uint8_t *)gMsgBuf);
|
sprintf(ftpc.filename, "/%s", (uint8_t *)gMsgBuf);
|
||||||
else
|
else
|
||||||
sprintf(ftp.filename, "%s/%s", ftp.workingdir, (uint8_t *)gMsgBuf);
|
sprintf(ftpc.filename, "%s/%s", ftpc.workingdir, (uint8_t *)gMsgBuf);
|
||||||
ftp.fr = f_open(&(ftp.fil), (const char *)ftp.filename, FA_CREATE_ALWAYS | FA_WRITE);
|
#if defined(F_FILESYSTEM)
|
||||||
if(ftp.fr == FR_OK){
|
ftpc.fr = f_open(&(ftpc.fil), (const char *)ftpc.filename, FA_CREATE_ALWAYS | FA_WRITE);
|
||||||
|
if(ftpc.fr == FR_OK){
|
||||||
printf("f_open return FR_OK\r\n");
|
printf("f_open return FR_OK\r\n");
|
||||||
while(1){
|
while(1){
|
||||||
if((remain_datasize = getSn_RX_RSR(DATA_SOCK)) > 0){
|
if((remain_datasize = getSn_RX_RSR(DATA_SOCK)) > 0){
|
||||||
@ -401,15 +354,15 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
if(remain_datasize > _MAX_SS) recv_byte = _MAX_SS;
|
if(remain_datasize > _MAX_SS) recv_byte = _MAX_SS;
|
||||||
else recv_byte = remain_datasize;
|
else recv_byte = remain_datasize;
|
||||||
ret = recv(DATA_SOCK, dbuf, recv_byte);
|
ret = recv(DATA_SOCK, dbuf, recv_byte);
|
||||||
ftp.fr = f_write(&(ftp.fil), (const void *)dbuf, (UINT)ret, (UINT *)&blocklen);
|
ftpc.fr = f_write(&(ftpc.fil), (const void *)dbuf, (UINT)ret, (UINT *)&blocklen);
|
||||||
remain_datasize -= blocklen;
|
remain_datasize -= blocklen;
|
||||||
if(ftp.fr != FR_OK){
|
if(ftpc.fr != FR_OK){
|
||||||
printf("f_write failed\r\n");
|
printf("f_write failed\r\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(remain_datasize <= 0) break;
|
if(remain_datasize <= 0) break;
|
||||||
}
|
}
|
||||||
if(ftp.fr != FR_OK){
|
if(ftpc.fr != FR_OK){
|
||||||
printf("f_write failed\r\n");
|
printf("f_write failed\r\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -420,26 +373,49 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("\r\nFile write finished\r\n");
|
printf("\r\nFile write finished\r\n");
|
||||||
ftp.fr = f_close(&(ftp.fil));
|
ftpc.fr = f_close(&(ftpc.fil));
|
||||||
gDataPutGetStart = 0;
|
gDataPutGetStart = 0;
|
||||||
}else{
|
}else{
|
||||||
printf("File Open Error: %d\r\n", ftp.fr);
|
printf("File Open Error: %d\r\n", ftpc.fr);
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
while(1){
|
||||||
|
if((remain_datasize = getSn_RX_RSR(DATA_SOCK)) > 0){
|
||||||
|
while(1){
|
||||||
|
memset(dbuf, 0, _MAX_SS);
|
||||||
|
if(remain_datasize > _MAX_SS)
|
||||||
|
recv_byte = _MAX_SS;
|
||||||
|
else
|
||||||
|
recv_byte = remain_datasize;
|
||||||
|
ret = recv(DATA_SOCK, dbuf, recv_byte);
|
||||||
|
printf("########## dbuf:%s\r\n", dbuf);
|
||||||
|
remain_datasize -= ret;
|
||||||
|
if(remain_datasize <= 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(getSn_SR(DATA_SOCK) != SOCK_ESTABLISHED)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
gDataPutGetStart = 0;
|
||||||
|
Command.Second = s_nocmd;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf("shit!!!! Command.Second = default\r\n");
|
printf("Command.Second = default\r\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SOCK_CLOSE_WAIT :
|
case SOCK_CLOSE_WAIT :
|
||||||
printf("%d:CloseWait\r\n",DATA_SOCK);
|
printf("%d:CloseWait\r\n",DATA_SOCK);
|
||||||
if((ret=disconnect(DATA_SOCK)) != SOCK_OK) return ret;
|
if((ret=disconnect(DATA_SOCK)) != SOCK_OK) return ret;
|
||||||
printf("%d:Closed\r\n",DATA_SOCK);
|
printf("%d:Closed\r\n",DATA_SOCK);
|
||||||
break;
|
break;
|
||||||
case SOCK_CLOSED :
|
case SOCK_CLOSED :
|
||||||
if(ftp.dsock_state == DATASOCK_READY){
|
if(ftpc.dsock_state == DATASOCK_READY){
|
||||||
if(ftp.dsock_mode == PASSIVE_MODE){
|
if(ftpc.dsock_mode == PASSIVE_MODE){
|
||||||
printf("%d:FTPDataStart, port : %d\r\n",DATA_SOCK, local_port);
|
printf("%d:FTPDataStart, port : %d\r\n",DATA_SOCK, local_port);
|
||||||
if((ret=socket(DATA_SOCK, Sn_MR_TCP, local_port, 0x0)) != DATA_SOCK){
|
if((ret=socket(DATA_SOCK, Sn_MR_TCP, local_port, 0x0)) != DATA_SOCK){
|
||||||
printf("%d:socket() error:%ld\r\n", DATA_SOCK, ret);
|
printf("%d:socket() error:%ld\r\n", DATA_SOCK, ret);
|
||||||
@ -460,13 +436,13 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
if(local_port > 50000)
|
if(local_port > 50000)
|
||||||
local_port = 35000;
|
local_port = 35000;
|
||||||
}
|
}
|
||||||
ftp.dsock_state = DATASOCK_START;
|
ftpc.dsock_state = DATASOCK_START;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SOCK_INIT :
|
case SOCK_INIT :
|
||||||
printf("%d:Opened\r\n",DATA_SOCK);
|
printf("%d:Opened\r\n",DATA_SOCK);
|
||||||
if(ftp.dsock_mode == ACTIVE_MODE){
|
if(ftpc.dsock_mode == ACTIVE_MODE){
|
||||||
if( (ret = listen(DATA_SOCK)) != SOCK_OK){
|
if( (ret = listen(DATA_SOCK)) != SOCK_OK){
|
||||||
printf("%d:Listen error\r\n",DATA_SOCK);
|
printf("%d:Listen error\r\n",DATA_SOCK);
|
||||||
return ret;
|
return ret;
|
||||||
@ -480,11 +456,12 @@ uint8_t ftpc_run(uint8_t * dbuf)
|
|||||||
}
|
}
|
||||||
gDataSockReady = 1;
|
gDataSockReady = 1;
|
||||||
}
|
}
|
||||||
connect_state_datac = 0;
|
connect_state_data_ftpc = 0;
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,55 +473,58 @@ char proc_ftpc(char * buf)
|
|||||||
Responses =(buf[0]-'0')*100+(buf[1]-'0')*10+(buf[2]-'0');
|
Responses =(buf[0]-'0')*100+(buf[1]-'0')*10+(buf[2]-'0');
|
||||||
|
|
||||||
switch(Responses){
|
switch(Responses){
|
||||||
case R_220:
|
case R_220: /* Service ready for new user. */
|
||||||
printf("\r\nInput your User ID > ");
|
printf("\r\nInput your User ID > ");
|
||||||
sprintf(dat,"USER %s\r\n", User_Keyboard_MSG());
|
sprintf(dat,"USER %s\r\n", User_Keyboard_MSG());
|
||||||
printf("\r\n");
|
printf("\r\n");
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
case R_331:
|
|
||||||
|
case R_331: /* User name okay, need password. */
|
||||||
printf("\r\nInput your Password > ");
|
printf("\r\nInput your Password > ");
|
||||||
sprintf(dat,"PASS %s\r\n", User_Keyboard_MSG());
|
sprintf(dat,"PASS %s\r\n", User_Keyboard_MSG());
|
||||||
printf("\r\n");
|
printf("\r\n");
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
case R_230:
|
case R_230: /* User logged in, proceed */
|
||||||
printf("\r\nUser logged in, proceed\r\n");
|
printf("\r\nUser logged in, proceed\r\n");
|
||||||
|
|
||||||
sprintf(dat,"TYPE %c\r\n", TransferAscii);
|
sprintf(dat,"TYPE %c\r\n", TransferAscii);
|
||||||
gModeAsciiBinary = TransferAscii;
|
ftpc.type = ASCII_TYPE;
|
||||||
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
send(CTRL_SOCK, (uint8_t *)dat, strlen(dat));
|
||||||
break;
|
break;
|
||||||
case R_200:
|
case R_200:
|
||||||
if((gModeActivePassive==ConnectActive)&&gModeActivePassiveflag){
|
if((ftpc.dsock_mode==ACTIVE_MODE)&&gModeActivePassiveflag){
|
||||||
ftp.dsock_mode = ACTIVE_MODE;
|
ftpc.dsock_state = DATASOCK_READY;
|
||||||
ftp.dsock_state = DATASOCK_READY;
|
|
||||||
gModeActivePassiveflag = 0;
|
gModeActivePassiveflag = 0;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
gMenuStart = 1;
|
gMenuStart = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case R_150:
|
case R_150:
|
||||||
switch(Command.First){
|
switch(Command.First){
|
||||||
case f_dir:
|
case f_dir:
|
||||||
|
Command.First = f_nocmd;
|
||||||
Command.Second = s_dir;
|
Command.Second = s_dir;
|
||||||
gDataPutGetStart = 1;
|
gDataPutGetStart = 1;
|
||||||
break;
|
break;
|
||||||
case f_get:
|
case f_get:
|
||||||
|
Command.First = f_nocmd;
|
||||||
Command.Second = s_get;
|
Command.Second = s_get;
|
||||||
gDataPutGetStart = 1;
|
gDataPutGetStart = 1;
|
||||||
break;
|
break;
|
||||||
case f_put:
|
case f_put:
|
||||||
|
Command.First = f_nocmd;
|
||||||
Command.Second = s_put;
|
Command.Second = s_put;
|
||||||
gDataPutGetStart = 1;
|
gDataPutGetStart = 1;
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
printf("shit!!!! Command.First = default\r\n");
|
printf("Command.First = default\r\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R_226: /* Closing data connection. File transfer/abort successful */
|
case R_226:
|
||||||
gMenuStart = 1;
|
gMenuStart = 1;
|
||||||
break;
|
break;
|
||||||
case R_227:
|
case R_227:
|
||||||
@ -553,8 +533,8 @@ char proc_ftpc(char * buf)
|
|||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
printf("Go Open Data Sock...\r\n ");
|
printf("Go Open Data Sock...\r\n ");
|
||||||
ftp.dsock_mode = PASSIVE_MODE;
|
ftpc.dsock_mode = PASSIVE_MODE;
|
||||||
ftp.dsock_state = DATASOCK_READY;
|
ftpc.dsock_state = DATASOCK_READY;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -592,22 +572,13 @@ int pportc(char * arg)
|
|||||||
printf("ip : %d.%d.%d.%d, port : %d\r\n", remote_ip.cVal[0], remote_ip.cVal[1], remote_ip.cVal[2], remote_ip.cVal[3], remote_port);
|
printf("ip : %d.%d.%d.%d, port : %d\r\n", remote_ip.cVal[0], remote_ip.cVal[1], remote_ip.cVal[2], remote_ip.cVal[3], remote_port);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
uint8_t* User_Keyboard_MSG()
|
||||||
#if defined(F_FILESYSTEM)
|
|
||||||
void print_filedsc(FIL *fil)
|
|
||||||
{
|
{
|
||||||
#if defined(_FTP_DEBUG_)
|
uint8_t i=0;
|
||||||
printf("File System pointer : %08X\r\n", fil->fs);
|
do{
|
||||||
printf("File System mount ID : %d\r\n", fil->id);
|
gMsgBuf[i] = ftp_getc();
|
||||||
printf("File status flag : %08X\r\n", fil->flag);
|
i++;
|
||||||
printf("File System pads : %08X\r\n", fil->err);
|
}while(gMsgBuf[i-1]!=0x0d);
|
||||||
printf("File read write pointer : %08X\r\n", fil->fptr);
|
gMsgBuf[i-1]=0;
|
||||||
printf("File size : %08X\r\n", fil->fsize);
|
return gMsgBuf;
|
||||||
printf("File start cluster : %08X\r\n", fil->sclust);
|
|
||||||
printf("current cluster : %08X\r\n", fil->clust);
|
|
||||||
printf("current data sector : %08X\r\n", fil->dsect);
|
|
||||||
printf("dir entry sector : %08X\r\n", fil->dir_sect);
|
|
||||||
printf("dir entry pointer : %08X\r\n", fil->dir_ptr);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -1,77 +1,106 @@
|
|||||||
#ifndef _FTPC_H_
|
#ifndef _FTPC_H_
|
||||||
#define _FTPC_H_
|
#define _FTPC_H_
|
||||||
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include "stdio_private.h"
|
||||||
|
#include "socket.h"
|
||||||
|
|
||||||
#define F_FILESYSTEM // If your target support a file system, you have to activate this feature and implement.
|
#define F_APP_FTPC
|
||||||
|
|
||||||
#if defined(F_FILESYSTEM)
|
/* If your target support a file system, you have to activate this feature and implement. */
|
||||||
|
//#define F_FILESYSTEM
|
||||||
|
|
||||||
|
/* Change to your Chipset Uart function, you have to activate this feature and implement.
|
||||||
|
* Change!! -> Board_UARTGetCharBlocking()
|
||||||
|
* Below is an example of a function of lpc_chip library. */
|
||||||
|
//#define ftp_getc() Board_UARTGetCharBlocking()
|
||||||
|
|
||||||
|
#ifdef F_FILESYSTEM
|
||||||
#include "ff.h"
|
#include "ff.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define F_APP_FTP
|
#ifndef ftp_getc()
|
||||||
#define _FTP_DEBUG_
|
#define Need_UARTGetCharBlocking_func
|
||||||
#define F_APP_FTP_CLIENT
|
#else
|
||||||
|
/* Change library
|
||||||
|
* Change!! -> board_api.h,
|
||||||
|
* Below is an example of a function of lpc_chip library. */
|
||||||
|
#include "board_api.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define LINELEN 100
|
#define LINELEN 100
|
||||||
//#define DATA_BUF_SIZE 100
|
#ifndef F_FILESYSTEM
|
||||||
#if !defined(F_FILESYSTEM)
|
|
||||||
#define _MAX_SS 512
|
#define _MAX_SS 512
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CTRL_SOCK 2
|
#define CTRL_SOCK 2
|
||||||
#define DATA_SOCK 3
|
#define DATA_SOCK 3
|
||||||
|
|
||||||
#define IPPORT_FTPD 20 /* FTP Data port */
|
/* FTP Responses */
|
||||||
#define IPPORT_FTP 21 /* FTP Control port */
|
#define R_150 150 /* File status ok; opening data conn */
|
||||||
|
#define R_200 200 /* 'Generic' command ok */
|
||||||
|
#define R_220 220 /* Service ready for new user. */
|
||||||
|
#define R_226 226 /* Closing data connection. File transfer/abort successful */
|
||||||
|
#define R_227 227 /* Entering passive mode (h1,h2,h3,h4,p1,p2) */
|
||||||
|
#define R_230 230 /* User logged in, proceed */
|
||||||
|
#define R_331 331 /* User name okay, need password. */
|
||||||
|
|
||||||
#define HOSTNAME "iinChip"
|
#define TransferAscii 'A'
|
||||||
#define VERSION "1.0"
|
#define TransferBinary 'I'
|
||||||
|
|
||||||
#define FILENAME "a.txt"
|
enum ftpc_type {
|
||||||
|
|
||||||
enum ftp_type {
|
|
||||||
ASCII_TYPE,
|
ASCII_TYPE,
|
||||||
IMAGE_TYPE,
|
IMAGE_TYPE,
|
||||||
LOGICAL_TYPE
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum ftp_state {
|
enum ftpc_datasock_state{
|
||||||
FTPS_NOT_LOGIN,
|
|
||||||
FTPS_LOGIN
|
|
||||||
};
|
|
||||||
|
|
||||||
enum datasock_state{
|
|
||||||
DATASOCK_IDLE,
|
DATASOCK_IDLE,
|
||||||
DATASOCK_READY,
|
DATASOCK_READY,
|
||||||
DATASOCK_START
|
DATASOCK_START
|
||||||
};
|
};
|
||||||
|
|
||||||
enum datasock_mode{
|
enum ftpc_datasock_mode{
|
||||||
PASSIVE_MODE,
|
PASSIVE_MODE,
|
||||||
ACTIVE_MODE
|
ACTIVE_MODE
|
||||||
};
|
};
|
||||||
|
enum CommandFirst {
|
||||||
struct ftpd {
|
f_nocmd,
|
||||||
|
f_dir,
|
||||||
|
f_put,
|
||||||
|
f_get,
|
||||||
|
};
|
||||||
|
enum CommandSecond {
|
||||||
|
s_nocmd,
|
||||||
|
s_dir,
|
||||||
|
s_put,
|
||||||
|
s_get,
|
||||||
|
};
|
||||||
|
struct Command {
|
||||||
|
enum CommandFirst First;
|
||||||
|
enum CommandSecond Second;
|
||||||
|
};
|
||||||
|
struct ftpc {
|
||||||
uint8_t control; /* Control stream */
|
uint8_t control; /* Control stream */
|
||||||
uint8_t data; /* Data stream */
|
uint8_t data; /* Data stream */
|
||||||
|
|
||||||
enum ftp_type type; /* Transfer type */
|
enum ftpc_type type; /* Transfer type */
|
||||||
enum ftp_state state;
|
|
||||||
|
|
||||||
enum datasock_state dsock_state;
|
enum ftpc_datasock_state dsock_state;
|
||||||
enum datasock_mode dsock_mode;
|
enum ftpc_datasock_mode dsock_mode;
|
||||||
|
|
||||||
char username[LINELEN]; /* Arg to USER command */
|
|
||||||
char workingdir[LINELEN];
|
char workingdir[LINELEN];
|
||||||
char filename[LINELEN];
|
char filename[LINELEN];
|
||||||
|
|
||||||
#if defined(F_FILESYSTEM)
|
#ifdef F_FILESYSTEM
|
||||||
FIL fil; // FatFs File objects
|
FIL fil; // FatFs File objects
|
||||||
FRESULT fr; // FatFs function common result code
|
FRESULT fr; // FatFs function common result code
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef un_I2cval
|
#ifndef un_I2cval
|
||||||
@ -87,13 +116,4 @@ char proc_ftpc(char * buf);
|
|||||||
int pportc(char * arg);
|
int pportc(char * arg);
|
||||||
uint8_t* User_Keyboard_MSG();
|
uint8_t* User_Keyboard_MSG();
|
||||||
|
|
||||||
int sendit(char * command);
|
|
||||||
int recvit(char * command);
|
|
||||||
|
|
||||||
long sendfile(uint8_t s, char * command);
|
|
||||||
long recvfile(uint8_t s);
|
|
||||||
|
|
||||||
#if defined(F_FILESYSTEM)
|
|
||||||
void print_filedsc(FIL *fil);
|
|
||||||
#endif
|
|
||||||
#endif // _FTPC_H_
|
#endif // _FTPC_H_
|
||||||
|
15
README.md
15
README.md
@ -1,6 +1,6 @@
|
|||||||
#ioLibrary Driver
|
#ioLibrary Driver
|
||||||
The ioLibrary means “Internet Offload Library” for WIZnet chip. It includes drivers and application protocols.
|
The ioLibrary means “Internet Offload Library” for WIZnet chip. It includes drivers and application protocols.
|
||||||
The driver (ioLibrary) can be used for [W5500](http://wizwiki.net/wiki/doku.php?id=products:w5500:start) application designs. These will be updated continuously.
|
The driver (ioLibrary) can be used for the application design of WIZnet TCP/IP chips as [W5500](http://wizwiki.net/wiki/doku.php?id=products:w5500:start), W5200, W5100 and etc.
|
||||||
|
|
||||||
##ioLibrary
|
##ioLibrary
|
||||||
This driver provides the Berkeley Socket type APIs.
|
This driver provides the Berkeley Socket type APIs.
|
||||||
@ -16,6 +16,17 @@ This driver provides the Berkeley Socket type APIs.
|
|||||||
|
|
||||||
## How to add an ioLibrary in project through github site.
|
## How to add an ioLibrary in project through github site.
|
||||||
- Example, refer to https://www.youtube.com/watch?v=mt815RBGdsA
|
- Example, refer to https://www.youtube.com/watch?v=mt815RBGdsA
|
||||||
|
- [ioLibrary Doxygen doument](https://github.com/Wiznet/ioLibrary_Driver/blob/master/Ethernet/SOCKET_APIs_V2.0.chm) : Refer to **TODO** in this document
|
||||||
|
- Define what chip is used in **wizchip_conf.h**
|
||||||
|
- Define what Host I/F mode is used in **wizchip_conf.h**
|
||||||
|
|
||||||
## Revision History
|
## Revision History
|
||||||
Last release : Nov. 2014
|
* Type casting error Fixed : 09, April. 2015
|
||||||
|
In socket.c, send() : Refer to M20150409
|
||||||
|
* ioLibrary V2.0 released : April. 2015
|
||||||
|
* Added to W5100, W5200
|
||||||
|
* Correct to some typing error
|
||||||
|
* Fixed the warning of type casting.
|
||||||
|
|
||||||
|
* Last release : Nov. 2014
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user