• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* Copyright JS Foundation and other contributors, http://js.foundation
2  *
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 /******************************************************************************
17  * Copyright 2013-2014 Espressif Systems (Wuxi)
18  *
19  * FileName: user_main.c
20  *
21  * Description: entry file of user application
22  *
23  * Modification history:
24  *     2014/12/1, v1.0 create this file.
25 *******************************************************************************/
26 
27 #include "esp_common.h"
28 #include "freertos/FreeRTOS.h"
29 #include "freertos/task.h"
30 #include "uart.h"
31 
32 #include "user_config.h"
33 #include "jerry_run.h"
34 #include "jerry-targetjs.h"
35 
show_free_mem(int idx)36 static void show_free_mem(int idx) {
37   size_t res = xPortGetFreeHeapSize();
38   printf("dbg free memory(%d): %d\r\n", idx, res);
39 }
40 
jerry_task_init(void)41 static int jerry_task_init(void) {
42   DECLARE_JS_CODES;
43 
44   js_entry();
45 
46   /* run rest of the js files first */
47   show_free_mem(2);
48   for (int src = 1; js_codes[src].source; src++) {
49     int retcode = js_eval(js_codes[src].source, js_codes[src].length);
50     if (retcode != 0) {
51       printf("js_eval failed code(%d) [%s]\r\n", retcode, js_codes[src].name);
52       return -1;
53     }
54   }
55 
56   /* run main.js */
57   int retcode = js_eval(js_codes[0].source, js_codes[0].length);
58   if (retcode != 0) {
59     printf("js_eval failed code(%d) [%s]\r\n", retcode, js_codes[0].name);
60     return -2;
61   }
62   show_free_mem(3);
63   return 0;
64 }
65 
jerry_task(void * pvParameters)66 static void jerry_task(void *pvParameters) {
67   if (jerry_task_init() == 0) {
68     const portTickType xDelay = 100 / portTICK_RATE_MS;
69     uint32_t ticknow = 0;
70 
71     for (;;) {
72       vTaskDelay(xDelay);
73       js_loop(ticknow);
74       if (!ticknow) {
75         show_free_mem(4);
76       }
77       ticknow++;
78     }
79   }
80   js_exit();
81 }
82 
83 /*
84  * This is entry point for user code
85  */
user_init(void)86 void ICACHE_FLASH_ATTR user_init(void)
87 {
88   UART_SetBaudrate(UART0, BIT_RATE_115200);
89 
90   show_free_mem(0);
91   wifi_softap_dhcps_stop();
92   show_free_mem(1);
93 
94   PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);    // GPIO 0
95   PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);    // GPIO 2
96 
97   xTaskCreate(jerry_task, "jerry", JERRY_STACK_SIZE, NULL, 2, NULL);
98 }
99 
100 /*
101  * FunctionName : user_rf_cal_sector_set
102  * Description  : SDK just reserved 4 sectors, used for rf init data and Parameters.
103  *                We add this function to force users to set rf cal sector, since
104  *                we don't know which sector is free in user's application.
105  *                sector map for last several sectors : ABCCC
106  *                A : rf cal
107  *                B : rf init data
108  *                C : sdk parameters
109  * Parameters   : none
110  * Returns      : rf cal sector
111  */
user_rf_cal_sector_set(void)112 uint32 user_rf_cal_sector_set(void)
113 {
114     flash_size_map size_map = system_get_flash_size_map();
115     uint32 rf_cal_sec = 0;
116 
117     switch (size_map) {
118         case FLASH_SIZE_4M_MAP_256_256:
119             rf_cal_sec = 128 - 5;
120             break;
121 
122         case FLASH_SIZE_8M_MAP_512_512:
123             rf_cal_sec = 256 - 5;
124             break;
125 
126         case FLASH_SIZE_16M_MAP_512_512:
127         case FLASH_SIZE_16M_MAP_1024_1024:
128             rf_cal_sec = 512 - 5;
129             break;
130 
131         case FLASH_SIZE_32M_MAP_512_512:
132         case FLASH_SIZE_32M_MAP_1024_1024:
133             rf_cal_sec = 1024 - 5;
134             break;
135         case FLASH_SIZE_64M_MAP_1024_1024:
136             rf_cal_sec = 2048 - 5;
137             break;
138         case FLASH_SIZE_128M_MAP_1024_1024:
139             rf_cal_sec = 4096 - 5;
140             break;
141         default:
142             rf_cal_sec = 0;
143             break;
144     }
145 
146     return rf_cal_sec;
147 }
148