mirror of
https://github.com/google/pebble.git
synced 2025-05-29 06:23:13 +00:00
Import of the watch repository from Pebble
This commit is contained in:
commit
3b92768480
10334 changed files with 2564465 additions and 0 deletions
120
third_party/jerryscript/targets/curie_bsp/README.md
vendored
Normal file
120
third_party/jerryscript/targets/curie_bsp/README.md
vendored
Normal file
|
@ -0,0 +1,120 @@
|
|||
### About Curie BSP port
|
||||
[Intel® Curie BSP](https://github.com/CurieBSP/main/blob/master/README.rst) is the SDK that will help you developing software on Curie based boards, for example with the [Arduino 101 board (AKA Genuino 101)](https://www.arduino.cc/en/Main/ArduinoBoard101).
|
||||
|
||||
This folder contains necessary files to integrate JerryScript with Intel® Curie BSP, so that JavaScript can run on Arduino 101 board (AKA Genuino 101).
|
||||
|
||||
### How to build
|
||||
#### 1. Preface
|
||||
|
||||
Curie BSP only support Ubuntu GNU/Linux as host OS envirenment.
|
||||
|
||||
Necessary hardwares
|
||||
* [FlySwatter2 JTAG debugger](https://www.tincantools.com/wiki/Flyswatter2)
|
||||
* [ARM-JTAG-20-10](https://www.amazon.com/PACK-ARM-JTAG-20-10-Micro-JTAG-adapter/dp/B010ATK9OC/ref=sr_1_1?ie=UTF8&qid=1469635131&sr=8-1&keywords=ARM+Micro+JTAG+Connector)
|
||||
* [USB to TTL Serial Cable](https://www.adafruit.com/products/954)
|
||||
|
||||
#### 2. Prepare Curie BSP
|
||||
|
||||
You can refer to a detailed document [Curie BSP](https://github.com/CurieBSP/main/releases). But, we summary the main steps below:
|
||||
|
||||
##### 1. Get repo:
|
||||
```
|
||||
mkdir ~/bin
|
||||
wget http://commondatastorage.googleapis.com/git-repo-downloads/repo -O ~/bin/repo
|
||||
chmod a+x ~/bin/repo
|
||||
```
|
||||
|
||||
##### 2. In ``~/.bashrc`` add:
|
||||
```
|
||||
PATH=$PATH:~/bin
|
||||
```
|
||||
|
||||
##### 3. Create your directory for CurieBSP (eg. Curie_BSP):
|
||||
```
|
||||
mkdir Curie_BSP && cd $_
|
||||
```
|
||||
|
||||
##### 4. Initialize your repo:
|
||||
```
|
||||
repo init -u https://github.com/CurieBSP/manifest
|
||||
```
|
||||
|
||||
##### 5. Download the sources files:
|
||||
```
|
||||
repo sync -j 5 -d
|
||||
```
|
||||
|
||||
##### 6. Get toolchain (compilation/debug):
|
||||
Download [issm-toolchain-linux-2016-05-12.tar.gz](https://software.intel.com/en-us/articles/issm-toolchain-only-download), and uncompress it.
|
||||
**TOOLCHAIN_DIR** environment variable needs to match the toolchain destination folder
|
||||
You can use the command:``export TOOLCHAIN_DIR='path to files of the toolchain'``
|
||||
|
||||
Or you can just uncompress the toolchain tarball and copy the contents (`licensing readme.txt tools version.txt`) into `wearable_device_sw/external/toolchain`.
|
||||
|
||||
##### 7. Get BLE firmware:
|
||||
Download [curie-ble-v3.1.1.tar.gz]( https://registrationcenter.intel.com/en/forms/?productid=2783) and uncompress the retrieved package into ``wearable_device_sw/packages`` folder
|
||||
|
||||
You will first register in the web page. Then you will receive an email where is a download link. Click the link in the mail, choose the `curie-ble-v3.1.1.tar.gz (118 KB)` and download.
|
||||
|
||||
##### 8. Get tools to flash the device:
|
||||
[https://01.org/android-ia/downloads/intel-platform-flash-tool-lite](https://01.org/android-ia/downloads/intel-platform-flash-tool-lite)
|
||||
|
||||
|
||||
#### 3. Build JerryScript and Curie BSP
|
||||
##### 1. Generate makefiles
|
||||
Run the Python script ``setup.py`` in ``jerryscript/targets/curie_bsp/`` with the full path or relative path of the ``Curie_BSP``:
|
||||
```
|
||||
python setup.py <path of Curie_BSP>
|
||||
```
|
||||
|
||||
##### 2. One time setup. It will check/download/install the necessary tools, and must be run only once.
|
||||
In the directory ``Curie_BSP``
|
||||
```
|
||||
make -C wearable_device_sw/projects/curie_bsp_jerry/ one_time_setup
|
||||
```
|
||||
|
||||
##### 3. In the directory ``Curie_BSP``
|
||||
```
|
||||
mkdir out && cd $_
|
||||
make -f ../wearable_device_sw/projects/curie_bsp_jerry/Makefile setup
|
||||
make image
|
||||
```
|
||||
|
||||
##### 4. Connect JTAG Debugger and TTL Serial Cable to Arduino 101 as below:
|
||||

|
||||
|
||||
##### 5. Flash the firmware
|
||||
```
|
||||
make flash FLASH_CONFIG=jtag_full
|
||||
```
|
||||
|
||||
|
||||
#### 4. Serial terminal
|
||||
Assume the serial port is ``ttyUSB0`` in ``/dev`` directory, we can type command ``screen ttyUSB0 115200`` to open a serial terminal.
|
||||
|
||||
After the board boot successfully, you should see something like this:
|
||||
```
|
||||
Quark SE ID 16 Rev 0 A0
|
||||
ARC Core state: 0000400
|
||||
BOOT TARGET: 0
|
||||
6135|QRK| CFW| INFO| GPIO service init in progress..
|
||||
6307|ARC|MAIN| INFO| BSP init done
|
||||
6315|ARC| CFW| INFO| ADC service init in progress..
|
||||
6315|ARC| CFW| INFO| GPIO service init in progress...
|
||||
6315|ARC| CFW| INFO| GPIO service init in progress...
|
||||
6315|ARC|MAIN| INFO| CFW init done
|
||||
```
|
||||
To test the JavaScript command, you should add characters ``js e `` to the beginning of the JavaScript command, like this:
|
||||
``js e print ('Hello World!');``
|
||||
|
||||
It is the uart command format of Curie BSP. `js` is cmd group, `e` is cmd name, which is short for eval, and `print ('Hello World!');` is the cmd parameters, which is the JavaScript code we want to run.
|
||||
|
||||
You can see the result through the screen:
|
||||
```
|
||||
js e print ('Hello World!');js e 1 ACK
|
||||
Hello World!
|
||||
undefined
|
||||
js e 1 OK
|
||||
```
|
||||
|
||||
`js e 1 ACK` and `js e 1 OK` are debug info of Curie BSP uart commands, which mean it receive and execute the command sucessfully. `Hello World!` is the printed content. `undefined` is the return value of the statement `print ('Hello World!')`.
|
BIN
third_party/jerryscript/targets/curie_bsp/image/connect.png
vendored
Normal file
BIN
third_party/jerryscript/targets/curie_bsp/image/connect.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 575 KiB |
18
third_party/jerryscript/targets/curie_bsp/include/inttypes.h
vendored
Normal file
18
third_party/jerryscript/targets/curie_bsp/include/inttypes.h
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef INTTYPES_H
|
||||
#define INTTYPES_H
|
||||
|
||||
#endif /* !INTTYPES_H */
|
25
third_party/jerryscript/targets/curie_bsp/include/setjmp.h
vendored
Normal file
25
third_party/jerryscript/targets/curie_bsp/include/setjmp.h
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef SETJMP_H
|
||||
#define SETJMP_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
typedef uint64_t jmp_buf[14];
|
||||
|
||||
extern int setjmp (jmp_buf env);
|
||||
extern void longjmp (jmp_buf env, int val);
|
||||
|
||||
#endif /* !SETJMP_H */
|
16
third_party/jerryscript/targets/curie_bsp/jerry_app/arc/defconfig
vendored
Normal file
16
third_party/jerryscript/targets/curie_bsp/jerry_app/arc/defconfig
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
CONFIG_AUTO_SERVICE_INIT=y
|
||||
CONFIG_CFW_PROXY=y
|
||||
CONFIG_CFW_QUARK_SE_HELPERS=y
|
||||
CONFIG_LOG_SLAVE=y
|
||||
CONFIG_MEM_POOL_DEF_PATH="$(PROJECT_PATH)/arc"
|
||||
CONFIG_OS_ZEPHYR=y
|
||||
CONFIG_SERVICES_QUARK_SE_ADC_IMPL=y
|
||||
CONFIG_SERVICES_QUARK_SE_GPIO_IMPL=y
|
||||
CONFIG_SOC_GPIO_AON=y
|
||||
CONFIG_SOC_GPIO=y
|
||||
CONFIG_SS_ADC=y
|
||||
CONFIG_SS_GPIO=y
|
||||
CONFIG_TCMD_SLAVE=y
|
||||
CONFIG_TCMD=y
|
||||
CONFIG_ZEPHYR_BOARD="arduino_101_sss"
|
||||
CONFIG_CONSOLE_HANDLER_SHELL=y
|
35
third_party/jerryscript/targets/curie_bsp/jerry_app/arc/main.c
vendored
Normal file
35
third_party/jerryscript/targets/curie_bsp/jerry_app/arc/main.c
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* infra */
|
||||
#include "infra/log.h"
|
||||
#include "infra/bsp.h"
|
||||
#include "infra/xloop.h"
|
||||
#include "cfw/cfw.h"
|
||||
|
||||
static xloop_t loop;
|
||||
|
||||
void main (void)
|
||||
{
|
||||
T_QUEUE queue = bsp_init ();
|
||||
|
||||
pr_info (LOG_MODULE_MAIN, "BSP init done");
|
||||
|
||||
cfw_init (queue);
|
||||
pr_info (LOG_MODULE_MAIN, "CFW init done");
|
||||
|
||||
xloop_init_from_queue (&loop, queue);
|
||||
|
||||
xloop_run (&loop);
|
||||
}
|
36
third_party/jerryscript/targets/curie_bsp/jerry_app/arc/memory_pool_list.def
vendored
Normal file
36
third_party/jerryscript/targets/curie_bsp/jerry_app/arc/memory_pool_list.def
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Definition of the memory pools used by balloc/bfree:
|
||||
* DECLARE_MEMORY_POOL( <index>, <size>, <count>, <align> )
|
||||
* <index> : must start at 0 and be of consecutive values *
|
||||
* <size> : size in bytes of each block from the pool
|
||||
* <count> : number of blocks in the pool
|
||||
*
|
||||
* * Pool definitions must be sorted according the block size
|
||||
* value: pool with <index> 0 must have the smallest <size>.
|
||||
*/
|
||||
|
||||
DECLARE_MEMORY_POOL(0,8,32)
|
||||
DECLARE_MEMORY_POOL(1,16,32)
|
||||
DECLARE_MEMORY_POOL(2,32,48)
|
||||
DECLARE_MEMORY_POOL(3,64,16)
|
||||
DECLARE_MEMORY_POOL(4,96,24)
|
||||
DECLARE_MEMORY_POOL(5,128,6)
|
||||
DECLARE_MEMORY_POOL(6,256,5)
|
||||
DECLARE_MEMORY_POOL(7,512,1)
|
||||
|
||||
#undef DECLARE_MEMORY_POOL
|
30
third_party/jerryscript/targets/curie_bsp/jerry_app/include/project_mapping.h
vendored
Normal file
30
third_party/jerryscript/targets/curie_bsp/jerry_app/include/project_mapping.h
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Allow project to override this partition scheme
|
||||
* The following variables are allowed to be defined:
|
||||
*
|
||||
* QUARK_START_PAGE the first page where the QUARK code is located
|
||||
* QUARK_NB_PAGE the number of pages reserved for the QUARK. The ARC gets the
|
||||
* remaining pages (out of 148).
|
||||
*/
|
||||
#ifndef PROJECT_MAPPING_H
|
||||
#define PROJECT_MAPPING_H
|
||||
|
||||
#define QUARK_NB_PAGE 125
|
||||
#include "machine/soc/intel/quark_se/quark_se_mapping.h"
|
||||
|
||||
#endif /* !PROJECT_MAPPING_H */
|
35
third_party/jerryscript/targets/curie_bsp/jerry_app/quark/defconfig
vendored
Normal file
35
third_party/jerryscript/targets/curie_bsp/jerry_app/quark/defconfig
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
CONFIG_AUTO_SERVICE_INIT=y
|
||||
CONFIG_CFW_QUARK_SE_HELPERS=y
|
||||
CONFIG_CONSOLE_MANAGER=y
|
||||
CONFIG_DEBUG_PANIC_TCMD=y
|
||||
CONFIG_FACTORY_DATA_WRITE=y
|
||||
CONFIG_FACTORY_DATA=y
|
||||
CONFIG_INTEL_QRK_AON_PT=y
|
||||
CONFIG_INTEL_QRK_RTC=y
|
||||
CONFIG_INTEL_QRK_SPI=y
|
||||
CONFIG_INTEL_QRK_WDT=y
|
||||
CONFIG_LOG_CBUFFER_SIZE=2048
|
||||
CONFIG_LOG_CBUFFER=y
|
||||
CONFIG_MEMORY_POOLS_BALLOC_STATISTICS=y
|
||||
CONFIG_MEMORY_POOLS_BALLOC_TRACK_OWNER=y
|
||||
CONFIG_MEM_POOL_DEF_PATH="$(PROJECT_PATH)/quark"
|
||||
CONFIG_OS_ZEPHYR=y
|
||||
CONFIG_PANIC_ON_BUS_ERROR=y
|
||||
CONFIG_QUARK_SE_PROPERTIES_STORAGE=y
|
||||
CONFIG_QUARK=y
|
||||
CONFIG_SERVICES_QUARK_SE_ADC=y
|
||||
CONFIG_SERVICES_QUARK_SE_GPIO_IMPL=y
|
||||
CONFIG_SERVICES_QUARK_SE_GPIO=y
|
||||
CONFIG_SOC_FLASH=y
|
||||
CONFIG_SOC_GPIO_32=y
|
||||
CONFIG_SOC_GPIO=y
|
||||
CONFIG_SOC_ROM=y
|
||||
CONFIG_SPI_FLASH_W25Q16DV=y
|
||||
CONFIG_STORAGE_TASK=y
|
||||
CONFIG_TCMD_CONSOLE=y
|
||||
CONFIG_TCMD_MASTER=y
|
||||
CONFIG_TCMD=y
|
||||
CONFIG_UART_NS16550=y
|
||||
CONFIG_UART_PM_NS16550=y
|
||||
CONFIG_ZEPHYR_BOARD="arduino_101"
|
||||
CONFIG_CONSOLE_HANDLER_SHELL=y
|
167
third_party/jerryscript/targets/curie_bsp/jerry_app/quark/main.c
vendored
Normal file
167
third_party/jerryscript/targets/curie_bsp/jerry_app/quark/main.c
vendored
Normal file
|
@ -0,0 +1,167 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Infra */
|
||||
#include "infra/bsp.h"
|
||||
#include "infra/reboot.h"
|
||||
#include "infra/log.h"
|
||||
#include "infra/time.h"
|
||||
#include "infra/system_events.h"
|
||||
#include "infra/tcmd/handler.h"
|
||||
|
||||
#include "cfw/cfw.h"
|
||||
/* Watchdog helper */
|
||||
#include "infra/wdt_helper.h"
|
||||
|
||||
#include "jerry-api.h"
|
||||
#include "string.h"
|
||||
#include "jerry-port.h"
|
||||
|
||||
#include "zephyr.h"
|
||||
#include "microkernel/task.h"
|
||||
#include "os/os.h"
|
||||
|
||||
static T_QUEUE queue;
|
||||
|
||||
jerry_value_t print_function;
|
||||
|
||||
void jerry_resolve_error (jerry_value_t ret_value)
|
||||
{
|
||||
if (jerry_value_has_error_flag (ret_value))
|
||||
{
|
||||
jerry_value_clear_error_flag (&ret_value);
|
||||
jerry_value_t err_str_val = jerry_value_to_string (ret_value);
|
||||
jerry_size_t err_str_size = jerry_get_string_size (err_str_val);
|
||||
jerry_char_t *err_str_buf = (jerry_char_t *) balloc (err_str_size, NULL);
|
||||
jerry_size_t sz = jerry_string_to_char_buffer (err_str_val, err_str_buf, err_str_size);
|
||||
err_str_buf[sz] = 0;
|
||||
jerry_port_console ("Script Error: unhandled exception: %s\n", err_str_buf);
|
||||
bfree(err_str_buf);
|
||||
jerry_release_value (err_str_val);
|
||||
}
|
||||
}
|
||||
|
||||
void help ()
|
||||
{
|
||||
jerry_port_console ("Usage:\n");
|
||||
jerry_port_console ("js e 'JavaScript Command'\n");
|
||||
jerry_port_console ("eg. js e print ('Hello World');\n");
|
||||
}
|
||||
|
||||
void eval_jerry_script (int argc, char *argv[], struct tcmd_handler_ctx *ctx)
|
||||
{
|
||||
if (argc < 3)
|
||||
{
|
||||
TCMD_RSP_ERROR (ctx, NULL);
|
||||
help ();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
OS_ERR_TYPE err;
|
||||
size_t str_total_length = 0;
|
||||
size_t *str_lens = (size_t *) balloc ((argc - 2) * sizeof(size_t), &err);
|
||||
if (str_lens == NULL || err != E_OS_OK)
|
||||
{
|
||||
jerry_port_console ("%s: allocate memory failed!", __func__);
|
||||
TCMD_RSP_ERROR (ctx, NULL);
|
||||
return;
|
||||
}
|
||||
for (int i = 2; i < argc; ++i)
|
||||
{
|
||||
str_lens[i - 2] = strlen (argv[i]);
|
||||
str_total_length += str_lens[i - 2] + 1;
|
||||
}
|
||||
err = E_OS_OK;
|
||||
char *buffer = (char *) balloc (str_total_length, &err);
|
||||
if (buffer == NULL || err != E_OS_OK)
|
||||
{
|
||||
jerry_port_console ("%s: allocate memory failed!", __func__);
|
||||
TCMD_RSP_ERROR (ctx, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
char *p = buffer;
|
||||
for (int i = 2; i < argc; ++i)
|
||||
{
|
||||
for (int j =0; j < str_lens[i - 2]; ++j)
|
||||
{
|
||||
*p = argv[i][j];
|
||||
++p;
|
||||
}
|
||||
*p = ' ';
|
||||
++p;
|
||||
}
|
||||
*p = '\0';
|
||||
|
||||
jerry_value_t eval_ret = jerry_eval (buffer, str_total_length - 1, false);
|
||||
|
||||
if (jerry_value_has_error_flag (eval_ret))
|
||||
{
|
||||
jerry_resolve_error (eval_ret);
|
||||
TCMD_RSP_ERROR (ctx, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
jerry_value_t args[] = {eval_ret};
|
||||
jerry_value_t ret_val_print = jerry_call_function (print_function,
|
||||
jerry_create_undefined (),
|
||||
args,
|
||||
1);
|
||||
jerry_release_value (ret_val_print);
|
||||
TCMD_RSP_FINAL (ctx, NULL);
|
||||
}
|
||||
jerry_release_value (eval_ret);
|
||||
bfree (buffer);
|
||||
bfree (str_lens);
|
||||
}
|
||||
}
|
||||
|
||||
void jerry_start ()
|
||||
{
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
jerry_value_t global_obj_val = jerry_get_global_object ();
|
||||
jerry_value_t print_func_name_val = jerry_create_string ((jerry_char_t *) "print");
|
||||
print_function = jerry_get_property (global_obj_val, print_func_name_val);
|
||||
jerry_release_value (print_func_name_val);
|
||||
jerry_release_value (global_obj_val);
|
||||
}
|
||||
|
||||
/* Application main entry point */
|
||||
void main_task (void *param)
|
||||
{
|
||||
/* Init BSP (also init BSP on ARC core) */
|
||||
queue = bsp_init ();
|
||||
/* start Quark watchdog */
|
||||
wdt_start (WDT_MAX_TIMEOUT_MS);
|
||||
/* Init the CFW */
|
||||
cfw_init (queue);
|
||||
jerry_start ();
|
||||
/* Loop to process message queue */
|
||||
while (1)
|
||||
{
|
||||
OS_ERR_TYPE err = E_OS_OK;
|
||||
/* Process message with a given timeout */
|
||||
queue_process_message_wait (queue, 5000, &err);
|
||||
/* Acknowledge the system watchdog to prevent panic and reset */
|
||||
wdt_keepalive ();
|
||||
}
|
||||
}
|
||||
|
||||
DECLARE_TEST_COMMAND (js, e, eval_jerry_script);
|
36
third_party/jerryscript/targets/curie_bsp/jerry_app/quark/memory_pool_list.def
vendored
Normal file
36
third_party/jerryscript/targets/curie_bsp/jerry_app/quark/memory_pool_list.def
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Definition of the memory pools used by balloc/bfree:
|
||||
* DECLARE_MEMORY_POOL( <index>, <size>, <count>, <align> )
|
||||
* <index> : must start at 0 and be of consecutive values *
|
||||
* <size> : size in bytes of each block from the pool
|
||||
* <count> : number of blocks in the pool
|
||||
*
|
||||
* * Pool definitions must be sorted according the block size
|
||||
* value: pool with <index> 0 must have the smallest <size>.
|
||||
*/
|
||||
|
||||
DECLARE_MEMORY_POOL(0,8,32)
|
||||
DECLARE_MEMORY_POOL(1,16,64)
|
||||
DECLARE_MEMORY_POOL(2,32,64)
|
||||
DECLARE_MEMORY_POOL(3,64,48)
|
||||
DECLARE_MEMORY_POOL(4,128,8)
|
||||
DECLARE_MEMORY_POOL(5,256,4)
|
||||
DECLARE_MEMORY_POOL(6,512,3)
|
||||
DECLARE_MEMORY_POOL(7,4096,1)
|
||||
|
||||
#undef DECLARE_MEMORY_POOL
|
252
third_party/jerryscript/targets/curie_bsp/setup.py
vendored
Executable file
252
third_party/jerryscript/targets/curie_bsp/setup.py
vendored
Executable file
|
@ -0,0 +1,252 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2016 Intel Corporation
|
||||
# Copyright 2016 Samsung Electronics Co., Ltd.
|
||||
# Copyright 2016 University of Szeged
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
import fnmatch
|
||||
import os
|
||||
|
||||
def build_soft_links(project_path, jerry_path):
|
||||
""" Creates soft links into the @project_path. """
|
||||
|
||||
if not os.path.exists(project_path):
|
||||
os.makedirs(project_path)
|
||||
|
||||
links = [
|
||||
{ # arc
|
||||
'src': os.path.join('targets', 'curie_bsp', 'jerry_app', 'arc'),
|
||||
'link_name': 'arc'
|
||||
},
|
||||
{ # include
|
||||
'src': os.path.join('targets', 'curie_bsp', 'jerry_app', 'include'),
|
||||
'link_name': 'include'
|
||||
},
|
||||
{ # quark
|
||||
'src': os.path.join('targets', 'curie_bsp', 'jerry_app', 'quark'),
|
||||
'link_name': 'quark'
|
||||
},
|
||||
{ # quark/jerryscript
|
||||
'src': jerry_path,
|
||||
'link_name': os.path.join('quark', 'jerryscript')
|
||||
}
|
||||
]
|
||||
|
||||
for link in links:
|
||||
src = os.path.join(jerry_path, link['src'])
|
||||
link_name = os.path.join(project_path, link['link_name'])
|
||||
if not os.path.islink(link_name):
|
||||
os.symlink(src, link_name)
|
||||
print("Created symlink '{link_name}' -> '{src}'".format(src=src, link_name=link_name))
|
||||
|
||||
|
||||
def find_sources(root_dir, sub_dir):
|
||||
"""
|
||||
Find .c and .S files inside the @root_dir/@sub_dir directory.
|
||||
Note: the returned paths will be relative to the @root_dir directory.
|
||||
"""
|
||||
src_dir = os.path.join(root_dir, sub_dir)
|
||||
|
||||
matches = []
|
||||
for root, dirnames, filenames in os.walk(src_dir):
|
||||
for filename in fnmatch.filter(filenames, '*.[c|S]'):
|
||||
file_path = os.path.join(root, filename)
|
||||
relative_path = os.path.relpath(file_path, root_dir)
|
||||
matches.append(relative_path)
|
||||
|
||||
return matches
|
||||
|
||||
|
||||
def build_jerry_data(jerry_path):
|
||||
"""
|
||||
Build up a dictionary which contains the following items:
|
||||
- sources: list of JerryScript sources which should be built.
|
||||
- dirs: list of JerryScript dirs used.
|
||||
- cflags: CFLAGS for the build.
|
||||
"""
|
||||
jerry_sources = []
|
||||
jerry_dirs = set()
|
||||
for sub_dir in ['jerry-core', 'jerry-libm', os.path.join('targets', 'curie_bsp', 'source')]:
|
||||
for file in find_sources(os.path.normpath(jerry_path), sub_dir):
|
||||
path = os.path.join('jerryscript', file)
|
||||
jerry_sources.append(path)
|
||||
jerry_dirs.add(os.path.split(path)[0])
|
||||
|
||||
jerry_cflags = [
|
||||
'-DCONFIG_MEM_HEAP_AREA_SIZE=10*1024',
|
||||
'-DJERRY_NDEBUG',
|
||||
'-DJERRY_DISABLE_HEAVY_DEBUG',
|
||||
'-DCONFIG_DISABLE_NUMBER_BUILTIN',
|
||||
'-DCONFIG_DISABLE_STRING_BUILTIN',
|
||||
'-DCONFIG_DISABLE_BOOLEAN_BUILTIN',
|
||||
#'-DCONFIG_DISABLE_ERROR_BUILTINS',
|
||||
'-DCONFIG_DISABLE_ARRAY_BUILTIN',
|
||||
'-DCONFIG_DISABLE_MATH_BUILTIN',
|
||||
'-DCONFIG_DISABLE_JSON_BUILTIN',
|
||||
'-DCONFIG_DISABLE_DATE_BUILTIN',
|
||||
'-DCONFIG_DISABLE_REGEXP_BUILTIN',
|
||||
'-DCONFIG_DISABLE_ANNEXB_BUILTIN',
|
||||
'-DCONFIG_ECMA_LCACHE_DISABLE',
|
||||
'-DCONFIG_ECMA_PROPERTY_HASHMAP_DISABLE',
|
||||
]
|
||||
|
||||
return {
|
||||
'sources': jerry_sources,
|
||||
'dirs': jerry_dirs,
|
||||
'cflags': jerry_cflags,
|
||||
}
|
||||
|
||||
|
||||
def write_file(path, content):
|
||||
""" Writes @content into the file at specified by the @path. """
|
||||
norm_path = os.path.normpath(path)
|
||||
with open(norm_path, "w+") as f:
|
||||
f.write(content)
|
||||
print("Wrote file '{0}'".format(norm_path))
|
||||
|
||||
|
||||
def build_obj_y(source_list):
|
||||
"""
|
||||
Build obj-y additions from the @source_list.
|
||||
Note: the input sources should have their file extensions.
|
||||
"""
|
||||
return '\n'.join(['obj-y += {0}.o'.format(os.path.splitext(fname)[0]) for fname in source_list])
|
||||
|
||||
|
||||
def build_cflags_y(cflags_list):
|
||||
"""
|
||||
Build cflags-y additions from the @cflags_list.
|
||||
Note: the input sources should have their file extensions.
|
||||
"""
|
||||
return '\n'.join(['cflags-y += {0}'.format(cflag) for cflag in cflags_list])
|
||||
|
||||
|
||||
def build_mkdir(dir_list):
|
||||
""" Build mkdir calls for each dir in the @dir_list. """
|
||||
return '\n'.join(['\t$(AT)mkdir -p {0}'.format(os.path.join('$(OUT_SRC)', path)) for path in dir_list])
|
||||
|
||||
|
||||
def create_root_kbuild(project_path):
|
||||
""" Creates @project_path/Kbuild.mk file. """
|
||||
|
||||
root_kbuild_path = os.path.join(project_path, 'Kbuild.mk')
|
||||
root_kbuild_content = '''
|
||||
obj-$(CONFIG_QUARK_SE_ARC) += arc/
|
||||
obj-$(CONFIG_QUARK_SE_QUARK) += quark/
|
||||
'''
|
||||
write_file(root_kbuild_path, root_kbuild_content)
|
||||
|
||||
|
||||
def create_root_makefile(project_path):
|
||||
""" Creates @project_path/Makefile file. """
|
||||
|
||||
root_makefile_path = os.path.join(project_path, 'Makefile')
|
||||
root_makefile_content = '''
|
||||
THIS_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
|
||||
T := $(abspath $(THIS_DIR)/../..)
|
||||
PROJECT := {project_name}
|
||||
BOARD := curie_101
|
||||
ifeq ($(filter curie_101, $(BOARD)),)
|
||||
$(error The curie jerry sample application can only run on the curie_101 Board)
|
||||
endif
|
||||
BUILDVARIANT ?= debug
|
||||
quark_DEFCONFIG = $(PROJECT_PATH)/quark/defconfig
|
||||
arc_DEFCONFIG = $(PROJECT_PATH)/arc/defconfig
|
||||
|
||||
# Optional: set the default version
|
||||
VERSION_MAJOR := 1
|
||||
VERSION_MINOR := 0
|
||||
VERSION_PATCH := 0
|
||||
include $(T)/build/project.mk
|
||||
'''.format(project_name=project_name)
|
||||
|
||||
write_file(root_makefile_path, root_makefile_content)
|
||||
|
||||
|
||||
def create_arc_kbuild(project_path):
|
||||
""" Creates @project_path/arc/Kbuild.mk file. """
|
||||
|
||||
arc_path = os.path.join(project_path, 'arc')
|
||||
arc_kbuild_path = os.path.join(arc_path, 'Kbuild.mk')
|
||||
arc_sources = find_sources(arc_path, '.')
|
||||
arc_kbuild_content = build_obj_y(arc_sources)
|
||||
|
||||
write_file(arc_kbuild_path, arc_kbuild_content)
|
||||
|
||||
|
||||
def create_quark_kbuild(project_path, jerry_path):
|
||||
""" Creates @project_path/quark/Kbuild.mk file. """
|
||||
quark_kbuild_path = os.path.join(project_path, 'quark', 'Kbuild.mk')
|
||||
|
||||
# Extract a few JerryScript related data
|
||||
jerry_data = build_jerry_data(jerry_path)
|
||||
jerry_objects = build_obj_y(jerry_data['sources'])
|
||||
jerry_defines = jerry_data['cflags']
|
||||
jerry_build_dirs = build_mkdir(jerry_data['dirs'])
|
||||
|
||||
quark_include_paths = [
|
||||
'include',
|
||||
'jerryscript',
|
||||
os.path.join('jerryscript', 'jerry-libm', 'include'),
|
||||
os.path.join('jerryscript', 'targets' ,'curie_bsp', 'include')
|
||||
] + list(jerry_data['dirs'])
|
||||
|
||||
quark_includes = [
|
||||
'-Wno-error',
|
||||
] + ['-I%s' % os.path.join(project_path, 'quark', path) for path in quark_include_paths]
|
||||
|
||||
quark_cflags = build_cflags_y(jerry_defines + quark_includes)
|
||||
|
||||
quark_kbuild_content = '''
|
||||
{cflags}
|
||||
|
||||
obj-y += main.o
|
||||
{objects}
|
||||
|
||||
build_dirs:
|
||||
{dirs}
|
||||
|
||||
$(OUT_SRC): build_dirs
|
||||
'''.format(objects=jerry_objects, cflags=quark_cflags, dirs=jerry_build_dirs)
|
||||
|
||||
write_file(quark_kbuild_path, quark_kbuild_content)
|
||||
|
||||
|
||||
def main(curie_path, project_name, jerry_path):
|
||||
project_path = os.path.join(curie_path, 'wearable_device_sw', 'projects', project_name)
|
||||
|
||||
build_soft_links(project_path, jerry_path)
|
||||
|
||||
create_root_kbuild(project_path)
|
||||
create_root_makefile(project_path)
|
||||
create_arc_kbuild(project_path)
|
||||
create_quark_kbuild(project_path, jerry_path)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import sys
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print('Usage:')
|
||||
print('{script_name} [full or relative path of Curie_BSP]'.format(script_name=sys.argv[0]))
|
||||
sys.exit(1)
|
||||
|
||||
project_name = 'curie_bsp_jerry'
|
||||
|
||||
file_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
jerry_path = os.path.join(file_dir, "..", "..")
|
||||
curie_path = os.path.join(os.getcwd(), sys.argv[1])
|
||||
|
||||
main(curie_path, project_name, jerry_path)
|
93
third_party/jerryscript/targets/curie_bsp/source/curie-bsp-port.c
vendored
Normal file
93
third_party/jerryscript/targets/curie_bsp/source/curie-bsp-port.c
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
/* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <infra/time.h>
|
||||
#include <misc/printk.h>
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include "jerry-port.h"
|
||||
|
||||
/**
|
||||
* Provide console message implementation for the engine.
|
||||
* Curie BSP implementation
|
||||
*/
|
||||
void
|
||||
jerry_port_console (const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
char buf[256];
|
||||
int length = 0;
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
length = vsnprintf (buf, 256, format, args);
|
||||
buf[length] = '\0';
|
||||
printk ("%s", buf);
|
||||
va_end (args);
|
||||
} /* jerry_port_console */
|
||||
|
||||
/**
|
||||
* Provide log message implementation for the engine.
|
||||
* Curie BSP implementation
|
||||
*/
|
||||
void
|
||||
jerry_port_log (jerry_log_level_t level, /**< log level */
|
||||
const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
if (level <= JERRY_LOG_LEVEL_ERROR)
|
||||
{
|
||||
char buf[256];
|
||||
int length = 0;
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
length = vsnprintf (buf, 256, format, args);
|
||||
buf[length] = '\0';
|
||||
printk ("%s", buf);
|
||||
va_end (args);
|
||||
}
|
||||
} /* jerry_port_log */
|
||||
|
||||
/**
|
||||
* Curie BSP implementation of jerry_port_fatal.
|
||||
*/
|
||||
void jerry_port_fatal (jerry_fatal_code_t code)
|
||||
{
|
||||
jerry_port_log (JERRY_LOG_LEVEL_ERROR, "Jerry Fatal Error!\n");
|
||||
while (true);
|
||||
} /* jerry_port_fatal */
|
||||
|
||||
/**
|
||||
* Curie BSP implementation of jerry_port_get_time_zone.
|
||||
*/
|
||||
bool jerry_port_get_time_zone (jerry_time_zone_t *tz_p)
|
||||
{
|
||||
//EMPTY implementation
|
||||
tz_p->offset = 0;
|
||||
tz_p->daylight_saving_time = 0;
|
||||
|
||||
return true;
|
||||
} /* jerry_port_get_time_zone */
|
||||
|
||||
/**
|
||||
* Curie BSP implementation of jerry_port_get_current_time.
|
||||
*/
|
||||
double jerry_port_get_current_time ()
|
||||
{
|
||||
uint32_t uptime_ms = get_uptime_ms ();
|
||||
uint32_t epoch_time = uptime_to_epoch (uptime_ms);
|
||||
|
||||
return ((double) epoch_time) * 1000.0;
|
||||
} /* jerry_port_get_current_time */
|
78
third_party/jerryscript/targets/curie_bsp/source/setjmp.S
vendored
Normal file
78
third_party/jerryscript/targets/curie_bsp/source/setjmp.S
vendored
Normal file
|
@ -0,0 +1,78 @@
|
|||
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 Intel Corporation
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
.macro func _name
|
||||
.global \_name
|
||||
.type \_name, %function
|
||||
\_name:
|
||||
.endm
|
||||
.macro endfunc _name
|
||||
.size \_name, .-\_name
|
||||
.endm
|
||||
|
||||
/**
|
||||
* setjmp (jmp_buf env)
|
||||
*
|
||||
* See also:
|
||||
* longjmp
|
||||
*
|
||||
* @return 0 - if returns from direct call,
|
||||
* nonzero - if returns after longjmp.
|
||||
*/
|
||||
func setjmp
|
||||
mov %eax,(%eax);
|
||||
mov %ebx,0x4(%eax);
|
||||
mov %ecx,0x8(%eax);
|
||||
mov %edx,0xc(%eax);
|
||||
mov %esi,0x10(%eax);
|
||||
mov %edi,0x14(%eax);
|
||||
mov %ebp,0x18(%eax);
|
||||
mov %esp,0x1c(%eax);
|
||||
push %edx;
|
||||
mov 0x4(%esp),%edx;
|
||||
mov %edx,0x20(%eax);
|
||||
pop %edx;
|
||||
xor %eax,%eax;
|
||||
ret
|
||||
endfunc setjmp
|
||||
|
||||
/**
|
||||
* longjmp (jmp_buf env, int val)
|
||||
*
|
||||
* Note:
|
||||
* if val is not 0, then it would be returned from setjmp,
|
||||
* otherwise - 0 would be returned.
|
||||
*
|
||||
* See also:
|
||||
* setjmp
|
||||
*/
|
||||
func longjmp
|
||||
test %edx, %edx;
|
||||
jne . + 0x3;
|
||||
inc %edx;
|
||||
mov 0x4(%eax),%ebx;
|
||||
mov 0x8(%eax),%ecx;
|
||||
mov 0x10(%eax),%esi;
|
||||
mov 0x14(%eax),%edi;
|
||||
mov 0x18(%eax),%ebp;
|
||||
mov 0x1c(%eax),%esp;
|
||||
push %edx;
|
||||
mov 0x20(%eax),%edx;
|
||||
mov %edx,0x4(%esp);
|
||||
mov 0xc(%eax),%edx;
|
||||
pop %eax;
|
||||
ret
|
||||
endfunc longjmp
|
58
third_party/jerryscript/targets/default/jerry-port-default-date.c
vendored
Normal file
58
third_party/jerryscript/targets/default/jerry-port-default-date.c
vendored
Normal file
|
@ -0,0 +1,58 @@
|
|||
/* Copyright 2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "jerry-port.h"
|
||||
#include "jerry-port-default.h"
|
||||
|
||||
/**
|
||||
* Default implementation of jerry_port_get_time_zone.
|
||||
*/
|
||||
bool jerry_port_get_time_zone (jerry_time_zone_t *tz_p)
|
||||
{
|
||||
struct timeval tv;
|
||||
struct timezone tz;
|
||||
|
||||
/* gettimeofday may not fill tz, so zero-initializing */
|
||||
tz.tz_minuteswest = 0;
|
||||
tz.tz_dsttime = 0;
|
||||
|
||||
if (gettimeofday (&tv, &tz) != 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
tz_p->offset = tz.tz_minuteswest;
|
||||
tz_p->daylight_saving_time = tz.tz_dsttime > 0 ? 1 : 0;
|
||||
|
||||
return true;
|
||||
} /* jerry_port_get_time_zone */
|
||||
|
||||
/**
|
||||
* Default implementation of jerry_port_get_current_time.
|
||||
*/
|
||||
double jerry_port_get_current_time ()
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
if (gettimeofday (&tv, NULL) != 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return ((double) tv.tv_sec) * 1000.0 + ((double) tv.tv_usec) / 1000.0;
|
||||
} /* jerry_port_get_current_time */
|
62
third_party/jerryscript/targets/default/jerry-port-default-fatal.c
vendored
Normal file
62
third_party/jerryscript/targets/default/jerry-port-default-fatal.c
vendored
Normal file
|
@ -0,0 +1,62 @@
|
|||
/* Copyright 2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "jerry-port.h"
|
||||
#include "jerry-port-default.h"
|
||||
|
||||
static bool abort_on_fail = false;
|
||||
|
||||
/**
|
||||
* Sets whether 'abort' should be called instead of 'exit' upon exiting with
|
||||
* non-zero exit code in the default implementation of jerry_port_fatal.
|
||||
*/
|
||||
void jerry_port_default_set_abort_on_fail (bool flag) /**< new value of 'abort on fail' flag */
|
||||
{
|
||||
abort_on_fail = flag;
|
||||
} /* jerry_port_default_set_abort_on_fail */
|
||||
|
||||
/**
|
||||
* Check whether 'abort' should be called instead of 'exit' upon exiting with
|
||||
* non-zero exit code in the default implementation of jerry_port_fatal.
|
||||
*
|
||||
* @return true - if 'abort on fail' flag is set,
|
||||
* false - otherwise.
|
||||
*/
|
||||
bool jerry_port_default_is_abort_on_fail ()
|
||||
{
|
||||
return abort_on_fail;
|
||||
} /* jerry_port_default_is_abort_on_fail */
|
||||
|
||||
/**
|
||||
* Default implementation of jerry_port_fatal.
|
||||
*/
|
||||
void jerry_port_fatal (jerry_fatal_code_t code, /**< fatal code enum item, */
|
||||
void *lr) /**< return address at time failure occurred */
|
||||
{
|
||||
JERRY_UNUSED (lr);
|
||||
if (code != 0
|
||||
&& code != ERR_OUT_OF_MEMORY
|
||||
&& jerry_port_default_is_abort_on_fail ())
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
else
|
||||
{
|
||||
exit (code);
|
||||
}
|
||||
} /* jerry_port_fatal */
|
74
third_party/jerryscript/targets/default/jerry-port-default-io.c
vendored
Normal file
74
third_party/jerryscript/targets/default/jerry-port-default-io.c
vendored
Normal file
|
@ -0,0 +1,74 @@
|
|||
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "jerry-port.h"
|
||||
#include "jerry-port-default.h"
|
||||
|
||||
/**
|
||||
* Actual log level
|
||||
*/
|
||||
static jerry_log_level_t jerry_log_level = JERRY_LOG_LEVEL_ERROR;
|
||||
|
||||
/**
|
||||
* Get the log level
|
||||
*
|
||||
* @return current log level
|
||||
*/
|
||||
jerry_log_level_t
|
||||
jerry_port_default_get_log_level (void)
|
||||
{
|
||||
return jerry_log_level;
|
||||
} /* jerry_port_default_get_log_level */
|
||||
|
||||
/**
|
||||
* Set the log level
|
||||
*/
|
||||
void
|
||||
jerry_port_default_set_log_level (jerry_log_level_t level) /**< log level */
|
||||
{
|
||||
jerry_log_level = level;
|
||||
} /* jerry_port_default_set_log_level */
|
||||
|
||||
/**
|
||||
* Provide console message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_console (const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vfprintf (stdout, format, args);
|
||||
va_end (args);
|
||||
} /* jerry_port_console */
|
||||
|
||||
/**
|
||||
* Provide log message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_log (jerry_log_level_t level, /**< log level */
|
||||
const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
if (level <= jerry_log_level)
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vfprintf (stderr, format, args);
|
||||
va_end (args);
|
||||
}
|
||||
} /* jerry_port_log */
|
40
third_party/jerryscript/targets/default/jerry-port-default-mem.c
vendored
Normal file
40
third_party/jerryscript/targets/default/jerry-port-default-mem.c
vendored
Normal file
|
@ -0,0 +1,40 @@
|
|||
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "jerry-port.h"
|
||||
|
||||
#define JMEM_HEAP_INTERNAL
|
||||
|
||||
#ifndef JERRY_HEAP_SECTION_ATTR
|
||||
static jmem_heap_t jmem_heap;
|
||||
#else
|
||||
static jmem_heap_t jmem_heap __attribute__ ((section (JERRY_HEAP_SECTION_ATTR)));
|
||||
#endif
|
||||
|
||||
jmem_heap_t *jerry_port_init_heap(void) {
|
||||
memset(&jmem_heap, 0, sizeof(jmem_heap));
|
||||
return &jmem_heap;
|
||||
}
|
||||
|
||||
void jerry_port_finalize_heap(jmem_heap_t *jmem_heap) {
|
||||
return;
|
||||
}
|
||||
|
||||
jmem_heap_t *jerry_port_get_heap(void) {
|
||||
return &jmem_heap;
|
||||
}
|
||||
|
47
third_party/jerryscript/targets/default/jerry-port-default.h
vendored
Normal file
47
third_party/jerryscript/targets/default/jerry-port-default.h
vendored
Normal file
|
@ -0,0 +1,47 @@
|
|||
/* Copyright 2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef JERRY_PORT_DEFAULT_H
|
||||
#define JERRY_PORT_DEFAULT_H
|
||||
|
||||
#include "jerry-port.h"
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
{
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/** \addtogroup jerry_port_default Default Jerry engine port API
|
||||
* These functions are only available if the default port of Jerry is used.
|
||||
* @{
|
||||
*/
|
||||
|
||||
void jerry_port_default_set_abort_on_fail (bool);
|
||||
bool jerry_port_default_is_abort_on_fail (void);
|
||||
|
||||
jerry_log_level_t jerry_port_default_get_log_level (void);
|
||||
void jerry_port_default_set_log_level (jerry_log_level_t);
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
#endif /* !JERRY_PORT_DEFAULT_H */
|
56
third_party/jerryscript/targets/esp8266/LICENSE
vendored
Normal file
56
third_party/jerryscript/targets/esp8266/LICENSE
vendored
Normal file
|
@ -0,0 +1,56 @@
|
|||
Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
================================================================================
|
||||
|
||||
ESPRSSIF MIT License
|
||||
|
||||
Copyright (c) 2015 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
|
||||
|
||||
Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
|
||||
it is free of charge, to any person obtaining a copy of this software and associated
|
||||
documentation files (the ¡°Software¡±), to deal in the Software without restriction,
|
||||
including without limitation the rights to use, copy, modify, merge, publish, distribute,
|
||||
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
|
||||
is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or
|
||||
substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED ¡°AS IS¡±, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
|
||||
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
ÀÖöÎ MIT Ðí¿ÉÖ¤
|
||||
|
||||
°æÈ¨ (c) 2015 <ÀÖöÎÐÅÏ¢¿Æ¼¼£¨ÉϺ££©ÓÐÏÞ¹«Ë¾>
|
||||
|
||||
¸ÃÐí¿ÉÖ¤ÊÚȨ½öÏÞÓÚÀÖöÎÐÅÏ¢¿Æ¼¼ ESP8266 ²úÆ·µÄÓ¦Óÿª·¢¡£ÔÚ´ËÇé¿öÏ£¬¸ÃÐí¿ÉÖ¤Ãâ·ÑÊÚȨÈκλñµÃ¸Ã
|
||||
Èí¼þ¼°ÆäÏà¹ØÎĵµ£¨Í³³ÆÎª¡°Èí¼þ¡±£©µÄÈËÎÞÏÞÖÆµØ¾Óª¸ÃÈí¼þ£¬°üÀ¨ÎÞÏÞÖÆµÄʹÓᢸ´ÖÆ¡¢Ð޸ġ¢ºÏ²¢¡¢
|
||||
³ö°æ·¢ÐС¢É¢²¼¡¢ÔÙÊÚȨ¡¢¼°··ÊÛÈí¼þ¼°Èí¼þ¸±±¾µÄȨÀû¡£±»ÊÚȨÈËÔÚÏíÊÜÕâЩȨÀûµÄͬʱ£¬Ðè·þ´ÓÏÂÃæ
|
||||
µÄÌõ¼þ£º
|
||||
|
||||
ÔÚÈí¼þºÍÈí¼þµÄËùÓи±±¾Öж¼±ØÐë°üº¬ÒÔÉϵİæÈ¨ÉùÃ÷ºÍÊÚȨÉùÃ÷¡£
|
||||
|
||||
¸ÃÈí¼þ°´±¾À´µÄÑù×ÓÌṩ£¬Ã»ÓÐÈκÎÃ÷È·»ò°µº¬µÄµ£±££¬°üÀ¨µ«²»½öÏÞÓÚ¹ØÓÚÊÔÏúÐÔ¡¢ÊʺÏÄ³Ò»ÌØ¶¨ÓÃ;
|
||||
ºÍ·ÇÇÖȨµÄ±£Ö¤¡£×÷ÕߺͰæÈ¨³ÖÓÐÈËÔÚÈκÎÇé¿öϾù²»¾ÍÓÉÈí¼þ»òÈí¼þʹÓÃÒýÆðµÄÒÔºÏͬÐÎʽ¡¢ÃñÊÂÇÖȨ
|
||||
»òÆäËü·½Ê½Ìá³öµÄÈκÎË÷Åâ¡¢Ë𺦻òÆäËüÔðÈθºÔð¡£
|
||||
|
||||
|
||||
|
||||
|
146
third_party/jerryscript/targets/esp8266/Makefile
vendored
Normal file
146
third_party/jerryscript/targets/esp8266/Makefile
vendored
Normal file
|
@ -0,0 +1,146 @@
|
|||
# Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#############################################################
|
||||
# Required variables for each makefile
|
||||
# Discard this section from all parent makefiles
|
||||
# Expected variables (with automatic defaults):
|
||||
# CSRCS (all "C" files in the dir)
|
||||
# SUBDIRS (all subdirs with a Makefile)
|
||||
# GEN_LIBS - list of libs to be generated ()
|
||||
# GEN_IMAGES - list of object file images to be generated ()
|
||||
# GEN_BINS - list of binaries to be generated ()
|
||||
# COMPONENTS_xxx - a list of libs/objs in the form
|
||||
# subdir/lib to be extracted and rolled up into
|
||||
# a generated lib/image xxx.a ()
|
||||
#
|
||||
# Tabsize : 8
|
||||
#
|
||||
TARGET = eagle
|
||||
FLAVOR = release
|
||||
#FLAVOR = debug
|
||||
|
||||
#EXTRA_CCFLAGS += -u
|
||||
|
||||
ifndef PDIR # {
|
||||
GEN_IMAGES= eagle.app.v6.out
|
||||
GEN_BINS= eagle.app.v6.bin
|
||||
SPECIAL_MKTARGETS=$(APP_MKTARGETS)
|
||||
SUBDIRS= user
|
||||
endif # } PDIR
|
||||
|
||||
LDDIR = $(SDK_PATH)/ld
|
||||
|
||||
CCFLAGS += -Os
|
||||
#CCFLAGS += -O0
|
||||
|
||||
TARGET_LDFLAGS = \
|
||||
-nostdlib \
|
||||
-Wl,-EL \
|
||||
--longcalls \
|
||||
--text-section-literals
|
||||
|
||||
ifeq ($(FLAVOR),debug)
|
||||
TARGET_LDFLAGS += -O0
|
||||
endif
|
||||
|
||||
ifeq ($(FLAVOR),release)
|
||||
TARGET_LDFLAGS += -Os
|
||||
endif
|
||||
|
||||
COMPONENTS_eagle.app.v6 = \
|
||||
user/libuser.a \
|
||||
|
||||
|
||||
LINKFLAGS_eagle.app.v6 = \
|
||||
-L$(SDK_PATH)/lib \
|
||||
-Wl,--gc-sections \
|
||||
-Wl,-Map,output.map \
|
||||
-nostdlib \
|
||||
-T$(LD_FILE) \
|
||||
-Wl,--no-check-sections \
|
||||
-u call_user_start \
|
||||
-Wl,-static \
|
||||
-Wl,--start-group \
|
||||
-lminic \
|
||||
-lgcc \
|
||||
-lhal \
|
||||
-lphy \
|
||||
-lpp \
|
||||
-lnet80211 \
|
||||
-lwpa \
|
||||
-lmain \
|
||||
-lfreertos \
|
||||
-llwip \
|
||||
-L./libs \
|
||||
-ljerrycore \
|
||||
-ljerryentry \
|
||||
-ljerrylibm \
|
||||
$(DEP_LIBS_eagle.app.v6) \
|
||||
./libs/lib_a-setjmp.o \
|
||||
-Wl,--end-group
|
||||
|
||||
|
||||
DEPENDS_eagle.app.v6 = \
|
||||
$(LD_FILE) \
|
||||
$(LDDIR)/eagle.rom.addr.v6.ld \
|
||||
./source/jerry_targetjs.h \
|
||||
./libs/libjerrylibm.a \
|
||||
./libs/libjerrycore.a \
|
||||
./libs/libjerryentry.a
|
||||
|
||||
|
||||
#############################################################
|
||||
# Configuration i.e. compile options etc.
|
||||
# Target specific stuff (defines etc.) goes in here!
|
||||
# Generally values applying to a tree are captured in the
|
||||
# makefile at its root level - these are then overridden
|
||||
# for a subtree within the makefile rooted therein
|
||||
#
|
||||
|
||||
#UNIVERSAL_TARGET_DEFINES = \
|
||||
|
||||
# Other potential configuration flags include:
|
||||
# -DTXRX_TXBUF_DEBUG
|
||||
# -DTXRX_RXBUF_DEBUG
|
||||
# -DWLAN_CONFIG_CCX
|
||||
CONFIGURATION_DEFINES = -DICACHE_FLASH
|
||||
|
||||
DEFINES += \
|
||||
$(UNIVERSAL_TARGET_DEFINES) \
|
||||
$(CONFIGURATION_DEFINES)
|
||||
|
||||
DDEFINES += \
|
||||
$(UNIVERSAL_TARGET_DEFINES) \
|
||||
$(CONFIGURATION_DEFINES)
|
||||
|
||||
|
||||
#############################################################
|
||||
# Recursion Magic - Don't touch this!!
|
||||
#
|
||||
# Each subtree potentially has an include directory
|
||||
# corresponding to the common APIs applicable to modules
|
||||
# rooted at that subtree. Accordingly, the INCLUDE PATH
|
||||
# of a module can only contain the include directories up
|
||||
# its parent path, and not its siblings
|
||||
#
|
||||
# Required for each makefile to inherit from the parent
|
||||
#
|
||||
|
||||
INCLUDES := $(INCLUDES) -I $(PDIR)include -I $(PDIR)source
|
||||
sinclude $(SDK_PATH)/Makefile
|
||||
|
||||
.PHONY: FORCE
|
||||
|
||||
FORCE:
|
125
third_party/jerryscript/targets/esp8266/Makefile.esp8266
vendored
Normal file
125
third_party/jerryscript/targets/esp8266/Makefile.esp8266
vendored
Normal file
|
@ -0,0 +1,125 @@
|
|||
# Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# use TAB-8
|
||||
|
||||
CURDIR = `pwd`
|
||||
ESP_SDK_PATH ?= $(SDK_PATH)
|
||||
ESP_INC = $(ESP_SDK_PATH)/extra_include
|
||||
ESP_INC2 = $(ESP_SDK_PATH)/include
|
||||
ESP_LIB = $(ESP_SDK_PATH)/lib
|
||||
TYPE = release
|
||||
INTERM = build/obj-esp8266
|
||||
OUTPUT = build/bin/$(TYPE).esp8266
|
||||
SRCPATH = targets/esp8266/source
|
||||
COPYTARGET = targets/esp8266/libs
|
||||
USBDEVICE ?= /dev/ttyUSB0
|
||||
JERRYHEAP ?= 20
|
||||
ESPTOOL ?= /opt/Espressif/esptool-py/esptool.py
|
||||
|
||||
# compile flags
|
||||
ESP_CFLAGS := -D__TARGET_ESP8266 -D__attr_always_inline___=
|
||||
|
||||
MFORCE32 = `xtensa-lx106-elf-gcc --help=target | grep mforce-l32`
|
||||
|
||||
ifneq ($(MFORCE32),)
|
||||
# Your compiler supports the -mforce-l32 flag which means that
|
||||
# constants can be placed in ROM to free additional RAM
|
||||
ESP_CFLAGS += -DJERRY_CONST_DATA="__attribute__((aligned(4))) __attribute__((section(\".irom.text\")))"
|
||||
endif
|
||||
|
||||
ESP_CFLAGS += -Wl,-EL -fno-inline-functions
|
||||
ESP_CFLAGS += -ffunction-sections -fdata-sections
|
||||
ESP_CFLAGS += -mlongcalls -mtext-section-literals -mno-serialize-volatile
|
||||
ifneq ($(MFORCE32),)
|
||||
ESP_CFLAGS += -mforce-l32
|
||||
endif
|
||||
|
||||
# include path
|
||||
ESP_LIBS_INC :=$(CURDIR)/targets/esp8266/include
|
||||
ESP_LIBS_INC :=$(ESP_LIBS_INC);$(ESP_INC2)
|
||||
ESP_LIBS_INC :=$(ESP_LIBS_INC);$(ESP_INC2)/espressif
|
||||
ESP_LIBS_INC :=$(ESP_LIBS_INC);$(ESP_INC2)/freertos
|
||||
ESP_LIBS_INC :=$(ESP_LIBS_INC);$(ESP_INC2)/json
|
||||
ESP_LIBS_INC :=$(ESP_LIBS_INC);$(ESP_INC2)/lwip
|
||||
ESP_LIBS_INC :=$(ESP_LIBS_INC);$(ESP_INC2)/ssl
|
||||
|
||||
# jerry related source files
|
||||
JERRY_BUILD_FILES := $(SRCPATH)/jerry_extapi.c
|
||||
JERRY_BUILD_FILES := $(JERRY_BUILD_FILES);$(SRCPATH)/jerry_run.c
|
||||
|
||||
|
||||
.PHONY: jerry js2c mkbin check-env flash clean
|
||||
|
||||
|
||||
all: check-env jerry js2c mkbin
|
||||
|
||||
|
||||
jerry:
|
||||
mkdir -p $(INTERM)
|
||||
mkdir -p $(OUTPUT)
|
||||
mkdir -p $(COPYTARGET)
|
||||
cmake -B$(INTERM) -H./ \
|
||||
-DENABLE_LTO=OFF \
|
||||
-DENABLE_VALGRIND=OFF \
|
||||
-DCMAKE_TOOLCHAIN_FILE=build/configs/toolchain_external.cmake \
|
||||
-DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=xtensia-lx106 \
|
||||
-DEXTERNAL_CMAKE_C_COMPILER=xtensa-lx106-elf-gcc \
|
||||
-DEXTERNAL_CMAKE_C_COMPILER_ID=GNU \
|
||||
-DEXTERNAL_BUILD_ENTRY_FILE="$(JERRY_BUILD_FILES)" \
|
||||
-DEXTERNAL_COMPILE_FLAGS="$(ESP_CFLAGS)" \
|
||||
-DEXTERNAL_LIBC_INTERFACE="$(ESP_INC)" \
|
||||
-DEXTERNAL_LIBS_INTERFACE="$(ESP_LIBS_INC)" \
|
||||
-DEXTERNAL_MEM_HEAP_SIZE_KB=$(JERRYHEAP)
|
||||
|
||||
make -C $(INTERM) $(TYPE).external
|
||||
cp `cat $(INTERM)/$(TYPE).external/list` $(OUTPUT)/.
|
||||
cp $(OUTPUT)/lib$(TYPE).jerry-core.a $(COPYTARGET)/libjerrycore.a
|
||||
cp $(OUTPUT)/lib$(TYPE).jerry-libm.lib.a $(COPYTARGET)/libjerrylibm.a
|
||||
cp $(INTERM)/lib$(TYPE).external-entry.a $(OUTPUT)/.
|
||||
cp $(OUTPUT)/lib$(TYPE).external-entry.a $(COPYTARGET)/libjerryentry.a
|
||||
|
||||
|
||||
js2c:
|
||||
cd targets/esp8266; ../tools/js2c.py
|
||||
|
||||
|
||||
mkbin:
|
||||
cd targets/esp8266; \
|
||||
make clean; \
|
||||
BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=3 make; \
|
||||
BOOT=new APP=2 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=3 make
|
||||
|
||||
|
||||
check-env:
|
||||
ifndef SDK_PATH
|
||||
$(error SDK_PATH is undefined for ESP8266)
|
||||
endif
|
||||
ifndef BIN_PATH
|
||||
$(error BIN_PATH is undefined for ESP8266)
|
||||
endif
|
||||
|
||||
|
||||
flash:
|
||||
$(ESPTOOL) --port $(USBDEVICE) write_flash \
|
||||
0x00000 $(SDK_PATH)/bin/"boot_v1.4(b1).bin" \
|
||||
0x01000 $(BIN_PATH)/upgrade/user1.2048.new.3.bin \
|
||||
0x81000 $(BIN_PATH)/upgrade/user2.2048.new.3.bin \
|
||||
0x1FC000 $(SDK_PATH)/bin/esp_init_data_default.bin \
|
||||
0x1FE000 $(SDK_PATH)/bin/blank.bin
|
||||
|
||||
|
||||
clean:
|
||||
rm -rf $(INTERM)
|
||||
rm -rf $(OUTPUT)
|
75
third_party/jerryscript/targets/esp8266/docs/ESP-PATCHFORJERRYSCRIPT.md
vendored
Normal file
75
third_party/jerryscript/targets/esp8266/docs/ESP-PATCHFORJERRYSCRIPT.md
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
#### Apply patch to ESP8266 SDK
|
||||
|
||||
As `iram` is quite small to fit all the codes but linker tries to put it there.
|
||||
To force JerryScript codes to be placed at the `irom` section,
|
||||
need to change the order and tell the linker as below;
|
||||
|
||||
```
|
||||
diff --git a/ld/eagle.app.v6.common.ld b/ld/eagle.app.v6.common.ld
|
||||
index caf8e32..dadaceb 100644
|
||||
--- a/ld/eagle.app.v6.common.ld
|
||||
+++ b/ld/eagle.app.v6.common.ld
|
||||
@@ -151,6 +151,21 @@ SECTIONS
|
||||
} >dram0_0_seg :dram0_0_bss_phdr
|
||||
/* __stack = 0x3ffc8000; */
|
||||
|
||||
+ .irom0.text : ALIGN(4)
|
||||
+ {
|
||||
+ _irom0_text_start = ABSOLUTE(.);
|
||||
+ *(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
||||
+ *(.literal.* .text.*)
|
||||
+ _irom0_text_end = ABSOLUTE(.);
|
||||
+
|
||||
+ _jerry_text_start = ABSOLUTE(.);
|
||||
+ *\libjerryentry.a:*(.text*)
|
||||
+ *\libjerrycore.a:*(.text*)
|
||||
+ *\libjerrylibm.a:*(.text*)
|
||||
+ _jerry_text_end = ABSOLUTE(.);
|
||||
+
|
||||
+ } >irom0_0_seg :irom0_0_phdr
|
||||
+
|
||||
.text : ALIGN(4)
|
||||
{
|
||||
_stext = .;
|
||||
@@ -199,13 +214,6 @@ SECTIONS
|
||||
_lit4_end = ABSOLUTE(.);
|
||||
} >iram1_0_seg :iram1_0_phdr
|
||||
|
||||
- .irom0.text : ALIGN(4)
|
||||
- {
|
||||
- _irom0_text_start = ABSOLUTE(.);
|
||||
- *(.irom0.literal .irom.literal .irom.text.literal .irom0.text .irom.text)
|
||||
- *(.literal.* .text.*)
|
||||
- _irom0_text_end = ABSOLUTE(.);
|
||||
- } >irom0_0_seg :irom0_0_phdr
|
||||
}
|
||||
|
||||
/* get ROM code address */
|
||||
diff --git a/ld/eagle.app.v6.ld b/ld/eagle.app.v6.ld
|
||||
index 3e7ec1b..4a9ab5b 100644
|
||||
--- a/ld/eagle.app.v6.ld
|
||||
+++ b/ld/eagle.app.v6.ld
|
||||
@@ -26,7 +26,7 @@ MEMORY
|
||||
dport0_0_seg : org = 0x3FF00000, len = 0x10
|
||||
dram0_0_seg : org = 0x3FFE8000, len = 0x14000
|
||||
iram1_0_seg : org = 0x40100000, len = 0x8000
|
||||
- irom0_0_seg : org = 0x40240000, len = 0x3C000
|
||||
+ irom0_0_seg : org = 0x40240000, len = 0xB0000
|
||||
}
|
||||
|
||||
INCLUDE "../ld/eagle.app.v6.common.ld"
|
||||
```
|
||||
|
||||
Second file is to modify `irom` size so that it can hold all the codes and data.
|
||||
This can be done by giving another `SPI_SIZE_MAP`.
|
||||
For now, I'll use this manual modification.
|
||||
|
||||
|
||||
#### Need to get setjmp / longjmp
|
||||
|
||||
Extract and copy from the SDK.
|
||||
|
||||
```
|
||||
cd ~/harmony/jerryscript/targets/esp8266/libs
|
||||
ar -xv $SDK_PATH/lib/libcirom.a lib_a-setjmp.o
|
||||
```
|
150
third_party/jerryscript/targets/esp8266/docs/ESP-PREREQUISITES.md
vendored
Normal file
150
third_party/jerryscript/targets/esp8266/docs/ESP-PREREQUISITES.md
vendored
Normal file
|
@ -0,0 +1,150 @@
|
|||
#### Preparation
|
||||
|
||||
##### Accessories
|
||||
|
||||
You need,
|
||||
* 3.3V power supply. You can use bread board power (+5V, +3.3V). I used LM317 like this;
|
||||
* Use [LM317](http://www.ti.com/lit/ds/symlink/lm317.pdf)
|
||||
* R1 = 330 Ohm, R2 = 545 Ohm (1K + 1.2K in parallel)
|
||||
* 5V 2A adaptor
|
||||
* USB to RS-232 Serial + RS-232 Serial to Digital or USB-to-RS232 TTL converter
|
||||
|
||||
#### Toolchain
|
||||
|
||||
Reference [Toolchain](https://github.com/esp8266/esp8266-wiki/wiki/Toolchain) page.
|
||||
|
||||
I've slightly changed the step to use SDK from Espressif official SDK
|
||||
(https://github.com/espressif/esp_iot_rtos_sdk)
|
||||
|
||||
##### Toolchain:
|
||||
|
||||
dependencies for x86
|
||||
```
|
||||
sudo apt-get install git autoconf build-essential gperf \
|
||||
bison flex texinfo libtool libncurses5-dev wget \
|
||||
gawk libc6-dev-i386 python-serial libexpat-dev
|
||||
sudo mkdir /opt/Espressif
|
||||
sudo chown $USER /opt/Espressif/
|
||||
```
|
||||
|
||||
dependencies for x64
|
||||
```
|
||||
sudo apt-get install git autoconf build-essential gperf \
|
||||
bison flex texinfo libtool libncurses5-dev wget \
|
||||
gawk libc6-dev-amd64 python-serial libexpat-dev
|
||||
sudo mkdir /opt/Espressif
|
||||
sudo chown $USER /opt/Espressif/
|
||||
```
|
||||
|
||||
crosstool-NG
|
||||
```
|
||||
cd /opt/Espressif
|
||||
git clone -b lx106-g++-1.21.0 git://github.com/jcmvbkbc/crosstool-NG.git
|
||||
cd crosstool-NG
|
||||
./bootstrap && ./configure --prefix=`pwd` && make && make install
|
||||
./ct-ng xtensa-lx106-elf
|
||||
./ct-ng build
|
||||
```
|
||||
add path to environment file such as `.profile`
|
||||
```
|
||||
PATH=$PWD/builds/xtensa-lx106-elf/bin:$PATH
|
||||
```
|
||||
|
||||
##### Espressif SDK: use Espressif official
|
||||
|
||||
```
|
||||
cd /opt/Esprissif
|
||||
git clone https://github.com/espressif/ESP8266_RTOS_SDK.git ESP8266_RTOS_SDK.git
|
||||
ln -s ESP8266_RTOS_SDK.git ESP8266_SDK
|
||||
cd ESP8266_SDK
|
||||
git checkout -b jerry a2b413ad2996450fe2f173b6afab243f6e1249aa
|
||||
```
|
||||
|
||||
We use SDK 1.2.0 version which has stdlib.h and others. Latest 1.3.0 version,
|
||||
as of writing this document, doesn't have it.
|
||||
(If anyone knows how to use latest version, please add an issue or send a PR.)
|
||||
|
||||
|
||||
set two environment variables such as in .profile
|
||||
```
|
||||
export SDK_PATH=/opt/Espressif/ESP8266_SDK
|
||||
export BIN_PATH=(to output folder path)
|
||||
```
|
||||
|
||||
##### Xtensa libraries and headers:
|
||||
```
|
||||
cd /opt/Espressif/ESP8266_SDK
|
||||
wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
|
||||
```
|
||||
|
||||
##### ESP image tool
|
||||
```
|
||||
cd /opt/Espressif
|
||||
wget -O esptool_0.0.2-1_i386.deb https://github.com/esp8266/esp8266-wiki/raw/master/deb/esptool_0.0.2-1_i386.deb
|
||||
sudo dpkg -i esptool_0.0.2-1_i386.deb
|
||||
```
|
||||
|
||||
##### ESP upload tool
|
||||
```
|
||||
cd /opt/Espressif
|
||||
git clone https://github.com/themadinventor/esptool esptool-py
|
||||
sudo ln -s $PWD/esptool-py/esptool.py crosstool-NG/builds/xtensa-lx106-elf/bin/esptool.py
|
||||
```
|
||||
|
||||
#### Test writing with Blinky example
|
||||
|
||||
##### Get the source
|
||||
|
||||
found one example that works with SDK V1.2 (which is based on FreeRTOS, as of writing)
|
||||
|
||||
* https://github.com/mattcallow/esp8266-sdk/tree/master/rtos_apps/01blinky
|
||||
|
||||
|
||||
##### Compile
|
||||
|
||||
Read `2A-ESP8266__IOT_SDK_User_Manual_EN` document in
|
||||
[this](http://bbs.espressif.com/viewtopic.php?f=51&t=1024) link.
|
||||
|
||||
It's configured 2048KB flash
|
||||
```
|
||||
BOOT=new APP=1 SPI_SPEED=80 SPI_MODE=QIO SPI_SIZE_MAP=5 make
|
||||
BOOT=new APP=2 SPI_SPEED=80 SPI_MODE=QIO SPI_SIZE_MAP=5 make
|
||||
```
|
||||
|
||||
or old way... this works not sure this is ok.
|
||||
```
|
||||
make BOOT=new APP=0 SPI_SPEED=80 SPI_MODE=QIO SPI_SIZE_MAP=2
|
||||
```
|
||||
|
||||
##### Flashing
|
||||
|
||||
* power off ESP8266 board
|
||||
* connect GPIO0 to GND, connect GPIO2 to VCC
|
||||
* power on
|
||||
* write
|
||||
|
||||
```
|
||||
sudo /opt/Espressif/esptool-py/esptool.py \
|
||||
--port /dev/ttyUSB0 write_flash \
|
||||
0x00000 $SDK_PATH/bin/"boot_v1.4(b1).bin" \
|
||||
0x01000 $BIN_PATH/upgrade/user1.2048.new.5.bin \
|
||||
0x101000 $BIN_PATH/upgrade/user2.2048.new.5.bin \
|
||||
0x3FE000 $SDK_PATH/bin/blank.bin \
|
||||
0x3FC000 $SDK_PATH/bin/esp_init_data_default.bin
|
||||
```
|
||||
_change `/dev/ttyUSB1` to whatever you have._
|
||||
|
||||
or the old way...this works not sure this is ok.
|
||||
```
|
||||
cd $BIN_PATH
|
||||
sudo /opt/Espressif/esptool-py/esptool.py \
|
||||
--port /dev/ttyUSB0 write_flash \
|
||||
0x00000 eagle.flash.bin 0x40000 eagle.irom0text.bin
|
||||
```
|
||||
|
||||
* power off
|
||||
* disconnect GPIO0 so that it is floating
|
||||
* connect GPIO2 with serial of 470 Ohm + LED and to GND
|
||||
* power On
|
||||
|
||||
LED should blink on and off every second
|
165
third_party/jerryscript/targets/esp8266/gen_misc.sh
vendored
Normal file
165
third_party/jerryscript/targets/esp8266/gen_misc.sh
vendored
Normal file
|
@ -0,0 +1,165 @@
|
|||
#!/bin/bash
|
||||
|
||||
echo "gen_misc.sh version 20150826"
|
||||
echo ""
|
||||
|
||||
if [ $SDK_PATH ]; then
|
||||
echo "SDK_PATH:"
|
||||
echo "$SDK_PATH"
|
||||
echo ""
|
||||
else
|
||||
echo "ERROR: Please export SDK_PATH firstly, exit!!!"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [ $BIN_PATH ]; then
|
||||
echo "BIN_PATH:"
|
||||
echo "$BIN_PATH"
|
||||
echo ""
|
||||
else
|
||||
echo "ERROR: Please export BIN_PATH firstly, exit!!!"
|
||||
exit
|
||||
fi
|
||||
|
||||
echo "Please check SDK_PATH & BIN_PATH, enter (Y/y) to continue:"
|
||||
read input
|
||||
|
||||
if [[ $input != Y ]] && [[ $input != y ]]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
echo "Please follow below steps(1-5) to generate specific bin(s):"
|
||||
echo "STEP 1: use boot_v1.2+ by default"
|
||||
boot=new
|
||||
|
||||
echo "boot mode: $boot"
|
||||
echo ""
|
||||
|
||||
echo "STEP 2: choose bin generate(0=eagle.flash.bin+eagle.irom0text.bin, 1=user1.bin, 2=user2.bin)"
|
||||
echo "enter (0/1/2, default 0):"
|
||||
read input
|
||||
|
||||
if [ -z "$input" ]; then
|
||||
if [ $boot != none ]; then
|
||||
boot=none
|
||||
echo "ignore boot"
|
||||
fi
|
||||
app=0
|
||||
echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
|
||||
elif [ $input == 1 ]; then
|
||||
if [ $boot == none ]; then
|
||||
app=0
|
||||
echo "choose no boot before"
|
||||
echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
|
||||
else
|
||||
app=1
|
||||
echo "generate bin: user1.bin"
|
||||
fi
|
||||
elif [ $input == 2 ]; then
|
||||
if [ $boot == none ]; then
|
||||
app=0
|
||||
echo "choose no boot before"
|
||||
echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
|
||||
else
|
||||
app=2
|
||||
echo "generate bin: user2.bin"
|
||||
fi
|
||||
else
|
||||
if [ $boot != none ]; then
|
||||
boot=none
|
||||
echo "ignore boot"
|
||||
fi
|
||||
app=0
|
||||
echo "generate bin: eagle.flash.bin+eagle.irom0text.bin"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
echo "STEP 3: choose spi speed(0=20MHz, 1=26.7MHz, 2=40MHz, 3=80MHz)"
|
||||
echo "enter (0/1/2/3, default 2):"
|
||||
read input
|
||||
|
||||
if [ -z "$input" ]; then
|
||||
spi_speed=40
|
||||
elif [ $input == 0 ]; then
|
||||
spi_speed=20
|
||||
elif [ $input == 1 ]; then
|
||||
spi_speed=26.7
|
||||
elif [ $input == 3 ]; then
|
||||
spi_speed=80
|
||||
else
|
||||
spi_speed=40
|
||||
fi
|
||||
|
||||
echo "spi speed: $spi_speed MHz"
|
||||
echo ""
|
||||
|
||||
echo "STEP 4: choose spi mode(0=QIO, 1=QOUT, 2=DIO, 3=DOUT)"
|
||||
echo "enter (0/1/2/3, default 0):"
|
||||
read input
|
||||
|
||||
if [ -z "$input" ]; then
|
||||
spi_mode=QIO
|
||||
elif [ $input == 1 ]; then
|
||||
spi_mode=QOUT
|
||||
elif [ $input == 2 ]; then
|
||||
spi_mode=DIO
|
||||
elif [ $input == 3 ]; then
|
||||
spi_mode=DOUT
|
||||
else
|
||||
spi_mode=QIO
|
||||
fi
|
||||
|
||||
echo "spi mode: $spi_mode"
|
||||
echo ""
|
||||
|
||||
echo "STEP 5: choose spi size and map"
|
||||
echo " 0= 512KB( 256KB+ 256KB)"
|
||||
echo " 2=1024KB( 512KB+ 512KB)"
|
||||
echo " 3=2048KB( 512KB+ 512KB)"
|
||||
echo " 4=4096KB( 512KB+ 512KB)"
|
||||
echo " 5=2048KB(1024KB+1024KB)"
|
||||
echo " 6=4096KB(1024KB+1024KB)"
|
||||
echo "enter (0/2/3/4/5/6, default 0):"
|
||||
read input
|
||||
|
||||
if [ -z "$input" ]; then
|
||||
spi_size_map=0
|
||||
echo "spi size: 512KB"
|
||||
echo "spi ota map: 256KB + 256KB"
|
||||
elif [ $input == 2 ]; then
|
||||
spi_size_map=2
|
||||
echo "spi size: 1024KB"
|
||||
echo "spi ota map: 512KB + 512KB"
|
||||
elif [ $input == 3 ]; then
|
||||
spi_size_map=3
|
||||
echo "spi size: 2048KB"
|
||||
echo "spi ota map: 512KB + 512KB"
|
||||
elif [ $input == 4 ]; then
|
||||
spi_size_map=4
|
||||
echo "spi size: 4096KB"
|
||||
echo "spi ota map: 512KB + 512KB"
|
||||
elif [ $input == 5 ]; then
|
||||
spi_size_map=5
|
||||
echo "spi size: 2048KB"
|
||||
echo "spi ota map: 1024KB + 1024KB"
|
||||
elif [ $input == 6 ]; then
|
||||
spi_size_map=6
|
||||
echo "spi size: 4096KB"
|
||||
echo "spi ota map: 1024KB + 1024KB"
|
||||
else
|
||||
spi_size_map=0
|
||||
echo "spi size: 512KB"
|
||||
echo "spi ota map: 256KB + 256KB"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
echo "start..."
|
||||
echo ""
|
||||
|
||||
make clean
|
||||
|
||||
make BOOT=$boot APP=$app SPI_SPEED=$spi_speed SPI_MODE=$spi_mode SPI_SIZE_MAP=$spi_size_map
|
151
third_party/jerryscript/targets/esp8266/include/esp8266_gpio.h
vendored
Normal file
151
third_party/jerryscript/targets/esp8266/include/esp8266_gpio.h
vendored
Normal file
|
@ -0,0 +1,151 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2014 -2016 Espressif System
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP82666_GPIO_H__
|
||||
#define __ESP82666_GPIO_H__
|
||||
|
||||
#define GPIO_Pin_0 (BIT(0)) /* Pin 0 selected */
|
||||
#define GPIO_Pin_1 (BIT(1)) /* Pin 1 selected */
|
||||
#define GPIO_Pin_2 (BIT(2)) /* Pin 2 selected */
|
||||
#define GPIO_Pin_3 (BIT(3)) /* Pin 3 selected */
|
||||
#define GPIO_Pin_4 (BIT(4)) /* Pin 4 selected */
|
||||
#define GPIO_Pin_5 (BIT(5)) /* Pin 5 selected */
|
||||
#define GPIO_Pin_6 (BIT(6)) /* Pin 6 selected */
|
||||
#define GPIO_Pin_7 (BIT(7)) /* Pin 7 selected */
|
||||
#define GPIO_Pin_8 (BIT(8)) /* Pin 8 selected */
|
||||
#define GPIO_Pin_9 (BIT(9)) /* Pin 9 selected */
|
||||
#define GPIO_Pin_10 (BIT(10)) /* Pin 10 selected */
|
||||
#define GPIO_Pin_11 (BIT(11)) /* Pin 11 selected */
|
||||
#define GPIO_Pin_12 (BIT(12)) /* Pin 12 selected */
|
||||
#define GPIO_Pin_13 (BIT(13)) /* Pin 13 selected */
|
||||
#define GPIO_Pin_14 (BIT(14)) /* Pin 14 selected */
|
||||
#define GPIO_Pin_15 (BIT(15)) /* Pin 15 selected */
|
||||
#define GPIO_Pin_All (0xFFFF) /* All pins selected */
|
||||
|
||||
#define GPIO_PIN_REG_0 PERIPHS_IO_MUX_GPIO0_U
|
||||
#define GPIO_PIN_REG_1 PERIPHS_IO_MUX_U0TXD_U
|
||||
#define GPIO_PIN_REG_2 PERIPHS_IO_MUX_GPIO2_U
|
||||
#define GPIO_PIN_REG_3 PERIPHS_IO_MUX_U0RXD_U
|
||||
#define GPIO_PIN_REG_4 PERIPHS_IO_MUX_GPIO4_U
|
||||
#define GPIO_PIN_REG_5 PERIPHS_IO_MUX_GPIO5_U
|
||||
#define GPIO_PIN_REG_6 PERIPHS_IO_MUX_SD_CLK_U
|
||||
#define GPIO_PIN_REG_7 PERIPHS_IO_MUX_SD_DATA0_U
|
||||
#define GPIO_PIN_REG_8 PERIPHS_IO_MUX_SD_DATA1_U
|
||||
#define GPIO_PIN_REG_9 PERIPHS_IO_MUX_SD_DATA2_U
|
||||
#define GPIO_PIN_REG_10 PERIPHS_IO_MUX_SD_DATA3_U
|
||||
#define GPIO_PIN_REG_11 PERIPHS_IO_MUX_SD_CMD_U
|
||||
#define GPIO_PIN_REG_12 PERIPHS_IO_MUX_MTDI_U
|
||||
#define GPIO_PIN_REG_13 PERIPHS_IO_MUX_MTCK_U
|
||||
#define GPIO_PIN_REG_14 PERIPHS_IO_MUX_MTMS_U
|
||||
#define GPIO_PIN_REG_15 PERIPHS_IO_MUX_MTDO_U
|
||||
|
||||
#define GPIO_PIN_REG(i) \
|
||||
(i==0) ? GPIO_PIN_REG_0: \
|
||||
(i==1) ? GPIO_PIN_REG_1: \
|
||||
(i==2) ? GPIO_PIN_REG_2: \
|
||||
(i==3) ? GPIO_PIN_REG_3: \
|
||||
(i==4) ? GPIO_PIN_REG_4: \
|
||||
(i==5) ? GPIO_PIN_REG_5: \
|
||||
(i==6) ? GPIO_PIN_REG_6: \
|
||||
(i==7) ? GPIO_PIN_REG_7: \
|
||||
(i==8) ? GPIO_PIN_REG_8: \
|
||||
(i==9) ? GPIO_PIN_REG_9: \
|
||||
(i==10)? GPIO_PIN_REG_10: \
|
||||
(i==11)? GPIO_PIN_REG_11: \
|
||||
(i==12)? GPIO_PIN_REG_12: \
|
||||
(i==13)? GPIO_PIN_REG_13: \
|
||||
(i==14)? GPIO_PIN_REG_14: \
|
||||
GPIO_PIN_REG_15
|
||||
|
||||
#define GPIO_PIN_ADDR(i) (GPIO_PIN0_ADDRESS + i*4)
|
||||
|
||||
#define GPIO_ID_IS_PIN_REGISTER(reg_id) ((reg_id >= GPIO_ID_PIN0) && (reg_id <= GPIO_ID_PIN(GPIO_PIN_COUNT-1)))
|
||||
|
||||
#define GPIO_REGID_TO_PINIDX(reg_id) ((reg_id) - GPIO_ID_PIN0)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GPIO_PIN_INTR_DISABLE = 0,
|
||||
GPIO_PIN_INTR_POSEDGE = 1,
|
||||
GPIO_PIN_INTR_NEGEDGE = 2,
|
||||
GPIO_PIN_INTR_ANYEGDE = 3,
|
||||
GPIO_PIN_INTR_LOLEVEL = 4,
|
||||
GPIO_PIN_INTR_HILEVEL = 5
|
||||
} GPIO_INT_TYPE;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GPIO_Mode_Input = 0x0,
|
||||
GPIO_Mode_Out_OD,
|
||||
GPIO_Mode_Output ,
|
||||
GPIO_Mode_Sigma_Delta
|
||||
} GPIOMode_TypeDef;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
GPIO_PullUp_DIS = 0x0,
|
||||
GPIO_PullUp_EN = 0x1
|
||||
} GPIO_Pullup_IF;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
uint16 GPIO_Pin;
|
||||
GPIOMode_TypeDef GPIO_Mode;
|
||||
GPIO_Pullup_IF GPIO_Pullup;
|
||||
GPIO_INT_TYPE GPIO_IntrType;
|
||||
} GPIO_ConfigTypeDef;
|
||||
|
||||
#define GPIO_OUTPUT_SET(gpio_no, bit_value) gpio_output_conf (bit_value<<gpio_no, \
|
||||
((~bit_value)&0x01)<<gpio_no, 1<<gpio_no, 0)
|
||||
|
||||
#define GPIO_OUTPUT(gpio_bits, bit_value) do { \
|
||||
if (bit_value) { gpio_output_conf (gpio_bits, 0, gpio_bits, 0); } \
|
||||
else { gpio_output_conf(0, gpio_bits, gpio_bits, 0); } \
|
||||
} while (0)
|
||||
|
||||
#define GPIO_DIS_OUTPUT(gpio_no) gpio_output_conf (0, 0, 0, 1 << gpio_no)
|
||||
#define GPIO_AS_INPUT(gpio_bits) gpio_output_conf (0, 0, 0, gpio_bits)
|
||||
#define GPIO_AS_OUTPUT(gpio_bits) gpio_output_conf (0, 0, gpio_bits, 0)
|
||||
#define GPIO_INPUT_GET(gpio_no) ((gpio_input_get () >> gpio_no)&BIT0)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
void gpio16_output_conf (void);
|
||||
void gpio16_output_set (uint8 value);
|
||||
void gpio16_input_conf (void);
|
||||
uint8 gpio16_input_get (void);
|
||||
|
||||
void gpio_output_conf (uint32 set_mask, uint32 clear_mask, uint32 enable_mask, uint32 disable_mask);
|
||||
void gpio_intr_handler_register (void *fn);
|
||||
void gpio_pin_wakeup_enable (uint32 i, GPIO_INT_TYPE intr_state);
|
||||
void gpio_pin_wakeup_disable ();
|
||||
void gpio_pin_intr_state_set (uint32 i, GPIO_INT_TYPE intr_state);
|
||||
uint32 gpio_input_get (void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
48
third_party/jerryscript/targets/esp8266/include/esp8266_uart.h
vendored
Normal file
48
third_party/jerryscript/targets/esp8266/include/esp8266_uart.h
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2014 -2016 Espressif System
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __ESP8266_UART_H__
|
||||
#define __ESP8266_UART_H__
|
||||
|
||||
typedef enum {
|
||||
UART0 = 0x0,
|
||||
UART1 = 0x1,
|
||||
} UART_Port;
|
||||
|
||||
typedef enum {
|
||||
BIT_RATE_300 = 300,
|
||||
BIT_RATE_600 = 600,
|
||||
BIT_RATE_1200 = 1200,
|
||||
BIT_RATE_2400 = 2400,
|
||||
BIT_RATE_4800 = 4800,
|
||||
BIT_RATE_9600 = 9600,
|
||||
BIT_RATE_19200 = 19200,
|
||||
BIT_RATE_38400 = 38400,
|
||||
BIT_RATE_57600 = 57600,
|
||||
BIT_RATE_74880 = 74880,
|
||||
BIT_RATE_115200 = 115200,
|
||||
BIT_RATE_230400 = 230400,
|
||||
BIT_RATE_460800 = 460800,
|
||||
BIT_RATE_921600 = 921600,
|
||||
BIT_RATE_1843200 = 1843200,
|
||||
BIT_RATE_3686400 = 3686400,
|
||||
} UART_BautRate;
|
||||
|
||||
#endif
|
35
third_party/jerryscript/targets/esp8266/include/jerry_extapi.h
vendored
Normal file
35
third_party/jerryscript/targets/esp8266/include/jerry_extapi.h
vendored
Normal file
|
@ -0,0 +1,35 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __JERRY_EXTAPI_H__
|
||||
#define __JERRY_EXTAPI_H__
|
||||
|
||||
#define JERRY_STANDALONE_EXIT_CODE_OK (0)
|
||||
#define JERRY_STANDALONE_EXIT_CODE_FAIL (1)
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
void js_register_functions (void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
34
third_party/jerryscript/targets/esp8266/include/jerry_run.h
vendored
Normal file
34
third_party/jerryscript/targets/esp8266/include/jerry_run.h
vendored
Normal file
|
@ -0,0 +1,34 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __JERRY_RUN_H__
|
||||
#define __JERRY_RUN_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
int js_entry (const char *source_p, const size_t source_size);
|
||||
int js_eval (const char *source_p, const size_t source_size);
|
||||
int js_loop (uint32_t ticknow);
|
||||
void js_exit (void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
33
third_party/jerryscript/targets/esp8266/include/native_esp8266.h
vendored
Normal file
33
third_party/jerryscript/targets/esp8266/include/native_esp8266.h
vendored
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __NATIVE_ESP8266_H__
|
||||
#define __NATIVE_ESP8266_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
void native_gpio_dir (int, int);
|
||||
void native_gpio_set (int, int);
|
||||
int native_gpio_get (int);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
24
third_party/jerryscript/targets/esp8266/include/user_config.h
vendored
Normal file
24
third_party/jerryscript/targets/esp8266/include/user_config.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __USER_CONFIG_H__
|
||||
#define __USER_CONFIG_H__
|
||||
|
||||
|
||||
/* number of stack items, x4 for bytes */
|
||||
#define JERRY_STACK_SIZE 2000
|
||||
|
||||
|
||||
#endif
|
15
third_party/jerryscript/targets/esp8266/js/blink.js
vendored
Normal file
15
third_party/jerryscript/targets/esp8266/js/blink.js
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
var check = 1;
|
||||
|
||||
function blink() {
|
||||
var inp = gpio_get(0);
|
||||
var blk = (check > 8) ? 1 - inp : inp;
|
||||
gpio_set(2, blk);
|
||||
check = check >= 10 ? 1 : check+1;
|
||||
}
|
||||
|
||||
// GPIO 0 as input
|
||||
// GPIO 2 as output
|
||||
gpio_dir(0, 0);
|
||||
gpio_dir(2, 1);
|
||||
|
||||
print("blink js OK");
|
4
third_party/jerryscript/targets/esp8266/js/main.js
vendored
Normal file
4
third_party/jerryscript/targets/esp8266/js/main.js
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
function sysloop(ticknow) {
|
||||
blink();
|
||||
};
|
||||
print("main js OK");
|
113
third_party/jerryscript/targets/esp8266/readme.md
vendored
Normal file
113
third_party/jerryscript/targets/esp8266/readme.md
vendored
Normal file
|
@ -0,0 +1,113 @@
|
|||
### About
|
||||
|
||||
Files in this folder (embedding/esp8266) are copied from
|
||||
`examples/project_template` of `esp_iot_rtos_sdk` and modified for JerryScript.
|
||||
You can view online from
|
||||
[this](https://github.com/espressif/esp_iot_rtos_sdk/tree/master/examples/project_template) page.
|
||||
|
||||
|
||||
### How to build JerryScript for ESP8266
|
||||
|
||||
#### 1. SDK
|
||||
|
||||
Follow [this](./docs/ESP-PREREQUISITES.md) page to setup build environment
|
||||
|
||||
|
||||
#### 2. Patch ESP-SDK for JerryScript
|
||||
|
||||
Follow [this](./docs/ESP-PATCHFORJERRYSCRIPT.md) page to patch for JerryScript building.
|
||||
Below is a summary after SDK patch is applied.
|
||||
|
||||
#### 3. Building JerryScript
|
||||
|
||||
```
|
||||
cd ~/harmony/jerryscript
|
||||
# clean build
|
||||
make -f ./targets/esp8266/Makefile.esp8266 clean
|
||||
# or just normal build
|
||||
make -f ./targets/esp8266/Makefile.esp8266
|
||||
```
|
||||
|
||||
Output files should be placed at $BIN_PATH
|
||||
|
||||
#### 4. Flashing for ESP8266 ESP-01 board (WiFi Module)
|
||||
|
||||
Steps are for `ESP8266 ESP-01(WiFi)` board. Others may vary.
|
||||
Refer http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family page.
|
||||
|
||||
##### 4.1 GPIO0 and GPIO2
|
||||
|
||||
Before flashing you need to follow the steps.
|
||||
|
||||
1. Power off ESP8266
|
||||
2. Connect GPIO0 to GND and GPIO2 to VCC
|
||||
3. Power on ESP8266
|
||||
4. Flash
|
||||
|
||||
##### 4.2 Flashing
|
||||
|
||||
```
|
||||
make -f ./targets/esp8266/Makefile.esp8266 flash
|
||||
```
|
||||
|
||||
Default USB device is `/dev/ttyUSB0`. If you have different one, give with `USBDEVICE`, like;
|
||||
|
||||
```
|
||||
USBDEVICE=/dev/ttyUSB1 make -f ./targets/esp8266/Makefile.esp8266 flash
|
||||
```
|
||||
|
||||
|
||||
### 5. Running
|
||||
|
||||
1. Power off
|
||||
2. Disonnect(float) both GPIO0 and GPIO2
|
||||
3. Power on
|
||||
|
||||
Sample program here works with LED and a SW with below connection.
|
||||
* Connect GPIO2 to a LED > 4K resistor > GND
|
||||
* Connect GPIO0 between VCC > 4K resistor and GND
|
||||
|
||||
If GPIO0 is High then LED is turned on longer. If L vice versa.
|
||||
|
||||
### 6. Optimizing initial RAM usage (ESP8266 specific)
|
||||
The existing open source gcc compiler with Xtensa support stores const(ants) in
|
||||
the same limited RAM where our code needs to run.
|
||||
|
||||
It is possible to force the compiler to 1)store a constant into ROM and also 2) read it from there thus saving 1.1) RAM.
|
||||
It will require two things though:
|
||||
1. To add the attribute JERRY_CONST_DATA to your constant. For example
|
||||
|
||||
```C
|
||||
static const lit_magic_size_t lit_magic_string_sizes[] =
|
||||
```
|
||||
|
||||
can be modified to
|
||||
|
||||
```C
|
||||
static const lit_magic_size_t lit_magic_string_sizes[] JERRY_CONST_DATA =
|
||||
```
|
||||
|
||||
That is already done to some constants in jerry-core.
|
||||
|
||||
1.1) Below is a short list:
|
||||
|
||||
|
||||
Bytes | Name
|
||||
-------- | ---------
|
||||
928 | magic_strings$2428
|
||||
610 | vm_decode_table
|
||||
424 | unicode_letter_interv_sps
|
||||
235 | cbc_flags
|
||||
232 | lit_magic_string_sizes
|
||||
212 | unicode_letter_interv_len
|
||||
196 | unicode_non_letter_ident_
|
||||
112 | unicode_letter_chars
|
||||
|
||||
Which frees 2949 bytes in RAM.
|
||||
|
||||
2. To compile your code with compiler that supports the `-mforce-l32` parameter. You can check if your compiler is
|
||||
supporting that parameter by calling:
|
||||
```bash
|
||||
xtensa-lx106-elf-gcc --help=target | grep mforce-l32
|
||||
```
|
||||
If the command above does not provide a result then you will need to upgrade your compiler.
|
202
third_party/jerryscript/targets/esp8266/source/jerry_extapi.c
vendored
Normal file
202
third_party/jerryscript/targets/esp8266/source/jerry_extapi.c
vendored
Normal file
|
@ -0,0 +1,202 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
#include "jerry_extapi.h"
|
||||
|
||||
#include "native_esp8266.h"
|
||||
|
||||
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(A,B) ((A)<(B)?(A):(B))
|
||||
#endif
|
||||
|
||||
|
||||
#define __UNSED__ __attribute__((unused))
|
||||
|
||||
#define DELCARE_HANDLER(NAME) \
|
||||
static jerry_value_t \
|
||||
NAME ## _handler (const jerry_value_t function_obj_val __UNSED__, \
|
||||
const jerry_value_t this_val __UNSED__, \
|
||||
const jerry_value_t args_p[], \
|
||||
const jerry_length_t args_cnt)
|
||||
|
||||
#define REGISTER_HANDLER(NAME) \
|
||||
register_native_function ( # NAME, NAME ## _handler)
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
DELCARE_HANDLER(assert) {
|
||||
if (args_cnt == 1
|
||||
&& jerry_value_is_boolean (args_p[0])
|
||||
&& jerry_get_boolean_value (args_p[0]))
|
||||
{
|
||||
printf (">> Jerry assert true\r\n");
|
||||
return jerry_create_boolean (true);
|
||||
}
|
||||
printf ("Script assertion failed\n");
|
||||
exit (JERRY_STANDALONE_EXIT_CODE_FAIL);
|
||||
return jerry_create_boolean (false);
|
||||
}
|
||||
|
||||
|
||||
DELCARE_HANDLER(print) {
|
||||
jerry_length_t cc;
|
||||
|
||||
if (args_cnt)
|
||||
{
|
||||
printf(">> print(%d) :", (int) args_cnt);
|
||||
for (cc=0; cc<args_cnt; cc++)
|
||||
{
|
||||
if (jerry_value_is_string (args_p[cc]))
|
||||
{
|
||||
char *buffer;
|
||||
jerry_size_t size = jerry_get_string_size (args_p[0]);
|
||||
buffer = (char *) malloc(size + 1);
|
||||
|
||||
if(!buffer)
|
||||
{
|
||||
// not enough memory for this string.
|
||||
printf("[<too-long-string>]");
|
||||
continue;
|
||||
}
|
||||
|
||||
jerry_string_to_char_buffer (args_p[cc],
|
||||
(jerry_char_t *) buffer,
|
||||
size);
|
||||
*(buffer + size) = 0;
|
||||
printf("[%s] ", buffer);
|
||||
free (buffer);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("(%d) ", args_p[cc]);
|
||||
}
|
||||
}
|
||||
printf ("\r\n");
|
||||
}
|
||||
return jerry_create_boolean (true);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
DELCARE_HANDLER(gpio_dir) {
|
||||
int port, value;
|
||||
if (args_cnt < 2)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
port = (int) jerry_get_number_value (args_p[0]);
|
||||
value = (int) jerry_get_number_value (args_p[1]);
|
||||
|
||||
native_gpio_dir (port, value);
|
||||
|
||||
return jerry_create_boolean (true);
|
||||
} /* gpio_dir_handler */
|
||||
|
||||
DELCARE_HANDLER(gpio_set) {
|
||||
int port, value;
|
||||
if (args_cnt < 2)
|
||||
{
|
||||
return jerry_create_boolean (false);
|
||||
}
|
||||
|
||||
port = (int) jerry_get_number_value (args_p[0]);
|
||||
value = (int) jerry_get_number_value (args_p[1]);
|
||||
|
||||
native_gpio_set (port, value);
|
||||
|
||||
return jerry_create_boolean (true);
|
||||
} /* gpio_dir_handler */
|
||||
|
||||
|
||||
DELCARE_HANDLER(gpio_get) {
|
||||
int port, value;
|
||||
if (args_cnt < 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
port = (int) jerry_get_number_value (args_p[0]);
|
||||
|
||||
value = native_gpio_get (port) ? 1 : 0;
|
||||
|
||||
return jerry_create_number ((double) value);
|
||||
} /* gpio_dir_handler */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
static bool
|
||||
register_native_function (const char* name,
|
||||
jerry_external_handler_t handler)
|
||||
{
|
||||
jerry_value_t global_obj_val;
|
||||
jerry_value_t reg_func_val;
|
||||
jerry_value_t prop_name_val;
|
||||
jerry_value_t res;
|
||||
bool bok;
|
||||
|
||||
global_obj_val = jerry_get_global_object ();
|
||||
reg_func_val = jerry_create_external_function (handler);
|
||||
bok = true;
|
||||
|
||||
if (!(jerry_value_is_function (reg_func_val)
|
||||
&& jerry_value_is_constructor (reg_func_val)))
|
||||
{
|
||||
printf ("!!! create_external_function failed !!!\r\n");
|
||||
jerry_release_value (reg_func_val);
|
||||
jerry_release_value (global_obj_val);
|
||||
return false;
|
||||
}
|
||||
|
||||
prop_name_val = jerry_create_string ((const jerry_char_t *) name);
|
||||
res = jerry_set_property (global_obj_val, prop_name_val, reg_func_val);
|
||||
|
||||
if (jerry_value_has_error_flag (res))
|
||||
{
|
||||
bok = false;
|
||||
}
|
||||
|
||||
jerry_release_value (res);
|
||||
jerry_release_value (prop_name_val);
|
||||
jerry_release_value (reg_func_val);
|
||||
jerry_release_value (global_obj_val);
|
||||
|
||||
if (!bok)
|
||||
{
|
||||
printf ("!!! register_native_function failed: [%s]\r\n", name);
|
||||
}
|
||||
|
||||
return bok;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
void js_register_functions (void)
|
||||
{
|
||||
REGISTER_HANDLER(assert);
|
||||
REGISTER_HANDLER(print);
|
||||
REGISTER_HANDLER(gpio_dir);
|
||||
REGISTER_HANDLER(gpio_set);
|
||||
REGISTER_HANDLER(gpio_get);
|
||||
}
|
119
third_party/jerryscript/targets/esp8266/source/jerry_run.c
vendored
Normal file
119
third_party/jerryscript/targets/esp8266/source/jerry_run.c
vendored
Normal file
|
@ -0,0 +1,119 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
#include "jerry_extapi.h"
|
||||
#include "jerry_run.h"
|
||||
|
||||
|
||||
static const char* fn_sys_loop_name = "sysloop";
|
||||
jerry_value_t parsed_res;
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
int js_entry (const char *source_p, const size_t source_size)
|
||||
{
|
||||
const jerry_char_t *jerry_src = (const jerry_char_t *) source_p;
|
||||
int ret_code = 0; /* JERRY_COMPLETION_CODE_OK */
|
||||
jerry_init_flag_t flags = JERRY_INIT_EMPTY;
|
||||
|
||||
jerry_init (flags);
|
||||
|
||||
js_register_functions ();
|
||||
|
||||
parsed_res = jerry_parse ((jerry_char_t *) jerry_src, source_size, false);
|
||||
|
||||
if (jerry_value_has_error_flag (parsed_res))
|
||||
{
|
||||
printf ("Error: jerry_parse failed\r\n");
|
||||
ret_code = JERRY_ERROR_SYNTAX;
|
||||
}
|
||||
|
||||
return ret_code;
|
||||
}
|
||||
|
||||
int js_eval (const char *source_p, const size_t source_size)
|
||||
{
|
||||
int status = 0;
|
||||
jerry_value_t res;
|
||||
|
||||
res = jerry_eval ((jerry_char_t *) source_p,
|
||||
source_size,
|
||||
false);
|
||||
if (jerry_value_has_error_flag (res)) {
|
||||
status = -1;
|
||||
}
|
||||
|
||||
jerry_release_value (res);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int js_loop (uint32_t ticknow)
|
||||
{
|
||||
jerry_value_t global_obj_val;
|
||||
jerry_value_t sysloop_func;
|
||||
jerry_value_t val_args[1];
|
||||
uint16_t val_argv;
|
||||
jerry_value_t res;
|
||||
jerry_value_t prop_name_val;
|
||||
int ret_code = 0;
|
||||
|
||||
global_obj_val = jerry_get_global_object ();
|
||||
prop_name_val = jerry_create_string ((const jerry_char_t *) fn_sys_loop_name);
|
||||
sysloop_func = jerry_get_property (global_obj_val, prop_name_val);
|
||||
jerry_release_value (prop_name_val);
|
||||
|
||||
if (jerry_value_has_error_flag (sysloop_func)) {
|
||||
printf ("Error: '%s' not defined!!!\r\n", fn_sys_loop_name);
|
||||
jerry_release_value (sysloop_func);
|
||||
jerry_release_value (global_obj_val);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!jerry_value_is_function (sysloop_func)) {
|
||||
printf ("Error: '%s' is not a function!!!\r\n", fn_sys_loop_name);
|
||||
jerry_release_value (sysloop_func);
|
||||
jerry_release_value (global_obj_val);
|
||||
return -2;
|
||||
}
|
||||
|
||||
val_argv = 1;
|
||||
val_args[0] = jerry_create_number (ticknow);
|
||||
|
||||
res = jerry_call_function (sysloop_func,
|
||||
global_obj_val,
|
||||
val_args,
|
||||
val_argv);
|
||||
|
||||
if (jerry_value_has_error_flag (res)) {
|
||||
ret_code = -3;
|
||||
}
|
||||
|
||||
jerry_release_value (res);
|
||||
jerry_release_value (sysloop_func);
|
||||
jerry_release_value (global_obj_val);
|
||||
|
||||
return ret_code;
|
||||
}
|
||||
|
||||
void js_exit (void)
|
||||
{
|
||||
jerry_cleanup ();
|
||||
}
|
43
third_party/jerryscript/targets/esp8266/user/Makefile
vendored
Normal file
43
third_party/jerryscript/targets/esp8266/user/Makefile
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
|
||||
#############################################################
|
||||
# Required variables for each makefile
|
||||
# Discard this section from all parent makefiles
|
||||
# Expected variables (with automatic defaults):
|
||||
# CSRCS (all "C" files in the dir)
|
||||
# SUBDIRS (all subdirs with a Makefile)
|
||||
# GEN_LIBS - list of libs to be generated ()
|
||||
# GEN_IMAGES - list of images to be generated ()
|
||||
# COMPONENTS_xxx - a list of libs/objs in the form
|
||||
# subdir/lib to be extracted and rolled up into
|
||||
# a generated lib/image xxx.a ()
|
||||
#
|
||||
ifndef PDIR
|
||||
GEN_LIBS = libuser.a
|
||||
endif
|
||||
|
||||
|
||||
#############################################################
|
||||
# Configuration i.e. compile options etc.
|
||||
# Target specific stuff (defines etc.) goes in here!
|
||||
# Generally values applying to a tree are captured in the
|
||||
# makefile at its root level - these are then overridden
|
||||
# for a subtree within the makefile rooted therein
|
||||
#
|
||||
#DEFINES +=
|
||||
|
||||
#############################################################
|
||||
# Recursion Magic - Don't touch this!!
|
||||
#
|
||||
# Each subtree potentially has an include directory
|
||||
# corresponding to the common APIs applicable to modules
|
||||
# rooted at that subtree. Accordingly, the INCLUDE PATH
|
||||
# of a module can only contain the include directories up
|
||||
# its parent path, and not its siblings
|
||||
#
|
||||
# Required for each makefile to inherit from the parent
|
||||
#
|
||||
|
||||
INCLUDES := $(INCLUDES) -I $(PDIR)include
|
||||
INCLUDES += -I ./ -I ../include -I../../../
|
||||
sinclude $(PDIR)Makefile
|
||||
|
94
third_party/jerryscript/targets/esp8266/user/jerry_port.c
vendored
Normal file
94
third_party/jerryscript/targets/esp8266/user/jerry_port.c
vendored
Normal file
|
@ -0,0 +1,94 @@
|
|||
/* Copyright 2014-2016 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "esp_common.h"
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "jerry-core/jerry-port.h"
|
||||
|
||||
/**
|
||||
* Provide console message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_console (const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
/* TODO, uncomment when vprint link is ok */
|
||||
/* vfprintf (stdout, format, args); */
|
||||
va_end (args);
|
||||
} /* jerry_port_console */
|
||||
|
||||
/**
|
||||
* Provide log message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_log (jerry_log_level_t level, /**< log level */
|
||||
const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
(void) level; /* ignore log level */
|
||||
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
/* TODO, uncomment when vprint link is ok */
|
||||
/* vprintf (stderr, format, args); */
|
||||
va_end (args);
|
||||
} /* jerry_port_log */
|
||||
|
||||
|
||||
/** exit - cause normal process termination */
|
||||
void exit (int status)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
}
|
||||
} /* exit */
|
||||
|
||||
/** abort - cause abnormal process termination */
|
||||
void abort (void)
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
}
|
||||
} /* abort */
|
||||
|
||||
/**
|
||||
* fwrite
|
||||
*
|
||||
* @return number of bytes written
|
||||
*/
|
||||
size_t
|
||||
fwrite (const void *ptr, /**< data to write */
|
||||
size_t size, /**< size of elements to write */
|
||||
size_t nmemb, /**< number of elements */
|
||||
FILE *stream) /**< stream pointer */
|
||||
{
|
||||
return size * nmemb;
|
||||
} /* fwrite */
|
||||
|
||||
/**
|
||||
* This function can get the time as well as a timezone.
|
||||
*
|
||||
* @return 0 if success, -1 otherwise
|
||||
*/
|
||||
int
|
||||
gettimeofday (void *tp, /**< struct timeval */
|
||||
void *tzp) /**< struct timezone */
|
||||
{
|
||||
return -1;
|
||||
} /* gettimeofday */
|
50
third_party/jerryscript/targets/esp8266/user/native_esp8266.c
vendored
Normal file
50
third_party/jerryscript/targets/esp8266/user/native_esp8266.c
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* Copyright 2013-2014 Espressif Systems (Wuxi)
|
||||
*
|
||||
* FileName: user_main.c
|
||||
*
|
||||
* Description: entry file of user application
|
||||
*
|
||||
* Modification history:
|
||||
* 2014/12/1, v1.0 create this file.
|
||||
*******************************************************************************/
|
||||
|
||||
#include "esp_common.h"
|
||||
|
||||
#include "user_config.h"
|
||||
#include "esp8266_gpio.h"
|
||||
|
||||
|
||||
void native_gpio_dir(int port, int value) {
|
||||
if (value) {
|
||||
GPIO_AS_OUTPUT(1 << port);
|
||||
}
|
||||
else {
|
||||
GPIO_AS_INPUT(1 << port);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void native_gpio_set(int port, int value) {
|
||||
GPIO_OUTPUT_SET(port, value);
|
||||
}
|
||||
|
||||
|
||||
int native_gpio_get(int port) {
|
||||
return GPIO_INPUT_GET(port);
|
||||
}
|
39
third_party/jerryscript/targets/esp8266/user/user_gpio.c
vendored
Normal file
39
third_party/jerryscript/targets/esp8266/user/user_gpio.c
vendored
Normal file
|
@ -0,0 +1,39 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (C) 2014 -2016 Espressif System
|
||||
*
|
||||
*/
|
||||
|
||||
#include "esp_common.h"
|
||||
|
||||
#include "esp8266_gpio.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void gpio_output_conf(uint32 set_mask, uint32 clear_mask, uint32 enable_mask,
|
||||
uint32 disable_mask) {
|
||||
GPIO_REG_WRITE(GPIO_OUT_W1TS_ADDRESS, set_mask);
|
||||
GPIO_REG_WRITE(GPIO_OUT_W1TC_ADDRESS, clear_mask);
|
||||
GPIO_REG_WRITE(GPIO_ENABLE_W1TS_ADDRESS, enable_mask);
|
||||
GPIO_REG_WRITE(GPIO_ENABLE_W1TC_ADDRESS, disable_mask);
|
||||
}
|
||||
|
||||
|
||||
uint32 gpio_input_get(void) {
|
||||
return GPIO_REG_READ(GPIO_IN_ADDRESS);
|
||||
}
|
111
third_party/jerryscript/targets/esp8266/user/user_main.c
vendored
Normal file
111
third_party/jerryscript/targets/esp8266/user/user_main.c
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/******************************************************************************
|
||||
* Copyright 2013-2014 Espressif Systems (Wuxi)
|
||||
*
|
||||
* FileName: user_main.c
|
||||
*
|
||||
* Description: entry file of user application
|
||||
*
|
||||
* Modification history:
|
||||
* 2014/12/1, v1.0 create this file.
|
||||
*******************************************************************************/
|
||||
|
||||
#include "esp_common.h"
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
#include "user_config.h"
|
||||
#include "esp8266_uart.h"
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
void show_free_mem(int idx) {
|
||||
size_t res = xPortGetFreeHeapSize();
|
||||
printf("dbg free memory(%d): %d\r\n", idx, res);
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "jerry_targetjs.h"
|
||||
|
||||
|
||||
static int jerry_task_init(void) {
|
||||
int retcode;
|
||||
int src;
|
||||
|
||||
DECLARE_JS_CODES;
|
||||
|
||||
/* run main.js */
|
||||
show_free_mem(2);
|
||||
retcode = js_entry(js_codes[0].source, js_codes[0].length);
|
||||
if (retcode != 0) {
|
||||
printf("js_entry failed code(%d) [%s]\r\n", retcode, js_codes[0].name);
|
||||
return -1;
|
||||
}
|
||||
/* run rest of the js files */
|
||||
show_free_mem(3);
|
||||
for (src=1; js_codes[src].source; src++) {
|
||||
retcode = js_eval(js_codes[src].source, js_codes[src].length);
|
||||
if (retcode != 0) {
|
||||
printf("js_eval failed code(%d) [%s]\r\n", retcode, js_codes[src].name);
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
show_free_mem(4);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void jerry_task(void *pvParameters) {
|
||||
const portTickType xDelay = 100 / portTICK_RATE_MS;
|
||||
uint32_t ticknow = 0;
|
||||
|
||||
if (jerry_task_init() == 0) {
|
||||
for (;;) {
|
||||
vTaskDelay(xDelay);
|
||||
js_loop(ticknow);
|
||||
if (!ticknow) {
|
||||
show_free_mem(5);
|
||||
}
|
||||
ticknow++;
|
||||
}
|
||||
}
|
||||
js_exit();
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* This is entry point for user code
|
||||
*/
|
||||
void ICACHE_FLASH_ATTR user_init(void)
|
||||
{
|
||||
uart_div_modify(UART0, UART_CLK_FREQ / (BIT_RATE_115200));
|
||||
|
||||
show_free_mem(0);
|
||||
wifi_softap_dhcps_stop();
|
||||
show_free_mem(1);
|
||||
|
||||
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0); // GPIO 0
|
||||
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); // GPIO 2
|
||||
|
||||
xTaskCreate(jerry_task, "jerry", JERRY_STACK_SIZE, NULL, 2, NULL);
|
||||
}
|
98
third_party/jerryscript/targets/mbed/Makefile.mbed
vendored
Normal file
98
third_party/jerryscript/targets/mbed/Makefile.mbed
vendored
Normal file
|
@ -0,0 +1,98 @@
|
|||
# Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
# Copyright 2016 University of Szeged.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# use TAB-8
|
||||
|
||||
TARGET_LIST = k64f stm32f4 stm32f429i nucleo
|
||||
JERRYHEAP ?= 16
|
||||
|
||||
ifneq ($(filter $(board), $(TARGET_LIST)),)
|
||||
TARGET = $(board)
|
||||
ifeq ($(TARGET), k64f)
|
||||
YOTTA_TARGET = frdm-k64f-gcc
|
||||
TARGET_DIR ?= /media/$(USER)/MBED
|
||||
else ifeq ($(TARGET), stm32f4)
|
||||
YOTTA_TARGET = stm32f4-disco-gcc
|
||||
else ifeq ($(TARGET), stm32f429i)
|
||||
YOTTA_TARGET = stm32f429i-disco-gcc
|
||||
else ifeq ($(TARGET), nucleo)
|
||||
YOTTA_TARGET = st-nucleo-f401re-gcc
|
||||
TARGET_DIR ?= /media/$(USER)/NODE_F401RE
|
||||
endif
|
||||
|
||||
BUILD_DIR ?= build/mbed
|
||||
UPPERC_TARGET ?= $(shell echo $(TARGET) | tr a-z A-Z)
|
||||
COPYTARGET ?= targets/mbed/libjerry
|
||||
|
||||
else
|
||||
$(error This board ($(board)) is not supported!)
|
||||
endif
|
||||
|
||||
EXT_CFLAGS := -D__TARGET_MBED_$(UPPERC_TARGET)
|
||||
EXT_CFLAGS += -mlittle-endian -mthumb -mcpu=cortex-m4
|
||||
EXT_CFLAGS += -Wno-error=format=
|
||||
|
||||
EXT_PORT_DIR := ""
|
||||
|
||||
.PHONY: jerry js2c yotta flash clean
|
||||
|
||||
all: jerry js2c yotta
|
||||
|
||||
jerry:
|
||||
mkdir -p $(COPYTARGET)
|
||||
mkdir -p $(BUILD_DIR)
|
||||
cmake -B$(BUILD_DIR) -H./ \
|
||||
-DENABLE_LTO=OFF \
|
||||
-DFEATURE_VALGRIND=OFF \
|
||||
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain_external.cmake \
|
||||
-DJERRY_LIBC=OFF \
|
||||
-DJERRY_CMDLINE=OFF \
|
||||
-DENABLE_ALL_IN_ONE=OFF \
|
||||
-DEXTERNAL_CMAKE_SYSTEM_PROCESSOR=armv7l-hf \
|
||||
-DEXTERNAL_CMAKE_C_COMPILER=arm-none-eabi-gcc \
|
||||
-DEXTERNAL_CMAKE_C_COMPILER_ID=GNU \
|
||||
-DEXTERNAL_COMPILE_FLAGS="$(EXT_CFLAGS)" \
|
||||
-DMEM_HEAP_SIZE_KB=$(JERRYHEAP) \
|
||||
|
||||
make -C$(BUILD_DIR) jerry-core
|
||||
make -C$(BUILD_DIR) jerry-libm
|
||||
cp $(BUILD_DIR)/lib/libjerry-core.a $(COPYTARGET)/libjerrycore.a
|
||||
cp $(BUILD_DIR)/lib/libjerry-libm.a $(COPYTARGET)/libjerrylibm.a
|
||||
|
||||
js2c:
|
||||
cd targets/mbed; ../tools/js2c.py;
|
||||
|
||||
yotta:
|
||||
cd targets/mbed; \
|
||||
yotta target $(YOTTA_TARGET); \
|
||||
yotta build
|
||||
|
||||
flash:
|
||||
ifndef TARGET_DIR
|
||||
st-flash write targets/mbed/build/$(YOTTA_TARGET)/source/jerry.bin 0x08000000
|
||||
else
|
||||
@if [ ! -d "${TARGET_DIR}" ] ; then \
|
||||
echo "The board not mounted at ${TARGET_DIR}"; \
|
||||
exit 1; \
|
||||
fi
|
||||
cp targets/mbed/build/$(YOTTA_TARGET)/source/jerry.bin \
|
||||
"$(TARGET_DIR)/."
|
||||
endif
|
||||
@echo "Wait till LED flashing stops..."
|
||||
|
||||
clean:
|
||||
rm -rf $(COPYTARGET)
|
||||
rm -rf $(OUTPUT)
|
||||
rm -rf targets/mbed/build
|
26
third_party/jerryscript/targets/mbed/js/blink.js
vendored
Normal file
26
third_party/jerryscript/targets/mbed/js/blink.js
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
var check = 1;
|
||||
|
||||
function blink ()
|
||||
{
|
||||
var blk = (check > 8) ? 1 : 0;
|
||||
led (0, blk);
|
||||
check = (check >= 10) ? 1 : check + 1;
|
||||
}
|
||||
|
||||
print ("blink js OK");
|
21
third_party/jerryscript/targets/mbed/js/main.js
vendored
Normal file
21
third_party/jerryscript/targets/mbed/js/main.js
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
function sysloop (ticknow)
|
||||
{
|
||||
blink ();
|
||||
}
|
||||
|
||||
print ("main js OK");
|
12
third_party/jerryscript/targets/mbed/module.json
vendored
Normal file
12
third_party/jerryscript/targets/mbed/module.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"name": "jerry",
|
||||
"version": "0.0.1",
|
||||
"bin": "./source",
|
||||
"private": true,
|
||||
"description": "JerryScript in mbed",
|
||||
"author": "",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"mbed-drivers": "^1.5.0"
|
||||
}
|
||||
}
|
68
third_party/jerryscript/targets/mbed/readme.md
vendored
Normal file
68
third_party/jerryscript/targets/mbed/readme.md
vendored
Normal file
|
@ -0,0 +1,68 @@
|
|||
This folder contains files to run JerryScript in mbed / for:
|
||||
|
||||
* Freedom-K64F (k64)
|
||||
* Discovery-STM32F4 (stm32f4)
|
||||
* Discovery-STM32F429ZI (stm32f429i)
|
||||
* Nucleo-F401RE (nucleo)
|
||||
|
||||
####Yotta
|
||||
You need to install yotta before proceeding. Please visit [Yotta docs page](http://yottadocs.mbed.com/#installing-on-linux).
|
||||
|
||||
####Cross-compiler
|
||||
For cross-compilation the GCC 5.2.1 is suggested to be used. All the supported targets were tested with this version. If you don't have any GCC compiler installed, please visit [this](https://launchpad.net/gcc-arm-embedded/+download) page to download GCC 5.2.1.
|
||||
|
||||
####How to build a target
|
||||
Navigate to your JerryScript root folder (after you cloned this repository into the targets folder) and use the following command:
|
||||
|
||||
```
|
||||
make -f targets/mbed/Makefile.mbed board=$(TARGET)
|
||||
```
|
||||
Where the `$(TARGET)` is one of the following options: `k64f`, `stm32f4`, `stm32f429i` or `nucleo`.
|
||||
This command will create a new folder for your target and build the jerryscript and mbed OS into that folder.
|
||||
|
||||
####How to build a completely new target
|
||||
If you want to build a new target (which is not available in this folder) you have to modify the makefile.
|
||||
You have to add the new board name to the `TARGET_LIST` and you have to add a new branch with the new `YOTTA_TARGET` and a new `TARGET_DIR` path (if it neccessary) to the if at the top in the Makefile (just as you see right now).
|
||||
There is a little code snippet:
|
||||
|
||||
```
|
||||
ifeq ($(TARGET), k64f)
|
||||
YOTTA_TARGET = frdm-k64f-gcc
|
||||
TARGET_DIR ?= /media/$(USER)/MBED
|
||||
else ifeq ($(TARGET), stm32f4)
|
||||
YOTTA_TARGET =
|
||||
```
|
||||
|
||||
Basically, you can create a new target in this way (If the mbed OS support your board).
|
||||
|
||||
#####Let's get into the details!
|
||||
1. The next rule is the `jerry` rule. This rule builds the JerryScript and copy the output files into the target libjerry folder. Two files will be generated at `targets/mbed/libjerry`:
|
||||
* libjerrycore.a
|
||||
* libfdlibm.a
|
||||
|
||||
You can run this rule with the following command:
|
||||
- `make -f targets/mbed/Makefile.mbed board=$(TARGET) jerry`
|
||||
|
||||
2. The next rule is the `js2c`. This rule calls a `js2c.py` python script from the `jerryscript/targets/tools` and creates the JavaScript builtin file into the `targets/mbed/source/` folder. This file is the `jerry_targetjs.h`. You can run this rule with the follwoing command:
|
||||
|
||||
- `make -f targets/mbed/Makefile.mbed board=$(TARGET) js2c`
|
||||
|
||||
3. The last rule is the `yotta`. This rule sets the yotta target and install the mbed-drivers module, install the dependencies for the mbed OS and finaly creates the mbed binary file. The binary file will be genrated at `targets/mbed/build/$(YOTTA_TARGET)/source/jerry.bin`. You can run this rule with the following command:
|
||||
|
||||
- `make -f targets/mbed/Makefile.mbed board=$(TARGET) yotta`
|
||||
|
||||
4. Optional rule: `clean`. It removes the build folder from the mbed and jerry. You can run this rule with this command:
|
||||
|
||||
- `make -f targets/mbed/Makefile.mbed board=$(TARGET) clean`
|
||||
|
||||
#####Flashing
|
||||
When the build is finished you can flash the binary into your board if you want. In case of ST boards you have to install the `st-link` software. Please visit [this page](https://github.com/texane/stlink) to install STLink-v2.
|
||||
You can flash your binary into your board with the following command:
|
||||
```
|
||||
make -f targets/mbed/Makefile.mbed board=$(TARGET) flash
|
||||
```
|
||||
The flash rule grabs the binary and copies it to the mounted board or use the STLink-v2 to flash.
|
||||
When the status LED of the board stops blinking, press RESET button on the board to execute JerryScript led flashing sample program in js folder.
|
||||
|
||||
###Note
|
||||
If you use an STM32F4 board your build will stop with missing header errors. To fix this error please visit to [this page](http://browser.sed.hu/blog/20160407/how-run-javascripts-jerryscript-mbed) and read about the fix in the `New target for STM32F4` block.
|
149
third_party/jerryscript/targets/mbed/source/jerry_extapi.cpp
vendored
Normal file
149
third_party/jerryscript/targets/mbed/source/jerry_extapi.cpp
vendored
Normal file
|
@ -0,0 +1,149 @@
|
|||
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
#include "jerry_extapi.h"
|
||||
|
||||
#include "native_mbed.h"
|
||||
|
||||
#ifndef MIN
|
||||
#define MIN(A,B) ((A)<(B)?(A):(B))
|
||||
#endif
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#define __UNSED__ __attribute__((unused))
|
||||
|
||||
#define DECLARE_HANDLER(NAME) \
|
||||
static jerry_value_t \
|
||||
NAME ## _handler (const jerry_value_t func_value __UNSED__, \
|
||||
const jerry_value_t this_value __UNSED__, \
|
||||
const jerry_value_t args[], \
|
||||
const jerry_length_t args_cnt )
|
||||
|
||||
#define REGISTER_HANDLER(NAME) \
|
||||
register_native_function ( # NAME, NAME ## _handler)
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
DECLARE_HANDLER(assert)
|
||||
{
|
||||
if (args_cnt == 1
|
||||
&& jerry_value_is_boolean (args[0])
|
||||
&& jerry_get_boolean_value (args[0]))
|
||||
{
|
||||
printf (">> Jerry assert true\r\n");
|
||||
return jerry_create_boolean (true);
|
||||
}
|
||||
printf ("ERROR: Script assertion failed\n");
|
||||
exit (JERRY_STANDALONE_EXIT_CODE_FAIL);
|
||||
return jerry_create_boolean (false);
|
||||
}
|
||||
|
||||
DECLARE_HANDLER(led)
|
||||
{
|
||||
jerry_value_t ret_val;
|
||||
|
||||
if (args_cnt < 2)
|
||||
{
|
||||
ret_val = jerry_create_boolean (false);
|
||||
printf ("Error: invalid arguments number!\r\n");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
if (!(jerry_value_is_number (args[0])
|
||||
&& jerry_value_is_number (args[1])))
|
||||
{
|
||||
ret_val = jerry_create_boolean (false);
|
||||
printf ("Error: arguments must be numbers!\r\n");
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
int port, value;
|
||||
port = (int) jerry_get_number_value (args[0]);
|
||||
value = (int) jerry_get_number_value (args[1]);
|
||||
|
||||
if (port >= 0 && port <= 3)
|
||||
{
|
||||
native_led (port, value);
|
||||
ret_val = jerry_create_boolean (true);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret_val = jerry_create_boolean (false);
|
||||
}
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static bool
|
||||
register_native_function (const char* name,
|
||||
jerry_external_handler_t handler)
|
||||
{
|
||||
jerry_value_t global_object_val = jerry_get_global_object ();
|
||||
jerry_value_t reg_function = jerry_create_external_function (handler);
|
||||
|
||||
bool is_ok = true;
|
||||
|
||||
if (!(jerry_value_is_function (reg_function)
|
||||
&& jerry_value_is_constructor (reg_function)))
|
||||
{
|
||||
is_ok = false;
|
||||
printf ("Error: create_external_function failed !!!\r\n");
|
||||
jerry_release_value (global_object_val);
|
||||
jerry_release_value (reg_function);
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
if (jerry_value_has_error_flag (reg_function))
|
||||
{
|
||||
is_ok = false;
|
||||
printf ("Error: create_external_function has error flag! \n\r");
|
||||
jerry_release_value (global_object_val);
|
||||
jerry_release_value (reg_function);
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
jerry_value_t jerry_name = jerry_create_string ((jerry_char_t *) name);
|
||||
|
||||
jerry_value_t set_result = jerry_set_property (global_object_val,
|
||||
jerry_name,
|
||||
reg_function);
|
||||
|
||||
|
||||
if (jerry_value_has_error_flag (set_result))
|
||||
{
|
||||
is_ok = false;
|
||||
printf ("Error: register_native_function failed: [%s]\r\n", name);
|
||||
}
|
||||
|
||||
jerry_release_value (jerry_name);
|
||||
jerry_release_value (global_object_val);
|
||||
jerry_release_value (reg_function);
|
||||
jerry_release_value (set_result);
|
||||
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
void js_register_functions (void)
|
||||
{
|
||||
REGISTER_HANDLER (assert);
|
||||
REGISTER_HANDLER (led);
|
||||
}
|
24
third_party/jerryscript/targets/mbed/source/jerry_extapi.h
vendored
Normal file
24
third_party/jerryscript/targets/mbed/source/jerry_extapi.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __JERRY_EXTAPI_H__
|
||||
#define __JERRY_EXTAPI_H__
|
||||
|
||||
#define JERRY_STANDALONE_EXIT_CODE_OK (0)
|
||||
#define JERRY_STANDALONE_EXIT_CODE_FAIL (1)
|
||||
|
||||
void js_register_functions (void);
|
||||
|
||||
#endif
|
128
third_party/jerryscript/targets/mbed/source/jerry_run.cpp
vendored
Normal file
128
third_party/jerryscript/targets/mbed/source/jerry_run.cpp
vendored
Normal file
|
@ -0,0 +1,128 @@
|
|||
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
#include "jerry_extapi.h"
|
||||
#include "jerry_run.h"
|
||||
|
||||
static const char* fn_sys_loop_name = "sysloop";
|
||||
|
||||
int js_entry (const char *source_p, const size_t source_size)
|
||||
{
|
||||
const jerry_char_t *jerry_src = (const jerry_char_t *) source_p;
|
||||
jerry_init (JERRY_INIT_EMPTY);
|
||||
uint8_t ret_code = 0;
|
||||
|
||||
js_register_functions ();
|
||||
|
||||
jerry_value_t parsed_code = jerry_parse (jerry_src, source_size, false);
|
||||
|
||||
if (!jerry_value_has_error_flag (parsed_code))
|
||||
{
|
||||
jerry_value_t ret_value = jerry_run (parsed_code);
|
||||
|
||||
if (jerry_value_has_error_flag (ret_value))
|
||||
{
|
||||
printf ("Error: ret_value has an error flag!\r\n");
|
||||
return ret_code = -1;
|
||||
}
|
||||
|
||||
jerry_release_value (ret_value);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf ("Error: jerry_parse failed!\r\n");
|
||||
ret_code = -1;
|
||||
}
|
||||
|
||||
jerry_release_value (parsed_code);
|
||||
|
||||
return ret_code;
|
||||
}
|
||||
|
||||
int js_eval (const char *source_p, const size_t source_size)
|
||||
{
|
||||
int status = 0;
|
||||
|
||||
jerry_value_t ret_val = jerry_eval ((jerry_char_t *) source_p,
|
||||
source_size,
|
||||
false);
|
||||
|
||||
if (jerry_value_has_error_flag (ret_val))
|
||||
{
|
||||
printf ("Error: jerry_eval failed!\r\n");
|
||||
status = -1;
|
||||
}
|
||||
|
||||
jerry_release_value (ret_val);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int js_loop (uint32_t ticknow)
|
||||
{
|
||||
int status = 0;
|
||||
jerry_value_t global_obj = jerry_get_global_object ();
|
||||
jerry_value_t sys_name = jerry_create_string ((const jerry_char_t *) fn_sys_loop_name);
|
||||
jerry_value_t sysloop_func = jerry_get_property (global_obj, sys_name);
|
||||
|
||||
jerry_release_value (sys_name);
|
||||
|
||||
if (jerry_value_has_error_flag (sysloop_func))
|
||||
{
|
||||
printf ("Error: '%s' not defined!!!\r\n", fn_sys_loop_name);
|
||||
jerry_release_value (global_obj);
|
||||
jerry_release_value (sysloop_func);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!jerry_value_is_function (sysloop_func))
|
||||
{
|
||||
printf ("Error: '%s' is not a function!!!\r\n", fn_sys_loop_name);
|
||||
jerry_release_value (global_obj);
|
||||
jerry_release_value (sysloop_func);
|
||||
return -2;
|
||||
}
|
||||
|
||||
jerry_value_t val_args[1];
|
||||
uint16_t val_argv = 1;
|
||||
|
||||
val_args[0] = jerry_create_number (ticknow);
|
||||
|
||||
jerry_value_t ret_val_sysloop = jerry_call_function (sysloop_func,
|
||||
global_obj,
|
||||
val_args,
|
||||
val_argv);
|
||||
if (jerry_value_has_error_flag (ret_val_sysloop))
|
||||
{
|
||||
status = -3;
|
||||
}
|
||||
|
||||
jerry_release_value (global_obj);
|
||||
jerry_release_value (ret_val_sysloop);
|
||||
jerry_release_value (sysloop_func);
|
||||
jerry_release_value (val_args[0]);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void js_exit (void)
|
||||
{
|
||||
jerry_cleanup ();
|
||||
}
|
24
third_party/jerryscript/targets/mbed/source/jerry_run.h
vendored
Normal file
24
third_party/jerryscript/targets/mbed/source/jerry_run.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* Copyright 2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __JERRY_RUN_H__
|
||||
#define __JERRY_RUN_H__
|
||||
|
||||
int js_entry (const char *source_p, const size_t source_size);
|
||||
int js_eval (const char *source_p, const size_t source_size);
|
||||
int js_loop (uint32_t ticknow);
|
||||
void js_exit (void);
|
||||
|
||||
#endif
|
73
third_party/jerryscript/targets/mbed/source/main.cpp
vendored
Normal file
73
third_party/jerryscript/targets/mbed/source/main.cpp
vendored
Normal file
|
@ -0,0 +1,73 @@
|
|||
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||
* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "mbed-drivers/mbed.h"
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
#include "jerry_run.h"
|
||||
|
||||
#include "jerry_targetjs.h"
|
||||
|
||||
static Serial pc (USBTX, USBRX); //tx, rx
|
||||
|
||||
static int jerry_task_init (void)
|
||||
{
|
||||
int retcode;
|
||||
|
||||
DECLARE_JS_CODES;
|
||||
|
||||
/* run main.js */
|
||||
retcode = js_entry (js_codes[0].source, js_codes[0].length);
|
||||
if (retcode != 0)
|
||||
{
|
||||
printf ("js_entry failed code(%d) [%s]\r\n", retcode, js_codes[0].name);
|
||||
js_exit ();
|
||||
return -1;
|
||||
}
|
||||
/* run rest of the js files */
|
||||
for (int src = 1; js_codes[src].source; src++)
|
||||
{
|
||||
retcode = js_eval (js_codes[src].source, js_codes[src].length);
|
||||
if (retcode != 0)
|
||||
{
|
||||
printf ("js_eval failed code(%d) [%s]\r\n", retcode, js_codes[src].name);
|
||||
js_exit ();
|
||||
return -2;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void jerry_loop (void)
|
||||
{
|
||||
static uint32_t _jcount = 0;
|
||||
|
||||
js_loop (_jcount++);
|
||||
}
|
||||
|
||||
void app_start (int, char**)
|
||||
{
|
||||
/* set 9600 baud rate for stdout */
|
||||
pc.baud (9600);
|
||||
|
||||
printf ("\r\nJerryScript in mbed\r\n");
|
||||
printf ("Version: \t%d.%d\n\n", JERRY_API_MAJOR_VERSION, JERRY_API_MINOR_VERSION);
|
||||
|
||||
if (jerry_task_init () == 0)
|
||||
{
|
||||
minar::Scheduler::postCallback(jerry_loop).period(minar::milliseconds(100));
|
||||
}
|
||||
}
|
30
third_party/jerryscript/targets/mbed/source/makejerry.cmake
vendored
Normal file
30
third_party/jerryscript/targets/mbed/source/makejerry.cmake
vendored
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Copyright 2015-2016 Samsung Electronics Co., Ltd.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# application name
|
||||
set(MBEDMODULE "jerry")
|
||||
|
||||
# add include jerry-core
|
||||
set(LJCORE ${CMAKE_CURRENT_LIST_DIR}/../../../)
|
||||
include_directories(${LJCORE})
|
||||
|
||||
# compile flags
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mlittle-endian -mthumb -mcpu=cortex-m4" )
|
||||
|
||||
# link jerryscript
|
||||
set(LJPATH ${CMAKE_CURRENT_LIST_DIR}/../libjerry)
|
||||
set(LJFILES "")
|
||||
set(LJFILES ${LJFILES} ${LJPATH}/libjerrylibm.a)
|
||||
set(LJFILES ${LJFILES} ${LJPATH}/libjerrycore.a)
|
||||
target_link_libraries(${MBEDMODULE} ${LJFILES})
|
25
third_party/jerryscript/targets/mbed/source/native_mbed.cpp
vendored
Normal file
25
third_party/jerryscript/targets/mbed/source/native_mbed.cpp
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include "mbed-drivers/mbed.h"
|
||||
|
||||
#include "native_mbed.h"
|
||||
|
||||
void native_led (int port, int val)
|
||||
{
|
||||
static const PinName portmap[] = { LED1, LED2, LED3, LED4 };
|
||||
static DigitalOut led (portmap[port]);
|
||||
led = val;
|
||||
}
|
21
third_party/jerryscript/targets/mbed/source/native_mbed.h
vendored
Normal file
21
third_party/jerryscript/targets/mbed/source/native_mbed.h
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef __NATIVE_MBED_H__
|
||||
#define __NATIVE_MBED_H__
|
||||
|
||||
void native_led (int port, int val);
|
||||
|
||||
#endif /* !__NATIVE_MBED_H__ */
|
86
third_party/jerryscript/targets/mbed/source/port/jerry_port.c
vendored
Normal file
86
third_party/jerryscript/targets/mbed/source/port/jerry_port.c
vendored
Normal file
|
@ -0,0 +1,86 @@
|
|||
/* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define _BSD_SOURCE
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "jerry-core/jerry-port.h"
|
||||
|
||||
#include "mbed-hal/us_ticker_api.h"
|
||||
|
||||
/**
|
||||
* Provide console message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_console (const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vfprintf (stdout, format, args);
|
||||
va_end (args);
|
||||
} /* jerry_port_console */
|
||||
|
||||
/**
|
||||
* Provide log message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_log (jerry_log_level_t level, /**< log level */
|
||||
const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
(void) level; /* ignore log level */
|
||||
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vfprintf (stderr, format, args);
|
||||
va_end (args);
|
||||
} /* jerry_port_log */
|
||||
|
||||
/**
|
||||
* Implementation of jerry_port_fatal.
|
||||
*/
|
||||
void
|
||||
jerry_port_fatal (jerry_fatal_code_t code, /**< fatal code enum item, */
|
||||
void *lr) /**< return address at time failure occurred */
|
||||
{
|
||||
exit (code);
|
||||
} /* jerry_port_fatal */
|
||||
|
||||
/**
|
||||
* Implementation of jerry_port_get_time_zone.
|
||||
*
|
||||
* @return true - if success
|
||||
*/
|
||||
bool
|
||||
jerry_port_get_time_zone (jerry_time_zone_t *tz_p) /**< timezone pointer */
|
||||
{
|
||||
tz_p->offset = 0;
|
||||
tz_p->daylight_saving_time = 0;
|
||||
return true;
|
||||
} /* jerry_port_get_time_zone */
|
||||
|
||||
/**
|
||||
* Implementation of jerry_port_get_current_time.
|
||||
*
|
||||
* @return current timer's counter value in microseconds
|
||||
*/
|
||||
double
|
||||
jerry_port_get_current_time ()
|
||||
{
|
||||
return (double) us_ticker_read ();
|
||||
} /* jerry_port_get_current_time */
|
8
third_party/jerryscript/targets/mbedos5/.gitignore
vendored
Normal file
8
third_party/jerryscript/targets/mbedos5/.gitignore
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
mbed-os
|
||||
mbed-events
|
||||
.build
|
||||
.mbed
|
||||
mbed_settings.py
|
||||
js/pins.js
|
||||
source/pins.cpp
|
||||
source/jerry_targetjs.h
|
89
third_party/jerryscript/targets/mbedos5/Makefile
vendored
Normal file
89
third_party/jerryscript/targets/mbedos5/Makefile
vendored
Normal file
|
@ -0,0 +1,89 @@
|
|||
# Copyright (c) 2016 ARM Limited
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# USAGE:
|
||||
# specify the board using the command line:
|
||||
# make BOARD=[mbed board name]
|
||||
|
||||
BOARD=$(subst [mbed] ,,$(shell mbed target))
|
||||
HEAPSIZE=16
|
||||
|
||||
DEBUG=0
|
||||
NO_JS=0
|
||||
MBED_VERBOSE=0
|
||||
|
||||
MBED_CLI_FLAGS=-j0 --source . --source ../../
|
||||
|
||||
EXTRA_SRC=
|
||||
|
||||
ifneq ($(EXTRA_SRC),)
|
||||
EXTRA_SRC_MOD=--source $(subst :, --source ,$(EXTRA_SRC))
|
||||
MBED_CLI_FLAGS += $(EXTRA_SRC_MOD)
|
||||
endif
|
||||
|
||||
EXTERN_BUILD_DIR=
|
||||
|
||||
ifneq ($(EXTERN_BUILD_DIR),)
|
||||
MBED_CLI_FLAGS += --build $(EXTERN_BUILD_DIR)
|
||||
endif
|
||||
|
||||
ifeq ($(DEBUG), 1)
|
||||
MBED_CLI_FLAGS += -o debug-info
|
||||
endif
|
||||
|
||||
ifeq ($(MBED_VERBOSE), 1)
|
||||
MBED_CLI_FLAGS += -v
|
||||
else ifeq ($(MBED_VERBOSE), 2)
|
||||
MBED_CLI_FLAGS += -vv
|
||||
endif
|
||||
|
||||
MBED_CLI_FLAGS += -D "CONFIG_MEM_HEAP_AREA_SIZE=(1024*$(HEAPSIZE))"
|
||||
MBED_CLI_FLAGS += -t GCC_ARM
|
||||
|
||||
.PHONY: all js2c getlibs rebuild library
|
||||
all: source/jerry_targetjs.h source/pins.cpp .mbed ../../.mbedignore
|
||||
mbed target $(BOARD)
|
||||
mbed compile $(MBED_CLI_FLAGS)
|
||||
|
||||
library: .mbed ../../.mbedignore
|
||||
# delete encoded js code if it exists
|
||||
rm -f source/jerry_targetjs.h
|
||||
mbed target $(BOARD)
|
||||
mbed compile $(MBED_CLI_FLAGS) --library
|
||||
|
||||
clean:
|
||||
rm -rf .build/$(BOARD)
|
||||
|
||||
js2c: js/main.js js/flash_leds.js
|
||||
python ../tools/js2c.py --ignore pins.js
|
||||
|
||||
source/pins.cpp:
|
||||
python tools/generate_pins.py ${BOARD}
|
||||
|
||||
ifeq ($(NO_JS),0)
|
||||
source/jerry_targetjs.h: js2c
|
||||
else
|
||||
source/jerry_targetjs.h: ;
|
||||
endif
|
||||
|
||||
getlibs: .mbed
|
||||
|
||||
.mbed:
|
||||
mbed config root .
|
||||
mbed toolchain GCC_ARM
|
||||
mbed target $(BOARD)
|
||||
mbed deploy
|
||||
|
||||
../../.mbedignore:
|
||||
cp ./template-mbedignore.txt ../../.mbedignore
|
75
third_party/jerryscript/targets/mbedos5/README.md
vendored
Normal file
75
third_party/jerryscript/targets/mbedos5/README.md
vendored
Normal file
|
@ -0,0 +1,75 @@
|
|||
# JerryScript with mbed OS 5
|
||||
|
||||
TL;DR? jump straight to [quickstart](#quick-start)
|
||||
|
||||
## Introduction
|
||||
|
||||
This directory contains the necessary code to build JerryScript for devices
|
||||
capable of running mbed OS 5. It has been tested with the following boards
|
||||
so far:
|
||||
|
||||
- [Nordic Semiconductor NRF52 Development Kit](https://developer.mbed.org/platforms/Nordic-nRF52-DK/)
|
||||
- [NXP Freedom K64F](https://developer.mbed.org/platforms/FRDM-K64F/)
|
||||
- [STM NUCLEO F401RE](https://developer.mbed.org/platforms/ST-Nucleo-F401RE/)
|
||||
- [Silicon Labs EFM32 Giant Gecko](https://developer.mbed.org/platforms/EFM32-Giant-Gecko/)
|
||||
|
||||
## Features
|
||||
|
||||
### Peripheral Drivers
|
||||
|
||||
Peripheral Drivers are intended as a 1-to-1 mapping to mbed C++ APIs, with a few
|
||||
differences (due to differences between JavaScript and C++ like lack of operator
|
||||
overloading).
|
||||
|
||||
- [DigitalOut](https://docs.mbed.com/docs/mbed-os-api-reference/en/5.1/APIs/io/DigitalOut/)
|
||||
- [InterruptIn](https://docs.mbed.com/docs/mbed-os-api-reference/en/5.1/APIs/io/InterruptIn/)
|
||||
- [I2C](https://docs.mbed.com/docs/mbed-os-api-reference/en/5.1/APIs/interfaces/digital/I2C/)
|
||||
- setInterval and setTimeout using [mbed-event](https://github.com/ARMmbed/mbed-events)
|
||||
|
||||
## Dependencies
|
||||
|
||||
### mbed CLI
|
||||
|
||||
mbed CLI is used as the build tool for mbed OS 5. You can find out how to install
|
||||
it in the [official documentation](https://docs.mbed.com/docs/mbed-os-handbook/en/5.1/dev_tools/cli/#installing-mbed-cli).
|
||||
|
||||
### arm-none-eabi-gcc
|
||||
|
||||
arm-none-eabi-gcc is the only currently tested compiler for jerryscript on mbed,
|
||||
and instructions for building can be found as part of the mbed-cli installation
|
||||
instructions above.
|
||||
|
||||
### make
|
||||
|
||||
make is used to automate the process of fetching dependencies, and making sure that
|
||||
mbed-cli is called with the correct arguments.
|
||||
|
||||
### (optional) jshint
|
||||
|
||||
jshint is used to statically check your JavaScript code, as part of the build process.
|
||||
This ensures that pins you are using in your code are available on your chosen target
|
||||
platform.
|
||||
|
||||
## Quick Start
|
||||
|
||||
Once you have all of your dependencies installed, you can build the project as follows:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/Samsung/jerryscript
|
||||
cd jerryscript/targets/mbedos5
|
||||
make getlibs
|
||||
# NRF52 Development Kit:
|
||||
make BOARD=NRF52_DK
|
||||
# FRDM K64F
|
||||
make BOARD=K64F
|
||||
```
|
||||
|
||||
The produced file (in .build/**[BOARD]**/GCC_ARM) can then be uploaded to your board, and will
|
||||
run when you press reset.
|
||||
|
||||
If you make a modification to main.js, you can simply rerun make, and it will remember your
|
||||
previous choice of board:
|
||||
|
||||
```bash
|
||||
make
|
||||
```
|
|
@ -0,0 +1,22 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_DIGITALOUT_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_DIGITALOUT_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
DECLARE_CLASS_CONSTRUCTOR(DigitalOut);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_DIGITALOUT_H
|
22
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/I2C-js.h
vendored
Normal file
22
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/I2C-js.h
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_I2C_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_I2C_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
DECLARE_CLASS_CONSTRUCTOR(I2C);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_I2C_H
|
|
@ -0,0 +1,22 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_INTERRUPTIN_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_INTERRUPTIN_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
DECLARE_CLASS_CONSTRUCTOR(InterruptIn);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_INTERRUPTIN_H
|
23
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/assert-js.h
vendored
Normal file
23
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/assert-js.h
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_ASSERT_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_ASSERT_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
|
||||
DECLARE_GLOBAL_FUNCTION(assert);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_ASSERT_H
|
23
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/gc-js.h
vendored
Normal file
23
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/gc-js.h
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_GC_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_GC_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
|
||||
DECLARE_GLOBAL_FUNCTION(gc);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_GC_H
|
36
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/lib_drivers.h
vendored
Normal file
36
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/lib_drivers.h
vendored
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_LIB_DRIVERS_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_LIB_DRIVERS_H
|
||||
|
||||
#include "jerryscript-mbed-drivers/InterruptIn-js.h"
|
||||
#include "jerryscript-mbed-drivers/DigitalOut-js.h"
|
||||
#include "jerryscript-mbed-drivers/setInterval-js.h"
|
||||
#include "jerryscript-mbed-drivers/setTimeout-js.h"
|
||||
#include "jerryscript-mbed-drivers/assert-js.h"
|
||||
#include "jerryscript-mbed-drivers/I2C-js.h"
|
||||
#include "jerryscript-mbed-drivers/gc-js.h"
|
||||
|
||||
DECLARE_JS_WRAPPER_REGISTRATION (base) {
|
||||
REGISTER_GLOBAL_FUNCTION(assert);
|
||||
REGISTER_GLOBAL_FUNCTION(gc);
|
||||
REGISTER_GLOBAL_FUNCTION(setInterval);
|
||||
REGISTER_GLOBAL_FUNCTION(setTimeout);
|
||||
REGISTER_CLASS_CONSTRUCTOR(DigitalOut);
|
||||
REGISTER_CLASS_CONSTRUCTOR(I2C);
|
||||
REGISTER_CLASS_CONSTRUCTOR(InterruptIn);
|
||||
}
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_LIB_DRIVERS_H
|
|
@ -0,0 +1,22 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_SET_INTERVAL_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_SET_INTERVAL_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
DECLARE_GLOBAL_FUNCTION(setInterval);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_SET_INTERVAL_H
|
|
@ -0,0 +1,22 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_DRIVERS_SET_TIMEOUT_H
|
||||
#define _JERRYSCRIPT_MBED_DRIVERS_SET_TIMEOUT_H
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
DECLARE_GLOBAL_FUNCTION(setTimeout);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_DRIVERS_SET_TIMEOUT_H
|
|
@ -0,0 +1,131 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
#include "mbed.h"
|
||||
|
||||
/**
|
||||
* DigitalOut#write (native JavaScript method)
|
||||
*
|
||||
* Writes a binary value to a DigitalOut.
|
||||
*
|
||||
* @param value 1 or 0, specifying whether the output pin is high or low,
|
||||
* respectively
|
||||
* @returns undefined, or an error if invalid arguments are provided.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(DigitalOut, write) {
|
||||
CHECK_ARGUMENT_COUNT(DigitalOut, write, (args_count == 1));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(DigitalOut, write, 0, number);
|
||||
|
||||
// Extract native DigitalOut pointer
|
||||
uintptr_t ptr_val;
|
||||
jerry_get_object_native_handle(this_obj, &ptr_val);
|
||||
|
||||
DigitalOut* native_ptr = reinterpret_cast<DigitalOut*>(ptr_val);
|
||||
|
||||
int arg0 = jerry_get_number_value(args[0]);
|
||||
native_ptr->write(arg0);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* DigitalOut#read (native JavaScript method)
|
||||
*
|
||||
* Reads the current status of a DigitalOut
|
||||
*
|
||||
* @returns 1 if the pin is currently high, or 0 if the pin is currently low.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(DigitalOut, read) {
|
||||
CHECK_ARGUMENT_COUNT(DigitalOut, read, (args_count == 0));
|
||||
|
||||
// Extract native DigitalOut pointer
|
||||
uintptr_t ptr_val;
|
||||
jerry_get_object_native_handle(this_obj, &ptr_val);
|
||||
|
||||
DigitalOut* native_ptr = reinterpret_cast<DigitalOut*>(ptr_val);
|
||||
|
||||
int result = native_ptr->read();
|
||||
return jerry_create_number(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* DigitalOut#is_connected (native JavaScript method)
|
||||
*
|
||||
* @returns 0 if the DigitalOut is set to NC, or 1 if it is connected to an
|
||||
* actual pin
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(DigitalOut, is_connected) {
|
||||
CHECK_ARGUMENT_COUNT(DigitalOut, is_connected, (args_count == 0));
|
||||
|
||||
// Extract native DigitalOut pointer
|
||||
uintptr_t ptr_val;
|
||||
jerry_get_object_native_handle(this_obj, &ptr_val);
|
||||
|
||||
DigitalOut* native_ptr = reinterpret_cast<DigitalOut*>(ptr_val);
|
||||
|
||||
int result = native_ptr->is_connected();
|
||||
return jerry_create_number(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* DigitalOut#destructor
|
||||
*
|
||||
* Called if/when the DigitalOut is GC'ed.
|
||||
*/
|
||||
void NAME_FOR_CLASS_NATIVE_DESTRUCTOR(DigitalOut)(const uintptr_t native_handle) {
|
||||
delete reinterpret_cast<DigitalOut*>(native_handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* DigitalOut (native JavaScript constructor)
|
||||
*
|
||||
* @param pin_name mbed pin to connect the DigitalOut to.
|
||||
* @param value (optional) Initial value of the DigitalOut.
|
||||
* @returns a JavaScript object representing a DigitalOut.
|
||||
*/
|
||||
DECLARE_CLASS_CONSTRUCTOR(DigitalOut) {
|
||||
CHECK_ARGUMENT_COUNT(DigitalOut, __constructor, (args_count == 1 || args_count == 2));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(DigitalOut, __constructor, 0, number);
|
||||
CHECK_ARGUMENT_TYPE_ON_CONDITION(DigitalOut, __constructor, 1, number, (args_count == 2));
|
||||
|
||||
uintptr_t native_ptr;
|
||||
|
||||
// Call correct overload of DigitalOut::DigitalOut depending on the
|
||||
// arguments passed.
|
||||
PinName pin_name = PinName(jerry_get_number_value(args[0]));
|
||||
|
||||
switch (args_count) {
|
||||
case 1:
|
||||
native_ptr = (uintptr_t) new DigitalOut(pin_name);
|
||||
break;
|
||||
case 2:
|
||||
int value = static_cast<int>(jerry_get_number_value(args[1]));
|
||||
native_ptr = (uintptr_t) new DigitalOut(pin_name, value);
|
||||
break;
|
||||
}
|
||||
|
||||
// create the jerryscript object
|
||||
jerry_value_t js_object = jerry_create_object();
|
||||
jerry_set_object_native_handle(js_object, native_ptr, NAME_FOR_CLASS_NATIVE_DESTRUCTOR(DigitalOut));
|
||||
|
||||
// attach methods
|
||||
ATTACH_CLASS_FUNCTION(js_object, DigitalOut, write);
|
||||
ATTACH_CLASS_FUNCTION(js_object, DigitalOut, read);
|
||||
ATTACH_CLASS_FUNCTION(js_object, DigitalOut, is_connected);
|
||||
|
||||
return js_object;
|
||||
}
|
270
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/source/I2C.cpp
vendored
Normal file
270
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/source/I2C.cpp
vendored
Normal file
|
@ -0,0 +1,270 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
#include "jerryscript-mbed-drivers/I2C-js.h"
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
#include "mbed.h"
|
||||
|
||||
/**
|
||||
* I2C#frequency (native JavaScript method)
|
||||
*
|
||||
* Set the frequency of the I2C bus.
|
||||
*
|
||||
* @param frequency New I2C Frequency
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(I2C, frequency) {
|
||||
CHECK_ARGUMENT_COUNT(I2C, frequency, (args_count == 1));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, frequency, 0, number);
|
||||
|
||||
// Unwrap native I2C object
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
I2C* native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
int hz = jerry_get_number_value(args[0]);
|
||||
native_ptr->frequency(hz);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* I2C#read (native JavaScript method)
|
||||
*
|
||||
* Read data from the I2C bus.
|
||||
*
|
||||
* @overload I2C#read(int)
|
||||
* Read a single byte from the I2C bus
|
||||
*
|
||||
* @param ack indicates if the byte is to be acknowledged (1 => acknowledge)
|
||||
*
|
||||
* @returns array: Data read from the I2C bus
|
||||
*
|
||||
* @overload I2C#read(int, array, int)
|
||||
* Read a series of bytes from the I2C bus
|
||||
*
|
||||
* @param address I2C address to read from
|
||||
* @param data Array to read into
|
||||
* @param length Length of data to read
|
||||
*
|
||||
* @returns array: Data read from the I2C bus
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(I2C, read) {
|
||||
CHECK_ARGUMENT_COUNT(I2C, read, (args_count == 1 || args_count == 3 || args_count == 4));
|
||||
|
||||
if (args_count == 1) {
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, read, 0, number);
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
I2C *native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
int data = jerry_get_number_value(args[0]);
|
||||
int result = native_ptr->read(data);
|
||||
|
||||
return jerry_create_number(result);
|
||||
} else {
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, read, 0, number);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, read, 1, array);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, read, 2, number);
|
||||
|
||||
CHECK_ARGUMENT_TYPE_ON_CONDITION(I2C, read, 3, boolean, (args_count == 4));
|
||||
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
I2C *native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
const uint32_t data_len = jerry_get_array_length(args[1]);
|
||||
|
||||
int address = jerry_get_number_value(args[0]);
|
||||
int length = jerry_get_number_value(args[2]);
|
||||
|
||||
char *data = new char[data_len];
|
||||
|
||||
bool repeated = false;
|
||||
if (args_count == 4) {
|
||||
repeated = jerry_get_boolean_value(args[3]);
|
||||
}
|
||||
|
||||
int result = native_ptr->read(address, data, length, repeated);
|
||||
|
||||
jerry_value_t out_array = jerry_create_array(data_len);
|
||||
|
||||
for (uint32_t i = 0; i < data_len; i++) {
|
||||
jerry_value_t val = jerry_create_number(double(data[i]));
|
||||
jerry_set_property_by_index(out_array, i, val);
|
||||
jerry_release_value(val);
|
||||
}
|
||||
|
||||
delete[] data;
|
||||
|
||||
if (result == 0) {
|
||||
// ACK
|
||||
return out_array;
|
||||
} else {
|
||||
// NACK
|
||||
const char *error_msg = "NACK received from I2C bus";
|
||||
|
||||
jerry_release_value(out_array);
|
||||
return jerry_create_error(JERRY_ERROR_COMMON, reinterpret_cast<const jerry_char_t *>(error_msg));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* I2C#write (native JavaScript method)
|
||||
*
|
||||
* @overload I2C#write(int)
|
||||
* Write a single byte to the I2C bus
|
||||
*
|
||||
* @param data Data byte to write to the I2C bus
|
||||
*
|
||||
* @returns 1 on success, 0 on failure
|
||||
*
|
||||
* @overload I2C#write(int, array, int, bool)
|
||||
* Write an array of data to a certain address on the I2C bus
|
||||
*
|
||||
* @param address 8-bit I2C slave address
|
||||
* @param data Array of bytes to send
|
||||
* @param length Length of data to write
|
||||
* @param repeated (optional) If true, do not send stop at end.
|
||||
*
|
||||
* @returns 0 on success, non-0 on failure
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(I2C, write) {
|
||||
CHECK_ARGUMENT_COUNT(I2C, write, (args_count == 1 || args_count == 3 || args_count == 4));
|
||||
|
||||
if (args_count == 1) {
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, write, 0, number);
|
||||
|
||||
// Extract native I2C object
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
I2C *native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
// Unwrap arguments
|
||||
int data = jerry_get_number_value(args[0]);
|
||||
|
||||
int result = native_ptr->write(data);
|
||||
return jerry_create_number(result);
|
||||
} else {
|
||||
// 3 or 4
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, write, 0, number);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, write, 1, array);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, write, 2, number);
|
||||
CHECK_ARGUMENT_TYPE_ON_CONDITION(I2C, write, 3, boolean, (args_count == 4));
|
||||
|
||||
// Extract native I2C object
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
I2C *native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
// Unwrap arguments
|
||||
int address = jerry_get_number_value(args[0]);
|
||||
const uint32_t data_len = jerry_get_array_length(args[1]);
|
||||
int length = jerry_get_number_value(args[2]);
|
||||
bool repeated = args_count == 4 && jerry_get_boolean_value(args[3]);
|
||||
|
||||
// Construct data byte array
|
||||
char *data = new char[data_len];
|
||||
for (uint32_t i = 0; i < data_len; i++) {
|
||||
data[i] = jerry_get_number_value(jerry_get_property_by_index(args[1], i));
|
||||
}
|
||||
|
||||
int result = native_ptr->write(address, data, length, repeated);
|
||||
|
||||
// free dynamically allocated resources
|
||||
delete[] data;
|
||||
|
||||
return jerry_create_number(result);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* I2C#start (native JavaScript method)
|
||||
*
|
||||
* Creates a start condition on the I2C bus.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(I2C, start)
|
||||
{
|
||||
CHECK_ARGUMENT_COUNT(I2C, start, (args_count == 0));
|
||||
|
||||
// Extract native I2C object
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
I2C *native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
native_ptr->start();
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* I2C#stop (native JavaScript method)
|
||||
*
|
||||
* Creates a stop condition on the I2C bus.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(I2C, stop)
|
||||
{
|
||||
CHECK_ARGUMENT_COUNT(I2C, stop, (args_count == 0));
|
||||
|
||||
// Extract native I2C object
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
I2C *native_ptr = reinterpret_cast<I2C*>(native_handle);
|
||||
|
||||
native_ptr->stop();
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* I2C#destructor
|
||||
*
|
||||
* Called if/when the I2C object is GC'ed.
|
||||
*/
|
||||
void NAME_FOR_CLASS_NATIVE_DESTRUCTOR(I2C) (uintptr_t handle) {
|
||||
delete reinterpret_cast<I2C*>(handle);
|
||||
}
|
||||
|
||||
/**
|
||||
* I2C (native JavaScript constructor)
|
||||
*
|
||||
* @param sda mbed pin for I2C data
|
||||
* @param scl mbed pin for I2C clock
|
||||
* @returns a JavaScript object representing the I2C bus.
|
||||
*/
|
||||
DECLARE_CLASS_CONSTRUCTOR(I2C) {
|
||||
CHECK_ARGUMENT_COUNT(I2C, __constructor, (args_count == 2));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, __constructor, 0, number);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(I2C, __constructor, 1, number);
|
||||
|
||||
int sda = jerry_get_number_value(args[0]);
|
||||
int scl = jerry_get_number_value(args[1]);
|
||||
|
||||
uintptr_t native_handle = (uintptr_t)new I2C((PinName)sda, (PinName)scl);
|
||||
|
||||
jerry_value_t js_object = jerry_create_object();
|
||||
jerry_set_object_native_handle(js_object, native_handle, NAME_FOR_CLASS_NATIVE_DESTRUCTOR(I2C));
|
||||
|
||||
ATTACH_CLASS_FUNCTION(js_object, I2C, frequency);
|
||||
ATTACH_CLASS_FUNCTION(js_object, I2C, read);
|
||||
ATTACH_CLASS_FUNCTION(js_object, I2C, write);
|
||||
ATTACH_CLASS_FUNCTION(js_object, I2C, start);
|
||||
ATTACH_CLASS_FUNCTION(js_object, I2C, stop);
|
||||
|
||||
return js_object;
|
||||
}
|
|
@ -0,0 +1,218 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
#include "jerryscript-mbed-event-loop/EventLoop.h"
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
#include "mbed.h"
|
||||
|
||||
/**
|
||||
* InterruptIn#rise (native JavaScript method)
|
||||
*
|
||||
* Register a rise callback for an InterruptIn
|
||||
*
|
||||
* @param cb Callback function, or null to detach previously attached callback.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(InterruptIn, rise) {
|
||||
CHECK_ARGUMENT_COUNT(InterruptIn, rise, (args_count == 1));
|
||||
|
||||
// Detach the rise callback when InterruptIn::rise(null) is called
|
||||
if (jerry_value_is_null(args[1])) {
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
InterruptIn *this_interruptin = (InterruptIn*) native_handle;
|
||||
|
||||
jerry_value_t property_name = jerry_create_string((const jerry_char_t*)"cb_rise");
|
||||
jerry_value_t cb_func = jerry_get_property(this_obj, property_name);
|
||||
jerry_release_value(property_name);
|
||||
|
||||
// Only drop the callback if it exists
|
||||
if (jerry_value_is_function(cb_func)) {
|
||||
// Ensure that the EventLoop frees memory used by the callback.
|
||||
mbed::js::EventLoop::getInstance().dropCallback(cb_func);
|
||||
}
|
||||
|
||||
this_interruptin->rise(0);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
// Assuming we actually have a callback now...
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(InterruptIn, rise, 0, function);
|
||||
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
InterruptIn *this_interruptin = reinterpret_cast<InterruptIn*>(native_handle);
|
||||
|
||||
jerry_value_t f = args[0];
|
||||
|
||||
// Pass the function to EventLoop.
|
||||
mbed::Callback<void()> cb = mbed::js::EventLoop::getInstance().wrapFunction(f);
|
||||
this_interruptin->rise(cb);
|
||||
|
||||
// Keep track of our callback internally.
|
||||
jerry_value_t property_name = jerry_create_string((const jerry_char_t*)"cb_rise");
|
||||
jerry_set_property(this_obj, property_name, f);
|
||||
jerry_release_value(property_name);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* InterruptIn#fall (native JavaScript method)
|
||||
*
|
||||
* Register a fall callback for an InterruptIn
|
||||
*
|
||||
* @param cb Callback function, or null to detach previously attached callback.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(InterruptIn, fall) {
|
||||
CHECK_ARGUMENT_COUNT(InterruptIn, fall, (args_count == 1));
|
||||
|
||||
// Detach the fall callback when InterruptIn::fall(null) is called
|
||||
if (jerry_value_is_null(args[1])) {
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
InterruptIn *this_interruptin = (InterruptIn*) native_handle;
|
||||
|
||||
jerry_value_t property_name = jerry_create_string((const jerry_char_t*)"cb_fall");
|
||||
jerry_value_t cb_func = jerry_get_property(this_obj, property_name);
|
||||
jerry_release_value(property_name);
|
||||
|
||||
// Only drop the callback if it exists
|
||||
if (jerry_value_is_function(cb_func)) {
|
||||
// Ensure that the EventLoop frees memory used by the callback.
|
||||
mbed::js::EventLoop::getInstance().dropCallback(cb_func);
|
||||
}
|
||||
|
||||
this_interruptin->fall(0);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
// Assuming we actually have a callback now...
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(InterruptIn, fall, 0, function);
|
||||
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
InterruptIn *this_interruptin = reinterpret_cast<InterruptIn*>(native_handle);
|
||||
|
||||
jerry_value_t f = args[0];
|
||||
|
||||
// Pass the function to EventLoop.
|
||||
mbed::Callback<void()> cb = mbed::js::EventLoop::getInstance().wrapFunction(f);
|
||||
this_interruptin->fall(cb);
|
||||
|
||||
// Keep track of our callback internally.
|
||||
jerry_value_t property_name = jerry_create_string((const jerry_char_t*)"cb_fall");
|
||||
jerry_set_property(this_obj, property_name, f);
|
||||
jerry_release_value(property_name);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* InterruptIn#mode (native JavaScript method)
|
||||
*
|
||||
* Set the mode of the InterruptIn pin.
|
||||
*
|
||||
* @param mode PullUp, PullDown, PullNone
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(InterruptIn, mode) {
|
||||
CHECK_ARGUMENT_COUNT(InterruptIn, mode, (args_count == 1));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(InterruptIn, mode, 0, number);
|
||||
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
|
||||
InterruptIn *native_ptr = reinterpret_cast<InterruptIn*>(native_handle);
|
||||
|
||||
int pull = jerry_get_number_value(args[0]);
|
||||
native_ptr->mode((PinMode)pull);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* InterruptIn#disable_irq (native JavaScript method)
|
||||
*
|
||||
* Disable IRQ. See InterruptIn.h in mbed-os sources for more details.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(InterruptIn, disable_irq) {
|
||||
CHECK_ARGUMENT_COUNT(InterruptIn, disable_irq, (args_count == 0));
|
||||
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
InterruptIn *native_ptr = reinterpret_cast<InterruptIn*>(native_handle);
|
||||
|
||||
native_ptr->disable_irq();
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* InterruptIn#enable_irq (native JavaScript method)
|
||||
*
|
||||
* Enable IRQ. See InterruptIn.h in mbed-os sources for more details.
|
||||
*/
|
||||
DECLARE_CLASS_FUNCTION(InterruptIn, enable_irq) {
|
||||
CHECK_ARGUMENT_COUNT(InterruptIn, enable_irq, (args_count == 0));
|
||||
|
||||
uintptr_t native_handle;
|
||||
jerry_get_object_native_handle(this_obj, &native_handle);
|
||||
InterruptIn *native_ptr = reinterpret_cast<InterruptIn*>(native_handle);
|
||||
|
||||
native_ptr->enable_irq();
|
||||
return jerry_create_undefined();
|
||||
}
|
||||
|
||||
/**
|
||||
* InterruptIn#destructor
|
||||
*
|
||||
* Called if/when the InterruptIn object is GC'ed.
|
||||
*/
|
||||
void NAME_FOR_CLASS_NATIVE_DESTRUCTOR(InterruptIn) (uintptr_t handle) {
|
||||
InterruptIn *native_ptr = reinterpret_cast<InterruptIn*>(handle);
|
||||
|
||||
native_ptr->rise(0);
|
||||
native_ptr->fall(0);
|
||||
delete native_ptr;
|
||||
}
|
||||
|
||||
/**
|
||||
* InterruptIn (native JavaScript constructor)
|
||||
*
|
||||
* @param pin PinName
|
||||
*
|
||||
* @returns JavaScript object wrapping InterruptIn native object
|
||||
*/
|
||||
DECLARE_CLASS_CONSTRUCTOR(InterruptIn) {
|
||||
CHECK_ARGUMENT_COUNT(InterruptIn, __constructor, (args_count == 1));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(InterruptIn, __constructor, 0, number);
|
||||
int pin = jerry_get_number_value(args[0]);
|
||||
|
||||
uintptr_t native_handle = (uintptr_t)new InterruptIn((PinName)pin);
|
||||
jerry_value_t js_object = jerry_create_object();
|
||||
|
||||
jerry_set_object_native_handle(js_object, native_handle, NAME_FOR_CLASS_NATIVE_DESTRUCTOR(InterruptIn));
|
||||
|
||||
ATTACH_CLASS_FUNCTION(js_object, InterruptIn, rise);
|
||||
ATTACH_CLASS_FUNCTION(js_object, InterruptIn, fall);
|
||||
ATTACH_CLASS_FUNCTION(js_object, InterruptIn, mode);
|
||||
ATTACH_CLASS_FUNCTION(js_object, InterruptIn, enable_irq);
|
||||
ATTACH_CLASS_FUNCTION(js_object, InterruptIn, disable_irq);
|
||||
|
||||
return js_object;
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-drivers/assert-js.h"
|
||||
|
||||
/**
|
||||
* assert (native JavaScript function)
|
||||
*
|
||||
* @param condition The condition to assert to be true
|
||||
* @returns undefined if the assertion passes, returns an error if the assertion
|
||||
* fails.
|
||||
*/
|
||||
DECLARE_GLOBAL_FUNCTION(assert) {
|
||||
CHECK_ARGUMENT_COUNT(global, assert, (args_count == 1));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(global, assert, 0, boolean);
|
||||
|
||||
if (!jerry_get_boolean_value(args[0])) {
|
||||
const char* error_msg = "Assertion failed";
|
||||
return jerry_create_error(JERRY_ERROR_TYPE, reinterpret_cast<const jerry_char_t*>(error_msg));
|
||||
}
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
25
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/source/gc.cpp
vendored
Normal file
25
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-drivers/source/gc.cpp
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-drivers/gc-js.h"
|
||||
|
||||
/**
|
||||
* gc (native JavaScript function)
|
||||
*
|
||||
* Manually cause JerryScript to run garbage collection.
|
||||
*/
|
||||
DECLARE_GLOBAL_FUNCTION(gc) {
|
||||
jerry_gc();
|
||||
return jerry_create_undefined();
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-drivers/setInterval-js.h"
|
||||
#include "jerryscript-mbed-event-loop/EventLoop.h"
|
||||
|
||||
/**
|
||||
* setInterval (native JavaScript function)
|
||||
*
|
||||
* Call a JavaScript function at fixed intervals.
|
||||
*
|
||||
* @param function Function to call
|
||||
* @param interval Time between function calls, in ms.
|
||||
*/
|
||||
DECLARE_GLOBAL_FUNCTION(setInterval) {
|
||||
CHECK_ARGUMENT_COUNT(global, setInterval, (args_count == 2));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(global, setInterval, 0, function);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(global, setInterval, 1, number);
|
||||
|
||||
jerry_acquire_value(args[0]);
|
||||
int interval = int(jerry_get_number_value(args[1]));
|
||||
|
||||
mbed::js::EventLoop::getInstance().getQueue().call_every(interval, jerry_call_function, args[0], jerry_create_null(), (jerry_value_t*)NULL, 0);
|
||||
return jerry_create_undefined();
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-drivers/setTimeout-js.h"
|
||||
#include "jerryscript-mbed-event-loop/EventLoop.h"
|
||||
|
||||
/**
|
||||
* setTimeout (native JavaScript function)
|
||||
*
|
||||
* Call a JavaScript function once, after a fixed time period.
|
||||
*
|
||||
* @param function Function to call
|
||||
* @param wait_time Time before function is called, in ms.
|
||||
*/
|
||||
DECLARE_GLOBAL_FUNCTION(setTimeout) {
|
||||
CHECK_ARGUMENT_COUNT(global, setTimeout, (args_count == 2));
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(global, setTimeout, 0, function);
|
||||
CHECK_ARGUMENT_TYPE_ALWAYS(global, setTimeout, 1, number);
|
||||
|
||||
jerry_acquire_value(args[0]);
|
||||
int interval = int(jerry_get_number_value(args[1]));
|
||||
|
||||
mbed::js::EventLoop::getInstance().getQueue().call_in(interval, jerry_call_function, args[0], jerry_create_null(), (jerry_value_t*)NULL, 0);
|
||||
|
||||
return jerry_create_undefined();
|
||||
}
|
114
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-event-loop/BoundCallback.h
vendored
Normal file
114
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-event-loop/BoundCallback.h
vendored
Normal file
|
@ -0,0 +1,114 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_EVENT_LOOP_BOUND_CALLBACK_H
|
||||
#define _JERRYSCRIPT_MBED_EVENT_LOOP_BOUND_CALLBACK_H
|
||||
|
||||
#include "Callback.h"
|
||||
|
||||
namespace mbed {
|
||||
namespace js {
|
||||
|
||||
template<typename T>
|
||||
class BoundCallback;
|
||||
|
||||
template<typename R, typename A0>
|
||||
class BoundCallback<R(A0)> {
|
||||
public:
|
||||
BoundCallback(Callback<R(A0)> cb, A0 a0) : a0(a0), cb(cb) { }
|
||||
|
||||
void call() {
|
||||
cb(a0);
|
||||
}
|
||||
|
||||
operator Callback<void()>() {
|
||||
Callback<void()> cb(this, &BoundCallback::call);
|
||||
return cb;
|
||||
}
|
||||
|
||||
private:
|
||||
A0 a0;
|
||||
Callback<R(A0)> cb;
|
||||
};
|
||||
|
||||
template<typename R, typename A0, typename A1>
|
||||
class BoundCallback<R(A0, A1)> {
|
||||
public:
|
||||
BoundCallback(Callback<R(A0, A1)> cb, A0 a0, A1 a1) : a0(a0), a1(a1), cb(cb) { }
|
||||
|
||||
void call() {
|
||||
cb(a0, a1);
|
||||
}
|
||||
|
||||
operator Callback<void()>() {
|
||||
Callback<void()> cb(this, &BoundCallback::call);
|
||||
return cb;
|
||||
}
|
||||
|
||||
private:
|
||||
A0 a0;
|
||||
A0 a1;
|
||||
|
||||
Callback<R(A0, A1)> cb;
|
||||
};
|
||||
|
||||
template<typename R, typename A0, typename A1, typename A2>
|
||||
class BoundCallback<R(A0, A1, A2)> {
|
||||
public:
|
||||
BoundCallback(Callback<R(A0, A1, A2)> cb, A0 a0, A1 a1, A2 a2) : a0(a0), a1(a1), a2(a2), cb(cb) { }
|
||||
|
||||
void call() {
|
||||
cb(a0, a1, a2);
|
||||
}
|
||||
|
||||
operator Callback<void()>() {
|
||||
Callback<void()> cb(this, &BoundCallback::call);
|
||||
return cb;
|
||||
}
|
||||
|
||||
private:
|
||||
A0 a0;
|
||||
A1 a1;
|
||||
A2 a2;
|
||||
|
||||
Callback<R(A0, A1, A2)> cb;
|
||||
};
|
||||
|
||||
template<typename R, typename A0, typename A1, typename A2, typename A3>
|
||||
class BoundCallback<R(A0, A1, A2, A3)> {
|
||||
public:
|
||||
BoundCallback(Callback<R(A0, A1, A2, A3)> cb, A0 a0, A1 a1, A2 a2, A3 a3) : a0(a0), a1(a1), a2(a2), a3(a3), cb(cb) { }
|
||||
|
||||
void call() {
|
||||
cb(a0, a1, a2, a3);
|
||||
}
|
||||
|
||||
operator Callback<void()>() {
|
||||
Callback<void()> cb(this, &BoundCallback::call);
|
||||
return cb;
|
||||
}
|
||||
|
||||
private:
|
||||
A0 a0;
|
||||
A1 a1;
|
||||
A2 a2;
|
||||
A3 a3;
|
||||
|
||||
Callback<R(A0, A1, A2, A3)> cb;
|
||||
};
|
||||
|
||||
} // namespace js
|
||||
} // namespace mbed
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_EVENT_LOOP_BOUND_CALLBACK_H
|
104
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-event-loop/EventLoop.h
vendored
Normal file
104
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-event-loop/EventLoop.h
vendored
Normal file
|
@ -0,0 +1,104 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_EVENT_LOOP_EVENT_LOOP_H
|
||||
#define _JERRYSCRIPT_MBED_EVENT_LOOP_EVENT_LOOP_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
|
||||
#include "Callback.h"
|
||||
#include "mbed_assert.h"
|
||||
|
||||
#include "mbed-events/EventQueue.h"
|
||||
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
#include "jerryscript-mbed-event-loop/BoundCallback.h"
|
||||
|
||||
extern "C" void exit(int return_code);
|
||||
|
||||
namespace mbed {
|
||||
namespace js {
|
||||
|
||||
static const uint32_t EVENT_INTERVAL_MS = 1;
|
||||
|
||||
class EventLoop {
|
||||
private:
|
||||
static EventLoop instance;
|
||||
|
||||
public:
|
||||
static EventLoop& getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
void go() {
|
||||
while (true) {
|
||||
queue.dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
Callback<void()> wrapFunction(jerry_value_t f) {
|
||||
MBED_ASSERT(jerry_value_is_function(f));
|
||||
|
||||
// not sure if this is necessary?
|
||||
jerry_acquire_value(f);
|
||||
|
||||
// we need to return a callback that'll schedule this
|
||||
Callback<void(uint32_t)> cb_raw(this, &EventLoop::callback);
|
||||
BoundCallback<void(uint32_t)> *cb = new BoundCallback<void(uint32_t)>(cb_raw, f);
|
||||
|
||||
bound_callbacks.push_back(std::make_pair(f, cb));
|
||||
|
||||
return *cb;
|
||||
}
|
||||
|
||||
void dropCallback(jerry_value_t f) {
|
||||
jerry_release_value(f);
|
||||
|
||||
for (std::vector<std::pair<jerry_value_t, BoundCallback<void(uint32_t)>*> >::iterator it = bound_callbacks.begin(); it != bound_callbacks.end(); it++) {
|
||||
std::pair<jerry_value_t, BoundCallback<void(uint32_t)>*> element = *it;
|
||||
|
||||
if (element.first == f) {
|
||||
delete element.second;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void callback(jerry_value_t f) {
|
||||
queue.call(jerry_call_function, f, jerry_create_null(), (const jerry_value_t*)NULL, 0);
|
||||
}
|
||||
|
||||
void nativeCallback(Callback<void()> cb) {
|
||||
queue.call(cb);
|
||||
}
|
||||
|
||||
events::EventQueue& getQueue() {
|
||||
return queue;
|
||||
}
|
||||
|
||||
private:
|
||||
EventLoop() {}
|
||||
|
||||
std::vector<std::pair<jerry_value_t, BoundCallback<void(uint32_t)>*> > bound_callbacks;
|
||||
events::EventQueue queue;
|
||||
};
|
||||
|
||||
void event_loop();
|
||||
|
||||
} // namespace js
|
||||
} // namespace mbed
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_EVENT_LOOP_EVENT_LOOP_H
|
|
@ -0,0 +1,27 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-event-loop/EventLoop.h"
|
||||
|
||||
namespace mbed {
|
||||
namespace js {
|
||||
|
||||
EventLoop EventLoop::instance;
|
||||
|
||||
void event_loop() {
|
||||
EventLoop::getInstance().go();
|
||||
}
|
||||
|
||||
} // namespace js
|
||||
} // namespace mbed
|
21
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-launcher/launcher.h
vendored
Normal file
21
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-launcher/launcher.h
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_LAUNCHER_LAUNCHER_H
|
||||
#define _JERRYSCRIPT_MBED_LAUNCHER_LAUNCHER_H
|
||||
|
||||
void jsmbed_js_launch(void);
|
||||
void jsmbed_js_exit(void);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_LAUNCHER_LAUNCHER_H
|
22
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-launcher/setup.h
vendored
Normal file
22
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-launcher/setup.h
vendored
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_LAUNCHER_SETUP_H
|
||||
#define _JERRYSCRIPT_MBED_LAUNCHER_SETUP_H
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
|
||||
void jsmbed_js_load_magic_strings(void);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_LAUNCHER_SETUP_H
|
|
@ -0,0 +1,90 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "mbed.h"
|
||||
#include "rtos.h"
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
|
||||
#include "jerryscript-mbed-event-loop/EventLoop.h"
|
||||
|
||||
#include "jerryscript-mbed-util/js_source.h"
|
||||
#include "jerryscript-mbed-library-registry/registry.h"
|
||||
|
||||
#include "jerryscript-mbed-launcher/launcher.h"
|
||||
#include "jerryscript-mbed-launcher/setup.h"
|
||||
|
||||
#include "jerry_targetjs.h"
|
||||
|
||||
DECLARE_JS_CODES;
|
||||
|
||||
/**
|
||||
* load_javascript
|
||||
*
|
||||
* Parse and run javascript files specified in jerry_targetjs.h
|
||||
*/
|
||||
static int load_javascript() {
|
||||
for (int src = 0; js_codes[src].source; src++) {
|
||||
LOG_PRINT("running js file %s\r\n", js_codes[src].name);
|
||||
|
||||
const jerry_char_t* code = reinterpret_cast<const jerry_char_t*>(js_codes[src].source);
|
||||
const size_t length = js_codes[src].length;
|
||||
|
||||
jerry_value_t parsed_code = jerry_parse(code, length, false);
|
||||
|
||||
if (jerry_value_has_error_flag(parsed_code)) {
|
||||
LOG_PRINT_ALWAYS("jerry_parse failed [%s]\r\n", js_codes[src].name);
|
||||
jsmbed_js_exit();
|
||||
return -1;
|
||||
}
|
||||
|
||||
jerry_value_t returned_value = jerry_run(parsed_code);
|
||||
|
||||
if (jerry_value_has_error_flag(returned_value)) {
|
||||
LOG_PRINT_ALWAYS("jerry_run failed [%s]\r\n", js_codes[src].name);
|
||||
jsmbed_js_exit();
|
||||
return -1;
|
||||
}
|
||||
|
||||
jerry_release_value(parsed_code);
|
||||
jerry_release_value(returned_value);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int jsmbed_js_init() {
|
||||
jerry_init_flag_t flags = JERRY_INIT_EMPTY;
|
||||
jerry_init(flags);
|
||||
|
||||
jsmbed_js_load_magic_strings();
|
||||
mbed::js::LibraryRegistry::getInstance().register_all();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void jsmbed_js_exit() {
|
||||
jerry_cleanup();
|
||||
}
|
||||
|
||||
void jsmbed_js_launch() {
|
||||
jsmbed_js_init();
|
||||
|
||||
puts(" JerryScript in mbed\r\n");
|
||||
puts(" build date: " __DATE__ " \r\n");
|
||||
|
||||
if (load_javascript() == 0) {
|
||||
mbed::js::event_loop();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "jerryscript-mbed-launcher/setup.h"
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
|
||||
extern uint32_t jsmbed_js_magic_string_count;
|
||||
extern uint32_t jsmbed_js_magic_string_values[];
|
||||
|
||||
extern const jerry_char_ptr_t jsmbed_js_magic_strings[];
|
||||
extern const jerry_length_t jsmbed_js_magic_string_lengths[];
|
||||
|
||||
void jsmbed_js_load_magic_strings() {
|
||||
if (jsmbed_js_magic_string_count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
jerry_register_magic_strings(jsmbed_js_magic_strings,
|
||||
jsmbed_js_magic_string_count,
|
||||
jsmbed_js_magic_string_lengths);
|
||||
|
||||
jerry_value_t global = jerry_get_global_object();
|
||||
|
||||
for (unsigned int idx = 0; idx < jsmbed_js_magic_string_count; idx++) {
|
||||
jerry_value_t constant_value = jerry_create_number(jsmbed_js_magic_string_values[idx]);
|
||||
jerry_value_t magic_string = jerry_create_string(jsmbed_js_magic_strings[idx]);
|
||||
|
||||
jerry_set_property(global, magic_string, constant_value);
|
||||
|
||||
jerry_release_value(constant_value);
|
||||
jerry_release_value(magic_string);
|
||||
}
|
||||
|
||||
jerry_release_value(global);
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_LIBRARY_REGISTRY_REGISTRY_H
|
||||
#define _JERRYSCRIPT_MBED_LIBRARY_REGISTRY_REGISTRY_H
|
||||
|
||||
#include <vector>
|
||||
#include "stdint.h"
|
||||
|
||||
#define JERRY_USE_MBED_LIBRARY(NAME) \
|
||||
mbed::js::LibraryRegistry::getInstance().add(jsmbed_wrap_registry_entry__ ## NAME)
|
||||
|
||||
namespace mbed {
|
||||
namespace js {
|
||||
|
||||
typedef void (*library_registration_function_t)(void);
|
||||
|
||||
class LibraryRegistry {
|
||||
private:
|
||||
static LibraryRegistry instance;
|
||||
|
||||
public:
|
||||
static LibraryRegistry& getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
void add(library_registration_function_t lib_func) {
|
||||
funcs.push_back(lib_func);
|
||||
}
|
||||
|
||||
void register_all() {
|
||||
for (std::size_t i = 0; i < funcs.size(); i++) {
|
||||
funcs[i]();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
LibraryRegistry() {}
|
||||
|
||||
std::vector<library_registration_function_t> funcs;
|
||||
};
|
||||
|
||||
} // namespace js
|
||||
} // namespace mbed
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_LIBRARY_REGISTRY_REGISTRY_H
|
|
@ -0,0 +1,17 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include "jerryscript-mbed-library-registry/registry.h"
|
||||
|
||||
mbed::js::LibraryRegistry mbed::js::LibraryRegistry::instance;
|
|
@ -0,0 +1,78 @@
|
|||
/* Copyright 2014-2015 Samsung Electronics Co., Ltd.
|
||||
* Copyright (c) 2016 ARM Limited.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "jerryscript-mbed-library-registry/wrap_tools.h"
|
||||
|
||||
bool jsmbed_wrap_register_global_function(const char* name, jerry_external_handler_t handler) {
|
||||
jerry_value_t global_object_val = jerry_get_global_object();
|
||||
jerry_value_t reg_function = jerry_create_external_function(handler);
|
||||
|
||||
bool is_ok = true;
|
||||
|
||||
if (!(jerry_value_is_function(reg_function)
|
||||
&& jerry_value_is_constructor(reg_function))) {
|
||||
is_ok = false;
|
||||
LOG_PRINT_ALWAYS("Error: jerry_create_external_function failed!\r\n");
|
||||
jerry_release_value(global_object_val);
|
||||
jerry_release_value(reg_function);
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
if (jerry_value_has_error_flag(reg_function)) {
|
||||
is_ok = false;
|
||||
LOG_PRINT_ALWAYS("Error: jerry_create_external_function has error flag! \r\n");
|
||||
jerry_release_value(global_object_val);
|
||||
jerry_release_value(reg_function);
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
jerry_value_t jerry_name = jerry_create_string((jerry_char_t *) name);
|
||||
|
||||
jerry_value_t set_result = jerry_set_property(global_object_val, jerry_name, reg_function);
|
||||
|
||||
|
||||
if (jerry_value_has_error_flag(set_result)) {
|
||||
is_ok = false;
|
||||
LOG_PRINT_ALWAYS("Error: jerry_create_external_function failed: [%s]\r\n", name);
|
||||
}
|
||||
|
||||
jerry_release_value(jerry_name);
|
||||
jerry_release_value(global_object_val);
|
||||
jerry_release_value(reg_function);
|
||||
jerry_release_value(set_result);
|
||||
|
||||
return is_ok;
|
||||
}
|
||||
|
||||
bool jsmbed_wrap_register_class_constructor(const char* name, jerry_external_handler_t handler) {
|
||||
// Register class constructor as a global function
|
||||
return jsmbed_wrap_register_global_function(name, handler);
|
||||
}
|
||||
|
||||
bool jsmbed_wrap_register_class_function(jerry_value_t this_obj, const char* name, jerry_external_handler_t handler) {
|
||||
jerry_value_t property_name = jerry_create_string(reinterpret_cast<const jerry_char_t *>(name));
|
||||
jerry_value_t handler_obj = jerry_create_external_function(handler);
|
||||
|
||||
jerry_set_property(this_obj, property_name, handler_obj);
|
||||
|
||||
jerry_release_value(handler_obj);
|
||||
jerry_release_value(property_name);
|
||||
|
||||
// TODO: check for errors, and return false in the case of errors
|
||||
return true;
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_LIBRARY_REGISTRY_WRAP_TOOLS_H
|
||||
#define _JERRYSCRIPT_MBED_LIBRARY_REGISTRY_WRAP_TOOLS_H
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "jerry-core/jerry-api.h"
|
||||
|
||||
#include "jerryscript-mbed-util/logging.h"
|
||||
#include "jerryscript-mbed-util/wrappers.h"
|
||||
|
||||
|
||||
//
|
||||
// Functions used by the wrapper registration API.
|
||||
//
|
||||
|
||||
bool
|
||||
jsmbed_wrap_register_global_function (const char* name,
|
||||
jerry_external_handler_t handler);
|
||||
|
||||
bool
|
||||
jsmbed_wrap_register_class_constructor (const char* name,
|
||||
jerry_external_handler_t handler);
|
||||
|
||||
bool
|
||||
jsmbed_wrap_register_class_function (jerry_value_t this_obj_p,
|
||||
const char* name,
|
||||
jerry_external_handler_t handler);
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_LIBRARY_REGISTRY_WRAP_TOOLS_H
|
24
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-util/js_source.h
vendored
Normal file
24
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-util/js_source.h
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_UTIL_JS_SOURCE_H
|
||||
#define _JERRYSCRIPT_MBED_UTIL_JS_SOURCE_H
|
||||
|
||||
struct jsmbed_js_source_t {
|
||||
const char* name;
|
||||
const char* source;
|
||||
const int length;
|
||||
};
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_UTIL_JS_SOURCE_H
|
26
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-util/logging.h
vendored
Normal file
26
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-util/logging.h
vendored
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_UTIL_LOGGING_H
|
||||
#define _JERRYSCRIPT_MBED_UTIL_LOGGING_H
|
||||
|
||||
#ifdef DEBUG_WRAPPER
|
||||
#define LOG_PRINT(...) printf(__VA_ARGS__)
|
||||
#else
|
||||
#define LOG_PRINT(...) while(0) { }
|
||||
#endif
|
||||
|
||||
#define LOG_PRINT_ALWAYS(...) printf(__VA_ARGS__)
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_UTIL_LOGGING_H
|
93
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-util/wrappers.h
vendored
Normal file
93
third_party/jerryscript/targets/mbedos5/jerryscript-mbed/jerryscript-mbed-util/wrappers.h
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#ifndef _JERRYSCRIPT_MBED_UTIL_WRAPPERS_H
|
||||
#define _JERRYSCRIPT_MBED_UTIL_WRAPPERS_H
|
||||
|
||||
/*
|
||||
* Used in header/source files for wrappers, to declare the signature of the
|
||||
* registration function.
|
||||
*/
|
||||
#define DECLARE_JS_WRAPPER_REGISTRATION(NAME) \
|
||||
void jsmbed_wrap_registry_entry__ ## NAME (void)
|
||||
|
||||
//
|
||||
// 2. Wrapper function declaration/use macros
|
||||
//
|
||||
|
||||
// Global functions
|
||||
#define DECLARE_GLOBAL_FUNCTION(NAME) \
|
||||
jerry_value_t \
|
||||
NAME_FOR_GLOBAL_FUNCTION(NAME) (const jerry_value_t function_obj_p, \
|
||||
const jerry_value_t this_obj, \
|
||||
const jerry_value_t args[], \
|
||||
const jerry_length_t args_count)
|
||||
|
||||
#define REGISTER_GLOBAL_FUNCTION(NAME) \
|
||||
jsmbed_wrap_register_global_function ( # NAME, NAME_FOR_GLOBAL_FUNCTION(NAME) )
|
||||
|
||||
// Class constructors
|
||||
#define DECLARE_CLASS_CONSTRUCTOR(CLASS) \
|
||||
jerry_value_t \
|
||||
NAME_FOR_CLASS_CONSTRUCTOR(CLASS) (const jerry_value_t function_obj, \
|
||||
const jerry_value_t this_obj, \
|
||||
const jerry_value_t args[], \
|
||||
const jerry_length_t args_count)
|
||||
|
||||
#define REGISTER_CLASS_CONSTRUCTOR(CLASS) \
|
||||
jsmbed_wrap_register_class_constructor ( # CLASS, NAME_FOR_CLASS_CONSTRUCTOR(CLASS) )
|
||||
|
||||
// Class functions
|
||||
#define DECLARE_CLASS_FUNCTION(CLASS, NAME) \
|
||||
jerry_value_t \
|
||||
NAME_FOR_CLASS_FUNCTION(CLASS, NAME) (const jerry_value_t function_obj, \
|
||||
const jerry_value_t this_obj, \
|
||||
const jerry_value_t args[], \
|
||||
const jerry_length_t args_count)
|
||||
|
||||
#define ATTACH_CLASS_FUNCTION(OBJECT, CLASS, NAME) \
|
||||
jsmbed_wrap_register_class_function (OBJECT, # NAME, NAME_FOR_CLASS_FUNCTION(CLASS, NAME) )
|
||||
|
||||
//
|
||||
// 3. Argument checking macros
|
||||
//
|
||||
#define CHECK_ARGUMENT_COUNT(CLASS, NAME, EXPR) \
|
||||
if (!(EXPR)) { \
|
||||
const char* error_msg = "ERROR: wrong argument count for " # CLASS "." # NAME ", expected " # EXPR "."; \
|
||||
return jerry_create_error(JERRY_ERROR_TYPE, reinterpret_cast<const jerry_char_t*>(error_msg)); \
|
||||
}
|
||||
|
||||
#define CHECK_ARGUMENT_TYPE_ALWAYS(CLASS, NAME, INDEX, TYPE) \
|
||||
if (!jerry_value_is_ ## TYPE (args[INDEX])) { \
|
||||
const char* error_msg = "ERROR: wrong argument type for " # CLASS "." # NAME ", expected argument " # INDEX " to be a " # TYPE ".\n"; \
|
||||
return jerry_create_error(JERRY_ERROR_TYPE, reinterpret_cast<const jerry_char_t*>(error_msg)); \
|
||||
}
|
||||
|
||||
#define CHECK_ARGUMENT_TYPE_ON_CONDITION(CLASS, NAME, INDEX, TYPE, EXPR) \
|
||||
if ((EXPR)) { \
|
||||
if (!jerry_value_is_ ## TYPE (args[INDEX])) { \
|
||||
const char* error_msg = "ERROR: wrong argument type for " # CLASS "." # NAME ", expected argument " # INDEX " to be a " # TYPE ".\n"; \
|
||||
return jerry_create_error(JERRY_ERROR_TYPE, reinterpret_cast<const jerry_char_t*>(error_msg)); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define NAME_FOR_GLOBAL_FUNCTION(NAME) __gen_jsmbed_global_func_ ## NAME
|
||||
#define NAME_FOR_CLASS_CONSTRUCTOR(CLASS) __gen_jsmbed_class_constructor_ ## CLASS
|
||||
#define NAME_FOR_CLASS_FUNCTION(CLASS, NAME) __gen_jsmbed_func_c_ ## CLASS ## _f_ ## NAME
|
||||
|
||||
#define NAME_FOR_CLASS_NATIVE_CONSTRUCTOR(CLASS, TYPELIST) __gen_native_jsmbed_ ## CLASS ## __Special_create_ ## TYPELIST
|
||||
#define NAME_FOR_CLASS_NATIVE_DESTRUCTOR(CLASS) __gen_native_jsmbed_ ## CLASS ## __Special_destroy
|
||||
#define NAME_FOR_CLASS_NATIVE_FUNCTION(CLASS, NAME) __gen_native_jsmbed_ ## CLASS ## _ ## NAME
|
||||
|
||||
#endif // _JERRYSCRIPT_MBED_UTIL_WRAPPERS_H
|
76
third_party/jerryscript/targets/mbedos5/js/flash_leds.js
vendored
Normal file
76
third_party/jerryscript/targets/mbedos5/js/flash_leds.js
vendored
Normal file
|
@ -0,0 +1,76 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
var led = 0;
|
||||
|
||||
// Setting the pin to 0 turns the LED on
|
||||
var led_off = 1;
|
||||
var led_on = 0;
|
||||
|
||||
var digital_outs = [];
|
||||
|
||||
var leds = [LED1, LED2, LED3, LED4];
|
||||
|
||||
function connect_pins() {
|
||||
print("Creating new DigitalOuts");
|
||||
digital_outs = [];
|
||||
for (var i = 0; i < 4; i++) {
|
||||
digital_outs.push(DigitalOut(leds[i], led_off));
|
||||
if (digital_outs[i].is_connected()) {
|
||||
print("LED " + i + " is connected.");
|
||||
}
|
||||
else {
|
||||
print("LED " + i + " is not connected.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
connect_pins();
|
||||
|
||||
function blink() {
|
||||
digital_outs[0].write(led_off);
|
||||
digital_outs[1].write(led_off);
|
||||
digital_outs[2].write(led_off);
|
||||
digital_outs[3].write(led_off);
|
||||
|
||||
digital_outs[led].write(led_on);
|
||||
|
||||
print("Finished with LED " + led);
|
||||
led = (led + 1) % 4;
|
||||
}
|
||||
|
||||
// BUTTON2 on NRF52
|
||||
// USER_BUTTON on NUCLEO
|
||||
// SW2 on the K64F
|
||||
// BTN0 on EFM32GG
|
||||
var button;
|
||||
|
||||
/* global BUTTON2, SW2, USER_BUTTON, BTN0 */
|
||||
if (typeof BUTTON2 !== 'undefined') {
|
||||
button = InterruptIn(BUTTON2);
|
||||
} else if (typeof SW2 !== 'undefined') {
|
||||
button = InterruptIn(SW2);
|
||||
} else if (typeof USER_BUTTON !== 'undefined') {
|
||||
button = InterruptIn(USER_BUTTON);
|
||||
} else if (typeof BTN0 !== 'undefined') {
|
||||
button = InterruptIn(BTN0);
|
||||
} else {
|
||||
print("no button specified");
|
||||
}
|
||||
button.fall(function() {
|
||||
print("YOU PUSHED THE BUTTON!");
|
||||
});
|
||||
|
||||
print("flash_leds.js has finished executing.");
|
20
third_party/jerryscript/targets/mbedos5/js/main.js
vendored
Normal file
20
third_party/jerryscript/targets/mbedos5/js/main.js
vendored
Normal file
|
@ -0,0 +1,20 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
setInterval(function() {
|
||||
blink();
|
||||
}, 1000);
|
||||
|
||||
print("main.js has finished executing.");
|
1
third_party/jerryscript/targets/mbedos5/mbed-events.lib
vendored
Normal file
1
third_party/jerryscript/targets/mbedos5/mbed-events.lib
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
https://github.com/ARMmbed/mbed-events/#a4ba1b08ef90e2b3b6d442696f4d80a8587494e3
|
1
third_party/jerryscript/targets/mbedos5/mbed-os.lib
vendored
Normal file
1
third_party/jerryscript/targets/mbedos5/mbed-os.lib
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
https://github.com/ARMmbed/mbed-os/#bdab10dc0f90748b6989c8b577771bb403ca6bd8
|
7
third_party/jerryscript/targets/mbedos5/mbed_app.json
vendored
Normal file
7
third_party/jerryscript/targets/mbedos5/mbed_app.json
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"target_overrides": {
|
||||
"NRF52_DK": {
|
||||
"target.uart_hwfc": 0
|
||||
}
|
||||
}
|
||||
}
|
85
third_party/jerryscript/targets/mbedos5/source/jerry_port_mbed.c
vendored
Normal file
85
third_party/jerryscript/targets/mbedos5/source/jerry_port_mbed.c
vendored
Normal file
|
@ -0,0 +1,85 @@
|
|||
/* Copyright 2016 University of Szeged.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define _BSD_SOURCE
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include "jerry-core/jerry-port.h"
|
||||
|
||||
#include "us_ticker_api.h"
|
||||
|
||||
/**
|
||||
* Provide console message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_console (const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vfprintf (stdout, format, args);
|
||||
va_end (args);
|
||||
} /* jerry_port_console */
|
||||
|
||||
/**
|
||||
* Provide log message implementation for the engine.
|
||||
*/
|
||||
void
|
||||
jerry_port_log (jerry_log_level_t level, /**< log level */
|
||||
const char *format, /**< format string */
|
||||
...) /**< parameters */
|
||||
{
|
||||
(void) level; /* ignore log level */
|
||||
|
||||
va_list args;
|
||||
va_start (args, format);
|
||||
vfprintf (stderr, format, args);
|
||||
va_end (args);
|
||||
} /* jerry_port_log */
|
||||
|
||||
/**
|
||||
* Implementation of jerry_port_fatal.
|
||||
*/
|
||||
void
|
||||
jerry_port_fatal (jerry_fatal_code_t code) /**< fatal code enum item */
|
||||
{
|
||||
exit (code);
|
||||
} /* jerry_port_fatal */
|
||||
|
||||
/**
|
||||
* Implementation of jerry_port_get_time_zone.
|
||||
*
|
||||
* @return true - if success
|
||||
*/
|
||||
bool
|
||||
jerry_port_get_time_zone (jerry_time_zone_t *tz_p) /**< timezone pointer */
|
||||
{
|
||||
tz_p->offset = 0;
|
||||
tz_p->daylight_saving_time = 0;
|
||||
return true;
|
||||
} /* jerry_port_get_time_zone */
|
||||
|
||||
/**
|
||||
* Implementation of jerry_port_get_current_time.
|
||||
*
|
||||
* @return current timer's counter value in microseconds
|
||||
*/
|
||||
double
|
||||
jerry_port_get_current_time ()
|
||||
{
|
||||
return (double) us_ticker_read ();
|
||||
} /* jerry_port_get_current_time */
|
48
third_party/jerryscript/targets/mbedos5/source/main.cpp
vendored
Normal file
48
third_party/jerryscript/targets/mbedos5/source/main.cpp
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
/* Copyright (c) 2016 ARM Limited
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Provides jsmbed_js_launch()
|
||||
#include "jerryscript-mbed-launcher/launcher.h"
|
||||
|
||||
// Provides JSMBED_USE_WRAPPER()
|
||||
#include "jerryscript-mbed-library-registry/registry.h"
|
||||
|
||||
// Provides the base wrapper registration symbol that JSMBED_USE_WRAPPER uses.
|
||||
// This means all of the base handlers will be registered.
|
||||
#include "jerryscript-mbed-drivers/lib_drivers.h"
|
||||
|
||||
#include "jerryscript-mbed-event-loop/EventLoop.h"
|
||||
|
||||
#include "Callback.h"
|
||||
#include "Serial.h"
|
||||
|
||||
using mbed::js::EventLoop;
|
||||
using mbed::Callback;
|
||||
|
||||
int main() {
|
||||
mbed::Serial pc(USBTX, USBRX);
|
||||
pc.baud(115200);
|
||||
|
||||
JERRY_USE_MBED_LIBRARY(base);
|
||||
|
||||
// Incude more wrapper packages here if you want to use them. For exmaple:
|
||||
// JERRY_USE_MBED_LIBRARY(lwip_interface);
|
||||
// JERRY_USE_MBED_LIBRARY(esp8266_interface);
|
||||
// JERRY_USE_MBED_LIBRARY(simple_mbed_client);
|
||||
|
||||
jsmbed_js_launch();
|
||||
|
||||
return 0;
|
||||
}
|
8
third_party/jerryscript/targets/mbedos5/template-mbedignore.txt
vendored
Normal file
8
third_party/jerryscript/targets/mbedos5/template-mbedignore.txt
vendored
Normal file
|
@ -0,0 +1,8 @@
|
|||
cmake/*
|
||||
docs/*
|
||||
jerry-libc/*
|
||||
jerry-main/*
|
||||
targets/*
|
||||
tests/*
|
||||
third-party/*
|
||||
tools/*
|
31
third_party/jerryscript/targets/mbedos5/tools/check_pins.sh
vendored
Executable file
31
third_party/jerryscript/targets/mbedos5/tools/check_pins.sh
vendored
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright (c) 2016 ARM Limited.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# If we're checking only for global variable definitions of pins, then
|
||||
# file ordering doesn't matter. This is because:
|
||||
#
|
||||
# var a = b;
|
||||
# var b = 7;
|
||||
#
|
||||
# will be accepted by jshint, just 'a' will evaluate to 'undefined'.
|
||||
# Awkward, but at least it means we can have pins.js included at any
|
||||
# point in the clump of files and it won't give us false positives.
|
||||
|
||||
cat js/*.js | jshint -c tools/jshint.conf - | grep "not defined"
|
||||
if [ "$?" == 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
exit 0
|
17
third_party/jerryscript/targets/mbedos5/tools/cmsis.h
vendored
Normal file
17
third_party/jerryscript/targets/mbedos5/tools/cmsis.h
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
/* Copyright (c) 2016 ARM Limited.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is intentionally blank, and is used as a dummy cmsis.h file
|
||||
* when preprocessing generate_pins.py.
|
||||
*/
|
224
third_party/jerryscript/targets/mbedos5/tools/generate_pins.py
vendored
Normal file
224
third_party/jerryscript/targets/mbedos5/tools/generate_pins.py
vendored
Normal file
|
@ -0,0 +1,224 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
# Copyright (c) 2016 ARM Limited
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
"""
|
||||
Generate pins.js for a specified target, using target definitions from the
|
||||
mbed OS source tree.
|
||||
|
||||
It's expecting to be run from the targets/mbedos5 directory.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
from pycparser import parse_file, c_ast, c_generator
|
||||
from pycparserext.ext_c_parser import GnuCParser
|
||||
|
||||
from simpleeval import SimpleEval, DEFAULT_OPERATORS
|
||||
|
||||
import ast
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
|
||||
# import mbed tools
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'mbed-os'))
|
||||
from tools.targets import Target
|
||||
|
||||
|
||||
def find_file(root_dir, directories, name):
|
||||
"""
|
||||
Find the first instance of file with name 'name' in the directory tree
|
||||
starting with 'root_dir'.
|
||||
|
||||
Filter out directories that are not in directories, or do not start with
|
||||
TARGET_.
|
||||
|
||||
Since this looks in (essentially )the same directories as the compiler would
|
||||
when compiling mbed OS, we should only find one PinNames.h.
|
||||
"""
|
||||
|
||||
for root, dirs, files in os.walk(root_dir, topdown=True):
|
||||
# modify dirs in place
|
||||
dirs[:] = filter(lambda x: x in directories or not x.startswith('TARGET_'), dirs)
|
||||
|
||||
if name in files:
|
||||
return os.path.join(root, name)
|
||||
|
||||
def enumerate_includes(root_dir, directories):
|
||||
"""
|
||||
Walk through the directory tree, starting at root_dir, and enumerate all
|
||||
valid include directories.
|
||||
"""
|
||||
for root, dirs, files in os.walk(root_dir, topdown=True):
|
||||
# modify dirs in place
|
||||
dirs[:] = filter(lambda x: x in directory_labels
|
||||
or ( not x.startswith('TARGET_')
|
||||
and not x.startswith('TOOLCHAIN_')), dirs)
|
||||
yield root
|
||||
|
||||
|
||||
class TypeDeclVisitor(c_ast.NodeVisitor):
|
||||
def __init__(self, filter_names=[]):
|
||||
self.names = filter_names
|
||||
|
||||
def visit(self, node):
|
||||
value = None
|
||||
|
||||
if node.__class__.__name__ == "TypeDecl":
|
||||
value = self.visit_TypeDecl(node)
|
||||
|
||||
if value is None:
|
||||
for name, c in node.children():
|
||||
value = value or self.visit(c)
|
||||
|
||||
return value
|
||||
|
||||
def visit_TypeDecl(self, node):
|
||||
if node.declname in self.names:
|
||||
c_gen = c_generator.CGenerator()
|
||||
pins = {}
|
||||
|
||||
operators = DEFAULT_OPERATORS
|
||||
operators[ast.BitOr] = lambda a, b: a | b
|
||||
operators[ast.LShift] = lambda a, b: a << b
|
||||
operators[ast.RShift] = lambda a, b: a << b
|
||||
evaluator = SimpleEval(DEFAULT_OPERATORS )
|
||||
|
||||
for pin in node.type.values.enumerators:
|
||||
expr = c_gen.visit(pin.value)
|
||||
|
||||
if "(int)" in expr:
|
||||
expr = expr.replace('(int)', '')
|
||||
|
||||
if expr in pins:
|
||||
pins[pin.name] = pins[expr]
|
||||
else:
|
||||
pins[pin.name] = evaluator.eval(expr.strip())
|
||||
|
||||
return pins
|
||||
|
||||
def enumerate_pins(c_source_file, include_dirs, definitions):
|
||||
"""
|
||||
Enumerate pins specified in PinNames.h, by looking for a PinName enum
|
||||
typedef somewhere in the file.
|
||||
"""
|
||||
definitions += ['__attribute(x)__=', '__extension__(x)=', 'register=', '__IO=', 'uint32_t=unsigned int']
|
||||
|
||||
gcc_args = ['-E', '-fmerge-all-constants']
|
||||
gcc_args += ['-I' + directory for directory in include_dirs]
|
||||
|
||||
gcc_args += ['-D' + definition for definition in definitions]
|
||||
ast = parse_file(c_source_file,
|
||||
use_cpp=True,
|
||||
cpp_path='arm-none-eabi-gcc',
|
||||
cpp_args=gcc_args,
|
||||
parser=GnuCParser())
|
||||
|
||||
# now, walk the AST
|
||||
v = TypeDeclVisitor(['PinName'])
|
||||
return v.visit(ast)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
if not os.path.exists('./mbed-os'):
|
||||
print("Fatal: mbed-os directory does not exist.")
|
||||
print("Try running 'make getlibs'")
|
||||
sys.exit(1)
|
||||
|
||||
description = """
|
||||
Generate pins.js for a specified mbed board, using target definitions from the
|
||||
mbed OS source tree.
|
||||
"""
|
||||
|
||||
parser = argparse.ArgumentParser(description=description)
|
||||
|
||||
parser.add_argument('board', help='mbed board name')
|
||||
parser.add_argument('-o',
|
||||
help='Output JavaScript file (default: %(default)s)',
|
||||
default='js/pins.js',
|
||||
type=argparse.FileType('w'))
|
||||
parser.add_argument('-c',
|
||||
help='Output C++ file (default: %(default)s)',
|
||||
default='source/pins.cpp',
|
||||
type=argparse.FileType('w'))
|
||||
|
||||
args = parser.parse_args()
|
||||
board_name = args.board.upper()
|
||||
|
||||
target = Target(board_name)
|
||||
|
||||
directory_labels = ['TARGET_' + label for label in target.get_labels()] + target.macros
|
||||
|
||||
targets_dir = os.path.join('.', 'mbed-os', 'hal', 'targets')
|
||||
hal_dir = os.path.join(targets_dir, 'hal')
|
||||
|
||||
pins_file = find_file(hal_dir, directory_labels, 'PinNames.h')
|
||||
|
||||
|
||||
includes = enumerate_includes(targets_dir, directory_labels)
|
||||
defines = list(directory_labels)
|
||||
|
||||
# enumerate pins from PinNames.h
|
||||
pins = enumerate_pins(pins_file, ['./tools'] + list(includes), defines)
|
||||
|
||||
out_file = '\r\n'.join(['var %s = %s;' % pin for pin in pins.iteritems()])
|
||||
args.o.write(out_file)
|
||||
|
||||
LICENSE = '''/* Copyright 2016 ARM, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the \"License\");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an \"AS IS\" BASIS
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*
|
||||
* This file is generated by generate_pins.py. Please do not modify.
|
||||
*/
|
||||
'''
|
||||
|
||||
COUNT = '''
|
||||
unsigned int jsmbed_js_magic_string_count = {};
|
||||
'''.format(len(pins))
|
||||
|
||||
LENGTHS = ',\n '.join(str(len(name)) for name in pins.iterkeys())
|
||||
LENGTHS_SOURCE = '''
|
||||
unsigned int jsmbed_js_magic_string_lengths[] = {
|
||||
%s
|
||||
};
|
||||
''' % LENGTHS
|
||||
|
||||
MAGIC_VALUES = ',\n '.join(str(value) for value in pins.itervalues())
|
||||
MAGIC_SOURCE = '''
|
||||
unsigned int jsmbed_js_magic_string_values[] = {
|
||||
%s
|
||||
};
|
||||
''' % MAGIC_VALUES
|
||||
|
||||
MAGIC_STRINGS = ',\n '.join('"' + name + '"' for name in pins.iterkeys())
|
||||
MAGIC_STRING_SOURCE = '''
|
||||
const char * jsmbed_js_magic_strings[] = {
|
||||
%s
|
||||
};
|
||||
''' % MAGIC_STRINGS
|
||||
|
||||
args.c.write(LICENSE + COUNT + LENGTHS_SOURCE + MAGIC_SOURCE + MAGIC_STRING_SOURCE)
|
4
third_party/jerryscript/targets/mbedos5/tools/jshint.conf
vendored
Normal file
4
third_party/jerryscript/targets/mbedos5/tools/jshint.conf
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"undef": true,
|
||||
"predef": ["print", "BLEDevice", "BLEService", "BLECharacteristic", "DigitalOut", "I2C", "setInterval", "setTimeout", "InterruptIn", "LWIPInterface", "SimpleMbedClient", "M2MBase"]
|
||||
}
|
3
third_party/jerryscript/targets/mbedos5/tools/requirements.txt
vendored
Normal file
3
third_party/jerryscript/targets/mbedos5/tools/requirements.txt
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
pycparser
|
||||
simpleeval
|
||||
pycparserext
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue