Kaynağa Gözat

fix gitee #I1MWDQ

Peter Zhang 5 yıl önce
ebeveyn
işleme
74d8e9087d
93 değiştirilmiş dosya ile 1037 ekleme ve 4302 silme
  1. 3 1
      docs/api/c_api/freertos/README.md
  2. 11 0
      docs/api/c_api/rtt/README.md
  3. 53 0
      docs/api/c_api/rtt/luat_lib_wlan.md
  4. 14 14
      docs/api/c_api/rtt/luat_uart_rtt.md
  5. 0 42
      docs/api/freertos/luat_timer_freertos.md
  6. 22 0
      docs/api/lua/README.md
  7. 7 5
      docs/api/lua/luat_lib_adc.md
  8. 10 28
      docs/api/lua/luat_lib_crypto.md
  9. 9 59
      docs/api/lua/luat_lib_disp.md
  10. 12 72
      docs/api/lua/luat_lib_gpio.md
  11. 84 0
      docs/api/lua/luat_lib_libcoap.md
  12. 42 0
      docs/api/lua/luat_lib_libgnss.md
  13. 24 63
      docs/api/lua/luat_lib_log.md
  14. 118 0
      docs/api/lua/luat_lib_pm.md
  15. 14 72
      docs/api/lua/luat_lib_rtos.md
  16. 42 0
      docs/api/lua/luat_lib_sensor.md
  17. 81 0
      docs/api/lua/luat_lib_socket.md
  18. 3 3
      docs/api/lua/luat_lib_timer.md
  19. 21 17
      docs/api/lua/luat_lib_uart.md
  20. 0 27
      docs/api/modules/README.md
  21. 0 25
      docs/api/modules/luat_lib_http.md
  22. 0 210
      docs/api/modules/luat_lib_i2c.md
  23. 0 271
      docs/api/modules/luat_lib_libcoap.md
  24. 0 126
      docs/api/modules/luat_lib_libgnss.md
  25. 0 279
      docs/api/modules/luat_lib_mqtt.md
  26. 0 66
      docs/api/modules/luat_lib_pack.md
  27. 0 222
      docs/api/modules/luat_lib_pm.md
  28. 0 50
      docs/api/modules/luat_lib_pwm.md
  29. 0 166
      docs/api/modules/luat_lib_sensor.md
  30. 0 501
      docs/api/modules/luat_lib_socket.md
  31. 0 113
      docs/api/modules/luat_lib_spi.md
  32. 0 115
      docs/api/modules/luat_main.md
  33. 0 21
      docs/api/rtt/README.md
  34. 0 23
      docs/api/rtt/luat_gpio_rtt.md
  35. 0 72
      docs/api/rtt/luat_i2c_rtt.md
  36. 0 67
      docs/api/rtt/luat_lib_utest.md
  37. 0 591
      docs/api/rtt/luat_lib_wlan.md
  38. 0 23
      docs/api/rtt/luat_malloc_rtt.md
  39. 0 24
      docs/api/rtt/luat_msh_rtt.md
  40. 0 343
      docs/api/rtt/luat_netclient_rtt.md
  41. 0 23
      docs/api/rtt/luat_pwm_rtt.md
  42. 0 65
      docs/api/rtt/luat_rtt_base.md
  43. 0 45
      docs/api/rtt/luat_socket_rtt.md
  44. 0 23
      docs/api/rtt/luat_spi_rtt.md
  45. 0 23
      docs/api/rtt/luat_timer_rtt.md
  46. 0 90
      docs/api/rtt/luat_uart_rtt.md
  47. 0 122
      docs/api/rtt/rtt_airkiss.md
  48. 0 23
      docs/api/rtt/rtt_mem.md
  49. 7 0
      luat/modules/README.md
  50. 44 0
      tools/java/README.md
  51. 18 2
      tools/java/src/main/java/com/luatos/toolkit/LuatDocEntry.java
  52. 22 9
      tools/java/src/main/java/com/luatos/toolkit/LuatDocGenerator.java
  53. 1 1
      tools/java/src/main/java/com/luatos/toolkit/LuatDocSetup.java
  54. 57 0
      tools/java/src/main/java/com/luatos/toolkit/LuatRenderingSetup.java
  55. 4 2
      tools/java/src/main/java/com/luatos/toolkit/Luats.java
  56. 9 0
      tools/java/src/main/java/com/luatos/toolkit/api/FnSignParser.java
  57. 9 0
      tools/java/src/main/java/com/luatos/toolkit/api/LuDocParser.java
  58. 12 0
      tools/java/src/main/java/com/luatos/toolkit/api/LuDocRender.java
  59. 2 2
      tools/java/src/main/java/com/luatos/toolkit/api/LuDocSetRender.java
  60. 1 1
      tools/java/src/main/java/com/luatos/toolkit/api/TagParser.java
  61. 3 2
      tools/java/src/main/java/com/luatos/toolkit/bean/FnExample.java
  62. 1 1
      tools/java/src/main/java/com/luatos/toolkit/bean/FnLang.java
  63. 3 2
      tools/java/src/main/java/com/luatos/toolkit/bean/FnParam.java
  64. 3 2
      tools/java/src/main/java/com/luatos/toolkit/bean/FnReturn.java
  65. 3 2
      tools/java/src/main/java/com/luatos/toolkit/bean/FnSign.java
  66. 1 1
      tools/java/src/main/java/com/luatos/toolkit/bean/LuCmtAppend.java
  67. 1 1
      tools/java/src/main/java/com/luatos/toolkit/bean/LuCmtType.java
  68. 1 1
      tools/java/src/main/java/com/luatos/toolkit/bean/LuComment.java
  69. 54 2
      tools/java/src/main/java/com/luatos/toolkit/bean/LuDocument.java
  70. 22 8
      tools/java/src/main/java/com/luatos/toolkit/bean/LuHead.java
  71. 18 2
      tools/java/src/main/java/com/luatos/toolkit/bean/LuatDocSet.java
  72. 7 6
      tools/java/src/main/java/com/luatos/toolkit/impl/CFnSignParser.java
  73. 9 8
      tools/java/src/main/java/com/luatos/toolkit/impl/CLuDocParser.java
  74. 46 33
      tools/java/src/main/java/com/luatos/toolkit/impl/ComboDocSetRender.java
  75. 8 7
      tools/java/src/main/java/com/luatos/toolkit/impl/DoxyFnSignParser.java
  76. 7 4
      tools/java/src/main/java/com/luatos/toolkit/impl/JsonLuDocRender.java
  77. 4 3
      tools/java/src/main/java/com/luatos/toolkit/impl/LuHeadParser.java
  78. 22 16
      tools/java/src/main/java/com/luatos/toolkit/impl/MarkdownLuDocRender.java
  79. 3 2
      tools/java/src/main/java/com/luatos/toolkit/impl/NutMapTagParser.java
  80. 23 9
      tools/java/src/main/java/com/luatos/toolkit/util/ComboLuDocRender.java
  81. 0 9
      tools/java/src/main/java/org/luatos/toolkit/api/FnSignParser.java
  82. 0 9
      tools/java/src/main/java/org/luatos/toolkit/api/LuDocParser.java
  83. 0 11
      tools/java/src/main/java/org/luatos/toolkit/api/LuDocRender.java
  84. 7 0
      tools/java/src/main/resources/dft_readme.md
  85. 9 3
      tools/java/src/main/resources/doc-gen.json
  86. 1 1
      tools/java/src/main/resources/log4j.properties
  87. 4 3
      tools/java/src/test/java/com/luatos/toolkit/AllLuTookietTest.java
  88. 6 4
      tools/java/src/test/java/com/luatos/toolkit/bean/FnSignTest.java
  89. 1 1
      tools/java/src/test/java/com/luatos/toolkit/bean/LuAllBeanTest.java
  90. 3 1
      tools/java/src/test/java/com/luatos/toolkit/bean/LuCommentTest.java
  91. 5 3
      tools/java/src/test/java/com/luatos/toolkit/impl/CLuDocParserTest.java
  92. 1 1
      tools/java/src/test/java/com/luatos/toolkit/impl/LuAllParserTest.java
  93. 5 2
      tools/java/src/test/java/com/luatos/toolkit/impl/TagParserTest.java

+ 3 - 1
docs/api/freertos/README.md → docs/api/c_api/freertos/README.md

@@ -4,4 +4,6 @@ title: FreeRTOS集成
 
 # FreeRTOS集成
 
-- [luat_timer_freertos](luat_timer_freertos.md)
+模块 | 描述
+---|----
+ 

+ 11 - 0
docs/api/c_api/rtt/README.md

@@ -0,0 +1,11 @@
+---
+title: RT-Thread集成
+---
+
+# RT-Thread集成
+
+模块 | 描述
+---|----
+[wlan](luat_lib_wlan.md) | wifi操作库
+[luat_uart_rtt](luat_uart_rtt.md) | luat_uart_rtt
+ 

+ 53 - 0
docs/api/c_api/rtt/luat_lib_wlan.md

@@ -0,0 +1,53 @@
+---
+module: wlan
+summary: wifi操作库
+version: 1.0
+date: 2020.03.30
+---
+
+--------------------------------------------------
+# wlan_cb
+
+```c
+static void wlan_cb(int event, struct rt_wlan_buff *buff, void *parameter)
+```
+
+注册回调
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`event`|`int`| *无*
+`buff`|`rt_wlan_buff*`| *无*
+`parameter`|`void*`| *无*
+
+## 返回值
+
+> *无返回值*
+
+
+--------------------------------------------------
+# luat_PW_msghandler
+
+```c
+static int luat_PW_msghandler(lua_State *L, void *ptr)
+```
+
+----------------------------
+-----------------------------
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`L`|`lua_State*`| *无*
+`ptr`|`void*`| *无*
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`int`| *无*
+
+

+ 14 - 14
docs/api/modules/luat_lib_mqttcore.md → docs/api/c_api/rtt/luat_uart_rtt.md

@@ -1,50 +1,50 @@
 ---
-title: luat_lib_mqttcore
-path: luat_lib_mqttcore.c
-module: libmqtt
-summary: mqtt协议处理
-version: 1.0
-date: 2020.07.03
+module: luat_uart_rtt
 ---
+
 --------------------------------------------------
-# l_mqttcore_encodeLen
+# uart_input_cb
 
 ```c
-static int l_mqttcore_encodeLen(lua_State *L)
+static rt_err_t uart_input_cb(rt_device_t dev, rt_size_t size)
 ```
 
+接收数据回调
 
 ## 参数表
 
 Name | Type | Description
 -----|------|--------------
-**L**|`lua_State*`| *无*
+`dev`|`rt_device_t`| *无*
+`size`|`rt_size_t`| *无*
 
 ## 返回值
 
 No. | Type | Description
 ----|------|--------------
-1 |`int`| *无*
+1 |`rt_err_t`| *无*
 
 
 --------------------------------------------------
-# l_mqttcore_encodeUTF8
+# uart_sent_cb
 
 ```c
-static int l_mqttcore_encodeUTF8(lua_State *L)
+static rt_err_t uart_sent_cb(rt_device_t dev, void *buffer)
 ```
 
+串口发送完成事件回调
 
 ## 参数表
 
 Name | Type | Description
 -----|------|--------------
-**L**|`lua_State*`| *无*
+`dev`|`rt_device_t`| *无*
+`buffer`|`void*`| *无*
 
 ## 返回值
 
 No. | Type | Description
 ----|------|--------------
-1 |`int`| *无*
+1 |`rt_err_t`| *无*
 
 

+ 0 - 42
docs/api/freertos/luat_timer_freertos.md

@@ -1,42 +0,0 @@
----
-title: luat_timer_freertos
-path: luat_timer_freertos.c
----
---------------------------------------------------
-# luat_timer_callback
-
-```c
-static void luat_timer_callback(void *param)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**param**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# nextTimerSlot
-
-```c
-static int nextTimerSlot()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 22 - 0
docs/api/lua/README.md

@@ -0,0 +1,22 @@
+---
+title: LuaAPI模块
+---
+
+# LuaAPI模块
+
+模块 | 描述
+---|----
+[adc](luat_lib_adc.md) | 数模转换
+[crypto](luat_lib_crypto.md) | 加解密和hash函数
+[disp](luat_lib_disp.md) | 显示屏控制
+[gpio](luat_lib_gpio.md) | GPIO操作
+[libcoap](luat_lib_libcoap.md) | coap数据处理
+[libgnss](luat_lib_libgnss.md) | NMEA数据处理
+[log](luat_lib_log.md) | 日志库
+[pm](luat_lib_pm.md) | 电源管理
+[rtos](luat_lib_rtos.md) | RTOS底层操作库
+[sensor](luat_lib_sensor.md) | 传感器操作库
+[socket](luat_lib_socket.md) | socket操作库
+[timer](luat_lib_timer.md) | 操作底层定时器
+[uart](luat_lib_uart.md) | 串口操作库
+ 

+ 7 - 5
docs/api/modules/luat_lib_adc.md → docs/api/lua/luat_lib_adc.md

@@ -1,11 +1,10 @@
 ---
-title: luat_lib_adc
-path: luat_lib_adc.c
 module: adc
 summary: 数模转换
 version: 1.0
 date: 2020.07.03
 ---
+
 --------------------------------------------------
 # adc.open
 
@@ -20,7 +19,7 @@ adc.open(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 通道id,与具体设备有关,通常从0开始
+`id`|`int`| 通道id,与具体设备有关,通常从0开始
 
 ## 返回值
 
@@ -37,6 +36,7 @@ if adc.open(2) then
 end
 adc.close(2)
 ```
+
 ## C API
 
 ```c
@@ -58,7 +58,7 @@ adc.read(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 通道id,与具体设备有关,通常从0开始
+`id`|`int`| 通道id,与具体设备有关,通常从0开始
 
 ## 返回值
 
@@ -76,6 +76,7 @@ if adc.open(2) then
 end
 adc.close(2)
 ```
+
 ## C API
 
 ```c
@@ -97,7 +98,7 @@ adc.close(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`null`| *无*
+`id`|`null`| *无*
 
 ## 返回值
 
@@ -112,6 +113,7 @@ if adc.open(2) then
 end
 adc.close(2)
 ```
+
 ## C API
 
 ```c

+ 10 - 28
docs/api/modules/luat_lib_crypto.md → docs/api/lua/luat_lib_crypto.md

@@ -1,31 +1,9 @@
 ---
-title: luat_lib_crypto
-path: luat_lib_crypto.c
 module: crypto
 summary: 加解密和hash函数
 version: 1.0
 date: 2020.07.03
 ---
---------------------------------------------------
-# fixhex
-
-```c
-static void fixhex(const char *source, char *dst, size_t len)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**source**|`char*`| *无*
-**dst**|`char*`| *无*
-**len**|`size_t`| *无*
-
-## 返回值
-
-> *无返回值*
-
 
 --------------------------------------------------
 # crypto.md5
@@ -41,7 +19,7 @@ crypto.md5(str)
 
 Name | Type | Description
 -----|------|--------------
-**str**|`string`| 需要计算的字符串
+`str`|`string`| 需要计算的字符串
 
 ## 返回值
 
@@ -55,6 +33,7 @@ No. | Type | Description
 -- 计算字符串"abc"的md5
 log.info("md5", crypto.md5("abc"))
 ```
+
 ## C API
 
 ```c
@@ -76,8 +55,8 @@ crypto.hmac_md5(str, key)
 
 Name | Type | Description
 -----|------|--------------
-**str**|`string`| 需要计算的字符串
-**key**|`string`| 密钥
+`str`|`string`| 需要计算的字符串
+`key`|`string`| 密钥
 
 ## 返回值
 
@@ -91,6 +70,7 @@ No. | Type | Description
 -- 计算字符串"abc"的hmac_md5
 log.info("hmac_md5", crypto.hmac_md5("abc", "1234567890"))
 ```
+
 ## C API
 
 ```c
@@ -112,7 +92,7 @@ crypto.sha1(str)
 
 Name | Type | Description
 -----|------|--------------
-**str**|`string`| 需要计算的字符串
+`str`|`string`| 需要计算的字符串
 
 ## 返回值
 
@@ -126,6 +106,7 @@ No. | Type | Description
 -- 计算字符串"abc"的sha1
 log.info("sha1", crypto.sha1("abc"))
 ```
+
 ## C API
 
 ```c
@@ -147,8 +128,8 @@ crypto.hmac_sha1(str, key)
 
 Name | Type | Description
 -----|------|--------------
-**str**|`string`| 需要计算的字符串
-**key**|`string`| 密钥
+`str`|`string`| 需要计算的字符串
+`key`|`string`| 密钥
 
 ## 返回值
 
@@ -162,6 +143,7 @@ No. | Type | Description
 -- 计算字符串"abc"的hmac_sha1
 log.info("hmac_sha1", crypto.hmac_sha1("abc", "1234567890"))
 ```
+
 ## C API
 
 ```c

+ 9 - 59
docs/api/modules/luat_lib_disp.md → docs/api/lua/luat_lib_disp.md

@@ -1,11 +1,10 @@
 ---
-title: luat_lib_disp
-path: luat_lib_disp.c
 module: disp
 summary: 显示屏控制
 version: 1.0
 date: 2020.03.30
 ---
+
 --------------------------------------------------
 # disp.init
 
@@ -19,9 +18,9 @@ disp.init(id, type, port)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
-**type**|`string`| 显示屏类型,当前仅支持ssd1306,默认值也是ssd1306
-**port**|`string`| 接口类型,当前仅支持i2c1,默认值也是i2c1
+`id`|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
+`type`|`string`| 显示屏类型,当前仅支持ssd1306,默认值也是ssd1306
+`port`|`string`| 接口类型,当前仅支持i2c1,默认值也是i2c1
 
 ## 返回值
 
@@ -43,6 +42,7 @@ if disp.init() == 1 then
     log.info("显示屏初始化成功")
 end
 ```
+
 ## C API
 
 ```c
@@ -63,7 +63,7 @@ disp.close(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
+`id`|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
 
 ## 返回值
 
@@ -75,41 +75,11 @@ Name | Type | Description
 -- 
 disp.close()
 ```
-## C API
-
-```c
-static int l_disp_close(lua_State *L)
-```
-
-
---------------------------------------------------
-# disp.clear
-
-```lua
-disp.clear(id)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**id**|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
-
-## 返回值
 
-> *无返回值*
-
-## 调用示例
-
-```lua
--- 
-disp.clear(0)
-```
 ## C API
 
 ```c
-static int l_disp_clear(lua_State *L)
+static int l_disp_close(lua_State *L)
 ```
 
 
@@ -126,7 +96,7 @@ disp.update(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
+`id`|`int`| 显示器id, 默认值0, 当前只支持0,单个显示屏
 
 ## 返回值
 
@@ -138,6 +108,7 @@ Name | Type | Description
 -- 
 disp.update(0)
 ```
+
 ## C API
 
 ```c
@@ -145,24 +116,3 @@ static int l_disp_update(lua_State *L)
 ```
 
 
---------------------------------------------------
-# l_disp_draw_text
-
-```c
-static int l_disp_draw_text(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 12 - 72
docs/api/modules/luat_lib_gpio.md → docs/api/lua/luat_lib_gpio.md

@@ -1,73 +1,9 @@
 ---
-title: luat_lib_gpio
-path: luat_lib_gpio.c
 module: gpio
 summary: GPIO操作
 version: 1.0
 date: 2020.03.30
 ---
---------------------------------------------------
-# l_gpio_set
-
-```c
-static int l_gpio_set(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_gpio_get
-
-```c
-static int l_gpio_get(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_gpio_close
-
-```c
-static int l_gpio_close(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
 
 --------------------------------------------------
 # gpio.setup
@@ -82,10 +18,10 @@ gpio.setup(pin, mode, pull, ?)
 
 Name | Type | Description
 -----|------|--------------
-**pin**|`int`| pin 针脚编号,必须是数值
-**mode**|`any`| mode 输入输出模式. 数字0/1代表输出模式,nil代表输入模式,function代表中断模式
-**pull**|`int`| pull 上拉下列模式, 可以是gpio.PULLUP 或 gpio.PULLDOWN, 需要根据实际硬件选用
-**?**|`int`| irq 中断触发模式, 上升沿gpio.RISING, 下降沿gpio.FALLING, 上升和下降都要gpio.BOTH.默认是RISING
+`pin`|`int`| pin 针脚编号,必须是数值
+`mode`|`any`| mode 输入输出模式. 数字0/1代表输出模式,nil代表输入模式,function代表中断模式
+`pull`|`int`| pull 上拉下列模式, 可以是gpio.PULLUP 或 gpio.PULLDOWN, 需要根据实际硬件选用
+`?`|`int`| irq 中断触发模式, 上升沿gpio.RISING, 下降沿gpio.FALLING, 上升和下降都要gpio.BOTH.默认是RISING
 
 ## 返回值
 
@@ -121,6 +57,7 @@ gpio.setup(17, 0)
 @usage 
 gpio.setup(27, function(val) print("IRQ_27") end, gpio.RISING)
 ```
+
 ## C API
 
 ```c
@@ -141,8 +78,8 @@ gpio.set(pin, value)
 
 Name | Type | Description
 -----|------|--------------
-**pin**|`int`| pin 针脚编号,必须是数值
-**value**|`int`| value 电平, 可以是 高电平gpio.HIGH, 低电平gpio.LOW, 或者直接写数值1或0
+`pin`|`int`| pin 针脚编号,必须是数值
+`value`|`int`| value 电平, 可以是 高电平gpio.HIGH, 低电平gpio.LOW, 或者直接写数值1或0
 
 ## 返回值
 
@@ -154,6 +91,7 @@ Name | Type | Description
 -- 设置gpio17为低电平
 gpio.set(17, 0) 
 ```
+
 ## C API
 
 ```c
@@ -174,7 +112,7 @@ gpio.get(pin)
 
 Name | Type | Description
 -----|------|--------------
-**pin**|`int`| pin 针脚编号,必须是数值
+`pin`|`int`| pin 针脚编号,必须是数值
 
 ## 返回值
 
@@ -188,6 +126,7 @@ No. | Type | Description
 -- 获取gpio17的当前电平
 gpio.get(17) 
 ```
+
 ## C API
 
 ```c
@@ -208,7 +147,7 @@ gpio.close(pin)
 
 Name | Type | Description
 -----|------|--------------
-**pin**|`int`| pin 针脚编号,必须是数值
+`pin`|`int`| pin 针脚编号,必须是数值
 
 ## 返回值
 
@@ -220,6 +159,7 @@ Name | Type | Description
 -- 关闭gpio17
 gpio.close(17)
 ```
+
 ## C API
 
 ```c

+ 84 - 0
docs/api/lua/luat_lib_libcoap.md

@@ -0,0 +1,84 @@
+---
+module: libcoap
+summary: coap数据处理
+version: 1.0
+date: 2020.06.30
+---
+
+--------------------------------------------------
+# libcoap.new
+
+```lua
+libcoap.new(code, uri, headers, payload)
+```
+
+*
+创建一个coap数据包
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`code`|`int`| coap的code, 例如libcoap.GET/libcoap.POST/libcoap.PUT/libcoap.DELETE
+`uri`|`string`| 目标URI,必须填写, 不需要加上/开头
+`headers`|`table`| 请求头,类似于http的headers,可选
+`payload`|`string`| 请求体,类似于http的body,可选
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`userdata`| coap数据包
+
+## 调用示例
+
+```lua
+-- 创建一个请求服务器time的数据包
+local coapdata = libcoap.new(libcoap.GET, "time")
+local data = coapdata:rawdata()
+```
+
+## C API
+
+```c
+static int l_libcoap_new(lua_State *L)
+```
+
+
+--------------------------------------------------
+# libcoap.parse
+
+```lua
+libcoap.parse(str)
+```
+
+*
+解析coap数据包
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`str`|`string`| coap数据包
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`userdata`| coap数据包,如果解析失败会返回nil
+
+## 调用示例
+
+```lua
+-- 解析服务器传入的数据包
+local coapdata = libcoap.parse(indata)
+log.info("coapdata", coapdata:hcode(), coapdata:data())
+```
+
+## C API
+
+```c
+static int l_libcoap_parse(lua_State *L)
+```
+
+

+ 42 - 0
docs/api/lua/luat_lib_libgnss.md

@@ -0,0 +1,42 @@
+---
+module: libgnss
+summary: NMEA数据处理
+version: 1.0
+date: 2020.07.03
+---
+
+--------------------------------------------------
+# libgnss.parse
+
+```lua
+libgnss.parse(str)
+```
+
+*
+处理nmea数据
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`str`|`string`| nmea数据
+
+## 返回值
+
+> *无返回值*
+
+## 调用示例
+
+```lua
+-- 解析nmea
+libgnss.parse(indata)
+log.info("nmea", json.encode(libgnss.getRmc()))
+```
+
+## C API
+
+```c
+static int l_libgnss_parse(lua_State *L)
+```
+
+

+ 24 - 63
docs/api/modules/luat_lib_log.md → docs/api/lua/luat_lib_log.md

@@ -1,52 +1,9 @@
 ---
-title: luat_lib_log
-path: luat_lib_log.c
 module: log
 summary: 日志库
 version: 1.0
 date: 2020.03.30
 ---
---------------------------------------------------
-# l_log_set_level
-
-```c
-static int l_log_set_level(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_log_2_log
-
-```c
-static int l_log_2_log(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
 
 --------------------------------------------------
 # log.debug
@@ -61,11 +18,11 @@ log.debug(tag, val, val2, val3, ...)
 
 Name | Type | Description
 -----|------|--------------
-**tag**|`string`| tag         日志标识,必须是字符串
-**val**|`any`| ...         需打印的参数
-**val2**|`null`| *无*
-**val3**|`null`| *无*
-**...**|`null`| *无*
+`tag`|`string`| tag         日志标识,必须是字符串
+`val`|`any`| ...         需打印的参数
+`val2`|`null`| *无*
+`val3`|`null`| *无*
+`...`|`null`| *无*
 
 ## 返回值
 
@@ -77,6 +34,7 @@ Name | Type | Description
 -- 日志输出 D/onenet connect ok
 log.debug("onenet", "connect ok") 
 ```
+
 ## C API
 
 ```c
@@ -97,11 +55,11 @@ log.info(tag, val, val2, val3, ...)
 
 Name | Type | Description
 -----|------|--------------
-**tag**|`string`| tag         日志标识,必须是字符串
-**val**|`any`| ...         需打印的参数
-**val2**|`null`| *无*
-**val3**|`null`| *无*
-**...**|`null`| *无*
+`tag`|`string`| tag         日志标识,必须是字符串
+`val`|`any`| ...         需打印的参数
+`val2`|`null`| *无*
+`val3`|`null`| *无*
+`...`|`null`| *无*
 
 ## 返回值
 
@@ -113,6 +71,7 @@ Name | Type | Description
 -- 日志输出 I/onenet connect ok
 log.info("onenet", "connect ok") 
 ```
+
 ## C API
 
 ```c
@@ -133,11 +92,11 @@ log.warn(tag, val, val2, val3, ...)
 
 Name | Type | Description
 -----|------|--------------
-**tag**|`string`| tag         日志标识,必须是字符串
-**val**|`any`| ...         需打印的参数
-**val2**|`null`| *无*
-**val3**|`null`| *无*
-**...**|`null`| *无*
+`tag`|`string`| tag         日志标识,必须是字符串
+`val`|`any`| ...         需打印的参数
+`val2`|`null`| *无*
+`val3`|`null`| *无*
+`...`|`null`| *无*
 
 ## 返回值
 
@@ -149,6 +108,7 @@ Name | Type | Description
 -- 日志输出 W/onenet connect ok
 log.warn("onenet", "connect ok") 
 ```
+
 ## C API
 
 ```c
@@ -169,11 +129,11 @@ log.error(tag, val, val2, val3, ...)
 
 Name | Type | Description
 -----|------|--------------
-**tag**|`string`| tag         日志标识,必须是字符串
-**val**|`any`| ...         需打印的参数
-**val2**|`null`| *无*
-**val3**|`null`| *无*
-**...**|`null`| *无*
+`tag`|`string`| tag         日志标识,必须是字符串
+`val`|`any`| ...         需打印的参数
+`val2`|`null`| *无*
+`val3`|`null`| *无*
+`...`|`null`| *无*
 
 ## 返回值
 
@@ -185,6 +145,7 @@ Name | Type | Description
 -- 日志输出 E/onenet connect ok
 log.error("onenet", "connect ok") 
 ```
+
 ## C API
 
 ```c

+ 118 - 0
docs/api/lua/luat_lib_pm.md

@@ -0,0 +1,118 @@
+---
+module: pm
+summary: 电源管理
+version: 1.0
+date: 2020.07.02
+---
+
+--------------------------------------------------
+# pm.request
+
+```lua
+pm.request(mode)
+```
+
+*
+请求进入指定的休眠模式
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`mode`|`int`| 休眠模式,例如pm.IDLE/LIGHT/DEEP/HIB
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`boolean`| 处理结果,即使返回成功,也不一定会进入, 也不会马上进入
+
+## 调用示例
+
+```lua
+-- 请求进入休眠模式
+pm.request(pm.HIB)
+```
+
+## C API
+
+```c
+static int l_pm_request(lua_State *L)
+```
+
+
+--------------------------------------------------
+# pm.force
+
+```lua
+pm.force(mode)
+```
+
+*
+强制进入指定的休眠模式
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`mode`|`int`| 休眠模式,仅pm.DEEP/HIB
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`boolean`| 处理结果,若返回成功,大概率会马上进入该休眠模式
+
+## 调用示例
+
+```lua
+-- 请求进入休眠模式
+pm.force(pm.HIB)
+```
+
+## C API
+
+```c
+static int l_pm_force(lua_State *L)
+```
+
+
+--------------------------------------------------
+# pm.check
+
+```lua
+pm.check()
+```
+
+*
+检查休眠状态
+
+## 参数表
+
+> 无参数
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`boolean`| 处理结果,如果能顺利进入休眠,返回true,否则返回false
+
+## 调用示例
+
+```lua
+-- 请求进入休眠模式,然后检查是否能真的休眠
+pm.request(pm.HIB)
+if pm.check() then
+    log.info("pm", "it is ok to hib")
+else
+    pm.force(pm.HIB) -- 强制休眠
+end
+```
+
+## C API
+
+```c
+static int l_pm_check(lua_State *L)
+```
+
+

+ 14 - 72
docs/api/modules/luat_lib_rtos.md → docs/api/lua/luat_lib_rtos.md

@@ -1,11 +1,10 @@
 ---
-title: luat_lib_rtos
-path: luat_lib_rtos.c
 module: rtos
 summary: RTOS底层操作库
 version: 1.0
 date: 2020.03.30
 ---
+
 --------------------------------------------------
 # rtos.receive
 
@@ -19,7 +18,7 @@ rtos.receive(timeout)
 
 Name | Type | Description
 -----|------|--------------
-**timeout**|`int`| 超时时长,通常是-1,永久等待
+`timeout`|`int`| 超时时长,通常是-1,永久等待
 
 ## 返回值
 
@@ -33,6 +32,7 @@ No. | Type | Description
 -- 本方法通过sys.run()调用, 普通用户不要使用
 rtos.receive(-1)
 ```
+
 ## C API
 
 ```c
@@ -40,28 +40,6 @@ static int l_rtos_receive(lua_State *L)
 ```
 
 
---------------------------------------------------
-# l_timer_handler
-
-```c
-static int l_timer_handler(lua_State *L, void *ptr)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**ptr**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
 --------------------------------------------------
 # rtos.timer_start
 
@@ -75,9 +53,9 @@ rtos.timer_start(id, timeout, _repeat)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 定时器id
-**timeout**|`int`| 超时时长,单位毫秒
-**_repeat**|`int`| 重复次数,默认是0
+`id`|`int`| 定时器id
+`timeout`|`int`| 超时时长,单位毫秒
+`_repeat`|`int`| 重复次数,默认是0
 
 ## 返回值
 
@@ -92,6 +70,7 @@ No. | Type | Description
 -- 启动一个3秒的循环定时器
 rtos.timer_start(10000, 3000, -1)
 ```
+
 ## C API
 
 ```c
@@ -112,7 +91,7 @@ rtos.timer_stop(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 定时器id
+`id`|`int`| 定时器id
 
 ## 返回值
 
@@ -124,6 +103,7 @@ Name | Type | Description
 -- 用户代码请使用sys.timerStop
 rtos.timer_stop(100000)
 ```
+
 ## C API
 
 ```c
@@ -154,6 +134,7 @@ rtos.reboot()
 -- 立即重启设备
 rtos.reboot()
 ```
+
 ## C API
 
 ```c
@@ -161,27 +142,6 @@ static int l_rtos_reboot(lua_State *L)
 ```
 
 
---------------------------------------------------
-# l_rtos_build_date
-
-```c
-static int l_rtos_build_date(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
 --------------------------------------------------
 # rtos.bsp
 
@@ -207,6 +167,7 @@ No. | Type | Description
 -- 获取编译日期
 local bsp = rtos.bsp()
 ```
+
 ## C API
 
 ```c
@@ -239,6 +200,7 @@ No. | Type | Description
 -- 读取版本号
 local luatos_version = rtos.version()
 ```
+
 ## C API
 
 ```c
@@ -259,7 +221,7 @@ rtos.standy(timeout)
 
 Name | Type | Description
 -----|------|--------------
-**timeout**|`int`| 休眠时长,单位毫秒
+`timeout`|`int`| 休眠时长,单位毫秒
 
 ## 返回值
 
@@ -271,6 +233,7 @@ Name | Type | Description
 -- 读取版本号
 local luatos_version = rtos.version()
 ```
+
 ## C API
 
 ```c
@@ -278,24 +241,3 @@ static int l_rtos_standy(lua_State *L)
 ```
 
 
---------------------------------------------------
-# l_rtos_meminfo
-
-```c
-static int l_rtos_meminfo(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 42 - 0
docs/api/lua/luat_lib_sensor.md

@@ -0,0 +1,42 @@
+---
+module: sensor
+summary: 传感器操作库
+version: 1.0
+date: 2020.03.30
+---
+
+--------------------------------------------------
+# sensor.ds18b20
+
+```lua
+sensor.ds18b20(pin)
+```
+
+获取DS18B20的温度数据
+
+## 参数表
+
+Name | Type | Description
+-----|------|--------------
+`pin`|`int`| gpio端口号
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`int`| 温度数据
+
+## 调用示例
+
+```lua
+-- 如果读取失败,会返回nil
+while 1 do sys.wait(5000) log.info("ds18b20", sensor.ds18b20(14)) end
+```
+
+## C API
+
+```c
+static int l_sensor_ds18b20(lua_State *L)
+```
+
+

+ 81 - 0
docs/api/lua/luat_lib_socket.md

@@ -0,0 +1,81 @@
+---
+module: socket
+summary: socket操作库
+version: 1.0
+date: 2020.03.30
+---
+
+--------------------------------------------------
+# socket.tcp
+
+```lua
+socket.tcp()
+```
+
+新建一个tcp socket
+
+## 参数表
+
+> 无参数
+
+## 返回值
+
+No. | Type | Description
+----|------|--------------
+1 |`object`| socket对象,如果创建失败会返回nil
+
+## 调用示例
+
+```lua
+-- 如果读取失败,会返回nil
+local so = socket.tcp()
+if so then
+    so:host("www.baidu.com")
+    so:port(80)
+    so:on("connect", function(id, re)
+        if re == 1 then
+            so:send("GET / HTTP/1.0\r\n\r\n")
+        end
+    end)
+    so:on("recv", function(id, data)
+        log.info("netc", id, data)
+    end)
+    if so:start() == 1 then
+        sys.waitUntil("NETC_END_" .. so:id())
+    end
+    so:close()
+    so:clean()
+end
+```
+
+## C API
+
+```c
+static int luat_lib_socket_tcp(lua_State *L)
+```
+
+
+--------------------------------------------------
+# socket.udp
+
+```lua
+socket.udp()
+```
+
+新建一个udp socket
+
+## 参数表
+
+> 无参数
+
+## 返回值
+
+> *无返回值*
+
+## C API
+
+```c
+static int luat_lib_socket_udp(lua_State *L)
+```
+
+

+ 3 - 3
docs/api/modules/luat_lib_timer.md → docs/api/lua/luat_lib_timer.md

@@ -1,11 +1,10 @@
 ---
-title: luat_lib_timer
-path: luat_lib_timer.c
 module: timer
 summary: 操作底层定时器
 version: 1.0
 date: 2020.03.30
 ---
+
 --------------------------------------------------
 # timer.mdelay
 
@@ -19,7 +18,7 @@ timer.mdelay(timeout)
 
 Name | Type | Description
 -----|------|--------------
-**timeout**|`int`| 阻塞时长
+`timeout`|`int`| 阻塞时长
 
 ## 返回值
 
@@ -31,6 +30,7 @@ Name | Type | Description
 -- 本方法通常不会使用,除非你很清楚会发生什么
 timer.mdelay(10)
 ```
+
 ## C API
 
 ```c

+ 21 - 17
docs/api/modules/luat_lib_uart.md → docs/api/lua/luat_lib_uart.md

@@ -1,11 +1,10 @@
 ---
-title: luat_lib_uart
-path: luat_lib_uart.c
 module: uart
 summary: 串口操作库
 version: 1.0
 date: 2020.03.30
 ---
+
 --------------------------------------------------
 # uart.setup
 
@@ -19,13 +18,13 @@ uart.setup(id, baud_rate, data_bits, stop_bits, partiy, bit_order, buff_size)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 串口id, uart0写0, uart1写1
-**baud_rate**|`int`| 波特率 9600~115200
-**data_bits**|`int`| 数据位 7或8, 一般是8
-**stop_bits**|`int`| 停止位 1或0, 一般是1
-**partiy**|`int`| 校验位, 可选 uart.None/uart.Even/uart.Odd
-**bit_order**|`int`| 大小端, 默认小端 uart.LSB, 可选 uart.MSB
-**buff_size**|`int`| 缓冲区大小, 默认值1024
+`id`|`int`| 串口id, uart0写0, uart1写1
+`baud_rate`|`int`| 波特率 9600~115200
+`data_bits`|`int`| 数据位 7或8, 一般是8
+`stop_bits`|`int`| 停止位 1或0, 一般是1
+`partiy`|`int`| 校验位, 可选 uart.None/uart.Even/uart.Odd
+`bit_order`|`int`| 大小端, 默认小端 uart.LSB, 可选 uart.MSB
+`buff_size`|`int`| 缓冲区大小, 默认值1024
 
 ## 返回值
 
@@ -43,6 +42,7 @@ uart.setup(1, 115200, 8, 1, uart.NONE)
 -- 可以简写为 uart.setup(1)
 uart.setup(1, 115200, 8, 1, uart.NONE)
 ```
+
 ## C API
 
 ```c
@@ -63,8 +63,8 @@ uart.write(id, data)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 串口id, uart0写0, uart1写1
-**data**|`string`| 待写入的数据
+`id`|`int`| 串口id, uart0写0, uart1写1
+`data`|`string`| 待写入的数据
 
 ## 返回值
 
@@ -78,6 +78,7 @@ No. | Type | Description
 -- 
 uart.write(1, "rdy\r\n")
 ```
+
 ## C API
 
 ```c
@@ -98,8 +99,8 @@ uart.read(id, len)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 串口id, uart0写0, uart1写1
-**len**|`int`| 读取长度
+`id`|`int`| 串口id, uart0写0, uart1写1
+`len`|`int`| 读取长度
 
 ## 返回值
 
@@ -113,6 +114,7 @@ No. | Type | Description
 -- 
 uart.read(1, 16)
 ```
+
 ## C API
 
 ```c
@@ -133,7 +135,7 @@ uart.close(id)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 串口id, uart0写0, uart1写1
+`id`|`int`| 串口id, uart0写0, uart1写1
 
 ## 返回值
 
@@ -145,6 +147,7 @@ Name | Type | Description
 -- 
 uart.close(1)
 ```
+
 ## C API
 
 ```c
@@ -165,9 +168,9 @@ uart.on(id, event, func)
 
 Name | Type | Description
 -----|------|--------------
-**id**|`int`| 串口id, uart0写0, uart1写1
-**event**|`string`| 事件名称
-**func**|`function`| 回调方法
+`id`|`int`| 串口id, uart0写0, uart1写1
+`event`|`string`| 事件名称
+`func`|`function`| 回调方法
 
 ## 返回值
 
@@ -182,6 +185,7 @@ uart.on("receive", function(id, len)
     log.info("uart", id, len, data)
 end)
 ```
+
 ## C API
 
 ```c

+ 0 - 27
docs/api/modules/README.md

@@ -1,27 +0,0 @@
----
-title: LuaAPI模块
----
-
-# LuaAPI模块
-
-- [luat_lib_adc](luat_lib_adc.md)
-- [luat_lib_crypto](luat_lib_crypto.md)
-- [luat_lib_disp](luat_lib_disp.md)
-- [luat_lib_gpio](luat_lib_gpio.md)
-- [luat_lib_http](luat_lib_http.md)
-- [luat_lib_i2c](luat_lib_i2c.md)
-- [luat_lib_libcoap](luat_lib_libcoap.md)
-- [luat_lib_libgnss](luat_lib_libgnss.md)
-- [luat_lib_log](luat_lib_log.md)
-- [luat_lib_mqtt](luat_lib_mqtt.md)
-- [luat_lib_mqttcore](luat_lib_mqttcore.md)
-- [luat_lib_pack](luat_lib_pack.md)
-- [luat_lib_pm](luat_lib_pm.md)
-- [luat_lib_pwm](luat_lib_pwm.md)
-- [luat_lib_rtos](luat_lib_rtos.md)
-- [luat_lib_sensor](luat_lib_sensor.md)
-- [luat_lib_socket](luat_lib_socket.md)
-- [luat_lib_spi](luat_lib_spi.md)
-- [luat_lib_timer](luat_lib_timer.md)
-- [luat_lib_uart](luat_lib_uart.md)
-- [luat_main](luat_main.md)

+ 0 - 25
docs/api/modules/luat_lib_http.md

@@ -1,25 +0,0 @@
----
-title: luat_lib_http
-path: luat_lib_http.c
----
---------------------------------------------------
-# l_http_req
-
-```c
-static int l_http_req(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 210
docs/api/modules/luat_lib_i2c.md

@@ -1,210 +0,0 @@
----
-title: luat_lib_i2c
-path: luat_lib_i2c.c
-module: i2c
-summary: I2C操作
-version: 1.0
-date: 2020.03.30
----
---------------------------------------------------
-# l_i2c_exist
-
-```c
-static int l_i2c_exist(lua_State *L)
-```
-
-i2c编号是否存在
-@api i2c.exist(id)
-@int 设备id, 例如i2c1的id为1, i2c2的id为2
-@return int 存在就返回1,否则返回0
-@usage
--- 检查i2c1是否存在
-if i2c.exist(1) then
-    log.info("存在 i2c1")
-end
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_i2c_setup
-
-```c
-static int l_i2c_setup(lua_State *L)
-```
-
-i2c初始化
-@api i2c.setup(id)
-@int 设备id, 例如i2c1的id为1, i2c2的id为2
-@return int 成功就返回1,否则返回0
-@usage
--- 初始化i2c1
-if i2c.setup(1) then
-    log.info("存在 i2c1")
-else
-    i2c.close(1) -- 关掉
-end
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_i2c_send
-
-```c
-static int l_i2c_send(lua_State *L)
-```
-
-i2c发送数据
-@api i2c.send(id, addr, data)
-@int 设备id, 例如i2c1的id为1, i2c2的id为2
-@int I2C子设备的地址, 7位地址
-@string 待发送的数据
-@return nil 无返回值
-@usage
--- 往i2c1发送2个字节的数据
-i2c.send(1, 0x5C, string.char(0x0F, 0x2F))
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_i2c_recv
-
-```c
-static int l_i2c_recv(lua_State *L)
-```
-
-i2c接收数据
-@api i2c.recv(id, addr, len)
-@int 设备id, 例如i2c1的id为1, i2c2的id为2
-@int I2C子设备的地址, 7位地址
-@int 手机数据的长度
-@return string 收到的数据
-@usage
--- 从i2c1读取2个字节的数据
-local data = i2c.recv(1, 0x5C, 2)
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_i2c_write_reg
-
-```c
-static int l_i2c_write_reg(lua_State *L)
-```
-
-i2c接收数据
-@api i2c.writeReg(id, addr, reg, data)
-@int 设备id, 例如i2c1的id为1, i2c2的id为2
-@int I2C子设备的地址, 7位地址
-@int 寄存器地址
-@string 待发送的数据
-@return string 收到的数据
-@usage
--- 从i2c1的地址为0x5C的设备的寄存器0x01写入2个字节的数据
-i2c.writeReg(1, 0x5C, 0x01, string.char(0x00, 0xF2))
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_i2c_read_reg
-
-```c
-static int l_i2c_read_reg(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_i2c_close
-
-```c
-static int l_i2c_close(lua_State *L)
-```
-
-关闭i2c设备
-@api i2c.close(id)
-@int 设备id, 例如i2c1的id为1, i2c2的id为2
-@return nil 无返回值
-@usage
--- 关闭i2c1
-i2c.close(1)
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 271
docs/api/modules/luat_lib_libcoap.md

@@ -1,271 +0,0 @@
----
-title: luat_lib_libcoap
-path: luat_lib_libcoap.c
-module: libcoap
-summary: coap数据处理
-version: 1.0
-date: 2020.06.30
----
---------------------------------------------------
-# addopt
-
-```c
-static void addopt(luat_lib_libcoap_t *_coap, uint8_t opt_type, const char *value, size_t len)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**_coap**|`luat_lib_libcoap_t*`| *无*
-**opt_type**|`uint8_t`| *无*
-**value**|`char*`| *无*
-**len**|`size_t`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# libcoap.new
-
-```lua
-libcoap.new(code, uri, headers, payload)
-```
-
-*
-创建一个coap数据包
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**code**|`int`| coap的code, 例如libcoap.GET/libcoap.POST/libcoap.PUT/libcoap.DELETE
-**uri**|`string`| 目标URI,必须填写, 不需要加上/开头
-**headers**|`table`| 请求头,类似于http的headers,可选
-**payload**|`string`| 请求体,类似于http的body,可选
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`userdata`| coap数据包
-
-## 调用示例
-
-```lua
--- 创建一个请求服务器time的数据包
-local coapdata = libcoap.new(libcoap.GET, "time")
-local data = coapdata:rawdata()
-```
-## C API
-
-```c
-static int l_libcoap_new(lua_State *L)
-```
-
-
---------------------------------------------------
-# libcoap.parse
-
-```lua
-libcoap.parse(str)
-```
-
-*
-解析coap数据包
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**str**|`string`| coap数据包
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`userdata`| coap数据包,如果解析失败会返回nil
-
-## 调用示例
-
-```lua
--- 解析服务器传入的数据包
-local coapdata = libcoap.parse(indata)
-log.info("coapdata", coapdata:hcode(), coapdata:data())
-```
-## C API
-
-```c
-static int l_libcoap_parse(lua_State *L)
-```
-
-
---------------------------------------------------
-# libcoap_msgid
-
-```c
-static int libcoap_msgid(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libcoap_token
-
-```c
-static int libcoap_token(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libcoap_rawdata
-
-```c
-static int libcoap_rawdata(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libcoap_code
-
-```c
-static int libcoap_code(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libcoap_httpcode
-
-```c
-static int libcoap_httpcode(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libcoap_type
-
-```c
-static int libcoap_type(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libcoap_data
-
-```c
-static int libcoap_data(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# createmeta
-
-```c
-static void createmeta(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 126
docs/api/modules/luat_lib_libgnss.md

@@ -1,126 +0,0 @@
----
-title: luat_lib_libgnss
-path: luat_lib_libgnss.c
-module: libgnss
-summary: NMEA数据处理
-version: 1.0
-date: 2020.07.03
----
---------------------------------------------------
-# parse_nmea
-
-```c
-static int parse_nmea(const char *line)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**line**|`char*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# libgnss.parse
-
-```lua
-libgnss.parse(str)
-```
-
-*
-处理nmea数据
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**str**|`string`| nmea数据
-
-## 返回值
-
-> *无返回值*
-
-## 调用示例
-
-```lua
--- 解析nmea
-libgnss.parse(indata)
-log.info("nmea", json.encode(libgnss.getRmc()))
-```
-## C API
-
-```c
-static int l_libgnss_parse(lua_State *L)
-```
-
-
---------------------------------------------------
-# l_libgnss_is_fix
-
-```c
-static int l_libgnss_is_fix(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_libgnss_get_int_location
-
-```c
-static int l_libgnss_get_int_location(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_libgnss_get_rmc
-
-```c
-static int l_libgnss_get_rmc(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 279
docs/api/modules/luat_lib_mqtt.md

@@ -1,279 +0,0 @@
----
-title: luat_lib_mqtt
-path: luat_lib_mqtt.c
-module: mqtt
-summary: mqtt操作库
-version: 1.0
-date: 2020.03.30
----
---------------------------------------------------
-# l_mqtt_new
-
-```c
-static int l_mqtt_new(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_id
-
-```c
-static int mqtt_id(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_host
-
-```c
-static int mqtt_host(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_port
-
-```c
-static int mqtt_port(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_start
-
-```c
-static int mqtt_start(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_close
-
-```c
-static int mqtt_close(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_subscribe
-
-```c
-static int mqtt_subscribe(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_unsubscribe
-
-```c
-static int mqtt_unsubscribe(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_publish
-
-```c
-static int mqtt_publish(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_clean
-
-```c
-static int mqtt_clean(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_gc
-
-```c
-static int mqtt_gc(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# mqtt_tostring
-
-```c
-static int mqtt_tostring(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# createmeta
-
-```c
-static void createmeta(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 66
docs/api/modules/luat_lib_pack.md

@@ -1,66 +0,0 @@
----
-title: luat_lib_pack
-path: luat_lib_pack.c
----
---------------------------------------------------
-# badcode
-
-```c
-static void badcode(lua_State *L, int c)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**c**|`int`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# doendian
-
-```c
-static int doendian(int c)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**c**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# doswap
-
-```c
-static void doswap(int swap, void *p, size_t n)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**swap**|`int`| *无*
-**p**|`void*`| *无*
-**n**|`size_t`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 222
docs/api/modules/luat_lib_pm.md

@@ -1,222 +0,0 @@
----
-title: luat_lib_pm
-path: luat_lib_pm.c
-module: pm
-summary: 电源管理
-version: 1.0
-date: 2020.07.02
----
---------------------------------------------------
-# pm.request
-
-```lua
-pm.request(mode)
-```
-
-*
-请求进入指定的休眠模式
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**mode**|`int`| 休眠模式,例如pm.IDLE/LIGHT/DEEP/HIB
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`boolean`| 处理结果,即使返回成功,也不一定会进入, 也不会马上进入
-
-## 调用示例
-
-```lua
--- 请求进入休眠模式
-pm.request(pm.HIB)
-```
-## C API
-
-```c
-static int l_pm_request(lua_State *L)
-```
-
-
---------------------------------------------------
-# l_pm_dtimer_start
-
-```c
-static int l_pm_dtimer_start(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_pm_dtimer_stop
-
-```c
-static int l_pm_dtimer_stop(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_pm_on
-
-```c
-static int l_pm_on(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_pm_last_reson
-
-```c
-static int l_pm_last_reson(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# pm.force
-
-```lua
-pm.force(mode)
-```
-
-*
-强制进入指定的休眠模式
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**mode**|`int`| 休眠模式,仅pm.DEEP/HIB
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`boolean`| 处理结果,若返回成功,大概率会马上进入该休眠模式
-
-## 调用示例
-
-```lua
--- 请求进入休眠模式
-pm.force(pm.HIB)
-```
-## C API
-
-```c
-static int l_pm_force(lua_State *L)
-```
-
-
---------------------------------------------------
-# pm.check
-
-```lua
-pm.check()
-```
-
-*
-检查休眠状态
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`boolean`| 处理结果,如果能顺利进入休眠,返回true,否则返回false
-
-## 调用示例
-
-```lua
--- 请求进入休眠模式,然后检查是否能真的休眠
-pm.request(pm.HIB)
-if pm.check() then
-    log.info("pm", "it is ok to hib")
-else
-    pm.force(pm.HIB) -- 强制休眠
-end
-```
-## C API
-
-```c
-static int l_pm_check(lua_State *L)
-```
-
-
---------------------------------------------------
-# luat_pm_msg_handler
-
-```c
-static int luat_pm_msg_handler(lua_State *L, void *ptr)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**ptr**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 50
docs/api/modules/luat_lib_pwm.md

@@ -1,50 +0,0 @@
----
-title: luat_lib_pwm
-path: luat_lib_pwm.c
-module: pwm
-summary: PWM模块
-version: 1.0
-date: 2020.07.03
----
---------------------------------------------------
-# l_pwm_open
-
-```c
-static int l_pwm_open(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_pwm_close
-
-```c
-static int l_pwm_close(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 166
docs/api/modules/luat_lib_sensor.md

@@ -1,166 +0,0 @@
----
-title: luat_lib_sensor
-path: luat_lib_sensor.c
-module: sensor
-summary: 传感器操作库
-version: 1.0
-date: 2020.03.30
----
---------------------------------------------------
-# w1_reset
-
-```c
-static void w1_reset(int pin)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# w1_connect
-
-```c
-static uint8_t w1_connect(int pin)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`uint8_t`| *无*
-
-
---------------------------------------------------
-# w1_read_bit
-
-```c
-static uint8_t w1_read_bit(int pin)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`uint8_t`| *无*
-
-
---------------------------------------------------
-# w1_read_byte
-
-```c
-static uint8_t w1_read_byte(int pin)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`uint8_t`| *无*
-
-
---------------------------------------------------
-# w1_write_byte
-
-```c
-static void w1_write_byte(int pin, uint8_t dat)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| *无*
-**dat**|`uint8_t`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# ds18b20_get_temperature
-
-```c
-static int32_t ds18b20_get_temperature(int pin, int32_t *val)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| *无*
-**val**|`int32_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int32_t`| *无*
-
-
---------------------------------------------------
-# sensor.ds18b20
-
-```lua
-sensor.ds18b20(pin)
-```
-
-获取DS18B20的温度数据
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pin**|`int`| gpio端口号
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| 温度数据
-
-## 调用示例
-
-```lua
--- 如果读取失败,会返回nil
-while 1 do sys.wait(5000) log.info("ds18b20", sensor.ds18b20(14)) end
-```
-## C API
-
-```c
-static int l_sensor_ds18b20(lua_State *L)
-```
-
-

+ 0 - 501
docs/api/modules/luat_lib_socket.md

@@ -1,501 +0,0 @@
----
-title: luat_lib_socket
-path: luat_lib_socket.c
-module: socket
-summary: socket操作库
-version: 1.0
-date: 2020.03.30
----
---------------------------------------------------
-# socket_ntp_sync
-
-```c
-static int socket_ntp_sync(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# sal_tls_test
-
-```c
-static int sal_tls_test(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_socket_is_ready
-
-```c
-static int l_socket_is_ready(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_socket_selfip
-
-```c
-static int l_socket_selfip(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# luat_lib_netc_msg_handler
-
-```c
-static int luat_lib_netc_msg_handler(lua_State *L, void *ptr)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**ptr**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# luat_lib_socket_new
-
-```c
-static int luat_lib_socket_new(lua_State *L, int netc_type)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**netc_type**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# luat_lib_socket_ent_handler
-
-```c
-static int luat_lib_socket_ent_handler(netc_ent_t *ent)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**ent**|`netc_ent_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# socket.tcp
-
-```lua
-socket.tcp()
-```
-
-新建一个tcp socket
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`object`| socket对象,如果创建失败会返回nil
-
-## 调用示例
-
-```lua
--- 如果读取失败,会返回nil
-local so = socket.tcp()
-if so then
-    so:host("www.baidu.com")
-    so:port(80)
-    so:on("connect", function(id, re)
-        if re == 1 then
-            so:send("GET / HTTP/1.0\r\n\r\n")
-        end
-    end)
-    so:on("recv", function(id, data)
-        log.info("netc", id, data)
-    end)
-    if so:start() == 1 then
-        sys.waitUntil("NETC_END_" .. so:id())
-    end
-    so:close()
-    so:clean()
-end
-```
-## C API
-
-```c
-static int luat_lib_socket_tcp(lua_State *L)
-```
-
-
---------------------------------------------------
-# socket.udp
-
-```lua
-socket.udp()
-```
-
-新建一个udp socket
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-> *无返回值*
-## C API
-
-```c
-static int luat_lib_socket_udp(lua_State *L)
-```
-
-
---------------------------------------------------
-# luat_lib_socket_new
-
-```c
-static int luat_lib_socket_new(lua_State *L, int netc_type)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**netc_type**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_connect
-
-```c
-static int netc_connect(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_close
-
-```c
-static int netc_close(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_send
-
-```c
-static int netc_send(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_gc
-
-```c
-static int netc_gc(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_tostring
-
-```c
-static int netc_tostring(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_id
-
-```c
-static int netc_id(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_host
-
-```c
-static int netc_host(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_port
-
-```c
-static int netc_port(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_clean
-
-```c
-static int netc_clean(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_on
-
-```c
-static int netc_on(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# netc_closed
-
-```c
-static int netc_closed(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# createmeta
-
-```c
-static void createmeta(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 113
docs/api/modules/luat_lib_spi.md

@@ -1,113 +0,0 @@
----
-title: luat_lib_spi
-path: luat_lib_spi.c
-module: spi
-summary: spi操作库
-version: 1.0
-date: 2020.04.23
----
---------------------------------------------------
-# l_spi_setup
-
-```c
-static int l_spi_setup(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_spi_close
-
-```c
-static int l_spi_close(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_spi_transfer
-
-```c
-static int l_spi_transfer(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_spi_recv
-
-```c
-static int l_spi_recv(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_spi_send
-
-```c
-static int l_spi_send(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 115
docs/api/modules/luat_main.md

@@ -1,115 +0,0 @@
----
-title: luat_main
-path: luat_main.c
----
---------------------------------------------------
-# report
-
-```c
-static int report(lua_State *L, int status)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**status**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# pmain
-
-```c
-static int pmain(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_message
-
-```c
-static void l_message(const char *pname, const char *msg)
-```
-
-Prints an error message, adding the program name in front of it
-(if present)
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**pname**|`char*`| *无*
-**msg**|`char*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# report
-
-```c
-static int report(lua_State *L, int status)
-```
-
-Check whether 'status' is not OK and, if so, prints the error
-message on the top of the stack. It assumes that the error object
-is a string, as it was either generated by Lua or by 'msghandler'.
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**status**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# panic
-
-```c
-static int panic(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 21
docs/api/rtt/README.md

@@ -1,21 +0,0 @@
----
-title: RT-Thread集成
----
-
-# RT-Thread集成
-
-- [luat_gpio_rtt](luat_gpio_rtt.md)
-- [luat_i2c_rtt](luat_i2c_rtt.md)
-- [luat_lib_utest](luat_lib_utest.md)
-- [luat_lib_wlan](luat_lib_wlan.md)
-- [luat_malloc_rtt](luat_malloc_rtt.md)
-- [luat_msh_rtt](luat_msh_rtt.md)
-- [luat_netclient_rtt](luat_netclient_rtt.md)
-- [luat_pwm_rtt](luat_pwm_rtt.md)
-- [luat_rtt_base](luat_rtt_base.md)
-- [luat_socket_rtt](luat_socket_rtt.md)
-- [luat_spi_rtt](luat_spi_rtt.md)
-- [luat_timer_rtt](luat_timer_rtt.md)
-- [luat_uart_rtt](luat_uart_rtt.md)
-- [rtt_airkiss](rtt_airkiss.md)
-- [rtt_mem](rtt_mem.md)

+ 0 - 23
docs/api/rtt/luat_gpio_rtt.md

@@ -1,23 +0,0 @@
----
-title: luat_gpio_rtt
-path: luat_gpio_rtt.c
----
---------------------------------------------------
-# luat_gpio_irq_callback
-
-```c
-static void luat_gpio_irq_callback(void *ptr)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**ptr**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 72
docs/api/rtt/luat_i2c_rtt.md

@@ -1,72 +0,0 @@
----
-title: luat_i2c_rtt
-path: luat_i2c_rtt.c
----
---------------------------------------------------
-# luat_i2c_rtt_init
-
-```c
-static int luat_i2c_rtt_init()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# write_reg
-
-```c
-static rt_err_t write_reg(struct rt_i2c_bus_device *bus, rt_uint16_t addr, rt_uint8_t reg, rt_uint8_t *data, rt_uint8_t len)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**bus**|`rt_i2c_bus_device*`| *无*
-**addr**|`rt_uint16_t`| *无*
-**reg**|`rt_uint8_t`| *无*
-**data**|`rt_uint8_t*`| *无*
-**len**|`rt_uint8_t`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_err_t`| *无*
-
-
---------------------------------------------------
-# read_regs
-
-```c
-static rt_err_t read_regs(struct rt_i2c_bus_device *bus, rt_uint16_t addr, rt_uint8_t *buf, rt_uint8_t len)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**bus**|`rt_i2c_bus_device*`| *无*
-**addr**|`rt_uint16_t`| *无*
-**buf**|`rt_uint8_t*`| *无*
-**len**|`rt_uint8_t`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_err_t`| *无*
-
-

+ 0 - 67
docs/api/rtt/luat_lib_utest.md

@@ -1,67 +0,0 @@
----
-title: luat_lib_utest
-path: luat_lib_utest.c
----
---------------------------------------------------
-# l_utest_600_mem_check
-
-```c
-static int l_utest_600_mem_check(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_utest_memdump
-
-```c
-static int l_utest_memdump(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_utest_memcheck
-
-```c
-static int l_utest_memcheck(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 591
docs/api/rtt/luat_lib_wlan.md

@@ -1,591 +0,0 @@
----
-title: luat_lib_wlan
-path: luat_lib_wlan.c
-module: wlan
-summary: wifi操作库
-version: 1.0
-date: 2020.03.30
----
---------------------------------------------------
-# l_wlan_get_mode
-
-```c
-static int l_wlan_get_mode(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_wlan_set_mode
-
-```c
-static int l_wlan_set_mode(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# _wlan_connect
-
-```c
-static void _wlan_connect(void *params)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**params**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# wlan.connect
-
-```lua
-wlan.connect(ssid, password)
-```
-
-连接wifi
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**ssid**|`string`| ssid  wifi的SSID
-**password**|`string`| password wifi的密码,可选
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`re`| 如果正常启动联网线程,无返回值,否则返回出错信息. 成功启动联网线程不等于联网成功!!
-
-## 调用示例
-
-```lua
--- 连接到uiot,密码1234567890
-wlan.connect("uiot", "1234567890")
-```
-## C API
-
-```c
-static int l_wlan_connect(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.disconnect
-
-```lua
-wlan.disconnect()
-```
-
-断开wifi
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-> *无返回值*
-
-## 调用示例
-
-```lua
--- 断开wifi连接
-wlan.disconnect()
-```
-## C API
-
-```c
-static int l_wlan_disconnect(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.connected
-
-```lua
-wlan.connected()
-```
-
-是否已经连上wifi网络
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`re`| 已连接返回1,未连接返回0
-
-## 调用示例
-
-```lua
--- 连上wifi网络,只代表密码正确, 不一定拿到了ip
-wlan.connected()
-```
-## C API
-
-```c
-static int l_wlan_connected(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.autoreconnect
-
-```lua
-wlan.autoreconnect(enable)
-```
-
-设置或查询wifi station是否自动连接
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**enable**|`int`| 传入1启用自动连接(自动重连wifi), 传入0关闭. 不传这个参数就是查询
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| 已启用自动连接(自动重连wifi)返回1, 否则返回0
-
-## 调用示例
-
-```lua
--- 查询自动连接的设置
--- 设置自动连接
-wlan.autoreconnect()
-wlan.autoreconnect(1)
--- 查询自动连接的设置
--- 设置自动连接
-wlan.autoreconnect()
-wlan.autoreconnect(1)
-```
-## C API
-
-```c
-static int l_wlan_autoreconnect(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.scan
-
-```lua
-wlan.scan()
-```
-
-开始扫网,通常配合wlan.scanResult使用
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`boolean`| 启动结果,一般为true
-
-## 调用示例
-
-```lua
--- 扫描并查询结果
-wlan.scan()
-sys.waitUntil("WLAN_SCAN_DONE", 30000)
-local re = wlan.scanResult()
-for i in ipairs(re) do
-    log.info("wlan", "info", re[i].ssid, re[i].rssi)
-end
-```
-## C API
-
-```c
-static int l_wlan_scan(lua_State *L)
-```
-
-
---------------------------------------------------
-# l_wlan_scan_get_result
-
-```c
-static int l_wlan_scan_get_result(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# wlan.get_mac
-
-```lua
-wlan.get_mac(?)
-```
-
-获取mac地址
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**?**|`usage`| wlan.get_mac()
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`string`| 长度为12的HEX字符串
-## C API
-
-```c
-static int l_wlan_get_mac(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.get_mac_raw
-
-```lua
-wlan.get_mac_raw(?)
-```
-
-获取mac地址,raw格式
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**?**|`usage`| wlan.get_mac_raw()
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`string`| 6字节的mac地址串
-## C API
-
-```c
-static int l_wlan_get_mac_raw(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.ready
-
-```lua
-wlan.ready(?)
-```
-
-wifi是否已经获取ip
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**?**|`usage`| wlan.ready()
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`re`| 已经有ip返回true,否则返回false
-## C API
-
-```c
-static int l_wlan_ready(lua_State *L)
-```
-
-
---------------------------------------------------
-# l_wlan_handler
-
-```c
-static int l_wlan_handler(lua_State *L, void *ptr)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**ptr**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# wlan_cb
-
-```c
-static void wlan_cb(int event, struct rt_wlan_buff *buff, void *parameter)
-```
-
-注册回调
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**event**|`int`| *无*
-**buff**|`rt_wlan_buff*`| *无*
-**parameter**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# reg_wlan_callbacks
-
-```c
-static void reg_wlan_callbacks(void)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**null**|`void`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# luat_PW_msghandler
-
-```c
-static int luat_PW_msghandler(lua_State *L, void *ptr)
-```
-
-----------------------------
------------------------------
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**ptr**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# _PW_callback
-
-```c
-static void _PW_callback(int state, unsigned char *_ssid, unsigned char *_passwd)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**state**|`int`| *无*
-**_ssid**|`char*`| *无*
-**_passwd**|`char*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# l_wlan_oneshot_start
-
-```c
-static int l_wlan_oneshot_start(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_wlan_oneshot_stop
-
-```c
-static int l_wlan_oneshot_stop(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_wlan_oneshot_state
-
-```c
-static int l_wlan_oneshot_state(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# l_wlan_join_info
-
-```c
-static int l_wlan_join_info(lua_State *L)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# wlan.rssi
-
-```lua
-wlan.rssi(?)
-```
-
-获取wifi信号强度值rssi
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**?**|`usage`| wlan.rssi()
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| 如果是station模式,返回正的rssi值,否则返回负值
-## C API
-
-```c
-static int l_wlan_rssi(lua_State *L)
-```
-
-
---------------------------------------------------
-# wlan.airkiss_start
-
-```lua
-wlan.airkiss_start(?)
-```
-
-启动airkiss配网线程
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**?**|`usage`| wlan.airkiss_start()
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`re`| 启动成功返回1,否则返回0
-## C API
-
-```c
-static int l_wlan_airkiss_start(lua_State *L)
-```
-
-

+ 0 - 23
docs/api/rtt/luat_malloc_rtt.md

@@ -1,23 +0,0 @@
----
-title: luat_malloc_rtt
-path: luat_malloc_rtt.c
----
---------------------------------------------------
-# rtt_mem_init
-
-```c
-static int rtt_mem_init()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 24
docs/api/rtt/luat_msh_rtt.md

@@ -1,24 +0,0 @@
----
-title: luat_msh_rtt
-path: luat_msh_rtt.c
----
---------------------------------------------------
-# loadstr
-
-```c
-static void loadstr(int argc, char**argv)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**argc**|`int`| *无*
-**char**argv**|`null`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 343
docs/api/rtt/luat_netclient_rtt.md

@@ -1,343 +0,0 @@
----
-title: luat_netclient_rtt
-path: luat_netclient_rtt.c
----
---------------------------------------------------
-# netclient_destory
-
-```c
-static rt_int32_t netclient_destory(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# socket_init
-
-```c
-static rt_int32_t socket_init(netclient_t *thiz, const char *hostname, int port)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-**hostname**|`char*`| *无*
-**port**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# socket_deinit
-
-```c
-static rt_int32_t socket_deinit(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# pipe_init
-
-```c
-static rt_int32_t pipe_init(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# pipe_deinit
-
-```c
-static rt_int32_t pipe_deinit(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# select_handle
-
-```c
-static void select_handle(netclient_t *thiz, char *sock_buff)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-**sock_buff**|`char*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# netclient_thread_init
-
-```c
-static rt_int32_t netclient_thread_init(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# netclient_thread_entry
-
-```c
-static void netclient_thread_entry(void *param)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**param**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# EVENT
-
-```c
-static void EVENT(int netc_id, tpc_cb_t cb, int lua_ref, int tp, size_t len, void *buff)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**netc_id**|`int`| *无*
-**cb**|`tpc_cb_t`| *无*
-**lua_ref**|`int`| *无*
-**tp**|`int`| *无*
-**len**|`size_t`| *无*
-**buff**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# netclient_destory
-
-```c
-static rt_int32_t netclient_destory(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# socket_init
-
-```c
-static rt_int32_t socket_init(netclient_t *thiz, const char *url, int port)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-**url**|`char*`| *无*
-**port**|`int`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# socket_deinit
-
-```c
-static rt_int32_t socket_deinit(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# pipe_init
-
-```c
-static rt_int32_t pipe_init(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# pipe_deinit
-
-```c
-static rt_int32_t pipe_deinit(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# netclient_thread_init
-
-```c
-static rt_int32_t netclient_thread_init(netclient_t *thiz)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_int32_t`| *无*
-
-
---------------------------------------------------
-# select_handle
-
-```c
-static void select_handle(netclient_t *thiz, char *sock_buff)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**thiz**|`netclient_t*`| *无*
-**sock_buff**|`char*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 23
docs/api/rtt/luat_pwm_rtt.md

@@ -1,23 +0,0 @@
----
-title: luat_pwm_rtt
-path: luat_pwm_rtt.c
----
---------------------------------------------------
-# luat_pwm_rtt_init
-
-```c
-static int luat_pwm_rtt_init()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 65
docs/api/rtt/luat_rtt_base.md

@@ -1,65 +0,0 @@
----
-title: luat_rtt_base
-path: luat_rtt_base.c
----
---------------------------------------------------
-# wdt_chk
-
-```c
-static int wdt_chk(void)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**null**|`void`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# rtt_wdt_feed
-
-```c
-static int rtt_wdt_feed(void *args)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**args**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# rtt_wdt_thread_start
-
-```c
-static int rtt_wdt_thread_start()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 45
docs/api/rtt/luat_socket_rtt.md

@@ -1,45 +0,0 @@
----
-title: luat_socket_rtt
-path: luat_socket_rtt.c
----
---------------------------------------------------
-# socket_ntp_handler
-
-```c
-static int socket_ntp_handler(lua_State *L, void *ptr)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**L**|`lua_State*`| *无*
-**ptr**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# ntp_thread
-
-```c
-static void ntp_thread(void *params)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**params**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 23
docs/api/rtt/luat_spi_rtt.md

@@ -1,23 +0,0 @@
----
-title: luat_spi_rtt
-path: luat_spi_rtt.c
----
---------------------------------------------------
-# luat_spi_rtt_init
-
-```c
-static int luat_spi_rtt_init()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-

+ 0 - 23
docs/api/rtt/luat_timer_rtt.md

@@ -1,23 +0,0 @@
----
-title: luat_timer_rtt
-path: luat_timer_rtt.c
----
---------------------------------------------------
-# rt_timer_callback
-
-```c
-static void rt_timer_callback(void *param)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**param**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 90
docs/api/rtt/luat_uart_rtt.md

@@ -1,90 +0,0 @@
----
-title: luat_uart_rtt
-path: luat_uart_rtt.c
----
---------------------------------------------------
-# luat_uart_rtt_init
-
-```c
-static int luat_uart_rtt_init()
-```
-
-
-## 参数表
-
-> 无参数
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# get_uart_id
-
-```c
-static int get_uart_id(rt_device_t dev)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**dev**|`rt_device_t`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`int`| *无*
-
-
---------------------------------------------------
-# uart_input_cb
-
-```c
-static rt_err_t uart_input_cb(rt_device_t dev, rt_size_t size)
-```
-
-接收数据回调
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**dev**|`rt_device_t`| *无*
-**size**|`rt_size_t`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_err_t`| *无*
-
-
---------------------------------------------------
-# uart_sent_cb
-
-```c
-static rt_err_t uart_sent_cb(rt_device_t dev, void *buffer)
-```
-
-串口发送完成事件回调
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**dev**|`rt_device_t`| *无*
-**buffer**|`void*`| *无*
-
-## 返回值
-
-No. | Type | Description
-----|------|--------------
-1 |`rt_err_t`| *无*
-
-

+ 0 - 122
docs/api/rtt/rtt_airkiss.md

@@ -1,122 +0,0 @@
----
-title: rtt_airkiss
-path: rtt_airkiss.c
----
---------------------------------------------------
-# prom_callback
-
-```c
-static void prom_callback(struct rt_wlan_device *device, void *d, int s)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**device**|`rt_wlan_device*`| *无*
-**d**|`void*`| *无*
-**s**|`int`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# airkiss_send_notification
-
-```c
-static void airkiss_send_notification(uint8_t random)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**random**|`uint8_t`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# airkiss_send_notification
-
-```c
-static void airkiss_send_notification(uint8_t random)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**random**|`uint8_t`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# prom_callback
-
-```c
-static void prom_callback(struct rt_wlan_device *device, void *d, int s)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**device**|`rt_wlan_device*`| *无*
-**d**|`void*`| *无*
-**s**|`int`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# do_airkiss_configwifi
-
-```c
-static void do_airkiss_configwifi(void)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**null**|`void`| *无*
-
-## 返回值
-
-> *无返回值*
-
-
---------------------------------------------------
-# airkiss_thread
-
-```c
-static void airkiss_thread(void *p)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**p**|`void*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 0 - 23
docs/api/rtt/rtt_mem.md

@@ -1,23 +0,0 @@
----
-title: rtt_mem
-path: rtt_mem.c
----
---------------------------------------------------
-# plug_holes
-
-```c
-static void plug_holes(struct heap_mem *mem)
-```
-
-
-## 参数表
-
-Name | Type | Description
------|------|--------------
-**mem**|`heap_mem*`| *无*
-
-## 返回值
-
-> *无返回值*
-
-

+ 7 - 0
luat/modules/README.md

@@ -0,0 +1,7 @@
+---
+title: ${title}
+---
+
+# ${title}
+
+${index} 

+ 44 - 0
tools/java/README.md

@@ -0,0 +1,44 @@
+# LuatOS 文档生成工具
+
+```js
+{
+  // 工作目录:即项目目录
+  "workdir": "D:/github/LuatOS/",
+  // 要生成什么类型的文档
+  // 支持: md | json
+  "as": ["md"],
+  // 搜索文档的入口
+  "entries": [{
+    // 入口标题
+    "title": "LuaAPI模块",
+    // 入口路径,相对 workdir
+    "path": "luat/modules",
+    // 搜索的文件前缀
+    // 从 workdir+path 之后的路径开始算,一定不是 "/" 开头
+    "prefix": [],
+    // 搜索文件后缀
+    "suffix": [".c"],
+    // 仅输入下面指定的 API
+    // 支持, "C" 和 "LUA"
+    // !! 注意,需要全部大写
+    // 默认的,都会输出(即,只要解析器收集到的函数签名,都会输出为文档)
+    "lang" : ["C", "LUA"],
+    // 这个开关如果设置为 true,所有空白的函数签名都会被无视
+    // 默认 false
+    "dropEmptyComment": true,
+    // 文档集用那个文件作为模板,默认是入口目录下的 README.md 文件
+    // 模板文件的 ${index} 占位符会放置生成的索引列表
+    // 占位符 ${index} 则为本配置声明的 title 段
+    "readme" : "README.md"
+    // 输出路径,相对 output
+    // 占位符 ${name} 表示 path 对应目录的名字
+    // 本例中,它表示 "modules"
+    "out": "${name}",
+    // 是否递归深层搜索目录
+    "deep": true
+  }],
+  // 输出文档的目录
+  // 占位符 ${workdir} 就是工作目录
+  "output": "${workdir}/docs/api/"
+}
+```

+ 18 - 2
tools/java/src/main/java/org/luatos/toolkit/LuatDocEntry.java → tools/java/src/main/java/com/luatos/toolkit/LuatDocEntry.java

@@ -1,9 +1,9 @@
-package org.luatos.toolkit;
+package com.luatos.toolkit;
 
 import org.nutz.lang.Files;
 import org.nutz.lang.Strings;
 
-public class LuatDocEntry {
+public class LuatDocEntry extends LuatRenderingSetup {
 
     private String title;
 
@@ -16,6 +16,10 @@ public class LuatDocEntry {
 
     private String[] suffix;
 
+    // 文档集用那个文件作为模板,默认是入口目录下的 README.md 文件
+    // 模板文件的 ${index} 占位符会放置生成的索引列表
+    private String readme;
+
     /**
      * 输数模板:占位符:
      * 
@@ -66,6 +70,18 @@ public class LuatDocEntry {
         this.suffix = suffix;
     }
 
+    public String getReadme() {
+        return readme;
+    }
+
+    public String getReadmeFilePath() {
+        return Strings.sBlank(readme, "README.md");
+    }
+
+    public void setReadme(String readme) {
+        this.readme = readme;
+    }
+
     public boolean isMatch(String rph) {
         // 先看后缀
         if (hasSuffix()) {

+ 22 - 9
tools/java/src/main/java/org/luatos/toolkit/LuatDocGenerator.java → tools/java/src/main/java/com/luatos/toolkit/LuatDocGenerator.java

@@ -1,16 +1,11 @@
-package org.luatos.toolkit;
+package com.luatos.toolkit;
 
 import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-import org.luatos.toolkit.api.LuDocParser;
-import org.luatos.toolkit.bean.LuDocument;
-import org.luatos.toolkit.bean.LuatDocSet;
-import org.luatos.toolkit.impl.CLuDocParser;
-import org.luatos.toolkit.impl.ComboDocSetRender;
-import org.luatos.toolkit.util.ComboLuDocRender;
+
 import org.nutz.json.Json;
 import org.nutz.lang.Files;
 import org.nutz.lang.Lang;
@@ -21,6 +16,13 @@ import org.nutz.lang.util.FileVisitor;
 import org.nutz.log.Log;
 import org.nutz.log.Logs;
 
+import com.luatos.toolkit.api.LuDocParser;
+import com.luatos.toolkit.bean.LuDocument;
+import com.luatos.toolkit.bean.LuatDocSet;
+import com.luatos.toolkit.impl.CLuDocParser;
+import com.luatos.toolkit.impl.ComboDocSetRender;
+import com.luatos.toolkit.util.ComboLuDocRender;
+
 public class LuatDocGenerator {
 
     private static final String HR0 = Strings.dup('#', 60);
@@ -143,6 +145,17 @@ public class LuatDocGenerator {
         ds.setHomePath(dirHome.getCanonicalPath());
         ds.setEntry(en);
 
+        // 准备索引模板
+        File fReadme = Files.getFile(dirHome, en.getReadmeFilePath());
+        if (!fReadme.exists()) {
+            fReadme = Files.findFile("dft_readme.md");
+        }
+        String tmpl = "${index}";
+        if (null != fReadme) {
+            tmpl = Files.read(fReadme);
+        }
+        ds.setReadme(tmpl);
+
         // 递归的解析文档
         Disks.visitFile(dirHome, new FileVisitor() {
             public void visit(File f) {
@@ -208,7 +221,7 @@ public class LuatDocGenerator {
         log.info("");
         // .....................................................
         // 准备渲染器
-        ComboLuDocRender render = new ComboLuDocRender(ass);
+        ComboLuDocRender dr = new ComboLuDocRender(ass);
         // .....................................................
         // 循环解析输出
         int i = 0;
@@ -221,7 +234,7 @@ public class LuatDocGenerator {
             LuDocument doc = docParser.parse(text);
 
             // 渲染输出
-            render.output(doc, dirOut, f.getName());
+            dr.output(doc, dirOut, f.getName(), null);
         }
     }
 

+ 1 - 1
tools/java/src/main/java/org/luatos/toolkit/LuatDocSetup.java → tools/java/src/main/java/com/luatos/toolkit/LuatDocSetup.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit;
+package com.luatos.toolkit;
 
 public class LuatDocSetup {
 

+ 57 - 0
tools/java/src/main/java/com/luatos/toolkit/LuatRenderingSetup.java

@@ -0,0 +1,57 @@
+package com.luatos.toolkit;
+
+import com.luatos.toolkit.bean.FnLang;
+
+public class LuatRenderingSetup {
+
+    /**
+     * 仅输入下面指定的 API<br>
+     * 支持, "C" 和 "LUA"
+     * <p>
+     * !! 注意,需要全部大写 默认的,都会输出(即,只要解析器收集到的函数签名,都会输出为文档)
+     */
+    private String[] lang;
+    /**
+     * 这个开关如果设置为 true,所有空白的函数签名都会被无视<br>
+     * 默认 false
+     */
+    private boolean dropEmptyComment;
+
+    public LuatRenderingSetup() {
+        super();
+    }
+
+    public boolean hasLang() {
+        return null != lang && lang.length > 0;
+    }
+
+    public String[] getLang() {
+        return lang;
+    }
+
+    public FnLang[] getLangEnum() {
+        if (!this.hasLang()) {
+            return new FnLang[0];
+        }
+        FnLang[] langs = new FnLang[this.lang.length];
+        for (int i = 0; i < this.lang.length; i++) {
+            String la = this.lang[i].toUpperCase();
+            FnLang l2 = FnLang.valueOf(la);
+            langs[i] = l2;
+        }
+        return langs;
+    }
+
+    public void setLang(String[] lang) {
+        this.lang = lang;
+    }
+
+    public boolean isDropEmptyComment() {
+        return dropEmptyComment;
+    }
+
+    public void setDropEmptyComment(boolean dropEmptyComment) {
+        this.dropEmptyComment = dropEmptyComment;
+    }
+
+}

+ 4 - 2
tools/java/src/main/java/org/luatos/toolkit/Luats.java → tools/java/src/main/java/com/luatos/toolkit/Luats.java

@@ -1,10 +1,12 @@
-package org.luatos.toolkit;
+package com.luatos.toolkit;
 
 import java.util.Iterator;
 import java.util.List;
-import org.luatos.toolkit.bean.LuComment;
+
 import org.nutz.lang.Strings;
 
+import com.luatos.toolkit.bean.LuComment;
+
 public abstract class Luats {
 
     public static boolean isSame(Object o1, Object o2) {

+ 9 - 0
tools/java/src/main/java/com/luatos/toolkit/api/FnSignParser.java

@@ -0,0 +1,9 @@
+package com.luatos.toolkit.api;
+
+import com.luatos.toolkit.bean.FnSign;
+
+public interface FnSignParser {
+
+    FnSign parse(String block);
+
+}

+ 9 - 0
tools/java/src/main/java/com/luatos/toolkit/api/LuDocParser.java

@@ -0,0 +1,9 @@
+package com.luatos.toolkit.api;
+
+import com.luatos.toolkit.bean.LuDocument;
+
+public interface LuDocParser {
+
+    LuDocument parse(String input);
+
+}

+ 12 - 0
tools/java/src/main/java/com/luatos/toolkit/api/LuDocRender.java

@@ -0,0 +1,12 @@
+package com.luatos.toolkit.api;
+
+import java.io.OutputStream;
+
+import com.luatos.toolkit.LuatRenderingSetup;
+import com.luatos.toolkit.bean.LuDocument;
+
+public interface LuDocRender {
+
+    boolean render(LuDocument doc, OutputStream ops, LuatRenderingSetup setup);
+
+}

+ 2 - 2
tools/java/src/main/java/org/luatos/toolkit/api/LuDocSetRender.java → tools/java/src/main/java/com/luatos/toolkit/api/LuDocSetRender.java

@@ -1,8 +1,8 @@
-package org.luatos.toolkit.api;
+package com.luatos.toolkit.api;
 
 import java.io.IOException;
 
-import org.luatos.toolkit.bean.LuatDocSet;
+import com.luatos.toolkit.bean.LuatDocSet;
 
 public interface LuDocSetRender {
 

+ 1 - 1
tools/java/src/main/java/org/luatos/toolkit/api/TagParser.java → tools/java/src/main/java/com/luatos/toolkit/api/TagParser.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.api;
+package com.luatos.toolkit.api;
 
 public interface TagParser<T> {
 

+ 3 - 2
tools/java/src/main/java/org/luatos/toolkit/bean/FnExample.java → tools/java/src/main/java/com/luatos/toolkit/bean/FnExample.java

@@ -1,11 +1,12 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import java.util.LinkedList;
 import java.util.List;
 
-import org.luatos.toolkit.Luats;
 import org.nutz.lang.Strings;
 
+import com.luatos.toolkit.Luats;
+
 public class FnExample {
 
     private List<String> summary;

+ 1 - 1
tools/java/src/main/java/org/luatos/toolkit/bean/FnLang.java → tools/java/src/main/java/com/luatos/toolkit/bean/FnLang.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 public enum FnLang {
 

+ 3 - 2
tools/java/src/main/java/org/luatos/toolkit/bean/FnParam.java → tools/java/src/main/java/com/luatos/toolkit/bean/FnParam.java

@@ -1,8 +1,9 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
-import org.luatos.toolkit.Luats;
 import org.nutz.lang.Strings;
 
+import com.luatos.toolkit.Luats;
+
 public class FnParam extends FnReturn {
 
     private String name;

+ 3 - 2
tools/java/src/main/java/org/luatos/toolkit/bean/FnReturn.java → tools/java/src/main/java/com/luatos/toolkit/bean/FnReturn.java

@@ -1,8 +1,9 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
-import org.luatos.toolkit.Luats;
 import org.nutz.lang.Strings;
 
+import com.luatos.toolkit.Luats;
+
 public class FnReturn {
 
     protected String type;

+ 3 - 2
tools/java/src/main/java/org/luatos/toolkit/bean/FnSign.java → tools/java/src/main/java/com/luatos/toolkit/bean/FnSign.java

@@ -1,12 +1,13 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
-import org.luatos.toolkit.Luats;
 import org.nutz.lang.Strings;
 
+import com.luatos.toolkit.Luats;
+
 public class FnSign {
 
     /**

+ 1 - 1
tools/java/src/main/java/org/luatos/toolkit/bean/LuCmtAppend.java → tools/java/src/main/java/com/luatos/toolkit/bean/LuCmtAppend.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 public enum LuCmtAppend {
 

+ 1 - 1
tools/java/src/main/java/org/luatos/toolkit/bean/LuCmtType.java → tools/java/src/main/java/com/luatos/toolkit/bean/LuCmtType.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 public enum LuCmtType {
 

+ 1 - 1
tools/java/src/main/java/org/luatos/toolkit/bean/LuComment.java → tools/java/src/main/java/com/luatos/toolkit/bean/LuComment.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import java.util.LinkedList;
 import java.util.List;

+ 54 - 2
tools/java/src/main/java/org/luatos/toolkit/bean/LuDocument.java → tools/java/src/main/java/com/luatos/toolkit/bean/LuDocument.java

@@ -1,9 +1,14 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
+import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
 
-import org.luatos.toolkit.Luats;
+import org.nutz.lang.Lang;
+import org.nutz.lang.Strings;
+
+import com.luatos.toolkit.LuatRenderingSetup;
+import com.luatos.toolkit.Luats;
 
 public class LuDocument {
 
@@ -36,6 +41,18 @@ public class LuDocument {
             return head.getTitle();
         return null;
     }
+    
+    public String getDisplayTitle() {
+        if (null != head)
+            return head.getDisplayTitle();
+        return null;
+    }
+    
+    public String getDisplaySummary() {
+        if (null != head)
+            return Strings.sBlank(head.getSummary(), head.getDisplayTitle());
+        return null;
+    }
 
     public void setDefaultTitle(String title) {
         if (null == head) {
@@ -67,6 +84,41 @@ public class LuDocument {
         return functions;
     }
 
+    public List<FnSign> fetchFunctions(LuatRenderingSetup setup) {
+        // 木有函数
+        if (!this.hasFunctions()) {
+            return new LinkedList<FnSign>();
+        }
+        // 木有约束
+        if (null == setup || (!setup.isDropEmptyComment() && !setup.hasLang())) {
+            return this.functions;
+        }
+
+        List<FnSign> list = new ArrayList<>(this.functions.size());
+
+        // 首先整理一下要过滤的语言
+        FnLang[] langs = setup.getLangEnum();
+
+        // 逐个判断一下
+        for (FnSign fn : this.functions) {
+            // 没有匹配语言
+            if (langs.length > 0) {
+                if (!Lang.contains(langs, fn.getLang())) {
+                    continue;
+                }
+            }
+            // 没有匹配注释
+            if (setup.isDropEmptyComment()) {
+                if (Strings.isBlank(fn.getSummary())) {
+                    continue;
+                }
+            }
+            // 嗯,这下可以加入
+            list.add(fn);
+        }
+        return list;
+    }
+
     public void setFunctions(List<FnSign> functions) {
         this.functions = functions;
     }

+ 22 - 8
tools/java/src/main/java/org/luatos/toolkit/bean/LuHead.java → tools/java/src/main/java/com/luatos/toolkit/bean/LuHead.java

@@ -1,9 +1,11 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
-import org.luatos.toolkit.Luats;
+import org.nutz.lang.Files;
 import org.nutz.lang.Strings;
 import org.nutz.lang.util.NutMap;
 
+import com.luatos.toolkit.Luats;
+
 public class LuHead {
 
     private String title;
@@ -30,6 +32,19 @@ public class LuHead {
         this.title = title;
     }
 
+    public String getDisplayTitle() {
+        if (!Strings.isBlank(this.module)) {
+            return this.module;
+        }
+        if (!Strings.isBlank(this.title)) {
+            return this.title;
+        }
+        if (!Strings.isBlank(this.path)) {
+            return Files.getMajorName(this.path);
+        }
+        return null;
+    }
+
     public String getPath() {
         return path;
     }
@@ -94,14 +109,13 @@ public class LuHead {
     public NutMap toMap() {
         NutMap re = new NutMap();
 
-        if (!Strings.isBlank(title))
-            re.put("title", title);
-
-        if (!Strings.isBlank(path))
-            re.put("path", path);
+        if (!Strings.isBlank(title)) {
+            re.put("module", title);
+        }
 
-        if (!Strings.isBlank(module))
+        if (!Strings.isBlank(module)) {
             re.put("module", module);
+        }
 
         if (!Strings.isBlank(summary))
             re.put("summary", summary);

+ 18 - 2
tools/java/src/main/java/org/luatos/toolkit/bean/LuatDocSet.java → tools/java/src/main/java/com/luatos/toolkit/bean/LuatDocSet.java

@@ -1,16 +1,20 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import java.util.LinkedList;
 import java.util.List;
 
-import org.luatos.toolkit.LuatDocEntry;
 import org.nutz.lang.Files;
 import org.nutz.lang.Strings;
+import org.nutz.lang.tmpl.Tmpl;
+
+import com.luatos.toolkit.LuatDocEntry;
 
 public class LuatDocSet {
 
     private String name;
 
+    private Tmpl readme;
+
     /**
      * 即 workdir + path 的全路径, 下面的文档路径会根据这个路径计算相对路径
      */
@@ -63,6 +67,18 @@ public class LuatDocSet {
         this.name = name;
     }
 
+    public Tmpl getReadme() {
+        return readme;
+    }
+
+    public void setReadme(Tmpl readme) {
+        this.readme = readme;
+    }
+
+    public void setReadme(String readme) {
+        this.readme = Tmpl.parse(readme);
+    }
+
     public boolean hasDocuments() {
         return null != this.documents && !this.documents.isEmpty();
     }

+ 7 - 6
tools/java/src/main/java/org/luatos/toolkit/impl/CFnSignParser.java → tools/java/src/main/java/com/luatos/toolkit/impl/CFnSignParser.java

@@ -1,19 +1,20 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.luatos.toolkit.api.FnSignParser;
-import org.luatos.toolkit.bean.FnLang;
-import org.luatos.toolkit.bean.FnParam;
-import org.luatos.toolkit.bean.FnReturn;
-import org.luatos.toolkit.bean.FnSign;
 import org.nutz.lang.Lang;
 import org.nutz.lang.Strings;
 import org.nutz.lang.util.Regex;
 
+import com.luatos.toolkit.api.FnSignParser;
+import com.luatos.toolkit.bean.FnLang;
+import com.luatos.toolkit.bean.FnParam;
+import com.luatos.toolkit.bean.FnReturn;
+import com.luatos.toolkit.bean.FnSign;
+
 public class CFnSignParser implements FnSignParser {
 
     private static String _r0 = "^\\s*((((static|local|inline)\\s+)*))?\\s*(\\w+(\\s*[*])?)\\s*(\\w+)\\s*\\(([^)]*)\\).*$";

+ 9 - 8
tools/java/src/main/java/org/luatos/toolkit/impl/CLuDocParser.java → tools/java/src/main/java/com/luatos/toolkit/impl/CLuDocParser.java

@@ -1,21 +1,22 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.luatos.toolkit.api.FnSignParser;
-import org.luatos.toolkit.api.LuDocParser;
-import org.luatos.toolkit.bean.FnSign;
-import org.luatos.toolkit.bean.LuCmtAppend;
-import org.luatos.toolkit.bean.LuComment;
-import org.luatos.toolkit.bean.LuDocument;
-import org.luatos.toolkit.bean.LuHead;
 import org.nutz.lang.Lang;
 import org.nutz.lang.Strings;
 import org.nutz.lang.util.Regex;
 
+import com.luatos.toolkit.api.FnSignParser;
+import com.luatos.toolkit.api.LuDocParser;
+import com.luatos.toolkit.bean.FnSign;
+import com.luatos.toolkit.bean.LuCmtAppend;
+import com.luatos.toolkit.bean.LuComment;
+import com.luatos.toolkit.bean.LuDocument;
+import com.luatos.toolkit.bean.LuHead;
+
 public class CLuDocParser implements LuDocParser {
 
     private LuHeadParser headParser = new LuHeadParser();

+ 46 - 33
tools/java/src/main/java/org/luatos/toolkit/impl/ComboDocSetRender.java → tools/java/src/main/java/com/luatos/toolkit/impl/ComboDocSetRender.java

@@ -1,16 +1,12 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
 import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
 
-import org.luatos.toolkit.LuatDocEntry;
-import org.luatos.toolkit.LuatDocSetup;
-import org.luatos.toolkit.api.LuDocSetRender;
-import org.luatos.toolkit.bean.LuDocument;
-import org.luatos.toolkit.bean.LuatDocSet;
-import org.luatos.toolkit.util.ComboLuDocRender;
 import org.nutz.lang.Files;
 import org.nutz.lang.Lang;
 import org.nutz.lang.Streams;
@@ -18,9 +14,17 @@ import org.nutz.lang.Strings;
 import org.nutz.lang.tmpl.Tmpl;
 import org.nutz.lang.util.Disks;
 import org.nutz.lang.util.NutBean;
+import org.nutz.lang.util.NutMap;
 import org.nutz.log.Log;
 import org.nutz.log.Logs;
 
+import com.luatos.toolkit.LuatDocEntry;
+import com.luatos.toolkit.LuatDocSetup;
+import com.luatos.toolkit.api.LuDocSetRender;
+import com.luatos.toolkit.bean.LuDocument;
+import com.luatos.toolkit.bean.LuatDocSet;
+import com.luatos.toolkit.util.ComboLuDocRender;
+
 public class ComboDocSetRender implements LuDocSetRender {
 
     private static final Log log = Logs.get();
@@ -51,51 +55,60 @@ public class ComboDocSetRender implements LuDocSetRender {
         File dirOut = Files.createDirIfNoExists(phOut);
         log.infof(">> %s", phOut);
 
-        // 生成摘要
-        log.infof("build README.md");
-        buildReadMe(ds, dirOut);
-
         // 循环渲染文档
+        List<LuDocument> docList = new ArrayList<>(ds.getDocumentsCount());
         for (LuDocument doc : ds.getDocuments()) {
             String rph = doc.getPath();
             log.infof("  => %s", rph);
-            render.output(doc, dirOut, rph);
+            if (render.output(doc, dirOut, rph, en)) {
+                docList.add(doc);
+            }
         }
+
+        // 生成摘要
+        log.infof("build README.md");
+        buildReadMe(ds, dirOut, docList);
     }
 
-    private void buildReadMe(LuatDocSet ds, File dirOut) throws IOException {
+    private void buildReadMe(LuatDocSet ds, File dirOut, List<LuDocument> docList)
+            throws IOException {
+        // 索引
+        StringBuilder sb = new StringBuilder();
+        wlnf(sb, "模块 | 描述");
+        wlnf(sb, "---|----");
+        for (LuDocument doc : docList) {
+            String rph = doc.getPath();
+            rph = Files.renameSuffix(rph, ".md");
+            wlnf(sb, "[%s](%s) | %s", doc.getDisplayTitle(), rph, doc.getDisplaySummary());
+        }
+
+        // 构建上下文
+        NutMap context = new NutMap();
+        context.put("title", ds.getTitle());
+        context.put("index", sb);
+
+        // 渲染
+        String str = ds.getReadme().render(context);
+
         File fReadme = Files.getFile(dirOut, "README.md");
         fReadme = Files.createFileIfNoExists(fReadme);
         Writer w = Streams.fileOutw(fReadme);
+        BufferedWriter bw = Streams.buffw(w);
         try {
-            BufferedWriter bw = Streams.buffw(w);
-            // 头部
-            wlnf(bw, "---");
-            wlnf(bw, "title: %s", ds.getTitle());
-            wlnf(bw, "---");
-            wlnf(bw, null);
-
-            // 大标题
-            wlnf(bw, "# %s\n", ds.getTitle());
-
-            // 索引
-            for (LuDocument doc : ds.getDocuments()) {
-                String rph = doc.getPath();
-                rph = Files.renameSuffix(rph, ".md");
-                wlnf(bw, "- [%s](%s)", doc.getTitle(), rph);
-            }
-            Streams.safeFlush(bw);
+            bw.write(str);
+
         }
         finally {
+            Streams.safeFlush(bw);
             Streams.safeClose(w);
         }
     }
 
-    private void wlnf(BufferedWriter bw, String fmt, Object... args) throws IOException {
+    private void wlnf(StringBuilder sb, String fmt, Object... args) throws IOException {
         if (!Strings.isBlank(fmt)) {
-            bw.write(String.format(fmt, args));
+            sb.append(String.format(fmt, args));
         }
-        bw.write("\n");
+        sb.append('\n');
     }
 
 }

+ 8 - 7
tools/java/src/main/java/org/luatos/toolkit/impl/DoxyFnSignParser.java → tools/java/src/main/java/com/luatos/toolkit/impl/DoxyFnSignParser.java

@@ -1,20 +1,21 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.luatos.toolkit.api.FnSignParser;
-import org.luatos.toolkit.bean.FnExample;
-import org.luatos.toolkit.bean.FnLang;
-import org.luatos.toolkit.bean.FnParam;
-import org.luatos.toolkit.bean.FnReturn;
-import org.luatos.toolkit.bean.FnSign;
 import org.nutz.lang.Lang;
 import org.nutz.lang.Strings;
 import org.nutz.lang.util.Regex;
 
+import com.luatos.toolkit.api.FnSignParser;
+import com.luatos.toolkit.bean.FnExample;
+import com.luatos.toolkit.bean.FnLang;
+import com.luatos.toolkit.bean.FnParam;
+import com.luatos.toolkit.bean.FnReturn;
+import com.luatos.toolkit.bean.FnSign;
+
 public class DoxyFnSignParser implements FnSignParser {
 
     private static final int IN_SUMMARY = 0;

+ 7 - 4
tools/java/src/main/java/org/luatos/toolkit/impl/JsonLuDocRender.java → tools/java/src/main/java/com/luatos/toolkit/impl/JsonLuDocRender.java

@@ -1,23 +1,26 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.io.BufferedWriter;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 
-import org.luatos.toolkit.api.LuDocRender;
-import org.luatos.toolkit.bean.LuDocument;
 import org.nutz.json.Json;
 import org.nutz.json.JsonFormat;
 import org.nutz.lang.Streams;
 
+import com.luatos.toolkit.LuatRenderingSetup;
+import com.luatos.toolkit.api.LuDocRender;
+import com.luatos.toolkit.bean.LuDocument;
+
 public class JsonLuDocRender implements LuDocRender {
 
     @Override
-    public void render(LuDocument doc, OutputStream ops) {
+    public boolean render(LuDocument doc, OutputStream ops, LuatRenderingSetup setup) {
         BufferedWriter br = Streams.buffw(new OutputStreamWriter(ops));
 
         try {
             Json.toJson(br, doc, JsonFormat.nice());
+            return true;
         }
         finally {
             Streams.safeFlush(br);

+ 4 - 3
tools/java/src/main/java/org/luatos/toolkit/impl/LuHeadParser.java → tools/java/src/main/java/com/luatos/toolkit/impl/LuHeadParser.java

@@ -1,10 +1,11 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
-import org.luatos.toolkit.api.TagParser;
-import org.luatos.toolkit.bean.LuHead;
 import org.nutz.lang.Lang;
 import org.nutz.lang.util.NutMap;
 
+import com.luatos.toolkit.api.TagParser;
+import com.luatos.toolkit.bean.LuHead;
+
 public class LuHeadParser implements TagParser<LuHead> {
 
     private NutMapTagParser parser;

+ 22 - 16
tools/java/src/main/java/org/luatos/toolkit/impl/MarkdownLuDocRender.java → tools/java/src/main/java/com/luatos/toolkit/impl/MarkdownLuDocRender.java

@@ -1,30 +1,33 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.util.List;
 import java.util.Map;
 
-import org.luatos.toolkit.api.LuDocRender;
-import org.luatos.toolkit.bean.FnExample;
-import org.luatos.toolkit.bean.FnParam;
-import org.luatos.toolkit.bean.FnReturn;
-import org.luatos.toolkit.bean.FnSign;
-import org.luatos.toolkit.bean.LuDocument;
 import org.nutz.lang.Lang;
 import org.nutz.lang.Streams;
 import org.nutz.lang.Strings;
 import org.nutz.lang.util.NutMap;
 
+import com.luatos.toolkit.LuatRenderingSetup;
+import com.luatos.toolkit.api.LuDocRender;
+import com.luatos.toolkit.bean.FnExample;
+import com.luatos.toolkit.bean.FnParam;
+import com.luatos.toolkit.bean.FnReturn;
+import com.luatos.toolkit.bean.FnSign;
+import com.luatos.toolkit.bean.LuDocument;
+
 public class MarkdownLuDocRender implements LuDocRender {
 
     @Override
-    public void render(LuDocument doc, OutputStream ops) {
+    public boolean render(LuDocument doc, OutputStream ops, LuatRenderingSetup setup) {
         BufferedWriter br = Streams.buffw(new OutputStreamWriter(ops));
 
         try {
-            safeWrite(doc, br);
+            return safeWrite(doc, br, setup);
         }
         catch (IOException e) {
             throw Lang.wrapThrow(e);
@@ -48,7 +51,8 @@ public class MarkdownLuDocRender implements LuDocRender {
 
     private static final String HR = Strings.dup('-', 50);
 
-    private void safeWrite(LuDocument doc, BufferedWriter br) throws IOException {
+    private boolean safeWrite(LuDocument doc, BufferedWriter br, LuatRenderingSetup setup)
+            throws IOException {
         // 书写头部
         if (doc.hasHead()) {
             NutMap map = doc.getHead().toMap();
@@ -56,15 +60,16 @@ public class MarkdownLuDocRender implements LuDocRender {
             for (Map.Entry<String, Object> en : map.entrySet()) {
                 wlnf(br, "%s: %s", en.getKey(), en.getValue());
             }
-            wlnf(br, "---");
+            wlnf(br, "---\n");
         }
 
         // 木有内容哦 ...
-        if (!doc.hasFunctions())
-            return;
+        List<FnSign> funcs = doc.fetchFunctions(setup);
+        if (funcs.isEmpty())
+            return false;
 
         // 每个函数一节
-        for (FnSign fn : doc.getFunctions()) {
+        for (FnSign fn : funcs) {
             // 输出标题
             wlnf(br, HR);
             wlnf(br, "# %s\n", fn.getName());
@@ -86,7 +91,7 @@ public class MarkdownLuDocRender implements LuDocRender {
                 wlnf(br, "-----|------|--------------");
                 for (FnParam fp : fn.getParams()) {
                     String brief = tidyBrief(fp.getComment());
-                    wlnf(br, "**%s**|`%s`| %s", fp.getName(), fp.getType(), brief);
+                    wlnf(br, "`%s`|`%s`| %s", fp.getName(), fp.getType(), brief);
                 }
             } else {
                 wlnf(br, "> 无参数");
@@ -119,7 +124,7 @@ public class MarkdownLuDocRender implements LuDocRender {
 
             // 标题二(参考函数)
             if (fn.hasRefer()) {
-                wlnf(br, "## C API");
+                wlnf(br, "\n## C API");
                 wlnf(br, "\n```c");
                 wlnf(br, fn.getRefer().toSignature());
                 wlnf(br, "```");
@@ -129,6 +134,7 @@ public class MarkdownLuDocRender implements LuDocRender {
             wlnf(br, "\n");
         }
 
+        return true;
     }
 
     private String tidyBrief(String brief) {

+ 3 - 2
tools/java/src/main/java/org/luatos/toolkit/impl/NutMapTagParser.java → tools/java/src/main/java/com/luatos/toolkit/impl/NutMapTagParser.java

@@ -1,15 +1,16 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import java.util.LinkedList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.luatos.toolkit.api.TagParser;
 import org.nutz.lang.Strings;
 import org.nutz.lang.util.NutMap;
 import org.nutz.lang.util.Regex;
 
+import com.luatos.toolkit.api.TagParser;
+
 /**
  * 逐行处理输入的标签,类似下面的输入结构
  * 

+ 23 - 9
tools/java/src/main/java/org/luatos/toolkit/util/ComboLuDocRender.java → tools/java/src/main/java/com/luatos/toolkit/util/ComboLuDocRender.java

@@ -1,20 +1,22 @@
-package org.luatos.toolkit.util;
+package com.luatos.toolkit.util;
 
 import java.io.File;
 import java.io.OutputStream;
 import java.util.HashMap;
 import java.util.Map;
 
-import org.luatos.toolkit.api.LuDocRender;
-import org.luatos.toolkit.bean.LuDocument;
-import org.luatos.toolkit.impl.JsonLuDocRender;
-import org.luatos.toolkit.impl.MarkdownLuDocRender;
 import org.nutz.lang.Files;
 import org.nutz.lang.Lang;
 import org.nutz.lang.Streams;
 import org.nutz.log.Log;
 import org.nutz.log.Logs;
 
+import com.luatos.toolkit.LuatRenderingSetup;
+import com.luatos.toolkit.api.LuDocRender;
+import com.luatos.toolkit.bean.LuDocument;
+import com.luatos.toolkit.impl.JsonLuDocRender;
+import com.luatos.toolkit.impl.MarkdownLuDocRender;
+
 public class ComboLuDocRender {
 
     private static final Log log = Logs.get();
@@ -48,8 +50,10 @@ public class ComboLuDocRender {
      *            目标目录
      * @param rph
      *            相对目标目录的路径(后缀会自动被对应类型替换的)
+     * @return true 渲染成功;false 没必要渲染的文档
      */
-    public void output(LuDocument doc, File taDir, String rph) {
+    public boolean output(LuDocument doc, File taDir, String rph, LuatRenderingSetup setup) {
+        boolean re = false;
         for (int i = 0; i < ass.length; i++) {
             String as = ass[i];
             LuDocRender red = reds[i];
@@ -63,16 +67,26 @@ public class ComboLuDocRender {
 
             // 打开
             OutputStream ops = Streams.fileOut(f);
+            boolean writeOk;
             try {
-                red.render(doc, ops);
+                writeOk = red.render(doc, ops, setup);
             }
             finally {
                 Streams.safeClose(ops);
             }
 
-            // 写日志
-            log.infof("    - OK: %6s : %s", as, ph);
+            // 写日志: 成功
+            if (writeOk) {
+                log.infof("    - OK: %6s : %s", as, ph);
+                re = true;
+            }
+            // 写日志: 空文档
+            else {
+                Files.deleteFile(f);
+                log.infof("    - KO: %6s : %s <blank>", as, ph);
+            }
         }
+        return re;
     }
 
 }

+ 0 - 9
tools/java/src/main/java/org/luatos/toolkit/api/FnSignParser.java

@@ -1,9 +0,0 @@
-package org.luatos.toolkit.api;
-
-import org.luatos.toolkit.bean.FnSign;
-
-public interface FnSignParser {
-
-    FnSign parse(String block);
-
-}

+ 0 - 9
tools/java/src/main/java/org/luatos/toolkit/api/LuDocParser.java

@@ -1,9 +0,0 @@
-package org.luatos.toolkit.api;
-
-import org.luatos.toolkit.bean.LuDocument;
-
-public interface LuDocParser {
-
-    LuDocument parse(String input);
-
-}

+ 0 - 11
tools/java/src/main/java/org/luatos/toolkit/api/LuDocRender.java

@@ -1,11 +0,0 @@
-package org.luatos.toolkit.api;
-
-import java.io.OutputStream;
-
-import org.luatos.toolkit.bean.LuDocument;
-
-public interface LuDocRender {
-
-    void render(LuDocument doc, OutputStream ops);
-
-}

+ 7 - 0
tools/java/src/main/resources/dft_readme.md

@@ -0,0 +1,7 @@
+---
+title: ${title}
+---
+
+# ${title}
+
+${index} 

+ 9 - 3
tools/java/src/main/resources/doc-gen.json

@@ -5,19 +5,25 @@
     "title": "LuaAPI模块",
     "path": "luat/modules",
     "suffix": [".c"],
-    "out": "${name}",
+    "lang" : ["LUA"],
+    "dropEmptyComment": true,
+    "out": "lua",
     "deep": true
   }, {
     "title": "FreeRTOS集成",
     "path": "luat/freertos",
     "suffix": [".c"],
-    "out": "${name}",
+    "lang" : ["C"],
+    "dropEmptyComment": true,
+    "out": "c_api/${name}",
     "deep": true
   }, {
     "title": "RT-Thread集成",
     "path": "luat/rtt",
     "suffix": [".c"],
-    "out": "${name}",
+    "lang" : ["C"],
+    "dropEmptyComment": true,
+    "out": "c_api/${name}",
     "deep": true
   }],
   "output": "${workdir}/docs/api/"

+ 1 - 1
tools/java/src/main/resources/log4j.properties

@@ -1,7 +1,7 @@
 log4j.rootLogger=error, A
 log4j.logger.org.eclipse=error
 log4j.logger.org.nutz=error
-log4j.logger.org.luatos=info
+log4j.logger.com.luatos=info
 
 #-------------------------------------------------------
 # Output to stdout

+ 4 - 3
tools/java/src/test/java/org/luatos/toolkit/AllLuTookietTest.java → tools/java/src/test/java/com/luatos/toolkit/AllLuTookietTest.java

@@ -1,9 +1,10 @@
-package org.luatos.toolkit;
+package com.luatos.toolkit;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
-import org.luatos.toolkit.bean.LuAllBeanTest;
-import org.luatos.toolkit.impl.LuAllParserTest;
+
+import com.luatos.toolkit.bean.LuAllBeanTest;
+import com.luatos.toolkit.impl.LuAllParserTest;
 
 @RunWith(Suite.class)
 @Suite.SuiteClasses({LuAllBeanTest.class, LuAllParserTest.class})

+ 6 - 4
tools/java/src/test/java/org/luatos/toolkit/bean/FnSignTest.java → tools/java/src/test/java/com/luatos/toolkit/bean/FnSignTest.java

@@ -1,14 +1,16 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.luatos.toolkit.api.FnSignParser;
-import org.luatos.toolkit.impl.CFnSignParser;
-import org.luatos.toolkit.impl.DoxyFnSignParser;
 import org.nutz.json.Json;
 import org.nutz.lang.Files;
 
+import com.luatos.toolkit.api.FnSignParser;
+import com.luatos.toolkit.bean.FnSign;
+import com.luatos.toolkit.impl.CFnSignParser;
+import com.luatos.toolkit.impl.DoxyFnSignParser;
+
 public class FnSignTest {
 
     @Test

+ 1 - 1
tools/java/src/test/java/org/luatos/toolkit/bean/LuAllBeanTest.java → tools/java/src/test/java/com/luatos/toolkit/bean/LuAllBeanTest.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;

+ 3 - 1
tools/java/src/test/java/org/luatos/toolkit/bean/LuCommentTest.java → tools/java/src/test/java/com/luatos/toolkit/bean/LuCommentTest.java

@@ -1,10 +1,12 @@
-package org.luatos.toolkit.bean;
+package com.luatos.toolkit.bean;
 
 import static org.junit.Assert.*;
 
 import org.junit.Test;
 import org.nutz.lang.Files;
 
+import com.luatos.toolkit.bean.LuComment;
+
 public class LuCommentTest {
 
     @Test

+ 5 - 3
tools/java/src/test/java/org/luatos/toolkit/impl/CLuDocParserTest.java → tools/java/src/test/java/com/luatos/toolkit/impl/CLuDocParserTest.java

@@ -1,13 +1,15 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.luatos.toolkit.api.LuDocParser;
-import org.luatos.toolkit.bean.LuDocument;
 import org.nutz.json.Json;
 import org.nutz.lang.Files;
 
+import com.luatos.toolkit.api.LuDocParser;
+import com.luatos.toolkit.bean.LuDocument;
+import com.luatos.toolkit.impl.CLuDocParser;
+
 public class CLuDocParserTest {
 
     @Test

+ 1 - 1
tools/java/src/test/java/org/luatos/toolkit/impl/LuAllParserTest.java → tools/java/src/test/java/com/luatos/toolkit/impl/LuAllParserTest.java

@@ -1,4 +1,4 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;

+ 5 - 2
tools/java/src/test/java/org/luatos/toolkit/impl/TagParserTest.java → tools/java/src/test/java/com/luatos/toolkit/impl/TagParserTest.java

@@ -1,14 +1,17 @@
-package org.luatos.toolkit.impl;
+package com.luatos.toolkit.impl;
 
 import static org.junit.Assert.*;
 
 import org.junit.Test;
-import org.luatos.toolkit.bean.LuHead;
 import org.nutz.json.Json;
 import org.nutz.lang.Files;
 import org.nutz.lang.Lang;
 import org.nutz.lang.util.NutMap;
 
+import com.luatos.toolkit.bean.LuHead;
+import com.luatos.toolkit.impl.LuHeadParser;
+import com.luatos.toolkit.impl.NutMapTagParser;
+
 public class TagParserTest {
 
     @Test