test public

Dependencies:   HttpServer_snapshot_mbed-os

Committer:
anhtran
Date:
Fri Oct 18 03:09:43 2019 +0000
Revision:
0:e9fd5575b10e
abc

Who changed what in which revision?

UserRevisionLine numberNew contents of line
anhtran 0:e9fd5575b10e 1 #include "mbed.h"
anhtran 0:e9fd5575b10e 2 #include "EasyAttach_CameraAndLCD.h"
anhtran 0:e9fd5575b10e 3 #include "dcache-control.h"
anhtran 0:e9fd5575b10e 4 #include "JPEG_Converter.h"
anhtran 0:e9fd5575b10e 5 #include "HTTPServer.h"
anhtran 0:e9fd5575b10e 6 #include "mbed_rpc.h"
anhtran 0:e9fd5575b10e 7 #include "FATFileSystem.h"
anhtran 0:e9fd5575b10e 8 #include "RomRamBlockDevice.h"
anhtran 0:e9fd5575b10e 9 #include "SDBlockDevice_GRBoard.h"
anhtran 0:e9fd5575b10e 10 #if defined(TARGET_RZ_A1H)
anhtran 0:e9fd5575b10e 11 #include "file_table_peach.h" //Binary data of web pages
anhtran 0:e9fd5575b10e 12 #elif defined(TARGET_GR_LYCHEE)
anhtran 0:e9fd5575b10e 13 #include "file_table_lychee.h" //Binary data of web pages
anhtran 0:e9fd5575b10e 14 #endif
anhtran 0:e9fd5575b10e 15 #include "i2c_setting.h"
anhtran 0:e9fd5575b10e 16
anhtran 0:e9fd5575b10e 17 /**** User Selection *********/
anhtran 0:e9fd5575b10e 18 /** Network setting **/
anhtran 0:e9fd5575b10e 19 #define USE_DHCP (1) /* Select 0(static configuration) or 1(use DHCP) */
anhtran 0:e9fd5575b10e 20 #if (USE_DHCP == 0)
anhtran 0:e9fd5575b10e 21 #define IP_ADDRESS ("192.168.0.2") /* IP address */
anhtran 0:e9fd5575b10e 22 #define SUBNET_MASK ("255.255.255.0") /* Subnet mask */
anhtran 0:e9fd5575b10e 23 #define DEFAULT_GATEWAY ("192.168.0.3") /* Default gateway */
anhtran 0:e9fd5575b10e 24 #endif
anhtran 0:e9fd5575b10e 25 #define NETWORK_TYPE (2) /* Select 0(Ethernet), 1(reserved), 2(ESP32 STA) ,3(ESP32 AP) */
anhtran 0:e9fd5575b10e 26 #if (NETWORK_TYPE >= 2)
anhtran 0:e9fd5575b10e 27 #define SCAN_NETWORK (1) /* Select 0(Use WLAN_SSID, WLAN_PSK, WLAN_SECURITY) or 1(To select a network using the terminal.) */
anhtran 0:e9fd5575b10e 28 #define WLAN_SSID ("SSIDofYourAP") /* SSID */
anhtran 0:e9fd5575b10e 29 #define WLAN_PSK ("PSKofYourAP") /* PSK(Pre-Shared Key) */
anhtran 0:e9fd5575b10e 30 #define WLAN_SECURITY NSAPI_SECURITY_WPA_WPA2 /* NSAPI_SECURITY_NONE, NSAPI_SECURITY_WEP, NSAPI_SECURITY_WPA, NSAPI_SECURITY_WPA2 or NSAPI_SECURITY_WPA_WPA2 */
anhtran 0:e9fd5575b10e 31 #endif
anhtran 0:e9fd5575b10e 32 /** JPEG out setting **/
anhtran 0:e9fd5575b10e 33 #define JPEG_ENCODE_QUALITY (75) /* JPEG encode quality (min:1, max:75 (Considering the size of JpegBuffer, about 75 is the upper limit.)) */
anhtran 0:e9fd5575b10e 34 #define VFIELD_INT_SKIP_CNT (0) /* A guide for GR-LYCHEE. 0:60fps, 1:30fps, 2:20fps, 3:15fps, 4:12fps, 5:10fps */
anhtran 0:e9fd5575b10e 35 /*****************************/
anhtran 0:e9fd5575b10e 36
anhtran 0:e9fd5575b10e 37 #if (NETWORK_TYPE == 0)
anhtran 0:e9fd5575b10e 38 #include "EthernetInterface.h"
anhtran 0:e9fd5575b10e 39 EthernetInterface network;
anhtran 0:e9fd5575b10e 40 #elif (NETWORK_TYPE == 2)
anhtran 0:e9fd5575b10e 41 #include "ESP32Interface.h"
anhtran 0:e9fd5575b10e 42 ESP32Interface network;
anhtran 0:e9fd5575b10e 43 #elif (NETWORK_TYPE == 3)
anhtran 0:e9fd5575b10e 44 #include "ESP32InterfaceAP.h"
anhtran 0:e9fd5575b10e 45 ESP32InterfaceAP network;
anhtran 0:e9fd5575b10e 46 #else
anhtran 0:e9fd5575b10e 47 #error NETWORK_TYPE error
anhtran 0:e9fd5575b10e 48 #endif /* NETWORK_TYPE */
anhtran 0:e9fd5575b10e 49
anhtran 0:e9fd5575b10e 50 /* Video input and LCD layer 0 output */
anhtran 0:e9fd5575b10e 51 #define VIDEO_FORMAT (DisplayBase::VIDEO_FORMAT_YCBCR422)
anhtran 0:e9fd5575b10e 52 #define GRAPHICS_FORMAT (DisplayBase::GRAPHICS_FORMAT_YCBCR422)
anhtran 0:e9fd5575b10e 53 #define WR_RD_WRSWA (DisplayBase::WR_RD_WRSWA_32_16BIT)
anhtran 0:e9fd5575b10e 54 #define DATA_SIZE_PER_PIC (2u)
anhtran 0:e9fd5575b10e 55
anhtran 0:e9fd5575b10e 56 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
anhtran 0:e9fd5575b10e 57 in accordance with the frame buffer burst transfer mode. */
anhtran 0:e9fd5575b10e 58 #define VIDEO_PIXEL_HW (320u) /* QVGA */
anhtran 0:e9fd5575b10e 59 #define VIDEO_PIXEL_VW (240u) /* QVGA */
anhtran 0:e9fd5575b10e 60
anhtran 0:e9fd5575b10e 61 #define FRAME_BUFFER_STRIDE (((VIDEO_PIXEL_HW * DATA_SIZE_PER_PIC) + 31u) & ~31u)
anhtran 0:e9fd5575b10e 62 #define FRAME_BUFFER_HEIGHT (VIDEO_PIXEL_VW)
anhtran 0:e9fd5575b10e 63
anhtran 0:e9fd5575b10e 64 DisplayBase Display;
anhtran 0:e9fd5575b10e 65
anhtran 0:e9fd5575b10e 66 #if defined(__ICCARM__)
anhtran 0:e9fd5575b10e 67 #pragma data_alignment=32
anhtran 0:e9fd5575b10e 68 static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * FRAME_BUFFER_HEIGHT]@ ".mirrorram";
anhtran 0:e9fd5575b10e 69 #else
anhtran 0:e9fd5575b10e 70 static uint8_t user_frame_buffer0[FRAME_BUFFER_STRIDE * FRAME_BUFFER_HEIGHT]__attribute((section("NC_BSS"),aligned(32)));
anhtran 0:e9fd5575b10e 71 #endif
anhtran 0:e9fd5575b10e 72
anhtran 0:e9fd5575b10e 73 FATFileSystem fs("storage");
anhtran 0:e9fd5575b10e 74 RomRamBlockDevice romram_bd(512000, 512);
anhtran 0:e9fd5575b10e 75 SDBlockDevice_GRBoard sd;
anhtran 0:e9fd5575b10e 76 Serial pc(USBTX, USBRX);
anhtran 0:e9fd5575b10e 77 Thread sdConnectTask;
anhtran 0:e9fd5575b10e 78
anhtran 0:e9fd5575b10e 79 #if defined(__ICCARM__)
anhtran 0:e9fd5575b10e 80 #pragma data_alignment=32
anhtran 0:e9fd5575b10e 81 static uint8_t JpegBuffer[2][1024 * 64];
anhtran 0:e9fd5575b10e 82 #else
anhtran 0:e9fd5575b10e 83 static uint8_t JpegBuffer[2][1024 * 64]__attribute((aligned(32)));
anhtran 0:e9fd5575b10e 84 #endif
anhtran 0:e9fd5575b10e 85 static size_t jcu_encode_size[2];
anhtran 0:e9fd5575b10e 86 static int image_change = 0;
anhtran 0:e9fd5575b10e 87 JPEG_Converter Jcu;
anhtran 0:e9fd5575b10e 88 static int jcu_buf_index_write = 0;
anhtran 0:e9fd5575b10e 89 static int jcu_buf_index_write_done = 0;
anhtran 0:e9fd5575b10e 90 static int jcu_buf_index_read = 0;
anhtran 0:e9fd5575b10e 91 static int jcu_encoding = 0;
anhtran 0:e9fd5575b10e 92 static int Vfield_Int_Cnt = 0;
anhtran 0:e9fd5575b10e 93 static char i2c_setting_str_buf[I2C_SETTING_STR_BUF_SIZE];
anhtran 0:e9fd5575b10e 94
anhtran 0:e9fd5575b10e 95 static void JcuEncodeCallBackFunc(JPEG_Converter::jpeg_conv_error_t err_code) {
anhtran 0:e9fd5575b10e 96 if (err_code == JPEG_Converter::JPEG_CONV_OK) {
anhtran 0:e9fd5575b10e 97 jcu_buf_index_write_done = jcu_buf_index_write;
anhtran 0:e9fd5575b10e 98 image_change = 1;
anhtran 0:e9fd5575b10e 99 }
anhtran 0:e9fd5575b10e 100 jcu_encoding = 0;
anhtran 0:e9fd5575b10e 101 }
anhtran 0:e9fd5575b10e 102
anhtran 0:e9fd5575b10e 103 static int snapshot_req(const char ** pp_data) {
anhtran 0:e9fd5575b10e 104 int encode_size;
anhtran 0:e9fd5575b10e 105
anhtran 0:e9fd5575b10e 106 while ((jcu_encoding == 1) || (image_change == 0)) {
anhtran 0:e9fd5575b10e 107 ThisThread::sleep_for(1);
anhtran 0:e9fd5575b10e 108 }
anhtran 0:e9fd5575b10e 109 jcu_buf_index_read = jcu_buf_index_write_done;
anhtran 0:e9fd5575b10e 110 image_change = 0;
anhtran 0:e9fd5575b10e 111
anhtran 0:e9fd5575b10e 112 *pp_data = (const char *)JpegBuffer[jcu_buf_index_read];
anhtran 0:e9fd5575b10e 113 encode_size = (int)jcu_encode_size[jcu_buf_index_read];
anhtran 0:e9fd5575b10e 114
anhtran 0:e9fd5575b10e 115 return encode_size;
anhtran 0:e9fd5575b10e 116 }
anhtran 0:e9fd5575b10e 117
anhtran 0:e9fd5575b10e 118 static void IntCallbackFunc_Vfield(DisplayBase::int_type_t int_type) {
anhtran 0:e9fd5575b10e 119 if (Vfield_Int_Cnt < VFIELD_INT_SKIP_CNT) {
anhtran 0:e9fd5575b10e 120 Vfield_Int_Cnt++;
anhtran 0:e9fd5575b10e 121 return;
anhtran 0:e9fd5575b10e 122 }
anhtran 0:e9fd5575b10e 123 Vfield_Int_Cnt = 0;
anhtran 0:e9fd5575b10e 124
anhtran 0:e9fd5575b10e 125 //Interrupt callback function
anhtran 0:e9fd5575b10e 126 if (jcu_encoding == 0) {
anhtran 0:e9fd5575b10e 127 JPEG_Converter::bitmap_buff_info_t bitmap_buff_info;
anhtran 0:e9fd5575b10e 128 JPEG_Converter::encode_options_t encode_options;
anhtran 0:e9fd5575b10e 129
anhtran 0:e9fd5575b10e 130 bitmap_buff_info.width = VIDEO_PIXEL_HW;
anhtran 0:e9fd5575b10e 131 bitmap_buff_info.height = VIDEO_PIXEL_VW;
anhtran 0:e9fd5575b10e 132 bitmap_buff_info.format = JPEG_Converter::WR_RD_YCbCr422;
anhtran 0:e9fd5575b10e 133 bitmap_buff_info.buffer_address = (void *)user_frame_buffer0;
anhtran 0:e9fd5575b10e 134
anhtran 0:e9fd5575b10e 135 encode_options.encode_buff_size = sizeof(JpegBuffer[0]);
anhtran 0:e9fd5575b10e 136 encode_options.p_EncodeCallBackFunc = &JcuEncodeCallBackFunc;
anhtran 0:e9fd5575b10e 137 encode_options.input_swapsetting = JPEG_Converter::WR_RD_WRSWA_32_16_8BIT;
anhtran 0:e9fd5575b10e 138
anhtran 0:e9fd5575b10e 139 jcu_encoding = 1;
anhtran 0:e9fd5575b10e 140 if (jcu_buf_index_read == jcu_buf_index_write) {
anhtran 0:e9fd5575b10e 141 jcu_buf_index_write ^= 1; // toggle
anhtran 0:e9fd5575b10e 142 }
anhtran 0:e9fd5575b10e 143 jcu_encode_size[jcu_buf_index_write] = 0;
anhtran 0:e9fd5575b10e 144 dcache_invalid(JpegBuffer[jcu_buf_index_write], sizeof(JpegBuffer[0]));
anhtran 0:e9fd5575b10e 145 if (Jcu.encode(&bitmap_buff_info, JpegBuffer[jcu_buf_index_write],
anhtran 0:e9fd5575b10e 146 &jcu_encode_size[jcu_buf_index_write], &encode_options) != JPEG_Converter::JPEG_CONV_OK) {
anhtran 0:e9fd5575b10e 147 jcu_encode_size[jcu_buf_index_write] = 0;
anhtran 0:e9fd5575b10e 148 jcu_encoding = 0;
anhtran 0:e9fd5575b10e 149 }
anhtran 0:e9fd5575b10e 150 }
anhtran 0:e9fd5575b10e 151 }
anhtran 0:e9fd5575b10e 152
anhtran 0:e9fd5575b10e 153 static void Start_Video_Camera(void) {
anhtran 0:e9fd5575b10e 154 // Video capture setting (progressive form fixed)
anhtran 0:e9fd5575b10e 155 Display.Video_Write_Setting(
anhtran 0:e9fd5575b10e 156 DisplayBase::VIDEO_INPUT_CHANNEL_0,
anhtran 0:e9fd5575b10e 157 DisplayBase::COL_SYS_NTSC_358,
anhtran 0:e9fd5575b10e 158 (void *)user_frame_buffer0,
anhtran 0:e9fd5575b10e 159 FRAME_BUFFER_STRIDE,
anhtran 0:e9fd5575b10e 160 VIDEO_FORMAT,
anhtran 0:e9fd5575b10e 161 WR_RD_WRSWA,
anhtran 0:e9fd5575b10e 162 VIDEO_PIXEL_VW,
anhtran 0:e9fd5575b10e 163 VIDEO_PIXEL_HW
anhtran 0:e9fd5575b10e 164 );
anhtran 0:e9fd5575b10e 165 EasyAttach_CameraStart(Display, DisplayBase::VIDEO_INPUT_CHANNEL_0);
anhtran 0:e9fd5575b10e 166 }
anhtran 0:e9fd5575b10e 167
anhtran 0:e9fd5575b10e 168 static void TerminalWrite(Arguments* arg, Reply* r) {
anhtran 0:e9fd5575b10e 169 if ((arg != NULL) && (r != NULL)) {
anhtran 0:e9fd5575b10e 170 for (int i = 0; i < arg->argc; i++) {
anhtran 0:e9fd5575b10e 171 if (arg->argv[i] != NULL) {
anhtran 0:e9fd5575b10e 172 printf("%s", arg->argv[i]);
anhtran 0:e9fd5575b10e 173 }
anhtran 0:e9fd5575b10e 174 }
anhtran 0:e9fd5575b10e 175 printf("\n");
anhtran 0:e9fd5575b10e 176 r->putData<const char*>("ok");
anhtran 0:e9fd5575b10e 177 }
anhtran 0:e9fd5575b10e 178 }
anhtran 0:e9fd5575b10e 179
anhtran 0:e9fd5575b10e 180 static void mount_romramfs(void) {
anhtran 0:e9fd5575b10e 181 FILE * fp;
anhtran 0:e9fd5575b10e 182
anhtran 0:e9fd5575b10e 183 romram_bd.SetRomAddr(0x18000000, 0x1FFFFFFF);
anhtran 0:e9fd5575b10e 184 fs.format(&romram_bd, 512);
anhtran 0:e9fd5575b10e 185 fs.mount(&romram_bd);
anhtran 0:e9fd5575b10e 186
anhtran 0:e9fd5575b10e 187 //index.htm
anhtran 0:e9fd5575b10e 188 fp = fopen("/storage/index.htm", "w");
anhtran 0:e9fd5575b10e 189 fwrite(index_htm_tbl, sizeof(char), sizeof(index_htm_tbl), fp);
anhtran 0:e9fd5575b10e 190 fclose(fp);
anhtran 0:e9fd5575b10e 191
anhtran 0:e9fd5575b10e 192 //camera.js
anhtran 0:e9fd5575b10e 193 fp = fopen("/storage/camera.js", "w");
anhtran 0:e9fd5575b10e 194 fwrite(camaera_js_tbl, sizeof(char), sizeof(camaera_js_tbl), fp);
anhtran 0:e9fd5575b10e 195 fclose(fp);
anhtran 0:e9fd5575b10e 196
anhtran 0:e9fd5575b10e 197 //camera.htm
anhtran 0:e9fd5575b10e 198 fp = fopen("/storage/camera.htm", "w");
anhtran 0:e9fd5575b10e 199 fwrite(camera_htm_tbl, sizeof(char), sizeof(camera_htm_tbl), fp);
anhtran 0:e9fd5575b10e 200 fclose(fp);
anhtran 0:e9fd5575b10e 201
anhtran 0:e9fd5575b10e 202 //mbedrpc.js
anhtran 0:e9fd5575b10e 203 fp = fopen("/storage/mbedrpc.js", "w");
anhtran 0:e9fd5575b10e 204 fwrite(mbedrpc_js_tbl, sizeof(char), sizeof(mbedrpc_js_tbl), fp);
anhtran 0:e9fd5575b10e 205 fclose(fp);
anhtran 0:e9fd5575b10e 206
anhtran 0:e9fd5575b10e 207 //led.htm
anhtran 0:e9fd5575b10e 208 fp = fopen("/storage/led.htm", "w");
anhtran 0:e9fd5575b10e 209 fwrite(led_htm_tbl, sizeof(char), sizeof(led_htm_tbl), fp);
anhtran 0:e9fd5575b10e 210 fclose(fp);
anhtran 0:e9fd5575b10e 211
anhtran 0:e9fd5575b10e 212 //i2c_set.htm
anhtran 0:e9fd5575b10e 213 fp = fopen("/storage/i2c_set.htm", "w");
anhtran 0:e9fd5575b10e 214 fwrite(i2c_set_htm_tbl, sizeof(char), sizeof(i2c_set_htm_tbl), fp);
anhtran 0:e9fd5575b10e 215 fclose(fp);
anhtran 0:e9fd5575b10e 216
anhtran 0:e9fd5575b10e 217 //web_top.htm
anhtran 0:e9fd5575b10e 218 fp = fopen("/storage/web_top.htm", "w");
anhtran 0:e9fd5575b10e 219 fwrite(web_top_htm_tbl, sizeof(char), sizeof(web_top_htm_tbl), fp);
anhtran 0:e9fd5575b10e 220 fclose(fp);
anhtran 0:e9fd5575b10e 221
anhtran 0:e9fd5575b10e 222 //menu.htm
anhtran 0:e9fd5575b10e 223 fp = fopen("/storage/menu.htm", "w");
anhtran 0:e9fd5575b10e 224 fwrite(menu_htm_tbl, sizeof(char), sizeof(menu_htm_tbl), fp);
anhtran 0:e9fd5575b10e 225 fclose(fp);
anhtran 0:e9fd5575b10e 226
anhtran 0:e9fd5575b10e 227 //window.htm
anhtran 0:e9fd5575b10e 228 fp = fopen("/storage/window.htm", "w");
anhtran 0:e9fd5575b10e 229 fwrite(window_htm_tbl, sizeof(char), sizeof(window_htm_tbl), fp);
anhtran 0:e9fd5575b10e 230 fclose(fp);
anhtran 0:e9fd5575b10e 231 }
anhtran 0:e9fd5575b10e 232
anhtran 0:e9fd5575b10e 233 static void SetI2CfromWeb(Arguments* arg, Reply* r) {
anhtran 0:e9fd5575b10e 234 int result = 0;
anhtran 0:e9fd5575b10e 235
anhtran 0:e9fd5575b10e 236 if (arg != NULL) {
anhtran 0:e9fd5575b10e 237 if (arg->argc >= 2) {
anhtran 0:e9fd5575b10e 238 if ((arg->argv[0] != NULL) && (arg->argv[1] != NULL)) {
anhtran 0:e9fd5575b10e 239 sprintf(i2c_setting_str_buf, "%s,%s", arg->argv[0], arg->argv[1]);
anhtran 0:e9fd5575b10e 240 result = 1;
anhtran 0:e9fd5575b10e 241 }
anhtran 0:e9fd5575b10e 242 } else if (arg->argc == 1) {
anhtran 0:e9fd5575b10e 243 if (arg->argv[0] != NULL) {
anhtran 0:e9fd5575b10e 244 sprintf(i2c_setting_str_buf, "%s", arg->argv[0]);
anhtran 0:e9fd5575b10e 245 result = 1;
anhtran 0:e9fd5575b10e 246 }
anhtran 0:e9fd5575b10e 247 } else {
anhtran 0:e9fd5575b10e 248 /* Do nothing */
anhtran 0:e9fd5575b10e 249 }
anhtran 0:e9fd5575b10e 250 /* command analysis and execute */
anhtran 0:e9fd5575b10e 251 if (result != 0) {
anhtran 0:e9fd5575b10e 252 if (i2c_setting_exe(i2c_setting_str_buf) != false) {
anhtran 0:e9fd5575b10e 253 r->putData<const char*>(i2c_setting_str_buf);
anhtran 0:e9fd5575b10e 254 }
anhtran 0:e9fd5575b10e 255 }
anhtran 0:e9fd5575b10e 256 }
anhtran 0:e9fd5575b10e 257 }
anhtran 0:e9fd5575b10e 258
anhtran 0:e9fd5575b10e 259 #if (SCAN_NETWORK == 1) && (NETWORK_TYPE != 3)
anhtran 0:e9fd5575b10e 260 static const char *sec2str(nsapi_security_t sec) {
anhtran 0:e9fd5575b10e 261 switch (sec) {
anhtran 0:e9fd5575b10e 262 case NSAPI_SECURITY_NONE:
anhtran 0:e9fd5575b10e 263 return "None";
anhtran 0:e9fd5575b10e 264 case NSAPI_SECURITY_WEP:
anhtran 0:e9fd5575b10e 265 return "WEP";
anhtran 0:e9fd5575b10e 266 case NSAPI_SECURITY_WPA:
anhtran 0:e9fd5575b10e 267 return "WPA";
anhtran 0:e9fd5575b10e 268 case NSAPI_SECURITY_WPA2:
anhtran 0:e9fd5575b10e 269 return "WPA2";
anhtran 0:e9fd5575b10e 270 case NSAPI_SECURITY_WPA_WPA2:
anhtran 0:e9fd5575b10e 271 return "WPA/WPA2";
anhtran 0:e9fd5575b10e 272 case NSAPI_SECURITY_UNKNOWN:
anhtran 0:e9fd5575b10e 273 default:
anhtran 0:e9fd5575b10e 274 return "Unknown";
anhtran 0:e9fd5575b10e 275 }
anhtran 0:e9fd5575b10e 276 }
anhtran 0:e9fd5575b10e 277
anhtran 0:e9fd5575b10e 278 static bool scan_network(WiFiInterface *wifi) {
anhtran 0:e9fd5575b10e 279 WiFiAccessPoint *ap;
anhtran 0:e9fd5575b10e 280 bool ret = false;
anhtran 0:e9fd5575b10e 281 int i;
anhtran 0:e9fd5575b10e 282 int count = 10; /* Limit number of network arbitrary to 10 */
anhtran 0:e9fd5575b10e 283
anhtran 0:e9fd5575b10e 284 printf("Scan:\r\n");
anhtran 0:e9fd5575b10e 285 ap = new WiFiAccessPoint[count];
anhtran 0:e9fd5575b10e 286 if (ap == NULL) {
anhtran 0:e9fd5575b10e 287 printf("memory error\r\n");
anhtran 0:e9fd5575b10e 288 return 0;
anhtran 0:e9fd5575b10e 289 }
anhtran 0:e9fd5575b10e 290 count = wifi->scan(ap, count);
anhtran 0:e9fd5575b10e 291 for (i = 0; i < count; i++) {
anhtran 0:e9fd5575b10e 292 printf("No.%d Network: %s secured: %s BSSID: %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx RSSI: %hhd Ch: %hhd\r\n",
anhtran 0:e9fd5575b10e 293 i, ap[i].get_ssid(), sec2str(ap[i].get_security()),
anhtran 0:e9fd5575b10e 294 ap[i].get_bssid()[0], ap[i].get_bssid()[1], ap[i].get_bssid()[2], ap[i].get_bssid()[3],
anhtran 0:e9fd5575b10e 295 ap[i].get_bssid()[4], ap[i].get_bssid()[5], ap[i].get_rssi(), ap[i].get_channel());
anhtran 0:e9fd5575b10e 296 }
anhtran 0:e9fd5575b10e 297 printf("%d networks available.\r\n", count);
anhtran 0:e9fd5575b10e 298
anhtran 0:e9fd5575b10e 299 if (count > 0) {
anhtran 0:e9fd5575b10e 300 char c;
anhtran 0:e9fd5575b10e 301 char pass[64];
anhtran 0:e9fd5575b10e 302 int select_no;
anhtran 0:e9fd5575b10e 303 bool loop_break = false;;
anhtran 0:e9fd5575b10e 304
anhtran 0:e9fd5575b10e 305 printf("\nPlease enter the number of the network you want to connect.\r\n");
anhtran 0:e9fd5575b10e 306 printf("Enter key:[0]-[%d], (If inputting the other key, it's scanned again.)\r\n", count - 1);
anhtran 0:e9fd5575b10e 307 c = (uint8_t)pc.getc();
anhtran 0:e9fd5575b10e 308 select_no = c - 0x30;
anhtran 0:e9fd5575b10e 309 if ((select_no >= 0) && (select_no < count)) {
anhtran 0:e9fd5575b10e 310 printf("[%s] is selected.\r\n", ap[select_no].get_ssid());
anhtran 0:e9fd5575b10e 311 printf("Please enter the PSK.\r\n");
anhtran 0:e9fd5575b10e 312 i = 0;
anhtran 0:e9fd5575b10e 313 while (loop_break == false) {
anhtran 0:e9fd5575b10e 314 c = (uint8_t)pc.getc();
anhtran 0:e9fd5575b10e 315 switch (c) {
anhtran 0:e9fd5575b10e 316 case 0x0D:
anhtran 0:e9fd5575b10e 317 pass[i] = '\0';
anhtran 0:e9fd5575b10e 318 pc.puts("\r\n");
anhtran 0:e9fd5575b10e 319 loop_break = true;
anhtran 0:e9fd5575b10e 320 break;
anhtran 0:e9fd5575b10e 321 case 0x08:
anhtran 0:e9fd5575b10e 322 if (i > 0) {
anhtran 0:e9fd5575b10e 323 pc.puts("\b \b");
anhtran 0:e9fd5575b10e 324 i--;
anhtran 0:e9fd5575b10e 325 }
anhtran 0:e9fd5575b10e 326 break;
anhtran 0:e9fd5575b10e 327 case 0x0A:
anhtran 0:e9fd5575b10e 328 break;
anhtran 0:e9fd5575b10e 329 default:
anhtran 0:e9fd5575b10e 330 if ((i + 1) < sizeof(pass)) {
anhtran 0:e9fd5575b10e 331 pass[i] = c;
anhtran 0:e9fd5575b10e 332 i++;
anhtran 0:e9fd5575b10e 333 pc.putc(c);
anhtran 0:e9fd5575b10e 334 }
anhtran 0:e9fd5575b10e 335 break;
anhtran 0:e9fd5575b10e 336 }
anhtran 0:e9fd5575b10e 337 }
anhtran 0:e9fd5575b10e 338 wifi->set_credentials(ap[select_no].get_ssid(), pass, ap[select_no].get_security());
anhtran 0:e9fd5575b10e 339 ret = true;
anhtran 0:e9fd5575b10e 340 }
anhtran 0:e9fd5575b10e 341 }
anhtran 0:e9fd5575b10e 342
anhtran 0:e9fd5575b10e 343 delete[] ap;
anhtran 0:e9fd5575b10e 344
anhtran 0:e9fd5575b10e 345 return ret;
anhtran 0:e9fd5575b10e 346 }
anhtran 0:e9fd5575b10e 347 #endif
anhtran 0:e9fd5575b10e 348
anhtran 0:e9fd5575b10e 349 static void sd_connect_task(void) {
anhtran 0:e9fd5575b10e 350 int storage_type = 0;
anhtran 0:e9fd5575b10e 351
anhtran 0:e9fd5575b10e 352 while (1) {
anhtran 0:e9fd5575b10e 353 if (storage_type == 0) {
anhtran 0:e9fd5575b10e 354 if (sd.connect()) {
anhtran 0:e9fd5575b10e 355 fs.unmount();
anhtran 0:e9fd5575b10e 356 fs.mount(&sd);
anhtran 0:e9fd5575b10e 357 storage_type = 1;
anhtran 0:e9fd5575b10e 358 printf("SDBlockDevice\r\n");
anhtran 0:e9fd5575b10e 359 }
anhtran 0:e9fd5575b10e 360 } else {
anhtran 0:e9fd5575b10e 361 if (sd.connected() == false) {
anhtran 0:e9fd5575b10e 362 fs.unmount();
anhtran 0:e9fd5575b10e 363 fs.mount(&romram_bd);
anhtran 0:e9fd5575b10e 364 storage_type = 0;
anhtran 0:e9fd5575b10e 365 printf("RomRamBlockDevice\r\n");
anhtran 0:e9fd5575b10e 366 }
anhtran 0:e9fd5575b10e 367 }
anhtran 0:e9fd5575b10e 368 ThisThread::sleep_for(250);
anhtran 0:e9fd5575b10e 369 }
anhtran 0:e9fd5575b10e 370 }
anhtran 0:e9fd5575b10e 371
anhtran 0:e9fd5575b10e 372 int main(void) {
anhtran 0:e9fd5575b10e 373 printf("********* PROGRAM START ***********\r\n");
anhtran 0:e9fd5575b10e 374
anhtran 0:e9fd5575b10e 375 mount_romramfs(); //RomRamFileSystem Mount
anhtran 0:e9fd5575b10e 376
anhtran 0:e9fd5575b10e 377 sdConnectTask.start(&sd_connect_task);
anhtran 0:e9fd5575b10e 378
anhtran 0:e9fd5575b10e 379 EasyAttach_Init(Display);
anhtran 0:e9fd5575b10e 380 Jcu.SetQuality(JPEG_ENCODE_QUALITY);
anhtran 0:e9fd5575b10e 381 // Interrupt callback function setting (Field end signal for recording function in scaler 0)
anhtran 0:e9fd5575b10e 382 Display.Graphics_Irq_Handler_Set(DisplayBase::INT_TYPE_S0_VFIELD, 0, IntCallbackFunc_Vfield);
anhtran 0:e9fd5575b10e 383 Start_Video_Camera();
anhtran 0:e9fd5575b10e 384
anhtran 0:e9fd5575b10e 385 RPC::add_rpc_class<RpcDigitalOut>();
anhtran 0:e9fd5575b10e 386 RPCFunction rpcFunc(TerminalWrite, "TerminalWrite");
anhtran 0:e9fd5575b10e 387 RPCFunction rpcSetI2C(SetI2CfromWeb, "SetI2CfromWeb");
anhtran 0:e9fd5575b10e 388
anhtran 0:e9fd5575b10e 389 printf("Network Setting up...\r\n");
anhtran 0:e9fd5575b10e 390 #if (USE_DHCP == 0)
anhtran 0:e9fd5575b10e 391 network.set_dhcp(false);
anhtran 0:e9fd5575b10e 392 if (network.set_network(IP_ADDRESS, SUBNET_MASK, DEFAULT_GATEWAY) != 0) { //for Static IP Address (IPAddress, NetMasks, Gateway)
anhtran 0:e9fd5575b10e 393 printf("Network Set Network Error \r\n");
anhtran 0:e9fd5575b10e 394 }
anhtran 0:e9fd5575b10e 395 #endif
anhtran 0:e9fd5575b10e 396
anhtran 0:e9fd5575b10e 397 #if (NETWORK_TYPE >= 2)
anhtran 0:e9fd5575b10e 398 #if (SCAN_NETWORK == 1) && (NETWORK_TYPE != 3)
anhtran 0:e9fd5575b10e 399 while (!scan_network(&network));
anhtran 0:e9fd5575b10e 400 #else
anhtran 0:e9fd5575b10e 401 network.set_credentials(WLAN_SSID, WLAN_PSK, WLAN_SECURITY);
anhtran 0:e9fd5575b10e 402 #endif
anhtran 0:e9fd5575b10e 403 #endif
anhtran 0:e9fd5575b10e 404
anhtran 0:e9fd5575b10e 405 printf("\r\nConnecting...\r\n");
anhtran 0:e9fd5575b10e 406 if (network.connect() != 0) {
anhtran 0:e9fd5575b10e 407 printf("Network Connect Error \r\n");
anhtran 0:e9fd5575b10e 408 return -1;
anhtran 0:e9fd5575b10e 409 }
anhtran 0:e9fd5575b10e 410 printf("MAC Address is %s\r\n", network.get_mac_address());
anhtran 0:e9fd5575b10e 411 printf("IP Address is %s\r\n", network.get_ip_address());
anhtran 0:e9fd5575b10e 412 printf("NetMask is %s\r\n", network.get_netmask());
anhtran 0:e9fd5575b10e 413 printf("Gateway Address is %s\r\n", network.get_gateway());
anhtran 0:e9fd5575b10e 414 printf("Network Setup OK\r\n");
anhtran 0:e9fd5575b10e 415
anhtran 0:e9fd5575b10e 416 SnapshotHandler::attach_req(&snapshot_req);
anhtran 0:e9fd5575b10e 417 HTTPServerAddHandler<SnapshotHandler>("/camera"); //Camera
anhtran 0:e9fd5575b10e 418 FSHandler::mount("/storage", "/");
anhtran 0:e9fd5575b10e 419 HTTPServerAddHandler<FSHandler>("/");
anhtran 0:e9fd5575b10e 420 HTTPServerAddHandler<RPCHandler>("/rpc");
anhtran 0:e9fd5575b10e 421 HTTPServerStart(&network, 80);
anhtran 0:e9fd5575b10e 422 }