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:
Tue Jul 21 23:52:52 2015 +0000
Revision:
1:7d428f360a0a
Parent:
0:27fe09e9f405
Child:
2:c469227cb913
optimization

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