Camera_FTP_WIZwiki-W7500 for WIZnet Academy
Dependencies: CameraC328 SDFileSystem WIZnetInterface_Ricky mbed
Fork of Camera_FTP_WIZwiki-W7500 by
main.cpp@5:64351d7fc62d, 2016-01-06 (annotated)
- Committer:
- IOP
- Date:
- Wed Jan 06 23:59:11 2016 +0000
- Revision:
- 5:64351d7fc62d
- Parent:
- 4:2519e8920b22
change mbed-src to mbed
Who changed what in which revision?
User | Revision | Line number | New 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]; |
IOP | 5:64351d7fc62d | 27 | static char ID[]={"user"}; //Set FTPServer Login ID |
IOP | 5:64351d7fc62d | 28 | static char PASSWORD[]={"1234"}; //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 | |
justinkim | 4:2519e8920b22 | 80 | pc.printf("Hello FTP Camera!\r\n"); |
Ricky_Kwon | 0:27fe09e9f405 | 81 | |
Ricky_Kwon | 0:27fe09e9f405 | 82 | uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x12, 0x34, 0x45}; |
IOP | 5:64351d7fc62d | 83 | const char ip_addr[] = "192.168.240.97"; // WIZwiki-W7500 IP-address |
Ricky_Kwon | 0:27fe09e9f405 | 84 | const char mask_addr[] = "255.255.255.0"; |
IOP | 5:64351d7fc62d | 85 | const char gateway_addr[] = "192.168.240.1"; |
IOP | 5:64351d7fc62d | 86 | const char ftpServer_control_ip_addr[] = "192.168.240.100"; // my IP address |
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"); |
justinkim | 4:2519e8920b22 | 103 | pc.printf("1> Snapshot Picture and Send to 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 | } |