Jelajahi Sumber

调整 script 脚本,以及 message 功能代码;

yangfasheng 7 tahun lalu
induk
melakukan
7742b15047

+ 44 - 67
SConscript

@@ -1,77 +1,57 @@
+# RT-Thread building script for JerryScript
+
 import os
 from building import *
 
 # get current directory
 cwd = GetCurrentDir()
+
 jerry_core_dir = 'jerryscript/jerry-core'
 
-SOURCE_CORE                 = Glob(jerry_core_dir + '/*.c')
-SOURCE_CORE_API             = Glob(jerry_core_dir + '/api/*.c')
-SOURCE_CORE_DEBUG           = Glob(jerry_core_dir + '/debugger/*.c')
-SOURCE_CORE_ECMA_BASE       = Glob(jerry_core_dir + '/ecma/base/*.c')
-SOURCE_CORE_ECMA_BUILTINS   = Glob(jerry_core_dir + '/ecma/builtin-objects/*.c')
-SOURCE_CORE_ECMA_BUILTINS_TYPEDARRAY   = Glob(jerry_core_dir + '/ecma/builtin-objects/typedarray/*.c')
-SOURCE_CORE_ECMA_OPERATIONS = Glob(jerry_core_dir + '/ecma/operations/*.c')
-SOURCE_CORE_JCONTEXT        = Glob(jerry_core_dir + '/jcontext/*.c')
-SOURCE_CORE_JMEM            = Glob(jerry_core_dir + '/jmem/*.c')
-SOURCE_CORE_JRT             = Glob(jerry_core_dir + '/jrt/*.c')
-SOURCE_CORE_LIT             = Glob(jerry_core_dir + '/lit/*.c')
-SOURCE_CORE_PARSER_JS       = Glob(jerry_core_dir + '/parser/js/*.c')
-SOURCE_CORE_PARSER_REGEXP   = Glob(jerry_core_dir + '/parser/regexp/*.c')
-SOURCE_CORE_VM              = Glob(jerry_core_dir + '/vm/*.c')
-
-SOURCE_CORE_PORT            = Glob('rtthread-port/*.c')
-
-jerry_core = SOURCE_CORE
-jerry_core += SOURCE_CORE_API
-jerry_core += SOURCE_CORE_DEBUG
-jerry_core += SOURCE_CORE_ECMA_BASE
-jerry_core += SOURCE_CORE_ECMA_BUILTINS
-jerry_core += SOURCE_CORE_ECMA_BUILTINS_TYPEDARRAY
-jerry_core += SOURCE_CORE_ECMA_OPERATIONS
-jerry_core += SOURCE_CORE_JCONTEXT
-jerry_core += SOURCE_CORE_JMEM
-jerry_core += SOURCE_CORE_JRT
-jerry_core += SOURCE_CORE_LIT
-jerry_core += SOURCE_CORE_PARSER_JS
-jerry_core += SOURCE_CORE_PARSER_REGEXP
-jerry_core += SOURCE_CORE_PORT
-jerry_core += SOURCE_CORE_VM
+jerry_core = Glob(jerry_core_dir + '/*.c')
+jerry_core += Glob(jerry_core_dir + '/api/*.c')
+jerry_core += Glob(jerry_core_dir + '/debugger/*.c')
+jerry_core += Glob(jerry_core_dir + '/ecma/base/*.c')
+jerry_core += Glob(jerry_core_dir + '/ecma/builtin-objects/*.c')
+jerry_core += Glob(jerry_core_dir + '/ecma/builtin-objects/typedarray/*.c')
+jerry_core += Glob(jerry_core_dir + '/ecma/operations/*.c')
+jerry_core += Glob(jerry_core_dir + '/jcontext/*.c')
+jerry_core += Glob(jerry_core_dir + '/jmem/*.c')
+jerry_core += Glob(jerry_core_dir + '/jrt/*.c')
+jerry_core += Glob(jerry_core_dir + '/lit/*.c')
+jerry_core += Glob(jerry_core_dir + '/parser/js/*.c')
+jerry_core += Glob(jerry_core_dir + '/parser/regexp/*.c')
+jerry_core += Glob(jerry_core_dir + '/vm/*.c')
 
 jerry_ext_dir = 'jerryscript/jerry-ext'
 
-SOURCE_EXT_ARG              = Glob(jerry_ext_dir + '/arg/*.c')
-SOURCE_EXT_HANDLER          = Glob(jerry_ext_dir + '/handler/*.c')
-SOURCE_EXT_INCLUDE          = Glob(jerry_ext_dir + '/include/*.c')
-SOURCE_EXT_MODULE           = Glob(jerry_ext_dir + '/module/*.c')
-
-jerry_ext = SOURCE_EXT_ARG + SOURCE_EXT_HANDLER + SOURCE_EXT_INCLUDE + SOURCE_EXT_MODULE
+jerry_ext = Glob(jerry_ext_dir + '/arg/*.c')
+jerry_ext += Glob(jerry_ext_dir + '/handler/*.c')
+jerry_ext += Glob(jerry_ext_dir + '/include/*.c')
+jerry_ext += Glob(jerry_ext_dir + '/module/*.c')
 
 src = jerry_core + jerry_ext
 
-jerry_core_dir = cwd + '/jerryscript/jerry-core'
-
-path = [cwd]
-path += [cwd + '/rtthread-port']
-path += [jerry_core_dir + '/api']
-path += [jerry_core_dir + '/debugger']
-path += [jerry_core_dir + '/ecma/base']
-path += [jerry_core_dir + '/ecma/builtin-objects']
-path += [jerry_core_dir + '/ecma/builtin-objects/typedarray']
-path += [jerry_core_dir + '/ecma/operations']
-path += [jerry_core_dir + '/include']
-path += [jerry_core_dir + '/jcontext']
-path += [jerry_core_dir + '/jmem']
-path += [jerry_core_dir + '/jrt']
-path += [jerry_core_dir + '/lit']
-path += [jerry_core_dir + '/parser/js']
-path += [jerry_core_dir + '/parser/regexp']
-path += [jerry_core_dir + '/vm']
-
-path += [jerry_ext_dir + '/arg']
-path += [jerry_ext_dir + '/handler']
-path += [jerry_ext_dir + '/include']
-path += [jerry_ext_dir + '/module']
+CPPPATH = [cwd]
+CPPPATH += [jerry_core_dir + '/api']
+CPPPATH += [jerry_core_dir + '/debugger']
+CPPPATH += [jerry_core_dir + '/ecma/base']
+CPPPATH += [jerry_core_dir + '/ecma/builtin-objects']
+CPPPATH += [jerry_core_dir + '/ecma/builtin-objects/typedarray']
+CPPPATH += [jerry_core_dir + '/ecma/operations']
+CPPPATH += [jerry_core_dir + '/include']
+CPPPATH += [jerry_core_dir + '/jcontext']
+CPPPATH += [jerry_core_dir + '/jmem']
+CPPPATH += [jerry_core_dir + '/jrt']
+CPPPATH += [jerry_core_dir + '/lit']
+CPPPATH += [jerry_core_dir + '/parser/js']
+CPPPATH += [jerry_core_dir + '/parser/regexp']
+CPPPATH += [jerry_core_dir + '/vm']
+
+CPPPATH += [jerry_ext_dir + '/arg']
+CPPPATH += [jerry_ext_dir + '/handler']
+CPPPATH += [jerry_ext_dir + '/include']
+CPPPATH += [jerry_ext_dir + '/module']
 
 LOCAL_CCFLAGS = ''
 import rtconfig
@@ -92,13 +72,10 @@ if GetDepend('PKG_JMEM_STATS'):
 if GetDepend('PKG_CONFIG_DISABLE_ES2015'):
     CPPDEFINES += ['CONFIG_DISABLE_ES2015']
 
-group = DefineGroup('JerryScript', src, depend = ['PKG_USING_JERRYSCRIPT'], CPPPATH = path, 
+group = DefineGroup('JerryScript', src, depend = ['PKG_USING_JERRYSCRIPT'], CPPPATH = CPPPATH, 
     CPPDEFINES = CPPDEFINES, LOCAL_CCFLAGS = LOCAL_CCFLAGS)
 
-list = os.listdir(cwd)
-
-for item in list:
-	if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
-		group = group + SConscript(os.path.join(item, 'SConscript'))
+if GetDepend('PKG_USING_JERRYSCRIPT'):
+    group = group + SConscript(os.path.join('rtthread-port', 'SConscript'))
 
 Return('group')

+ 0 - 11
examples/ImportCplusplus/SConscript

@@ -1,11 +0,0 @@
-from building import *
-
-cwd = GetCurrentDir()
-
-src = Glob('*.cpp')
-
-CPPPATH = [cwd]
-
-group = DefineGroup('JerryScript', src, depend = ['PKG_USING_JERRYSCRIPT', 'RT_USING_CPLUSPLUS'], CPPPATH = CPPPATH)
-
-Return('group')

+ 0 - 11
examples/ImportModule/SConscript

@@ -1,11 +0,0 @@
-from building import *
-
-cwd = GetCurrentDir()
-
-src = Glob('*.c')
-
-CPPPATH = [cwd]
-
-group = DefineGroup('JerryScript', src, depend = ['PKG_USING_JERRYSCRIPT'], CPPPATH = CPPPATH)
-
-Return('group')

+ 0 - 12
examples/SConscript

@@ -1,12 +0,0 @@
-import os
-from building import *
-
-objs = []
-cwd  = GetCurrentDir()
-list = os.listdir(cwd)
-
-for item in list:
-    if os.path.isfile(os.path.join(cwd, item, 'SConscript')):
-        objs = objs + SConscript(os.path.join(item, 'SConscript'))
-
-Return('objs')

+ 11 - 0
rtthread-port/SConscript

@@ -0,0 +1,11 @@
+# RT-Thread building script for JerryScript RT port
+
+from building import *
+
+cwd = GetCurrentDir()
+src = Glob('*.c')
+CPPPATH = [cwd]
+
+group = DefineGroup('JerryScriptRT', src, depend = ['PKG_USING_JERRYSCRIPT'], CPPPATH = CPPPATH)
+
+Return('group')

+ 93 - 25
rtthread-port/jerry_message.c

@@ -5,15 +5,21 @@
 
 static jerry_value_t js_message_obj = 0;
 static struct js_callback *js_message_cb = NULL;
+static js_message_send_func js_msg_send_func = NULL;
 
 struct js_message
 {
     char *name;
     rt_uint8_t *data;
-    rt_uint16_t size;
+    rt_uint32_t size;
 };
 
-rt_bool_t js_message_send(const char *name, rt_uint8_t *data, rt_uint16_t size)
+void js_message_send_func_init(js_message_send_func func)
+{
+    js_msg_send_func = func;
+}
+
+rt_bool_t js_message_send(const char *name, rt_uint8_t *data, rt_uint32_t size)
 {
     rt_bool_t ret = RT_FALSE;
 
@@ -40,7 +46,7 @@ rt_bool_t js_message_send(const char *name, rt_uint8_t *data, rt_uint16_t size)
     return ret;
 }
 
-static void js_callback_message(const void *args, uint32_t size)
+static void js_callback_message(const void *args, rt_uint32_t size)
 {
     struct js_message *msg = (struct js_message *)args;
     if (msg)
@@ -49,12 +55,8 @@ static void js_callback_message(const void *args, uint32_t size)
         jerry_value_t buf_obj = jerry_buffer_create(msg->size, &buffer);
         if (buffer)
         {
-            if (buffer->bufsize > 0)
-            {
-                js_set_property(buf_obj, "length", jerry_create_number(buffer->bufsize));
-                rt_memcpy(buffer->buffer, msg->data, msg->size);
-                js_emit_event(js_message_obj, msg->name, &buf_obj, 1);
-            }
+            rt_memcpy(buffer->buffer, msg->data, msg->size);
+            js_emit_event(js_message_obj, msg->name, &buf_obj, 1);
         }
         /* release value */
         jerry_release_value(buf_obj);
@@ -64,17 +66,97 @@ static void js_callback_message(const void *args, uint32_t size)
     }
 }
 
+static void js_message_info_free(void *native)
+{
+    js_message_obj = 0;
+    js_remove_callback(js_message_cb);
+    js_message_cb = NULL;
+}
+
+static const jerry_object_native_info_t js_message_info =
+{
+    .free_cb = js_message_info_free
+};
+
+DECLARE_HANDLER(send)
+{
+    bool result = false;
+
+    if (js_msg_send_func && args_cnt == 2 && jerry_value_is_string(args[0]))
+    {
+        if (jerry_value_to_string(args[1]))
+        {
+            char *name = js_value_to_string(args[0]);
+            if (name)
+            {
+                char *str = js_value_to_string(args[1]);
+                js_msg_send_func(name, (rt_uint8_t *)str, rt_strlen(str));
+                result = true;
+                rt_free(str);
+                rt_free(name);
+            }
+        }
+        else
+        {
+            js_buffer_t *buffer = jerry_buffer_find(args[1]);
+            if (buffer)
+            {
+                char *name = js_value_to_string(args[0]);
+                if (name)
+                {
+                    js_msg_send_func(name, buffer->buffer, buffer->bufsize);
+                    result = true;
+                    rt_free(name);
+                }
+            }
+        }
+    } 
+
+    return jerry_create_boolean(result);
+}
+
+DECLARE_HANDLER(destroy)
+{
+    js_destroy_emitter(this_value);
+ 
+    return jerry_create_boolean(true);
+}
+
 DECLARE_HANDLER(Message)
 {
+    jerry_value_t info = 0;
+
     if (js_message_obj != 0)
-        return jerry_acquire_value(js_message_obj);
+        return jerry_create_undefined();
 
     js_message_obj = jerry_create_object();
+    if (jerry_value_is_error(js_message_obj))
+    {
+        jerry_release_value(js_message_obj);
+        return jerry_create_undefined();
+    }
+
+    info = jerry_create_object();
+    if (jerry_value_is_error(js_message_obj))
+    {
+        jerry_release_value(js_message_obj);
+        jerry_release_value(info);
+        return jerry_create_undefined();
+    }
+
+    REGISTER_METHOD(js_message_obj, send);
+    REGISTER_METHOD(js_message_obj, destroy);
+
     js_make_emitter(js_message_obj, jerry_create_undefined());
+
+    jerry_set_object_native_pointer(info, NULL, &js_message_info);
+    js_set_property(js_message_obj, "info", info);
+    jerry_release_value(info);
+
     js_message_cb = js_add_callback(js_callback_message);
     if (js_message_cb)
     {
-        return jerry_acquire_value(js_message_obj);
+        return js_message_obj;
     }
     else
     {
@@ -90,20 +172,6 @@ int js_message_init(void)
     return 0;
 }
 
-int js_message_deinit(void)
-{
-    if (js_message_cb)
-    {
-        js_destroy_emitter(js_message_obj);
-        jerry_release_value(js_message_obj);
-        js_message_obj = 0;
-        js_remove_callback(js_message_cb);
-        js_message_cb = NULL;
-    }
-
-    return 0;
-}
-
 rt_bool_t js_msg_test(void)
 {
     char *data = "jerry message test!!!";

+ 4 - 2
rtthread-port/jerry_message.h

@@ -11,9 +11,11 @@
 extern "C" {
 #endif
 
-rt_bool_t js_message_send(const char *name, rt_uint8_t *data, rt_uint16_t size);
+typedef void(*js_message_send_func)(const char *name, rt_uint8_t *data, rt_uint32_t size);
+
+void js_message_send_func_init(js_message_send_func func);
+rt_bool_t js_message_send(const char *name, rt_uint8_t *data, rt_uint32_t size);
 int js_message_init(void);
-int js_message_deinit(void);
 
 #ifdef __cplusplus
 }

+ 243 - 245
rtthread-port/jerry_mqtt.c

@@ -17,7 +17,7 @@ void mqtt_event_callback(const void *args, uint32_t size)
     {
         js_emit_event(cb_info->this_value, cb_info->event_name, RT_NULL, 0);
     }
-    
+
     if (cb_info->return_value != RT_NULL)
     {
         for(int i = 0 ; i < cb_info->return_count ; i++)
@@ -32,7 +32,7 @@ void mqtt_event_callback(const void *args, uint32_t size)
 
 void mqtt_free_callback(const void *args, uint32_t size)
 {
-    
+
 }
 void mqtt_func_callback(const void *args, uint32_t size)
 {
@@ -46,19 +46,18 @@ void mqtt_sub_callback(MQTTClient *c, MessageData *msg_data)
 {
     mqtt_info_t* mqtt_info = (mqtt_info_t *)(c->user_data);
     struct js_callback* event_callback = mqtt_info->event_callback;
-    
+
     char* topicName = (char*)malloc((msg_data->topicName->lenstring.len+1)*sizeof(char));
     memset(topicName, 0, msg_data->topicName->lenstring.len+1);
     memcpy(topicName,msg_data->topicName->lenstring.data,msg_data->topicName->lenstring.len);
-    
+
     js_buffer_t *js_buffer;
     jerry_value_t js_payload = jerry_buffer_create(msg_data->message->payloadlen, &js_buffer);
     if (js_buffer)
     {
-        js_set_property(js_payload, "length", jerry_create_number(js_buffer->bufsize));
         rt_memcpy(js_buffer->buffer, msg_data->message->payload, msg_data->message->payloadlen);
     }
-    
+
     /*emit message event*/
     mqtt_cbinfo_t* cb_info = (mqtt_cbinfo_t*)malloc(sizeof(mqtt_cbinfo_t));
     memset(cb_info, 0, sizeof(mqtt_cbinfo_t));
@@ -109,7 +108,7 @@ void mqtt_online_callback(MQTTClient *c)
 
     mqtt_info_t* mqtt_info = (mqtt_info_t *)(c->user_data);
     struct js_callback* event_callback = mqtt_info->event_callback;
-    
+
     mqtt_cbinfo_t* cb_info = (mqtt_cbinfo_t*)malloc(sizeof(mqtt_cbinfo_t));
     memset(cb_info, 0, sizeof(mqtt_cbinfo_t));
     cb_info->this_value  = mqtt_info->this_value;
@@ -124,10 +123,10 @@ void mqtt_online_callback(MQTTClient *c)
 void mqtt_offline_callback(MQTTClient *c)
 {
     LOG_D("inter mqtt_offline_callback!");
-    
+
     mqtt_info_t* mqtt_info = (mqtt_info_t *)(c->user_data);
     struct js_callback* event_callback = mqtt_info->event_callback;
-    
+
     mqtt_cbinfo_t* cb_info = (mqtt_cbinfo_t*)malloc(sizeof(mqtt_cbinfo_t));
     memset(cb_info, 0, sizeof(mqtt_cbinfo_t));
     cb_info->this_value  = mqtt_info->this_value;
@@ -144,9 +143,9 @@ void mqtt_client_free_callback(void *native_p)
 
     if(!mqtt_info)
     {
-		return;
+        return;
     }
-    
+
     if(mqtt_info->client->isconnected == 1)
     {
         MQTT_CMD(mqtt_info->client,"DISCONNECT");
@@ -156,15 +155,15 @@ void mqtt_client_free_callback(void *native_p)
     {
         rt_sem_delete(mqtt_info->sem);
         mqtt_info->sem = RT_NULL;
-		js_destroy_emitter(mqtt_info->this_value);
+        js_destroy_emitter(mqtt_info->this_value);
     }
-    
+
 
     if(mqtt_info->close_callback)
     {
         js_remove_callback(mqtt_info->close_callback);
     }
-    
+
     if(mqtt_info->event_callback)
     {
         js_remove_callback(mqtt_info->event_callback);
@@ -210,7 +209,7 @@ void mqtt_client_free_callback(void *native_p)
     }
 
     free(mqtt_info);
-    
+
     hasClient = false;
 }
 
@@ -230,18 +229,18 @@ DECLARE_HANDLER(connect)
 {
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     paho_mqtt_start(mqtt_info->client);
-    
+
     return jerry_create_undefined();
 }
 DECLARE_HANDLER(publish)
 {
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     char *topic;
-    unsigned char* send_str;
+    unsigned char* send_str = NULL;
     int length = 0;
     int qos = 1;
     bool dup = false;
@@ -250,98 +249,98 @@ DECLARE_HANDLER(publish)
 
     switch(args_cnt)
     {
-        case 4:
-            if(jerry_value_is_function(args[3]))
-            {
-                js_pub_callback = args[3];
-            }
-            else
-            {
-                LOG_E("the 4rd parameter is not function");
-                goto _exit;
-            }
-        case 3:
-            if(jerry_value_is_function(args[2]))
-            {
-                js_pub_callback = args[2];
-            }
-            else if(jerry_value_is_object(args[2]))
+    case 4:
+        if(jerry_value_is_function(args[3]))
+        {
+            js_pub_callback = args[3];
+        }
+        else
+        {
+            LOG_E("the 4rd parameter is not function");
+            goto _exit;
+        }
+    case 3:
+        if(jerry_value_is_function(args[2]))
+        {
+            js_pub_callback = args[2];
+        }
+        else if(jerry_value_is_object(args[2]))
+        {
+            if(jerry_value_is_object(js_get_property(args[2],"qos")))
             {
-                if(jerry_value_is_object(js_get_property(args[2],"qos")))
-                {
-                    qos = jerry_get_number_value(js_get_property(args[2],"qos"));
-                    
-                    if(qos < 0)
-                    {
-                        qos = 0;
-                    }
-                    else if(qos > 2)
-                    {
-                        qos = 2;
-                    }
-                }
-                
-                if(jerry_value_is_boolean(js_get_property(args[2],"dup")))
-                {
-                    dup = jerry_value_to_boolean(js_get_property(args[2],"dup"));
-                }
-                
-                if(jerry_value_is_boolean(js_get_property(args[2],"retain")))
+                qos = jerry_get_number_value(js_get_property(args[2],"qos"));
+
+                if(qos < 0)
                 {
-                    retain = jerry_value_to_boolean(js_get_property(args[2],"retain"));
+                    qos = 0;
                 }
-            }
-            else
-            {
-                LOG_E("the 3nd parameter is not object or func");
-                goto _exit;
-            }
-        case 2:
-            if(jerry_value_is_string(args[1]))
-            {
-                send_str =  (unsigned char *)js_value_to_string(args[1]);
-                length = strlen((const char *)send_str);
-            }
-            else if(jerry_value_is_object(args[1]))
-            {
-                js_buffer_t *js_buffer = jerry_buffer_find(args[1]);
-                if(js_buffer)
+                else if(qos > 2)
                 {
-                    send_str = js_buffer->buffer;
-                    length = js_buffer->bufsize;
+                    qos = 2;
                 }
             }
-            else
+
+            if(jerry_value_is_boolean(js_get_property(args[2],"dup")))
             {
-                LOG_E("the 1st parameter is not string or buffer");
-                goto _exit;
+                dup = jerry_value_to_boolean(js_get_property(args[2],"dup"));
             }
-        case 1 : 
-            if(jerry_value_is_string(args[0]))
+
+            if(jerry_value_is_boolean(js_get_property(args[2],"retain")))
             {
-                topic = js_value_to_string(args[0]);
+                retain = jerry_value_to_boolean(js_get_property(args[2],"retain"));
             }
-            else
+        }
+        else
+        {
+            LOG_E("the 3nd parameter is not object or func");
+            goto _exit;
+        }
+    case 2:
+        if(jerry_value_is_string(args[1]))
+        {
+            send_str =  (unsigned char *)js_value_to_string(args[1]);
+            length = strlen((const char *)send_str);
+        }
+        else if(jerry_value_is_object(args[1]))
+        {
+            js_buffer_t *js_buffer = jerry_buffer_find(args[1]);
+            if(js_buffer)
             {
-                LOG_E("the 1st parameter is not string");
-                goto _exit;
+                send_str = js_buffer->buffer;
+                length = js_buffer->bufsize;
             }
-            break;
-        default:
-            LOG_E("the count of parameters is wrong");
+        }
+        else
+        {
+            LOG_E("the 1st parameter is not string or buffer");
             goto _exit;
-            break;
+        }
+    case 1 :
+        if(jerry_value_is_string(args[0]))
+        {
+            topic = js_value_to_string(args[0]);
+        }
+        else
+        {
+            LOG_E("the 1st parameter is not string");
+            goto _exit;
+        }
+        break;
+    default:
+        LOG_E("the count of parameters is wrong");
+        goto _exit;
+        break;
     }
     rt_sem_take(mqtt_info->sem,RT_WAITING_FOREVER);
     MQTTMessage message;
-    
+
     message.qos = qos;
     message.retained = retain;
     message.payload = (void *)send_str;
     message.payloadlen = length;
 
     MQTTPublish(mqtt_info->client, topic, &message);
-    
+
     if(js_pub_callback != RT_NULL)
     {
         for(int i =0 ; i < MAX_MESSAGE_HANDLERS ; i++)
@@ -357,74 +356,73 @@ DECLARE_HANDLER(publish)
     rt_sem_release(mqtt_info->sem);
     free(send_str);
     free(topic);
-    _exit:
+_exit:
     return jerry_create_undefined();
 }
 DECLARE_HANDLER(subscribe)
 {
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     if(mqtt_info->subCount == MAX_MESSAGE_HANDLERS)
     {
         LOG_E("the count of topics is max");
         goto _exit;
     }
-    
-    jerry_value_t js_callback;
+
     int qos = 0;
     char* topic = RT_NULL;
-    jerry_value_t js_sub_callback;
+    jerry_value_t js_sub_callback = 0;
     switch(args_cnt)
     {
-        case 3:
-            if(jerry_value_is_function(args[2]))
-            {
-                js_sub_callback = args[2];
-            }
-            else
-            {
-                LOG_E("the 3rd parameter is not function");
-                goto _exit;
-            }
-        case 2:
-            if(jerry_value_is_object(args[1]) && jerry_value_is_number(js_get_property(args[1],"qos")))
-            {
-                qos = jerry_get_number_value(js_get_property(args[1],"qos"));
-                
-                if(qos < 0)
-                {
-                    qos = 0;
-                }
-                else if(qos > 2)
-                {
-                    qos = 2;
-                }
-            }
-            else if(jerry_value_is_function(args[1]))
-            {
-                js_sub_callback = args[1];
-            }
-            else
-            {
-                LOG_E("the 2nd parameter is not number or func");
-                goto _exit;
-            }
-        case 1 : 
-            if(jerry_value_is_string(args[0]))
+    case 3:
+        if(jerry_value_is_function(args[2]))
+        {
+            js_sub_callback = args[2];
+        }
+        else
+        {
+            LOG_E("the 3rd parameter is not function");
+            goto _exit;
+        }
+    case 2:
+        if(jerry_value_is_object(args[1]) && jerry_value_is_number(js_get_property(args[1],"qos")))
+        {
+            qos = jerry_get_number_value(js_get_property(args[1],"qos"));
+
+            if(qos < 0)
             {
-                topic = js_value_to_string(args[0]);
+                qos = 0;
             }
-            else
+            else if(qos > 2)
             {
-                LOG_E("the 1st parameter is not string");
-                goto _exit;
+                qos = 2;
             }
-            break;
-        default:
-            LOG_E("the count of parameters is wrong");
+        }
+        else if(jerry_value_is_function(args[1]))
+        {
+            js_sub_callback = args[1];
+        }
+        else
+        {
+            LOG_E("the 2nd parameter is not number or func");
             goto _exit;
-            break;
+        }
+    case 1 :
+        if(jerry_value_is_string(args[0]))
+        {
+            topic = js_value_to_string(args[0]);
+        }
+        else
+        {
+            LOG_E("the 1st parameter is not string");
+            goto _exit;
+        }
+        break;
+    default:
+        LOG_E("the count of parameters is wrong");
+        goto _exit;
+        break;
     }
     rt_sem_take(mqtt_info->sem, RT_WAITING_FOREVER);
     for(int i = 0 ; i < MAX_MESSAGE_HANDLERS ; i++)
@@ -437,7 +435,7 @@ DECLARE_HANDLER(subscribe)
             break;
         }
     }
-    
+
     int index;
     for(index = 0; index < MAX_MESSAGE_HANDLERS ; index++)
     {
@@ -446,15 +444,15 @@ DECLARE_HANDLER(subscribe)
             mqtt_info->client->messageHandlers[index].topicFilter =topic;
             mqtt_info->client->messageHandlers[index].callback = mqtt_sub_callback;
             mqtt_info->client->messageHandlers[index].qos = qos;
-            
+
 
             mqtt_info->subCount++;
-            
+
             if(mqtt_info->client->isconnected == 1)
             {
                 MQTT_CMD(mqtt_info->client,"RECONNECT");
             }
-            
+
             /*emit the callback*/
             if(js_sub_callback)
             {
@@ -473,8 +471,8 @@ DECLARE_HANDLER(subscribe)
     }
     rt_sem_release(mqtt_info->sem);
 
-    
-    _exit:
+
+_exit:
     return jerry_create_undefined();
 }
 
@@ -482,33 +480,33 @@ DECLARE_HANDLER(unsubscribe)
 {
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     jerry_value_t js_unsub_callback = RT_NULL;
     char* topic;
     switch(args_cnt)
     {
-        case 2:
-            if(jerry_value_is_function(args[1]))
-            {
-                js_unsub_callback = args[1];
-            }
-            else
-            {
-                goto _exit;
-            }
-        case 1 : 
-            if(jerry_value_is_string(args[0]))
-            {
-                topic = js_value_to_string(args[0]);
-            }
-            else
-            {
-                goto _exit;
-            }
-            break;
-        default:
+    case 2:
+        if(jerry_value_is_function(args[1]))
+        {
+            js_unsub_callback = args[1];
+        }
+        else
+        {
             goto _exit;
-            break;
+        }
+    case 1 :
+        if(jerry_value_is_string(args[0]))
+        {
+            topic = js_value_to_string(args[0]);
+        }
+        else
+        {
+            goto _exit;
+        }
+        break;
+    default:
+        goto _exit;
+        break;
     }
     rt_sem_take(mqtt_info->sem, RT_WAITING_FOREVER);
     for(int i = 0 ; i < MAX_MESSAGE_HANDLERS ; i++)
@@ -518,14 +516,14 @@ DECLARE_HANDLER(unsubscribe)
             /*free data*/
             free(mqtt_info->client->messageHandlers[i].topicFilter);
             mqtt_info->client->messageHandlers[i].topicFilter = RT_NULL;
-            
+
             /*restart mqtt*/
             mqtt_info->subCount--;
             if(mqtt_info->client->isconnected == 1)
             {
                 MQTT_CMD(mqtt_info->client,"RECONNECT");
             }
-            
+
             /*emit the callback*/
             if(js_unsub_callback)
             {
@@ -539,7 +537,7 @@ DECLARE_HANDLER(unsubscribe)
                 js_send_callback(mqtt_info->fun_callback,cb_info,sizeof(mqtt_cbinfo_t));
                 free(cb_info);
             }
-            
+
             for(int i =0 ; i < MAX_MESSAGE_HANDLERS ; i++)
             {
                 if(strcmp(mqtt_info->callbackHandler[i].topic,topic) == 0)
@@ -554,50 +552,50 @@ DECLARE_HANDLER(unsubscribe)
     }
     free(topic);
     rt_sem_release(mqtt_info->sem);
-    _exit:
+_exit:
     return jerry_create_undefined();
 }
 DECLARE_HANDLER(end)
 {
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     jerry_value_t js_end_callback = RT_NULL;
     bool force;
     switch(args_cnt)
     {
-        case 2:
-            if(jerry_value_is_function(args[1]))
-            {
-                js_end_callback = args[1];
-            }
-            else
-            {
-                goto _exit;
-            }
-        case 1 : 
-            if(jerry_value_is_boolean(args[0]))
-            {
-                force = jerry_value_to_boolean(args[0]);
-            } 
-            else if(jerry_value_is_function(args[0]))
-            {
-                js_end_callback = args[0];
-            }
-            else
-            {
-                goto _exit;
-            }
-            break;
-        default:
+    case 2:
+        if(jerry_value_is_function(args[1]))
+        {
+            js_end_callback = args[1];
+        }
+        else
+        {
             goto _exit;
-            break;
+        }
+    case 1 :
+        if(jerry_value_is_boolean(args[0]))
+        {
+            force = jerry_value_to_boolean(args[0]);
+        }
+        else if(jerry_value_is_function(args[0]))
+        {
+            js_end_callback = args[0];
+        }
+        else
+        {
+            goto _exit;
+        }
+        break;
+    default:
+        goto _exit;
+        break;
     }
-    
+
     if(mqtt_info->client->isconnected == 1)
     {
         MQTT_CMD(mqtt_info->client,"DISCONNECT");
-        
+
         /*emit the callback*/
         if(js_end_callback)
         {
@@ -619,7 +617,7 @@ DECLARE_HANDLER(reconnect)
 {
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     if(mqtt_info->client->isconnected == 1)
     {
         MQTT_CMD(mqtt_info->client,"RECONNECT");
@@ -628,7 +626,7 @@ DECLARE_HANDLER(reconnect)
     {
         paho_mqtt_start(mqtt_info->client);
     }
-    
+
     return jerry_create_undefined();
 }
 
@@ -650,7 +648,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
     {
         goto _exit;
     }
-    
+
     client_info->client = (MQTTClient*)malloc(sizeof(MQTTClient));
     if(!client_info->client)
     {
@@ -693,7 +691,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
             client_info->client->condata.keepAliveInterval = jerry_get_number_value(js_keepalive);
         }
         jerry_release_value(js_keepalive);
-        
+
         jerry_value_t js_clientId = js_get_property(args[1], "clientId");
         if(jerry_value_is_string(js_clientId))
         {
@@ -702,28 +700,28 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
             free(cid);
         }
         jerry_release_value(js_clientId);
-        
+
         jerry_value_t js_clean = js_get_property(args[1],"clean");
         if(jerry_value_is_boolean(js_clean))
         {
             client_info->client->condata.cleansession = jerry_value_to_boolean(js_clean);
         }
         jerry_release_value(js_clean);
-        
+
         jerry_value_t js_reconnectPeriod = js_get_property(args[1],"reconnectPeriod");
         if(jerry_value_is_number(js_reconnectPeriod))
         {
             client_info->client->reconnectPeriod = jerry_get_number_value(js_reconnectPeriod);
         }
         jerry_release_value(js_reconnectPeriod);
-        
+
         jerry_value_t js_connectTimeout = js_get_property(args[1],"connectTimeout");
         if(jerry_value_is_number(js_connectTimeout))
         {
             client_info->client->connectTimeout = jerry_get_number_value(js_connectTimeout);
         }
         jerry_release_value(js_connectTimeout);
-        
+
         jerry_value_t js_username = js_get_property(args[1], "username");
         if(jerry_value_is_string(js_username))
         {
@@ -732,7 +730,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
             free(username);
         }
         jerry_release_value(js_username);
-        
+
         jerry_value_t js_password = js_get_property(args[1], "password");
         if(jerry_value_is_string(js_password))
         {
@@ -741,14 +739,14 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
             free(password);
         }
         jerry_release_value(js_password);
-        
+
         jerry_value_t js_will =  js_get_property(args[1],"will");
         if(jerry_value_is_object(js_will))
         {
             client_info->client->condata.willFlag = 1;
             client_info->client->condata.will.qos = 0;
             client_info->client->condata.will.retained = 0;
-            
+
             jerry_value_t js_will_topic = js_get_property(js_will,"topic");
             if(jerry_value_is_string(js_will_topic))
             {
@@ -762,7 +760,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
                 jerry_release_value(js_will_topic);
                 goto _exit;
             }
-            
+
             jerry_value_t js_will_message = js_get_property(js_will,"payload");
             if(jerry_value_is_string(js_will_message))
             {
@@ -792,7 +790,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
                 client_info->client->condata.will.qos = qos;
             }
             jerry_release_value(js_will_qos);
-            
+
             jerry_value_t js_will_retain = js_get_property(js_will,"retain");
             if(jerry_value_is_number(js_will_retain))
             {
@@ -801,7 +799,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
             jerry_release_value(js_will_retain);
         }
     }
-    
+
     /* malloc buffer. */
     client_info->client->buf_size = client_info->client->readbuf_size = 1024;
     client_info->client->buf = malloc(client_info->client->buf_size);
@@ -810,17 +808,17 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
     {
         goto _exit;
     }
-    
+
     /*create sem*/
     client_info->sem = rt_sem_create("mqtt_msghandler_semt", 1, RT_IPC_FLAG_FIFO);
 
     js_make_emitter(js_client, jerry_create_undefined());
-    
+
     /*add js event callback*/
     client_info->fun_callback = js_add_callback(mqtt_func_callback);
     client_info->event_callback = js_add_callback(mqtt_event_callback);
     client_info->close_callback = js_add_callback(mqtt_free_callback);
-    
+
     /* set client's event callback function */
     client_info->client->connect_callback = mqtt_connect_callback;
     client_info->client->online_callback = mqtt_online_callback;
@@ -843,7 +841,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
     hasClient = true;
 
     return (js_client);
-    _exit:
+_exit:
     jerry_release_value(js_client);
     if(client_info)
     {
@@ -851,7 +849,7 @@ static jerry_value_t mqtt_create_client(int arg_cnt,const jerry_value_t* args)
         {
             free(client_info->client);
         }
-        
+
         free(client_info);
     }
     return jerry_create_undefined();
@@ -866,20 +864,20 @@ DECLARE_HANDLER(Client)
 
     switch(args_cnt)
     {
-        case 2:
-            if(!jerry_value_is_object(args[1]))
-            {
-                return jerry_create_undefined();
-            }
-        case 1:
-            if(!jerry_value_is_string(args[0]))
-            {
-                return jerry_create_undefined();
-            }
-        default:
-            break;
+    case 2:
+        if(!jerry_value_is_object(args[1]))
+        {
+            return jerry_create_undefined();
+        }
+    case 1:
+        if(!jerry_value_is_string(args[0]))
+        {
+            return jerry_create_undefined();
+        }
+    default:
+        break;
     }
-    
+
     jerry_value_t js_client = mqtt_create_client(args_cnt,args);
     return js_client;
 }
@@ -893,25 +891,25 @@ DECLARE_HANDLER(client_connect)
 
     switch(args_cnt)
     {
-        case 2:
-            if(!jerry_value_is_object(args[1]))
-            {
-                return jerry_create_undefined();
-            }
-        case 1:
-            if(!jerry_value_is_string(args[0]))
-            {
-                return jerry_create_undefined();
-            }
-        default:
-            break;
+    case 2:
+        if(!jerry_value_is_object(args[1]))
+        {
+            return jerry_create_undefined();
+        }
+    case 1:
+        if(!jerry_value_is_string(args[0]))
+        {
+            return jerry_create_undefined();
+        }
+    default:
+        break;
     }
-    
+
     jerry_value_t js_client =  mqtt_create_client(args_cnt,args);
-    
+
     mqtt_info_t *mqtt_info = RT_NULL;
     get_mqtt_info((void **)&mqtt_info, this_value);
-    
+
     paho_mqtt_start(mqtt_info->client);
 
     return js_client;
@@ -929,4 +927,4 @@ static jerry_value_t jerry_mqtt_init()
 
 JS_MODULE(mqtt, jerry_mqtt_init)
 
-#endif
+#endif

+ 6 - 4
rtthread-port/jerry_net.c

@@ -1,6 +1,8 @@
+#include <rtdevice.h>
 #include "jerry_net.h"
 /* manage the pipe of socket */
 
+#undef PIPE_BUFSZ
 #define PIPE_BUFSZ    512
 
 static rt_int32_t pipe_init(struct socket_info *thiz)
@@ -426,7 +428,6 @@ void net_socket_readData(jerry_value_t js_socket)
     jerry_value_t data_value = jerry_buffer_create(bytesRead, &js_buffer);
     if (js_buffer)
     {
-        js_set_property(data_value, "length", jerry_create_number(js_buffer->bufsize));
         rt_memcpy(js_buffer->buffer, buffer, bytesRead);
     }
 
@@ -564,11 +565,12 @@ void net_socket_readData_entry(void *p)
 
         if (FD_ISSET(pipe_read_fd, &readfds))
         {
-            rt_sem_take(js_socket_info->socket_sem, RT_WAITING_FOREVER);
             //read from pipe
             static net_writeInfo_t write_info;
+            
+            rt_sem_take(js_socket_info->socket_sem, RT_WAITING_FOREVER);
             memset(&write_info, 0, sizeof(net_writeInfo_t));
-            int bytesRead = read(js_socket_info->pipe_read_fd, &write_info, sizeof(net_writeInfo_t));
+            read(js_socket_info->pipe_read_fd, &write_info, sizeof(net_writeInfo_t));
             if (write_info.stop_read && write_info.stop_sem)
             {
                 pipe_deinit(js_socket_info);
@@ -1089,10 +1091,10 @@ static void net_server_listen_entry(void *listen_info)
     /*start listening and accepting*/
     if (socket > 0)
     {
-        int ret = listen(server_id, backlog); // start listen
         struct sockaddr_in client_addr;
         socklen_t addrlen = 1;
 
+        listen(server_id, backlog); // start listen
         rt_kprintf("SERVER_MAX_CONNECTIONS : %d \n", backlog);
         while (1)
         {

+ 3 - 5
rtthread-port/jerry_request_init.c

@@ -70,6 +70,7 @@ void request_create_header(struct webclient_session *session, jerry_value_t head
     int per_enter_index = -1;
     char header_type[64];
     char header_info[128];
+
     for (int i = 0 ; i < session->header->length ; i++)
     {
         if (session->header->buffer[i] == ':' && per_enter_index != enter_index)
@@ -127,8 +128,8 @@ bool request_get_header(struct webclient_session *session, jerry_value_t header_
 void request_read_entry(void *p)
 {
     request_tdinfo_t *rp = (request_tdinfo_t *)p;
-
     unsigned char *buffer = RT_NULL;
+
     buffer = (unsigned char *)malloc(READ_MAX_SIZE + 1);
     if (!buffer)
     {
@@ -163,9 +164,6 @@ void request_read_entry(void *p)
         jerry_value_t data_value = jerry_buffer_create(ret_read, &js_buffer);
         if (js_buffer)
         {
-            jerry_value_t length_value = jerry_create_number(js_buffer->bufsize);
-            js_set_property(data_value, "length", length_value);
-            jerry_release_value(length_value);
             rt_memcpy(js_buffer->buffer, buffer, ret_read);
         }
         js_set_property(return_value, "data", data_value);
@@ -373,4 +371,4 @@ static jerry_value_t _jerry_request_init()
 }
 
 JS_MODULE(http, _jerry_request_init)
-#endif
+#endif

+ 13 - 11
rtthread-port/jerry_util.c

@@ -8,7 +8,13 @@
 #include <jerry_event.h>
 #include <jerry_message.h>
 
-static rt_mutex_t _util_lock = RT_NULL;
+extern int js_console_init(void);
+extern int js_module_init(void);
+extern int js_buffer_init(void);
+extern int js_buffer_cleanup(void);
+
+static rt_mutex_t _util_lock = NULL;
+static js_util_user _user_init = NULL, _user_cleanup = NULL;
 
 void js_set_property(const jerry_value_t obj, const char *name,
                      const jerry_value_t prop)
@@ -207,6 +213,7 @@ int js_read_file(const char* filename, char **script)
     FILE *fp;
     int length = 0;
     struct stat statbuf;
+
     if (!filename || !script) return 0;
 
     stat(filename, &statbuf);
@@ -217,14 +224,16 @@ int js_read_file(const char* filename, char **script)
     *script = (char *)rt_malloc(length + 1);
     if(!(*script)) return 0;
     (*script)[length] = '\0';
-    fp = fopen(filename,"rb");
+
+    fp = fopen(filename, "rb");
     if(!fp)
     {
         rt_free(*script);
         *script = RT_NULL;
         return 0;
     }
-    if(fread(*script,length,1,fp) != 1)
+
+    if(fread(*script, length, 1, fp) != 1)
     {
         length = 0;
         rt_free(*script);
@@ -232,16 +241,10 @@ int js_read_file(const char* filename, char **script)
         printf("read failed!\n");
     }
     fclose(fp);
+
     return length;
 }
 
-extern int js_console_init(void);
-extern int js_module_init(void);
-extern int js_buffer_init(void);
-extern int js_buffer_cleanup(void);
-
-static js_util_user _user_init = NULL, _user_cleanup = NULL;
-
 int js_util_init(void)
 {
     if (_util_lock == RT_NULL)
@@ -262,7 +265,6 @@ int js_util_init(void)
 
 int js_util_cleanup(void)
 {
-    js_message_deinit();
     js_event_deinit();
     js_buffer_cleanup();
     if (_user_cleanup != NULL)