summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2016-08-11 20:20:50 +0800
committerGitHub <[email protected]>2016-08-11 20:20:50 +0800
commitb59b6639e56d39ce13a2f2d276b30627588df1ee (patch)
tree4658e080d671e0f161e7dfa6e39924b366b82165
parent764a1ba6d9172a7a0ea0e0670739452d59731454 (diff)
parent891050cb3d84f0592f8fc4c4345a86613fc12673 (diff)
Merge pull request #652 from wuji2015/master
[lua] 在msh和fnish中均可调用lua,可将lua脚本作为参数传入
-rw-r--r--components/external/lua/applications/lua_in_finsh.c38
1 files changed, 30 insertions, 8 deletions
diff --git a/components/external/lua/applications/lua_in_finsh.c b/components/external/lua/applications/lua_in_finsh.c
index 9fe38b0981..ecf9700d37 100644
--- a/components/external/lua/applications/lua_in_finsh.c
+++ b/components/external/lua/applications/lua_in_finsh.c
@@ -21,7 +21,7 @@ rt_err_t lua_rx_ind(rt_device_t dev, rt_size_t size)
return RT_EOK;
}
-void finsh_lua(void *parameter)
+void finsh_lua(int argc, char **argv)
{
rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size);
@@ -34,9 +34,6 @@ void finsh_lua(void *parameter)
rt_device_set_rx_indicate(dev4lua.device, lua_rx_ind);
{
- int argc = 1;
- char *argv[] = {"lua", NULL};
-
/* run lua interpreter */
lua_main(argc, argv);
}
@@ -45,9 +42,8 @@ void finsh_lua(void *parameter)
rt_device_set_rx_indicate(dev4lua.device, rx_indicate);
}
-static void lua(void)
+static void lua(void *parameters)
{
- rt_thread_t lua_thread;
const char* device_name = finsh_get_device();
rt_device_t device = rt_device_find(device_name);
if (device == RT_NULL)
@@ -56,6 +52,7 @@ static void lua(void)
return;
}
dev4lua.device = device;
+ char *argv[] = {"lua", parameters, NULL};
#if 0
/* Run lua interpreter in separate thread */
@@ -71,10 +68,35 @@ static void lua(void)
}
#else
/* Directly run lua interpreter in finsh */
- finsh_lua(0);
+ finsh_lua(2, argv);
#endif
}
-FINSH_FUNCTION_EXPORT(lua, lua interpreter)
+FINSH_FUNCTION_EXPORT(lua, lua interpreter);
+
+static void lua_msh(int argc, char **argv)
+{
+ const char* device_name = finsh_get_device();
+ rt_device_t device = rt_device_find(device_name);
+ if (device == RT_NULL)
+ {
+ rt_kprintf("%s not find\n", device_name);
+ return;
+ }
+ dev4lua.device = device;
+
+ /*prepare parameters*/
+ int i;
+ char **arg = rt_malloc((argc+1)*sizeof(char*));
+ for (i=0; i<argc; i++){
+ arg[i] = argv[i];
+ }
+ arg[argc] = NULL;
+
+ finsh_lua(argc, arg);
+ rt_free(arg);
+ return;
+}
+MSH_CMD_EXPORT(lua_msh, lua in msh);
int readline4lua(const char *prompt, char *buffer, int buffer_size)
{