I made Digital Camera using Arducam & WIZwiki-W7500

Dependencies:   Arduino Arducam_OV5642 SDFileSystem Arducam_UTFT_SPI WIZnetInterface_Ricky mbed

Committer:
justinkim
Date:
Thu Oct 29 23:35:16 2015 +0000
Revision:
5:e47189da7d92
Parent:
4:63042b865304
I made Digital Camera using Arducam & WIZwiki-W7500

Who changed what in which revision?

UserRevisionLine numberNew contents of line
justinkim 0:e01f64037748 1 #include "mbed.h"
justinkim 0:e01f64037748 2 #include "UTFT_SPI.h"
justinkim 0:e01f64037748 3 #include "OV5642.h"
justinkim 0:e01f64037748 4 #include "OV5642_regs.h"
justinkim 3:23d439c8526b 5 #include "SDFileSystem.h"
justinkim 0:e01f64037748 6 #include "Arduino.h"
justinkim 4:63042b865304 7 #include "EthernetInterface.h"
justinkim 4:63042b865304 8 #include <stdio.h>
justinkim 4:63042b865304 9 #include <string.h>
justinkim 0:e01f64037748 10
justinkim 0:e01f64037748 11 ArduCAM myCAM(D11, D12, D13, D10, D14, D15);
justinkim 1:3a14a4c84db2 12 ArduLCD myGLCD(D11, D12, D13, D10);
justinkim 3:23d439c8526b 13 SDFileSystem sd(D11, D12, D13, D9, "sd");
justinkim 4:63042b865304 14
justinkim 0:e01f64037748 15 Serial pc(USBTX, USBRX);
justinkim 3:23d439c8526b 16 bool isShowFlag = true;
justinkim 4:63042b865304 17 char fnamecamera[32];
justinkim 4:63042b865304 18 char fnamecntcamera=0;
justinkim 4:63042b865304 19
justinkim 4:63042b865304 20 /* FTP */
justinkim 4:63042b865304 21 #define USER "user "
justinkim 4:63042b865304 22 #define PASS "pass "
justinkim 4:63042b865304 23 #define PASV "pasv "
justinkim 4:63042b865304 24 #define PORT "port "
justinkim 4:63042b865304 25 #define LIST "list "
justinkim 4:63042b865304 26 #define STOR "stor "
justinkim 4:63042b865304 27 #define RETR "retr "
justinkim 4:63042b865304 28 #define END "\r\n"
justinkim 4:63042b865304 29 #define FTP_SERVER_PORT 21
justinkim 4:63042b865304 30 #define MAX_SS 256
justinkim 4:63042b865304 31 bool gDataSockReady = false;
justinkim 4:63042b865304 32 bool gDataPutGetStart = false;
justinkim 4:63042b865304 33 bool ftpclientrun = false;
justinkim 4:63042b865304 34 int remote_port;
justinkim 4:63042b865304 35 char ftpServer_data_ip_addr[4]={0,};
justinkim 4:63042b865304 36 char ftpServer_data_ip_addr_str[20]={0,};
justinkim 4:63042b865304 37 static char buf[256];
justinkim 4:63042b865304 38 static char ID[]={"abc"}; //Set FTPServer Login ID
justinkim 4:63042b865304 39 static char PASSWORD[]={"123"}; //Set FTPServer Login Password
justinkim 4:63042b865304 40 enum CommandFirst {
justinkim 4:63042b865304 41 f_nocmd,
justinkim 4:63042b865304 42 f_put,
justinkim 4:63042b865304 43 };
justinkim 4:63042b865304 44 enum CommandSecond {
justinkim 4:63042b865304 45 s_nocmd,
justinkim 4:63042b865304 46 s_put,
justinkim 4:63042b865304 47 };
justinkim 4:63042b865304 48 enum ftpc_datasock_state{
justinkim 4:63042b865304 49 DATASOCK_IDLE,
justinkim 4:63042b865304 50 DATASOCK_READY,
justinkim 4:63042b865304 51 DATASOCK_START
justinkim 4:63042b865304 52 };
justinkim 4:63042b865304 53 struct Command {
justinkim 4:63042b865304 54 enum CommandFirst First;
justinkim 4:63042b865304 55 enum CommandSecond Second;
justinkim 4:63042b865304 56 };
justinkim 4:63042b865304 57 struct ftpc {
justinkim 4:63042b865304 58 enum ftpc_datasock_state dsock_state;
justinkim 4:63042b865304 59 };
justinkim 4:63042b865304 60 struct ftpc FTPClient;
justinkim 4:63042b865304 61 struct Command FTPCommand;
justinkim 4:63042b865304 62
justinkim 4:63042b865304 63 /* SD Card filesystem */
justinkim 4:63042b865304 64 static FILE *fp_jpeg;
justinkim 3:23d439c8526b 65 char fname[32];
justinkim 4:63042b865304 66 char fname_server[16];
justinkim 3:23d439c8526b 67 char fnamecnt=0;
justinkim 4:63042b865304 68 char gMsgBuf[10];
justinkim 4:63042b865304 69 char User_Keyboard_MSG_Cnt;
justinkim 4:63042b865304 70 /* Function*/
justinkim 4:63042b865304 71 char* User_Keyboard_MSG(void);
justinkim 4:63042b865304 72 int pportc(char * arg);
justinkim 4:63042b865304 73 void FTP_server_uploader();
justinkim 4:63042b865304 74 void setup();
justinkim 4:63042b865304 75 void loop();
justinkim 4:63042b865304 76 void itoa( unsigned long long int value, char *str);
justinkim 0:e01f64037748 77
justinkim 0:e01f64037748 78 int main()
justinkim 0:e01f64037748 79 {
justinkim 4:63042b865304 80 *(volatile uint32_t *)(0x41001014) = 0x0060200; //clock 24MHz
justinkim 0:e01f64037748 81
justinkim 0:e01f64037748 82 setup();
justinkim 0:e01f64037748 83
justinkim 4:63042b865304 84 //FTP_server_uploader();
justinkim 0:e01f64037748 85 while(1)
justinkim 0:e01f64037748 86 {
justinkim 4:63042b865304 87 loop();
justinkim 4:63042b865304 88 }
justinkim 0:e01f64037748 89 }
justinkim 0:e01f64037748 90
justinkim 0:e01f64037748 91 void setup()
justinkim 0:e01f64037748 92 {
justinkim 4:63042b865304 93 uint8_t vid,pid;
justinkim 4:63042b865304 94 uint8_t temp;
justinkim 1:3a14a4c84db2 95
justinkim 4:63042b865304 96 pc.baud(115200);
justinkim 4:63042b865304 97
justinkim 4:63042b865304 98 pc.printf("ArduCAM Start!\r\n");
justinkim 4:63042b865304 99
justinkim 4:63042b865304 100 uint8_t temp1,temp2;
justinkim 4:63042b865304 101 myCAM.write_reg(ARDUCHIP_TEST1, 0x55); //Write to test1 register by 0x55
justinkim 4:63042b865304 102 myCAM.write_reg(ARDUCHIP_TEST2, 0xAA); //Write to test1 register by 0xaa
justinkim 4:63042b865304 103 wait_ms(1000);
justinkim 4:63042b865304 104 temp1 = myCAM.read_reg(ARDUCHIP_TEST1); //Read from test1 register
justinkim 4:63042b865304 105 temp2 = myCAM.read_reg(ARDUCHIP_TEST2); //Read from test1 register
justinkim 4:63042b865304 106 pc.printf("temp1 : %d\r\n",temp1);
justinkim 4:63042b865304 107 pc.printf("temp2 : %d\r\n",temp2);
justinkim 4:63042b865304 108 wait_ms(1000);
justinkim 4:63042b865304 109
justinkim 4:63042b865304 110 myCAM.write_reg(ARDUCHIP_TEST1, 0x55);
justinkim 4:63042b865304 111 temp = myCAM.read_reg(ARDUCHIP_TEST1);
justinkim 1:3a14a4c84db2 112
justinkim 0:e01f64037748 113 if(temp != 0x55)
justinkim 0:e01f64037748 114 {
justinkim 0:e01f64037748 115 pc.printf("SPI interface Error!\r\n");
justinkim 0:e01f64037748 116 while(1);
justinkim 0:e01f64037748 117 }
justinkim 0:e01f64037748 118
justinkim 0:e01f64037748 119 //Change MCU mode
justinkim 0:e01f64037748 120 myCAM.set_mode(MCU2LCD_MODE);
justinkim 0:e01f64037748 121
justinkim 0:e01f64037748 122 //Initialize the LCD Module
justinkim 1:3a14a4c84db2 123 myGLCD.InitLCD();
justinkim 0:e01f64037748 124
justinkim 0:e01f64037748 125 //Check if the camera module type is OV5642
justinkim 0:e01f64037748 126 myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid);
justinkim 0:e01f64037748 127 myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid);
justinkim 0:e01f64037748 128 if((vid != 0x56) || (pid != 0x42))
justinkim 0:e01f64037748 129 pc.printf("Can't find OV5642 module!\r\n");
justinkim 0:e01f64037748 130 else
justinkim 0:e01f64037748 131 pc.printf("OV5642 detected\r\n");
justinkim 0:e01f64037748 132
justinkim 3:23d439c8526b 133 //Change to BMP capture mode and initialize the OV5642 module
justinkim 3:23d439c8526b 134 myCAM.set_format(BMP);
justinkim 3:23d439c8526b 135
justinkim 0:e01f64037748 136 myCAM.InitCAM();
justinkim 0:e01f64037748 137 }
justinkim 3:23d439c8526b 138
justinkim 0:e01f64037748 139 void loop()
justinkim 0:e01f64037748 140 {
justinkim 3:23d439c8526b 141 FILE *outFile;
justinkim 3:23d439c8526b 142 uint8_t buf[256];
justinkim 3:23d439c8526b 143 static int i = 0;
justinkim 3:23d439c8526b 144 uint8_t temp,temp_last;
justinkim 3:23d439c8526b 145 uint8_t start_capture = 0;
justinkim 3:23d439c8526b 146
justinkim 3:23d439c8526b 147 //Wait trigger from shutter buttom
justinkim 3:23d439c8526b 148 if(myCAM.get_bit(ARDUCHIP_TRIG , SHUTTER_MASK))
justinkim 3:23d439c8526b 149 {
justinkim 3:23d439c8526b 150 isShowFlag = false;
justinkim 3:23d439c8526b 151 myCAM.set_mode(MCU2LCD_MODE);
justinkim 3:23d439c8526b 152 myCAM.set_format(JPEG);
justinkim 3:23d439c8526b 153 myCAM.InitCAM();
justinkim 4:63042b865304 154 myCAM.OV5642_set_JPEG_size(OV5642_1920x1080);
justinkim 3:23d439c8526b 155 myCAM.write_reg(ARDUCHIP_TIM, VSYNC_LEVEL_MASK); //VSYNC is active HIGH
justinkim 3:23d439c8526b 156
justinkim 3:23d439c8526b 157 //Wait until buttom released
justinkim 3:23d439c8526b 158 while(myCAM.get_bit(ARDUCHIP_TRIG, SHUTTER_MASK));
justinkim 3:23d439c8526b 159 wait_ms(1000);
justinkim 3:23d439c8526b 160 start_capture = 1;
justinkim 3:23d439c8526b 161 }
justinkim 3:23d439c8526b 162 else
justinkim 3:23d439c8526b 163 {
justinkim 3:23d439c8526b 164 if(isShowFlag )
justinkim 3:23d439c8526b 165 {
justinkim 0:e01f64037748 166
justinkim 3:23d439c8526b 167 if(!myCAM.get_bit(ARDUCHIP_TRIG,VSYNC_MASK)) //New Frame is coming
justinkim 3:23d439c8526b 168 {
justinkim 3:23d439c8526b 169 myCAM.set_mode(MCU2LCD_MODE); //Switch to MCU
justinkim 3:23d439c8526b 170 myGLCD.resetXY();
justinkim 3:23d439c8526b 171 myCAM.set_mode(CAM2LCD_MODE); //Switch to CAM
justinkim 3:23d439c8526b 172 while(!myCAM.get_bit(ARDUCHIP_TRIG,VSYNC_MASK)); //Wait for VSYNC is gone
justinkim 3:23d439c8526b 173 }
justinkim 3:23d439c8526b 174 }
justinkim 3:23d439c8526b 175 }
justinkim 3:23d439c8526b 176 if(start_capture)
justinkim 3:23d439c8526b 177 {
justinkim 3:23d439c8526b 178 //Flush the FIFO
justinkim 3:23d439c8526b 179 myCAM.flush_fifo();
justinkim 3:23d439c8526b 180 //Clear the capture done flag
justinkim 3:23d439c8526b 181 myCAM.clear_fifo_flag();
justinkim 3:23d439c8526b 182 //Start capture
justinkim 3:23d439c8526b 183 myCAM.start_capture();
justinkim 3:23d439c8526b 184 pc.printf("Start Capture\r\n");
justinkim 3:23d439c8526b 185 }
justinkim 3:23d439c8526b 186
justinkim 3:23d439c8526b 187 if(myCAM.get_bit(ARDUCHIP_TRIG ,CAP_DONE_MASK))
justinkim 0:e01f64037748 188 {
justinkim 0:e01f64037748 189
justinkim 3:23d439c8526b 190 pc.printf("Capture Done!\r\n");
justinkim 3:23d439c8526b 191 //Construct a file name
justinkim 4:63042b865304 192 snprintf(fnamecamera, sizeof(fnamecamera), "/sd/jpss%04d.jpg", fnamecntcamera);
justinkim 4:63042b865304 193 fnamecntcamera++;
justinkim 3:23d439c8526b 194 //Open the new file
justinkim 4:63042b865304 195 outFile = fopen(fnamecamera,"w");
justinkim 3:23d439c8526b 196 if (! outFile)
justinkim 3:23d439c8526b 197 {
justinkim 3:23d439c8526b 198 pc.printf("open file failed\r\n");
justinkim 3:23d439c8526b 199 return;
justinkim 3:23d439c8526b 200 }
justinkim 3:23d439c8526b 201 //Read first dummy byte
justinkim 3:23d439c8526b 202 //myCAM.read_fifo();
justinkim 3:23d439c8526b 203
justinkim 3:23d439c8526b 204 i = 0;
justinkim 3:23d439c8526b 205 temp = myCAM.read_fifo();
justinkim 3:23d439c8526b 206 //Write first image data to buffer
justinkim 3:23d439c8526b 207 buf[i++] = temp;
justinkim 3:23d439c8526b 208
justinkim 3:23d439c8526b 209 //Read JPEG data from FIFO
justinkim 3:23d439c8526b 210 while( (temp != 0xD9) | (temp_last != 0xFF) )
justinkim 0:e01f64037748 211 {
justinkim 3:23d439c8526b 212 temp_last = temp;
justinkim 3:23d439c8526b 213 temp = myCAM.read_fifo();
justinkim 3:23d439c8526b 214 //Write image data to buffer if not full
justinkim 3:23d439c8526b 215 if(i < 256)
justinkim 3:23d439c8526b 216 buf[i++] = temp;
justinkim 3:23d439c8526b 217 else
justinkim 3:23d439c8526b 218 {
justinkim 3:23d439c8526b 219 //Write 256 bytes image data to file
justinkim 3:23d439c8526b 220 fwrite(buf,256,1,outFile);
justinkim 3:23d439c8526b 221 i = 0;
justinkim 3:23d439c8526b 222 buf[i++] = temp;
justinkim 3:23d439c8526b 223 }
justinkim 0:e01f64037748 224 }
justinkim 3:23d439c8526b 225 //Write the remain bytes in the buffer
justinkim 3:23d439c8526b 226 if(i > 0)
justinkim 3:23d439c8526b 227 fwrite(buf,i,1,outFile);
justinkim 3:23d439c8526b 228
justinkim 3:23d439c8526b 229 //Close the file
justinkim 3:23d439c8526b 230 fclose(outFile);
justinkim 3:23d439c8526b 231 //Clear the capture done flag
justinkim 3:23d439c8526b 232 myCAM.clear_fifo_flag();
justinkim 3:23d439c8526b 233 //Clear the start capture flag
justinkim 3:23d439c8526b 234 start_capture = 0;
justinkim 3:23d439c8526b 235
justinkim 3:23d439c8526b 236 myCAM.set_format(BMP);
justinkim 3:23d439c8526b 237 myCAM.InitCAM();
justinkim 3:23d439c8526b 238 isShowFlag = true;
justinkim 0:e01f64037748 239 }
justinkim 0:e01f64037748 240 }
justinkim 3:23d439c8526b 241
justinkim 3:23d439c8526b 242 /* itoa: convert n to characters in s */
justinkim 3:23d439c8526b 243 void itoa( unsigned long long int value, char *str)
justinkim 3:23d439c8526b 244 {
justinkim 3:23d439c8526b 245 int i,j;
justinkim 3:23d439c8526b 246 char temp[30];
justinkim 3:23d439c8526b 247 for(i=0; value > 0; i++){
justinkim 3:23d439c8526b 248 str[i] = value%10+'0';
justinkim 3:23d439c8526b 249 value=value/10;
justinkim 3:23d439c8526b 250 }
justinkim 3:23d439c8526b 251 for(j=0;i>=0;j++,i--){
justinkim 3:23d439c8526b 252 temp[j]=str[i-1];
justinkim 3:23d439c8526b 253 }
justinkim 3:23d439c8526b 254 for(i=0;i<j;i++){
justinkim 3:23d439c8526b 255 str[i]=temp[i];
justinkim 3:23d439c8526b 256 }
justinkim 3:23d439c8526b 257 }
justinkim 4:63042b865304 258
justinkim 4:63042b865304 259 void FTP_server_uploader(){
justinkim 4:63042b865304 260
justinkim 4:63042b865304 261 char Msg_c;
justinkim 4:63042b865304 262 int remain_filesize;
justinkim 4:63042b865304 263 int send_byte;
justinkim 4:63042b865304 264
justinkim 4:63042b865304 265 pc.printf("Hello FTP Camera!\r\n");
justinkim 4:63042b865304 266
justinkim 4:63042b865304 267 uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x12, 0x34, 0x45};
justinkim 4:63042b865304 268 const char ip_addr[] = "192.168.0.123"; // WIZwiki-W7500 IP-address
justinkim 4:63042b865304 269 const char mask_addr[] = "255.255.255.0";
justinkim 4:63042b865304 270 const char gateway_addr[] = "192.168.0.1";
justinkim 4:63042b865304 271 const char ftpServer_control_ip_addr[] = "192.168.0.209"; // my IP address
justinkim 4:63042b865304 272
justinkim 4:63042b865304 273
justinkim 4:63042b865304 274 EthernetInterface eth;
justinkim 4:63042b865304 275 eth.init(mac_addr, ip_addr, mask_addr, gateway_addr); //Use Static
justinkim 4:63042b865304 276 eth.connect();
justinkim 4:63042b865304 277
justinkim 4:63042b865304 278 TCPSocketConnection FTP_CONTROL_SOCK;
justinkim 4:63042b865304 279 TCPSocketConnection FTP_DATA_SOCK;
justinkim 4:63042b865304 280
justinkim 4:63042b865304 281
justinkim 4:63042b865304 282 pc.printf("\r\n----------------------------------------\r\n");
justinkim 4:63042b865304 283 pc.printf("Press menu key\r\n");
justinkim 4:63042b865304 284 pc.printf("----------------------------------------\r\n");
justinkim 4:63042b865304 285 pc.printf("1> Snapshot Picture and Send to FTPServer\r\n");
justinkim 4:63042b865304 286 pc.printf("----------------------------------------\r\n");
justinkim 4:63042b865304 287 Msg_c = pc.getc();
justinkim 4:63042b865304 288 if(Msg_c==0x31){
justinkim 4:63042b865304 289
justinkim 4:63042b865304 290 ftpclientrun = true;
justinkim 4:63042b865304 291 while(ftpclientrun){
justinkim 4:63042b865304 292 //while 2
justinkim 4:63042b865304 293 while(!FTP_CONTROL_SOCK.is_connected()){
justinkim 4:63042b865304 294 pc.printf("Connecting...FTPServer\r\nIP:%s, PORT:%d\r\n", ftpServer_control_ip_addr, FTP_SERVER_PORT);
justinkim 4:63042b865304 295 FTP_CONTROL_SOCK.connect(ftpServer_control_ip_addr, FTP_SERVER_PORT);
justinkim 4:63042b865304 296 FTP_CONTROL_SOCK.set_blocking(false, 15000); // Timeout after (1.5)s
justinkim 4:63042b865304 297 }//end of while 2
justinkim 4:63042b865304 298
justinkim 4:63042b865304 299 //while 3
justinkim 4:63042b865304 300 while(true)
justinkim 4:63042b865304 301 {
justinkim 4:63042b865304 302 //gDataSockReady if
justinkim 4:63042b865304 303 if(gDataSockReady){
justinkim 4:63042b865304 304 gDataSockReady = false;
justinkim 4:63042b865304 305 //FTPCommand.First switch case
justinkim 4:63042b865304 306 switch(FTPCommand.First){
justinkim 4:63042b865304 307 case f_put:
justinkim 4:63042b865304 308 FTP_CONTROL_SOCK.send(STOR, sizeof(STOR)-1);
justinkim 4:63042b865304 309 FTP_CONTROL_SOCK.send(fname_server, sizeof(fname_server));
justinkim 4:63042b865304 310 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
justinkim 4:63042b865304 311 break;
justinkim 4:63042b865304 312 }//end of FTPCommand.First switch case
justinkim 4:63042b865304 313 }//end of gDataSockReady if
justinkim 4:63042b865304 314 /* received from FTPServer */
justinkim 4:63042b865304 315 int n = FTP_CONTROL_SOCK.receive(buf, sizeof(buf));
justinkim 4:63042b865304 316 if (n <= 0) break;
justinkim 4:63042b865304 317 buf[n] = '\0';
justinkim 4:63042b865304 318 pc.printf("\r\nReceived message from server: '%s'\r\n", buf);
justinkim 4:63042b865304 319
justinkim 4:63042b865304 320 //buf if
justinkim 4:63042b865304 321 if (!strncmp(buf, "220", 3)){
justinkim 4:63042b865304 322 FTP_CONTROL_SOCK.send(USER, sizeof(USER)-1);
justinkim 4:63042b865304 323 FTP_CONTROL_SOCK.send(ID, sizeof(ID));
justinkim 4:63042b865304 324 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
justinkim 4:63042b865304 325 }
justinkim 4:63042b865304 326 else if(!strncmp(buf, "331", 3)){
justinkim 4:63042b865304 327 FTP_CONTROL_SOCK.send(PASS, sizeof(PASS)-1);
justinkim 4:63042b865304 328 FTP_CONTROL_SOCK.send(PASSWORD, sizeof(PASSWORD));
justinkim 4:63042b865304 329 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
justinkim 4:63042b865304 330 }
justinkim 4:63042b865304 331 else if(!strncmp(buf, "230", 3)){
justinkim 4:63042b865304 332 FTP_CONTROL_SOCK.send(PASV, sizeof(PASV)-1);
justinkim 4:63042b865304 333 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
justinkim 4:63042b865304 334 FTPCommand.First = f_put;
justinkim 4:63042b865304 335 }
justinkim 4:63042b865304 336 else if(!strncmp(buf, "227", 3)){
justinkim 4:63042b865304 337 if (pportc(buf) == -1){
justinkim 4:63042b865304 338 pc.printf("Bad port syntax\r\n");
justinkim 4:63042b865304 339 }
justinkim 4:63042b865304 340 else{
justinkim 4:63042b865304 341 pc.printf("Go Open Data Sock...\r\n ");
justinkim 4:63042b865304 342 FTPClient.dsock_state = DATASOCK_READY;
justinkim 4:63042b865304 343 }
justinkim 4:63042b865304 344 }
justinkim 4:63042b865304 345 else if(!strncmp(buf, "150", 3)){
justinkim 4:63042b865304 346 switch(FTPCommand.First){
justinkim 4:63042b865304 347 case f_put:
justinkim 4:63042b865304 348 FTPCommand.First = f_nocmd;
justinkim 4:63042b865304 349 FTPCommand.Second = s_put;
justinkim 4:63042b865304 350 gDataPutGetStart = true;
justinkim 4:63042b865304 351 break;
justinkim 4:63042b865304 352 }
justinkim 4:63042b865304 353 }
justinkim 4:63042b865304 354 else if(!strncmp(buf, "226", 3)){
justinkim 4:63042b865304 355 ftpclientrun = false;
justinkim 4:63042b865304 356 FTP_CONTROL_SOCK.close();
justinkim 4:63042b865304 357 }//end of buf if
justinkim 4:63042b865304 358
justinkim 4:63042b865304 359
justinkim 4:63042b865304 360 //DATASOCK_READY if
justinkim 4:63042b865304 361 if(FTPClient.dsock_state == DATASOCK_READY){
justinkim 4:63042b865304 362 while(!FTP_DATA_SOCK.is_connected()){
justinkim 4:63042b865304 363 pc.printf("Connecting...FTPServer Data sock\r\nIP:%s, PORT:%d\r\n", ftpServer_data_ip_addr_str, remote_port);
justinkim 4:63042b865304 364 FTP_DATA_SOCK.connect(ftpServer_control_ip_addr, remote_port);
justinkim 4:63042b865304 365 FTP_DATA_SOCK.set_blocking(false, 15000); // Timeout after (1.5)s
justinkim 4:63042b865304 366 }
justinkim 4:63042b865304 367 FTPClient.dsock_state = DATASOCK_IDLE;
justinkim 4:63042b865304 368 gDataSockReady = true;
justinkim 4:63042b865304 369 }//end of DATASOCK_READY if
justinkim 4:63042b865304 370
justinkim 4:63042b865304 371 //gDataPutGetStart if
justinkim 4:63042b865304 372 if(gDataPutGetStart){
justinkim 4:63042b865304 373 //FTPCommand.Second switch case
justinkim 4:63042b865304 374 switch(FTPCommand.Second){
justinkim 4:63042b865304 375 case s_put:
justinkim 4:63042b865304 376 pc.printf("put waiting...\r\n");
justinkim 4:63042b865304 377 snprintf(fname, sizeof(fname), "/sd/jpss0000.jpg");
justinkim 4:63042b865304 378 fp_jpeg = fopen(fname, "r");
justinkim 4:63042b865304 379 fseek(fp_jpeg, 0, SEEK_END); // seek to end of file
justinkim 4:63042b865304 380 remain_filesize = ftell(fp_jpeg); // get current file pointer
justinkim 4:63042b865304 381 fseek(fp_jpeg, 0, SEEK_SET); // seek back to beginning of file
justinkim 4:63042b865304 382 do{
justinkim 4:63042b865304 383 memset(buf, 0, sizeof(buf));
justinkim 4:63042b865304 384 if(remain_filesize > MAX_SS)
justinkim 4:63042b865304 385 send_byte = MAX_SS;
justinkim 4:63042b865304 386 else
justinkim 4:63042b865304 387 send_byte = remain_filesize;
justinkim 4:63042b865304 388 fread (buf, 1, send_byte, fp_jpeg);
justinkim 4:63042b865304 389 FTP_DATA_SOCK.send(buf, send_byte);
justinkim 4:63042b865304 390 remain_filesize -= send_byte;
justinkim 4:63042b865304 391 pc.printf("#");
justinkim 4:63042b865304 392 }while(remain_filesize!=0);
justinkim 4:63042b865304 393 fclose(fp_jpeg);
justinkim 4:63042b865304 394 gDataPutGetStart = false;
justinkim 4:63042b865304 395 FTPCommand.Second = s_nocmd;
justinkim 4:63042b865304 396 FTP_DATA_SOCK.close();
justinkim 4:63042b865304 397 break;
justinkim 4:63042b865304 398
justinkim 4:63042b865304 399 }//end of FTPCommand.Second switch case
justinkim 4:63042b865304 400 }//end of gDataPutGetStart if
justinkim 4:63042b865304 401 }//end of while 3
justinkim 4:63042b865304 402 }
justinkim 4:63042b865304 403 }
justinkim 4:63042b865304 404 }
justinkim 4:63042b865304 405
justinkim 4:63042b865304 406 char* User_Keyboard_MSG(void)
justinkim 4:63042b865304 407 {
justinkim 4:63042b865304 408 User_Keyboard_MSG_Cnt = 0;
justinkim 4:63042b865304 409 memset(gMsgBuf, 0, sizeof(gMsgBuf));
justinkim 4:63042b865304 410 do{
justinkim 4:63042b865304 411 gMsgBuf[User_Keyboard_MSG_Cnt] = pc.getc();
justinkim 4:63042b865304 412 if(gMsgBuf[User_Keyboard_MSG_Cnt]==0x08){
justinkim 4:63042b865304 413 User_Keyboard_MSG_Cnt--;
justinkim 4:63042b865304 414 }
justinkim 4:63042b865304 415 else{
justinkim 4:63042b865304 416 User_Keyboard_MSG_Cnt++;
justinkim 4:63042b865304 417 }
justinkim 4:63042b865304 418 }while(gMsgBuf[User_Keyboard_MSG_Cnt-1]!=0x0d);
justinkim 4:63042b865304 419 return gMsgBuf;
justinkim 4:63042b865304 420 }
justinkim 4:63042b865304 421
justinkim 4:63042b865304 422 int pportc(char * arg)
justinkim 4:63042b865304 423 {
justinkim 4:63042b865304 424 int i;
justinkim 4:63042b865304 425 char* tok=0;
justinkim 4:63042b865304 426 strtok(arg,"(");
justinkim 4:63042b865304 427 for (i = 0; i < 4; i++)
justinkim 4:63042b865304 428 {
justinkim 4:63042b865304 429 if(i==0) tok = strtok(NULL,",\r\n");
justinkim 4:63042b865304 430 else tok = strtok(NULL,",");
justinkim 4:63042b865304 431 ftpServer_data_ip_addr[i] = (uint8_t)atoi(tok);
justinkim 4:63042b865304 432 if (!tok){
justinkim 4:63042b865304 433 pc.printf("bad pport : %s\r\n", arg);
justinkim 4:63042b865304 434 return -1;
justinkim 4:63042b865304 435 }
justinkim 4:63042b865304 436 }
justinkim 4:63042b865304 437 remote_port = 0;
justinkim 4:63042b865304 438 for (i = 0; i < 2; i++){
justinkim 4:63042b865304 439 tok = strtok(NULL,",\r\n");
justinkim 4:63042b865304 440 remote_port <<= 8;
justinkim 4:63042b865304 441 remote_port += atoi(tok);
justinkim 4:63042b865304 442 if (!tok){
justinkim 4:63042b865304 443 pc.printf("bad pport : %s\r\n", arg);
justinkim 4:63042b865304 444 return -1;
justinkim 4:63042b865304 445 }
justinkim 4:63042b865304 446 }
justinkim 4:63042b865304 447 pc.printf("ip : %d.%d.%d.%d, port : %d\r\n", ftpServer_data_ip_addr[0], ftpServer_data_ip_addr[1], ftpServer_data_ip_addr[2], ftpServer_data_ip_addr[3], remote_port);
justinkim 4:63042b865304 448 sprintf(ftpServer_data_ip_addr_str, "%d.%d.%d.%d", ftpServer_data_ip_addr[0], ftpServer_data_ip_addr[1], ftpServer_data_ip_addr[2], ftpServer_data_ip_addr[3]);
justinkim 4:63042b865304 449 return 0;
justinkim 4:63042b865304 450 }
justinkim 4:63042b865304 451