Using Camera module, FTP Client on WIZwiki-W7500, send the image data to FTP Server.

Dependencies:   CameraC328 SDFileSystem WIZnetInterface mbed-src

Prerequisite

This example send the image data acquired from the camera to an FTP Server.

To implement this function, you need a Platform board, network Interface board, camera module.

Available camera modules are C328, LJ-DSC02. Because the cameras listed above all have similar internal protocols.

This example uses LJ-DSC02.

  • WIZwiki-W7500 from WIZnet (Platform board and Ethernet I/F board)
  • LJ-DSC02 (Camera module)
  • FTP Server(AL FTP)
  • Micro SD Card

Hardware Configuration

/media/uploads/Ricky_Kwon/camera.png

  • connect Ethernet Cable & USB Cable
  • connect Camera module

Software

Init FTP Server information

static char ID[]={"abc"};                   //Set FTPServer Login ID
static char PASSWORD[]={"123"};             //Set FTPServer Login Password
const char ftpServer_control_ip_addr[] = "192.168.1.2";

Caution

Must fix FTP server ip, id, pass

Committer:
Ricky_Kwon
Date:
Fri Apr 07 03:50:03 2017 +0000
Revision:
4:573ca8ea6629
Parent:
3:55b7af329281
Child:
5:5cc3d57c04f8
update all library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Ricky_Kwon 0:27fe09e9f405 1 #include "mbed.h"
Ricky_Kwon 0:27fe09e9f405 2 #include "SDFileSystem.h"
Ricky_Kwon 0:27fe09e9f405 3 #include "EthernetInterface.h"
Ricky_Kwon 0:27fe09e9f405 4 #include "CameraC328.h"
Ricky_Kwon 0:27fe09e9f405 5
Ricky_Kwon 0:27fe09e9f405 6 /* CAMERA */
Ricky_Kwon 3:55b7af329281 7 #define USE_JPEG_HIGH_RESOLUTION 3 //1=80x64 <--- not working -_-;;, 2=160x128, 3=320x240, 4=640x480
Ricky_Kwon 0:27fe09e9f405 8
Ricky_Kwon 0:27fe09e9f405 9 /* FTP */
Ricky_Kwon 0:27fe09e9f405 10 #define USER "user "
Ricky_Kwon 0:27fe09e9f405 11 #define PASS "pass "
Ricky_Kwon 0:27fe09e9f405 12 #define PASV "pasv "
Ricky_Kwon 0:27fe09e9f405 13 #define PORT "port "
Ricky_Kwon 0:27fe09e9f405 14 #define LIST "list "
Ricky_Kwon 0:27fe09e9f405 15 #define STOR "stor "
Ricky_Kwon 0:27fe09e9f405 16 #define RETR "retr "
Ricky_Kwon 0:27fe09e9f405 17 #define END "\r\n"
Ricky_Kwon 0:27fe09e9f405 18 #define FTP_SERVER_PORT 21
Ricky_Kwon 0:27fe09e9f405 19 #define MAX_SS 256
Ricky_Kwon 0:27fe09e9f405 20 bool gDataSockReady = false;
Ricky_Kwon 0:27fe09e9f405 21 bool gDataPutGetStart = false;
Ricky_Kwon 0:27fe09e9f405 22 bool ftpclientrun = false;
Ricky_Kwon 0:27fe09e9f405 23 int remote_port;
Ricky_Kwon 0:27fe09e9f405 24 char ftpServer_data_ip_addr[4]={0,};
Ricky_Kwon 0:27fe09e9f405 25 char ftpServer_data_ip_addr_str[20]={0,};
Ricky_Kwon 0:27fe09e9f405 26 static char buf[256];
Ricky_Kwon 2:c469227cb913 27 static char ID[]={"abc"}; //Set FTPServer Login ID
Ricky_Kwon 2:c469227cb913 28 static char PASSWORD[]={"123"}; //Set FTPServer Login Password
Ricky_Kwon 0:27fe09e9f405 29 enum CommandFirst {
Ricky_Kwon 0:27fe09e9f405 30 f_nocmd,
Ricky_Kwon 0:27fe09e9f405 31 f_put,
Ricky_Kwon 0:27fe09e9f405 32 };
Ricky_Kwon 0:27fe09e9f405 33 enum CommandSecond {
Ricky_Kwon 0:27fe09e9f405 34 s_nocmd,
Ricky_Kwon 0:27fe09e9f405 35 s_put,
Ricky_Kwon 0:27fe09e9f405 36 };
Ricky_Kwon 0:27fe09e9f405 37 enum ftpc_datasock_state{
Ricky_Kwon 0:27fe09e9f405 38 DATASOCK_IDLE,
Ricky_Kwon 0:27fe09e9f405 39 DATASOCK_READY,
Ricky_Kwon 0:27fe09e9f405 40 DATASOCK_START
Ricky_Kwon 0:27fe09e9f405 41 };
Ricky_Kwon 0:27fe09e9f405 42 struct Command {
Ricky_Kwon 0:27fe09e9f405 43 enum CommandFirst First;
Ricky_Kwon 0:27fe09e9f405 44 enum CommandSecond Second;
Ricky_Kwon 0:27fe09e9f405 45 };
Ricky_Kwon 0:27fe09e9f405 46 struct ftpc {
Ricky_Kwon 0:27fe09e9f405 47 enum ftpc_datasock_state dsock_state;
Ricky_Kwon 0:27fe09e9f405 48 };
Ricky_Kwon 0:27fe09e9f405 49 struct ftpc FTPClient;
Ricky_Kwon 0:27fe09e9f405 50 struct Command FTPCommand;
Ricky_Kwon 0:27fe09e9f405 51
Ricky_Kwon 0:27fe09e9f405 52 /* SD Card filesystem */
Ricky_Kwon 0:27fe09e9f405 53 SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // WIZwiki-W7500
Ricky_Kwon 0:27fe09e9f405 54 static FILE *fp_jpeg;
Ricky_Kwon 0:27fe09e9f405 55 char fname[32];
Ricky_Kwon 0:27fe09e9f405 56 char fname_server[16];
Ricky_Kwon 1:7d428f360a0a 57 char fnamecnt=0;
Ricky_Kwon 2:c469227cb913 58 /* UART */
Ricky_Kwon 2:c469227cb913 59 Serial pc(USBTX, USBRX);
Ricky_Kwon 2:c469227cb913 60 char gMsgBuf[10];
Ricky_Kwon 2:c469227cb913 61 char User_Keyboard_MSG_Cnt;
Ricky_Kwon 2:c469227cb913 62 /* CAMERA */
Ricky_Kwon 0:27fe09e9f405 63 CameraC328 camera(PA_13, PA_14, CameraC328::Baud115200);
Ricky_Kwon 1:7d428f360a0a 64 /* Function*/
Ricky_Kwon 0:27fe09e9f405 65 char* User_Keyboard_MSG(void);
Ricky_Kwon 0:27fe09e9f405 66 int pportc(char * arg);
Ricky_Kwon 0:27fe09e9f405 67 void jpeg_callback(char *buf, size_t siz);
Ricky_Kwon 0:27fe09e9f405 68 void sync(void);
Ricky_Kwon 0:27fe09e9f405 69 void test_jpeg_snapshot_picture(void);
Ricky_Kwon 0:27fe09e9f405 70
Ricky_Kwon 0:27fe09e9f405 71 int main() {
Ricky_Kwon 0:27fe09e9f405 72
Ricky_Kwon 0:27fe09e9f405 73 char Msg_c;
Ricky_Kwon 0:27fe09e9f405 74 int remain_filesize;
Ricky_Kwon 0:27fe09e9f405 75 int send_byte;
Ricky_Kwon 0:27fe09e9f405 76
Ricky_Kwon 0:27fe09e9f405 77
Ricky_Kwon 0:27fe09e9f405 78 pc.baud(115200);
Ricky_Kwon 0:27fe09e9f405 79
Ricky_Kwon 0:27fe09e9f405 80 pc.printf("Hello Home Security World!\r\n");
Ricky_Kwon 0:27fe09e9f405 81
Ricky_Kwon 0:27fe09e9f405 82 uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x12, 0x34, 0x45};
Ricky_Kwon 4:573ca8ea6629 83 const char ip_addr[] = "192.168.1.123";
Ricky_Kwon 0:27fe09e9f405 84 const char mask_addr[] = "255.255.255.0";
Ricky_Kwon 4:573ca8ea6629 85 const char gateway_addr[] = "192.168.1.1";
Ricky_Kwon 4:573ca8ea6629 86 const char ftpServer_control_ip_addr[] = "192.168.1.2";
Ricky_Kwon 0:27fe09e9f405 87
Ricky_Kwon 0:27fe09e9f405 88
Ricky_Kwon 0:27fe09e9f405 89 EthernetInterface eth;
Ricky_Kwon 0:27fe09e9f405 90 eth.init(mac_addr, ip_addr, mask_addr, gateway_addr); //Use Static
Ricky_Kwon 0:27fe09e9f405 91 eth.connect();
Ricky_Kwon 0:27fe09e9f405 92
Ricky_Kwon 0:27fe09e9f405 93 TCPSocketConnection FTP_CONTROL_SOCK;
Ricky_Kwon 0:27fe09e9f405 94 TCPSocketConnection FTP_DATA_SOCK;
Ricky_Kwon 0:27fe09e9f405 95
Ricky_Kwon 0:27fe09e9f405 96 sync();
Ricky_Kwon 0:27fe09e9f405 97 //while 1
Ricky_Kwon 0:27fe09e9f405 98 while(true)
Ricky_Kwon 0:27fe09e9f405 99 {
Ricky_Kwon 2:c469227cb913 100 pc.printf("\r\n----------------------------------------\r\n");
Ricky_Kwon 2:c469227cb913 101 pc.printf("Press menu key\r\n");
Ricky_Kwon 2:c469227cb913 102 pc.printf("----------------------------------------\r\n");
Ricky_Kwon 2:c469227cb913 103 pc.printf("1> Snapshot Picture and Send FTPServer\r\n");
Ricky_Kwon 2:c469227cb913 104 pc.printf("----------------------------------------\r\n");
Ricky_Kwon 1:7d428f360a0a 105 Msg_c = pc.getc();
Ricky_Kwon 1:7d428f360a0a 106 if(Msg_c==0x31){
Ricky_Kwon 0:27fe09e9f405 107
Ricky_Kwon 0:27fe09e9f405 108 test_jpeg_snapshot_picture();
Ricky_Kwon 0:27fe09e9f405 109 ftpclientrun = true;
Ricky_Kwon 0:27fe09e9f405 110 while(ftpclientrun){
Ricky_Kwon 0:27fe09e9f405 111 //while 2
Ricky_Kwon 0:27fe09e9f405 112 while(!FTP_CONTROL_SOCK.is_connected()){
Ricky_Kwon 0:27fe09e9f405 113 pc.printf("Connecting...FTPServer\r\nIP:%s, PORT:%d\r\n", ftpServer_control_ip_addr, FTP_SERVER_PORT);
Ricky_Kwon 0:27fe09e9f405 114 FTP_CONTROL_SOCK.connect(ftpServer_control_ip_addr, FTP_SERVER_PORT);
Ricky_Kwon 0:27fe09e9f405 115 FTP_CONTROL_SOCK.set_blocking(false, 15000); // Timeout after (1.5)s
Ricky_Kwon 0:27fe09e9f405 116 }//end of while 2
Ricky_Kwon 0:27fe09e9f405 117
Ricky_Kwon 0:27fe09e9f405 118 //while 3
Ricky_Kwon 0:27fe09e9f405 119 while(true)
Ricky_Kwon 0:27fe09e9f405 120 {
Ricky_Kwon 0:27fe09e9f405 121 //gDataSockReady if
Ricky_Kwon 0:27fe09e9f405 122 if(gDataSockReady){
Ricky_Kwon 0:27fe09e9f405 123 gDataSockReady = false;
Ricky_Kwon 0:27fe09e9f405 124 //FTPCommand.First switch case
Ricky_Kwon 0:27fe09e9f405 125 switch(FTPCommand.First){
Ricky_Kwon 0:27fe09e9f405 126 case f_put:
Ricky_Kwon 0:27fe09e9f405 127 FTP_CONTROL_SOCK.send(STOR, sizeof(STOR)-1);
Ricky_Kwon 0:27fe09e9f405 128 FTP_CONTROL_SOCK.send(fname_server, sizeof(fname_server));
Ricky_Kwon 0:27fe09e9f405 129 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:27fe09e9f405 130 break;
Ricky_Kwon 0:27fe09e9f405 131 }//end of FTPCommand.First switch case
Ricky_Kwon 0:27fe09e9f405 132 }//end of gDataSockReady if
Ricky_Kwon 0:27fe09e9f405 133 /* received from FTPServer */
Ricky_Kwon 0:27fe09e9f405 134 int n = FTP_CONTROL_SOCK.receive(buf, sizeof(buf));
Ricky_Kwon 0:27fe09e9f405 135 if (n <= 0) break;
Ricky_Kwon 0:27fe09e9f405 136 buf[n] = '\0';
Ricky_Kwon 1:7d428f360a0a 137 pc.printf("\r\nReceived message from server: '%s'\r\n", buf);
Ricky_Kwon 0:27fe09e9f405 138
Ricky_Kwon 0:27fe09e9f405 139 //buf if
Ricky_Kwon 0:27fe09e9f405 140 if (!strncmp(buf, "220", 3)){
Ricky_Kwon 0:27fe09e9f405 141 FTP_CONTROL_SOCK.send(USER, sizeof(USER)-1);
Ricky_Kwon 2:c469227cb913 142 FTP_CONTROL_SOCK.send(ID, sizeof(ID));
Ricky_Kwon 0:27fe09e9f405 143 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:27fe09e9f405 144 }
Ricky_Kwon 0:27fe09e9f405 145 else if(!strncmp(buf, "331", 3)){
Ricky_Kwon 0:27fe09e9f405 146 FTP_CONTROL_SOCK.send(PASS, sizeof(PASS)-1);
Ricky_Kwon 2:c469227cb913 147 FTP_CONTROL_SOCK.send(PASSWORD, sizeof(PASSWORD));
Ricky_Kwon 0:27fe09e9f405 148 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:27fe09e9f405 149 }
Ricky_Kwon 0:27fe09e9f405 150 else if(!strncmp(buf, "230", 3)){
Ricky_Kwon 0:27fe09e9f405 151 FTP_CONTROL_SOCK.send(PASV, sizeof(PASV)-1);
Ricky_Kwon 0:27fe09e9f405 152 FTP_CONTROL_SOCK.send(END, sizeof(END)-1);
Ricky_Kwon 0:27fe09e9f405 153 FTPCommand.First = f_put;
Ricky_Kwon 0:27fe09e9f405 154 }
Ricky_Kwon 0:27fe09e9f405 155 else if(!strncmp(buf, "227", 3)){
Ricky_Kwon 0:27fe09e9f405 156 if (pportc(buf) == -1){
Ricky_Kwon 0:27fe09e9f405 157 pc.printf("Bad port syntax\r\n");
Ricky_Kwon 0:27fe09e9f405 158 }
Ricky_Kwon 0:27fe09e9f405 159 else{
Ricky_Kwon 0:27fe09e9f405 160 pc.printf("Go Open Data Sock...\r\n ");
Ricky_Kwon 0:27fe09e9f405 161 FTPClient.dsock_state = DATASOCK_READY;
Ricky_Kwon 0:27fe09e9f405 162 }
Ricky_Kwon 0:27fe09e9f405 163 }
Ricky_Kwon 0:27fe09e9f405 164 else if(!strncmp(buf, "150", 3)){
Ricky_Kwon 0:27fe09e9f405 165 switch(FTPCommand.First){
Ricky_Kwon 0:27fe09e9f405 166 case f_put:
Ricky_Kwon 0:27fe09e9f405 167 FTPCommand.First = f_nocmd;
Ricky_Kwon 0:27fe09e9f405 168 FTPCommand.Second = s_put;
Ricky_Kwon 0:27fe09e9f405 169 gDataPutGetStart = true;
Ricky_Kwon 0:27fe09e9f405 170 break;
Ricky_Kwon 0:27fe09e9f405 171 }
Ricky_Kwon 0:27fe09e9f405 172 }
Ricky_Kwon 0:27fe09e9f405 173 else if(!strncmp(buf, "226", 3)){
Ricky_Kwon 0:27fe09e9f405 174 ftpclientrun = false;
Ricky_Kwon 0:27fe09e9f405 175 FTP_CONTROL_SOCK.close();
Ricky_Kwon 0:27fe09e9f405 176 }//end of buf if
Ricky_Kwon 0:27fe09e9f405 177
Ricky_Kwon 0:27fe09e9f405 178
Ricky_Kwon 0:27fe09e9f405 179 //DATASOCK_READY if
Ricky_Kwon 0:27fe09e9f405 180 if(FTPClient.dsock_state == DATASOCK_READY){
Ricky_Kwon 0:27fe09e9f405 181 while(!FTP_DATA_SOCK.is_connected()){
Ricky_Kwon 0:27fe09e9f405 182 pc.printf("Connecting...FTPServer Data sock\r\nIP:%s, PORT:%d\r\n", ftpServer_data_ip_addr_str, remote_port);
Ricky_Kwon 0:27fe09e9f405 183 FTP_DATA_SOCK.connect(ftpServer_control_ip_addr, remote_port);
Ricky_Kwon 0:27fe09e9f405 184 FTP_DATA_SOCK.set_blocking(false, 15000); // Timeout after (1.5)s
Ricky_Kwon 0:27fe09e9f405 185 }
Ricky_Kwon 0:27fe09e9f405 186 FTPClient.dsock_state = DATASOCK_IDLE;
Ricky_Kwon 0:27fe09e9f405 187 gDataSockReady = true;
Ricky_Kwon 0:27fe09e9f405 188 }//end of DATASOCK_READY if
Ricky_Kwon 0:27fe09e9f405 189
Ricky_Kwon 0:27fe09e9f405 190 //gDataPutGetStart if
Ricky_Kwon 0:27fe09e9f405 191 if(gDataPutGetStart){
Ricky_Kwon 0:27fe09e9f405 192 //FTPCommand.Second switch case
Ricky_Kwon 0:27fe09e9f405 193 switch(FTPCommand.Second){
Ricky_Kwon 0:27fe09e9f405 194 case s_put:
Ricky_Kwon 0:27fe09e9f405 195 pc.printf("put waiting...\r\n");
Ricky_Kwon 0:27fe09e9f405 196 fp_jpeg = fopen(fname, "r");
Ricky_Kwon 0:27fe09e9f405 197 fseek(fp_jpeg, 0, SEEK_END); // seek to end of file
Ricky_Kwon 0:27fe09e9f405 198 remain_filesize = ftell(fp_jpeg); // get current file pointer
Ricky_Kwon 0:27fe09e9f405 199 fseek(fp_jpeg, 0, SEEK_SET); // seek back to beginning of file
Ricky_Kwon 0:27fe09e9f405 200 do{
Ricky_Kwon 0:27fe09e9f405 201 memset(buf, 0, sizeof(buf));
Ricky_Kwon 0:27fe09e9f405 202 if(remain_filesize > MAX_SS)
Ricky_Kwon 0:27fe09e9f405 203 send_byte = MAX_SS;
Ricky_Kwon 0:27fe09e9f405 204 else
Ricky_Kwon 0:27fe09e9f405 205 send_byte = remain_filesize;
Ricky_Kwon 0:27fe09e9f405 206 fread (buf, 1, send_byte, fp_jpeg);
Ricky_Kwon 0:27fe09e9f405 207 FTP_DATA_SOCK.send(buf, send_byte);
Ricky_Kwon 0:27fe09e9f405 208 remain_filesize -= send_byte;
Ricky_Kwon 0:27fe09e9f405 209 pc.printf("#");
Ricky_Kwon 0:27fe09e9f405 210 }while(remain_filesize!=0);
Ricky_Kwon 0:27fe09e9f405 211 fclose(fp_jpeg);
Ricky_Kwon 0:27fe09e9f405 212 gDataPutGetStart = false;
Ricky_Kwon 0:27fe09e9f405 213 FTPCommand.Second = s_nocmd;
Ricky_Kwon 0:27fe09e9f405 214 FTP_DATA_SOCK.close();
Ricky_Kwon 0:27fe09e9f405 215 break;
Ricky_Kwon 0:27fe09e9f405 216
Ricky_Kwon 0:27fe09e9f405 217 }//end of FTPCommand.Second switch case
Ricky_Kwon 0:27fe09e9f405 218 }//end of gDataPutGetStart if
Ricky_Kwon 0:27fe09e9f405 219 }//end of while 3
Ricky_Kwon 0:27fe09e9f405 220 }
Ricky_Kwon 0:27fe09e9f405 221 }
Ricky_Kwon 0:27fe09e9f405 222 }//end of while 1
Ricky_Kwon 0:27fe09e9f405 223 }
Ricky_Kwon 0:27fe09e9f405 224 char* User_Keyboard_MSG(void)
Ricky_Kwon 0:27fe09e9f405 225 {
Ricky_Kwon 0:27fe09e9f405 226 User_Keyboard_MSG_Cnt = 0;
Ricky_Kwon 0:27fe09e9f405 227 memset(gMsgBuf, 0, sizeof(gMsgBuf));
Ricky_Kwon 0:27fe09e9f405 228 do{
Ricky_Kwon 0:27fe09e9f405 229 gMsgBuf[User_Keyboard_MSG_Cnt] = pc.getc();
Ricky_Kwon 0:27fe09e9f405 230 if(gMsgBuf[User_Keyboard_MSG_Cnt]==0x08){
Ricky_Kwon 0:27fe09e9f405 231 User_Keyboard_MSG_Cnt--;
Ricky_Kwon 0:27fe09e9f405 232 }
Ricky_Kwon 0:27fe09e9f405 233 else{
Ricky_Kwon 0:27fe09e9f405 234 User_Keyboard_MSG_Cnt++;
Ricky_Kwon 0:27fe09e9f405 235 }
Ricky_Kwon 0:27fe09e9f405 236 }while(gMsgBuf[User_Keyboard_MSG_Cnt-1]!=0x0d);
Ricky_Kwon 0:27fe09e9f405 237 return gMsgBuf;
Ricky_Kwon 0:27fe09e9f405 238 }
Ricky_Kwon 0:27fe09e9f405 239 int pportc(char * arg)
Ricky_Kwon 0:27fe09e9f405 240 {
Ricky_Kwon 0:27fe09e9f405 241 int i;
Ricky_Kwon 0:27fe09e9f405 242 char* tok=0;
Ricky_Kwon 0:27fe09e9f405 243 strtok(arg,"(");
Ricky_Kwon 0:27fe09e9f405 244 for (i = 0; i < 4; i++)
Ricky_Kwon 0:27fe09e9f405 245 {
Ricky_Kwon 0:27fe09e9f405 246 if(i==0) tok = strtok(NULL,",\r\n");
Ricky_Kwon 0:27fe09e9f405 247 else tok = strtok(NULL,",");
Ricky_Kwon 0:27fe09e9f405 248 ftpServer_data_ip_addr[i] = (uint8_t)atoi(tok);
Ricky_Kwon 0:27fe09e9f405 249 if (!tok){
Ricky_Kwon 0:27fe09e9f405 250 pc.printf("bad pport : %s\r\n", arg);
Ricky_Kwon 0:27fe09e9f405 251 return -1;
Ricky_Kwon 0:27fe09e9f405 252 }
Ricky_Kwon 0:27fe09e9f405 253 }
Ricky_Kwon 0:27fe09e9f405 254 remote_port = 0;
Ricky_Kwon 0:27fe09e9f405 255 for (i = 0; i < 2; i++){
Ricky_Kwon 0:27fe09e9f405 256 tok = strtok(NULL,",\r\n");
Ricky_Kwon 0:27fe09e9f405 257 remote_port <<= 8;
Ricky_Kwon 0:27fe09e9f405 258 remote_port += atoi(tok);
Ricky_Kwon 0:27fe09e9f405 259 if (!tok){
Ricky_Kwon 0:27fe09e9f405 260 pc.printf("bad pport : %s\r\n", arg);
Ricky_Kwon 0:27fe09e9f405 261 return -1;
Ricky_Kwon 0:27fe09e9f405 262 }
Ricky_Kwon 0:27fe09e9f405 263 }
Ricky_Kwon 0:27fe09e9f405 264 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);
Ricky_Kwon 0:27fe09e9f405 265 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]);
Ricky_Kwon 0:27fe09e9f405 266 return 0;
Ricky_Kwon 0:27fe09e9f405 267 }
Ricky_Kwon 0:27fe09e9f405 268 void jpeg_callback(char *buf, size_t siz) {
Ricky_Kwon 0:27fe09e9f405 269 for (int i = 0; i < (int)siz; i++) {
Ricky_Kwon 0:27fe09e9f405 270 fprintf(fp_jpeg, "%c", buf[i]);
Ricky_Kwon 0:27fe09e9f405 271 }
Ricky_Kwon 0:27fe09e9f405 272 }
Ricky_Kwon 0:27fe09e9f405 273 void sync(void) {
Ricky_Kwon 0:27fe09e9f405 274 CameraC328::ErrorNumber err = CameraC328::NoError;
Ricky_Kwon 0:27fe09e9f405 275
Ricky_Kwon 0:27fe09e9f405 276 err = camera.sync();
Ricky_Kwon 0:27fe09e9f405 277 if (CameraC328::NoError == err) {
Ricky_Kwon 1:7d428f360a0a 278 printf("[ OK ] : CameraC328::sync\r\n");
Ricky_Kwon 0:27fe09e9f405 279 } else {
Ricky_Kwon 1:7d428f360a0a 280 printf("[FAIL] : CameraC328::sync (Error=%02X)\r\n", (int)err);
Ricky_Kwon 0:27fe09e9f405 281 }
Ricky_Kwon 0:27fe09e9f405 282 }
Ricky_Kwon 0:27fe09e9f405 283 void test_jpeg_snapshot_picture(void) {
Ricky_Kwon 0:27fe09e9f405 284 CameraC328::ErrorNumber err = CameraC328::NoError;
Ricky_Kwon 0:27fe09e9f405 285
Ricky_Kwon 3:55b7af329281 286 #if (USE_JPEG_HIGH_RESOLUTION==1)
Ricky_Kwon 3:55b7af329281 287 err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, CameraC328::JpegResolution80x64);
Ricky_Kwon 3:55b7af329281 288 #elif (USE_JPEG_HIGH_RESOLUTION==2)
Ricky_Kwon 3:55b7af329281 289 err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, CameraC328::JpegResolution160x128);
Ricky_Kwon 3:55b7af329281 290 #elif (USE_JPEG_HIGH_RESOLUTION==3)
Ricky_Kwon 3:55b7af329281 291 err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, CameraC328::JpegResolution320x240);
Ricky_Kwon 3:55b7af329281 292 #elif (USE_JPEG_HIGH_RESOLUTION==4)
Ricky_Kwon 0:27fe09e9f405 293 err = camera.init(CameraC328::Jpeg, CameraC328::RawResolution80x60, CameraC328::JpegResolution640x480);
Ricky_Kwon 0:27fe09e9f405 294 #endif
Ricky_Kwon 0:27fe09e9f405 295 if (CameraC328::NoError == err) {
Ricky_Kwon 1:7d428f360a0a 296 printf("[ OK ] : CameraC328::init\r\n");
Ricky_Kwon 0:27fe09e9f405 297 } else {
Ricky_Kwon 1:7d428f360a0a 298 printf("[FAIL] : CameraC328::init (Error=%02X)\r\n", (int)err);
Ricky_Kwon 0:27fe09e9f405 299 }
Ricky_Kwon 0:27fe09e9f405 300
Ricky_Kwon 1:7d428f360a0a 301
Ricky_Kwon 1:7d428f360a0a 302 snprintf(fname, sizeof(fname), "/sd/jpss%04d.jpg", fnamecnt);
Ricky_Kwon 1:7d428f360a0a 303 fnamecnt++;
Ricky_Kwon 1:7d428f360a0a 304 for(int i = 0; i < 12; i++){
Ricky_Kwon 1:7d428f360a0a 305 fname_server[0+i] = fname[4+i];
Ricky_Kwon 1:7d428f360a0a 306 }
Ricky_Kwon 1:7d428f360a0a 307 fp_jpeg = fopen(fname, "w");
Ricky_Kwon 0:27fe09e9f405 308
Ricky_Kwon 1:7d428f360a0a 309 err = camera.getJpegSnapshotPicture(jpeg_callback);
Ricky_Kwon 1:7d428f360a0a 310 if (CameraC328::NoError == err) {
Ricky_Kwon 1:7d428f360a0a 311 printf("[ OK ] : CameraC328::getJpegSnapshotPicture\r\n");
Ricky_Kwon 1:7d428f360a0a 312 } else {
Ricky_Kwon 1:7d428f360a0a 313 printf("[FAIL] : CameraC328::getJpegSnapshotPicture (Error=%02X)\r\n", (int)err);
Ricky_Kwon 1:7d428f360a0a 314 }
Ricky_Kwon 0:27fe09e9f405 315
Ricky_Kwon 1:7d428f360a0a 316 fclose(fp_jpeg);
Ricky_Kwon 1:7d428f360a0a 317
Ricky_Kwon 3:55b7af329281 318 }