From a46f47c031be7bbfdb029537a68f58a2c81270b6 Mon Sep 17 00:00:00 2001 From: graduateDesign Date: Sat, 11 Sep 2021 09:06:03 +0800 Subject: [PATCH] uart for g0 is ok, std device for uart is ok --- demo/stm32g070cbt6/pikascript/main.py | 42 +--- .../pikascript/pikascript-api/PikaMain-api.c | 11 +- .../pikascript-api/compiler-info.txt | 2 +- .../pikascript/pikascript-api/pikaScript.c | 32 +--- .../pikascript-lib/STM32/STM32_UART.c | 157 +++++++-------- src/package/pikascript/PikaStdDevice.py | 32 ++++ .../PikaStdDevice/PikaStdDeivce_GPIO.c | 95 +++++---- .../PikaStdDevice/PikaStdDevice_ADC.c | 34 ++-- .../PikaStdDevice/PikaStdDevice_Time.c | 16 +- .../PikaStdDevice/PikaStdDevice_UART.c | 40 ++++ .../PikaStdLib/PikaStdLib_MemChecker.c | 17 +- .../PikaStdLib/PikaStdLib_SysObj.c | 180 ++++++++---------- 12 files changed, 331 insertions(+), 327 deletions(-) create mode 100644 src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c diff --git a/demo/stm32g070cbt6/pikascript/main.py b/demo/stm32g070cbt6/pikascript/main.py index 17b9444d4..20284dc94 100644 --- a/demo/stm32g070cbt6/pikascript/main.py +++ b/demo/stm32g070cbt6/pikascript/main.py @@ -1,40 +1,14 @@ -import PikaStdLib import STM32 -mem = PikaStdLib.MemChecker() time = STM32.Time() - -io1 = STM32.GPIO() -io1.init() -io1.setPin('PB4') -io1.setMode('out') -io1.enable() -io1.low() - -adc1 = STM32.ADC() -adc1.init() -adc1.setPin('PA1') -adc1.enable() - -uart1 = STM32.UART() -uart1.init() -uart1.setBaudRate(115200) -uart1.setId(2) -uart1.enable() - -print('hello pikascript') -print('mem.max :') -mem.max() -print('mem.now :') -mem.now() +uart = STM32.UART() +uart.init() +uart.setBaudRate(115200) +uart.setId(1) +uart.enable() while True: - io1.low() time.sleep_ms(500) - io1.high() - time.sleep_ms(500) - val = adc1.read() - print('adc1 value:') - print(val) - print('mem.max :') - mem.max() + readBuff = uart.read(2); + print('read 2 char:') + print(readBuff) diff --git a/demo/stm32g070cbt6/pikascript/pikascript-api/PikaMain-api.c b/demo/stm32g070cbt6/pikascript/pikascript-api/PikaMain-api.c index 3c517ef27..8777a4f35 100644 --- a/demo/stm32g070cbt6/pikascript/pikascript-api/PikaMain-api.c +++ b/demo/stm32g070cbt6/pikascript/pikascript-api/PikaMain-api.c @@ -3,9 +3,6 @@ /* ******************************** */ #include "PikaMain.h" #include "PikaStdLib_SysObj.h" -#include "STM32_ADC.h" -#include "STM32_GPIO.h" -#include "PikaStdLib_MemChecker.h" #include "STM32_Time.h" #include "STM32_UART.h" #include @@ -14,15 +11,9 @@ PikaObj *New_PikaMain(Args *args){ PikaObj *self = New_PikaStdLib_SysObj(args); - obj_import(self, "STM32_ADC", New_STM32_ADC); - obj_newObj(self, "adc1", "STM32_ADC"); - obj_import(self, "STM32_GPIO", New_STM32_GPIO); - obj_newObj(self, "io1", "STM32_GPIO"); - obj_import(self, "PikaStdLib_MemChecker", New_PikaStdLib_MemChecker); - obj_newObj(self, "mem", "PikaStdLib_MemChecker"); obj_import(self, "STM32_Time", New_STM32_Time); obj_newObj(self, "time", "STM32_Time"); obj_import(self, "STM32_UART", New_STM32_UART); - obj_newObj(self, "uart1", "STM32_UART"); + obj_newObj(self, "uart", "STM32_UART"); return self; } diff --git a/demo/stm32g070cbt6/pikascript/pikascript-api/compiler-info.txt b/demo/stm32g070cbt6/pikascript/pikascript-api/compiler-info.txt index 997755b84..b4e430b9e 100644 --- a/demo/stm32g070cbt6/pikascript/pikascript-api/compiler-info.txt +++ b/demo/stm32g070cbt6/pikascript/pikascript-api/compiler-info.txt @@ -1 +1 @@ -Compiler { dist_path: "pikascript-api/", source_path: "", class_list: {"PikaMain": ClassInfo { this_class_name: "PikaMain", super_class_name: "PikaStdLib_SysObj", method_list: {}, object_list: {"adc1": ObjectInfo { class_name: "PikaMain", name: "adc1", import_class_name: "STM32_ADC" }, "io1": ObjectInfo { class_name: "PikaMain", name: "io1", import_class_name: "STM32_GPIO" }, "mem": ObjectInfo { class_name: "PikaMain", name: "mem", import_class_name: "PikaStdLib_MemChecker" }, "time": ObjectInfo { class_name: "PikaMain", name: "time", import_class_name: "STM32_Time" }, "uart1": ObjectInfo { class_name: "PikaMain", name: "uart1", import_class_name: "STM32_UART" }}, import_list: {}, script_list: Script { content: " obj_run(pikaMain, \"io1.init()\");\r\n obj_run(pikaMain, \"io1.setPin('PB4')\");\r\n obj_run(pikaMain, \"io1.setMode('out')\");\r\n obj_run(pikaMain, \"io1.enable()\");\r\n obj_run(pikaMain, \"io1.low()\");\r\n obj_run(pikaMain, \"adc1.init()\");\r\n obj_run(pikaMain, \"adc1.setPin('PA1')\");\r\n obj_run(pikaMain, \"adc1.enable()\");\r\n obj_run(pikaMain, \"uart1.init()\");\r\n obj_run(pikaMain, \"uart1.setBaudRate(115200)\");\r\n obj_run(pikaMain, \"uart1.setId(1)\");\r\n obj_run(pikaMain, \"uart1.enable()\");\r\n obj_run(pikaMain, \"print('hello pikascript')\");\r\n obj_run(pikaMain, \"print('mem.max :')\");\r\n obj_run(pikaMain, \"mem.max()\");\r\n obj_run(pikaMain, \"print('mem.now :')\");\r\n obj_run(pikaMain, \"mem.now()\");\r\n obj_run(pikaMain, \"while True:\");\r\n obj_run(pikaMain, \" io1.low()\");\r\n obj_run(pikaMain, \" time.sleep_ms(500)\");\r\n obj_run(pikaMain, \" io1.high()\");\r\n obj_run(pikaMain, \" time.sleep_ms(500)\");\r\n obj_run(pikaMain, \" val = adc1.read()\");\r\n obj_run(pikaMain, \" print('adc1 value:')\");\r\n obj_run(pikaMain, \" print(val)\");\r\n obj_run(pikaMain, \" print('mem.max :')\");\r\n obj_run(pikaMain, \" mem.max()\");\r\n" } }, "PikaStdDevice_ADC": ClassInfo { this_class_name: "PikaStdDevice_ADC", super_class_name: "TinyObj", method_list: {"enable": MethodInfo { class_name: "PikaStdDevice_ADC", name: "enable", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDevice_ADC", name: "init", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDevice_ADC", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "PikaStdDevice_ADC", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: Some(PyType { type_name: "float" }) }, "read": MethodInfo { class_name: "PikaStdDevice_ADC", name: "read", arg_list: None, return_type: Some(PyType { type_name: "float" }) }, "setPin": MethodInfo { class_name: "PikaStdDevice_ADC", name: "setPin", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdDevice_GPIO": ClassInfo { this_class_name: "PikaStdDevice_GPIO", super_class_name: "TinyObj", method_list: {"disable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "disable", arg_list: None, return_type: None }, "enable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "enable", arg_list: None, return_type: None }, "getMode": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "getMode", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "getPin": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "getPin", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "high": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "high", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "init", arg_list: None, return_type: None }, "low": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "low", arg_list: None, return_type: None }, "platformDisable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setMode": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "setMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setPin": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "setPin", arg_list: Some(ArgList { py_arg_list: "pinName:str", list: {"pinName": PyArg { py_type: PyType { type_name: "str" }, name: "pinName" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdDevice_Time": ClassInfo { this_class_name: "PikaStdDevice_Time", super_class_name: "TinyObj", method_list: {"sleep_ms": MethodInfo { class_name: "PikaStdDevice_Time", name: "sleep_ms", arg_list: Some(ArgList { py_arg_list: "ms:int", list: {"ms": PyArg { py_type: PyType { type_name: "int" }, name: "ms" }} }), return_type: None }, "sleep_s": MethodInfo { class_name: "PikaStdDevice_Time", name: "sleep_s", arg_list: Some(ArgList { py_arg_list: "s:int", list: {"s": PyArg { py_type: PyType { type_name: "int" }, name: "s" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdDevice_UART": ClassInfo { this_class_name: "PikaStdDevice_UART", super_class_name: "TinyObj", method_list: {"enable": MethodInfo { class_name: "PikaStdDevice_UART", name: "enable", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDevice_UART", name: "init", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDevice_UART", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "id:int,baudRate:int", list: {"baudRate": PyArg { py_type: PyType { type_name: "int" }, name: "baudRate" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "PikaStdDevice_UART", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "id:int,length:int", list: {"id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }, "length": PyArg { py_type: PyType { type_name: "int" }, name: "length" }} }), return_type: Some(PyType { type_name: "str" }) }, "platformWrite": MethodInfo { class_name: "PikaStdDevice_UART", name: "platformWrite", arg_list: Some(ArgList { py_arg_list: "id:int,data:str", list: {"data": PyArg { py_type: PyType { type_name: "str" }, name: "data" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "read": MethodInfo { class_name: "PikaStdDevice_UART", name: "read", arg_list: Some(ArgList { py_arg_list: "length:int", list: {"length": PyArg { py_type: PyType { type_name: "int" }, name: "length" }} }), return_type: Some(PyType { type_name: "str" }) }, "setBaudRate": MethodInfo { class_name: "PikaStdDevice_UART", name: "setBaudRate", arg_list: Some(ArgList { py_arg_list: "baudRate:int", list: {"baudRate": PyArg { py_type: PyType { type_name: "int" }, name: "baudRate" }} }), return_type: None }, "setId": MethodInfo { class_name: "PikaStdDevice_UART", name: "setId", arg_list: Some(ArgList { py_arg_list: "id:int", list: {"id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "write": MethodInfo { class_name: "PikaStdDevice_UART", name: "write", arg_list: Some(ArgList { py_arg_list: "data:str", list: {"data": PyArg { py_type: PyType { type_name: "str" }, name: "data" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdLib_MemChecker": ClassInfo { this_class_name: "PikaStdLib_MemChecker", super_class_name: "BaseObj", method_list: {"max": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "max", arg_list: None, return_type: None }, "now": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "now", arg_list: None, return_type: None }, "resetMax": MethodInfo { class_name: "PikaStdLib_MemChecker", name: "resetMax", arg_list: None, return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdLib_SysObj": ClassInfo { this_class_name: "PikaStdLib_SysObj", super_class_name: "BaseObj", method_list: {"ls": MethodInfo { class_name: "PikaStdLib_SysObj", name: "ls", arg_list: Some(ArgList { py_arg_list: "objPath:str", list: {"objPath": PyArg { py_type: PyType { type_name: "str" }, name: "objPath" }} }), return_type: None }, "new": MethodInfo { class_name: "PikaStdLib_SysObj", name: "new", arg_list: Some(ArgList { py_arg_list: "objPath:str,classPath:str", list: {"classPath": PyArg { py_type: PyType { type_name: "str" }, name: "classPath" }, "objPath": PyArg { py_type: PyType { type_name: "str" }, name: "objPath" }} }), return_type: None }, "remove": MethodInfo { class_name: "PikaStdLib_SysObj", name: "remove", arg_list: Some(ArgList { py_arg_list: "argPath:str", list: {"argPath": PyArg { py_type: PyType { type_name: "str" }, name: "argPath" }} }), return_type: None }, "type": MethodInfo { class_name: "PikaStdLib_SysObj", name: "type", arg_list: Some(ArgList { py_arg_list: "argPath:str", list: {"argPath": PyArg { py_type: PyType { type_name: "str" }, name: "argPath" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_ADC": ClassInfo { this_class_name: "STM32_ADC", super_class_name: "PikaStdDevice_ADC", method_list: {"platformEnable": MethodInfo { class_name: "STM32_ADC", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "STM32_ADC", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: Some(PyType { type_name: "float" }) }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_GPIO": ClassInfo { this_class_name: "STM32_GPIO", super_class_name: "PikaStdDevice_GPIO", method_list: {"platformDisable": MethodInfo { class_name: "STM32_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "STM32_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "STM32_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "STM32_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "STM32_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_Time": ClassInfo { this_class_name: "STM32_Time", super_class_name: "PikaStdDevice_Time", method_list: {"sleep_ms": MethodInfo { class_name: "STM32_Time", name: "sleep_ms", arg_list: Some(ArgList { py_arg_list: "ms:int", list: {"ms": PyArg { py_type: PyType { type_name: "int" }, name: "ms" }} }), return_type: None }, "sleep_s": MethodInfo { class_name: "STM32_Time", name: "sleep_s", arg_list: Some(ArgList { py_arg_list: "s:int", list: {"s": PyArg { py_type: PyType { type_name: "int" }, name: "s" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_UART": ClassInfo { this_class_name: "STM32_UART", super_class_name: "PikaStdDevice_UART", method_list: {"platformEnable": MethodInfo { class_name: "STM32_UART", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "id:int,baudRate:int", list: {"baudRate": PyArg { py_type: PyType { type_name: "int" }, name: "baudRate" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "STM32_UART", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "id:int,length:int", list: {"id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }, "length": PyArg { py_type: PyType { type_name: "int" }, name: "length" }} }), return_type: Some(PyType { type_name: "str" }) }, "platformWrite": MethodInfo { class_name: "STM32_UART", name: "platformWrite", arg_list: Some(ArgList { py_arg_list: "id:int,data:str", list: {"data": PyArg { py_type: PyType { type_name: "str" }, name: "data" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }}, class_now_name: Some("PikaMain") } \ No newline at end of file +Compiler { dist_path: "pikascript-api/", source_path: "", class_list: {"PikaMain": ClassInfo { this_class_name: "PikaMain", super_class_name: "PikaStdLib_SysObj", method_list: {}, object_list: {"time": ObjectInfo { class_name: "PikaMain", name: "time", import_class_name: "STM32_Time" }, "uart": ObjectInfo { class_name: "PikaMain", name: "uart", import_class_name: "STM32_UART" }}, import_list: {}, script_list: Script { content: " obj_run(pikaMain, \"uart.init()\");\r\n obj_run(pikaMain, \"uart.setBaudRate(115200)\");\r\n obj_run(pikaMain, \"uart.setId(1)\");\r\n obj_run(pikaMain, \"uart.enable()\");\r\n obj_run(pikaMain, \"while True:\");\r\n obj_run(pikaMain, \" time.sleep_ms(500)\");\r\n obj_run(pikaMain, \" readBuff = uart.read(2);\");\r\n obj_run(pikaMain, \" print('read 2 char:')\");\r\n obj_run(pikaMain, \" print(readBuff)\");\r\n" } }, "PikaStdDevice_ADC": ClassInfo { this_class_name: "PikaStdDevice_ADC", super_class_name: "TinyObj", method_list: {"enable": MethodInfo { class_name: "PikaStdDevice_ADC", name: "enable", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDevice_ADC", name: "init", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDevice_ADC", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "PikaStdDevice_ADC", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: Some(PyType { type_name: "float" }) }, "read": MethodInfo { class_name: "PikaStdDevice_ADC", name: "read", arg_list: None, return_type: Some(PyType { type_name: "float" }) }, "setPin": MethodInfo { class_name: "PikaStdDevice_ADC", name: "setPin", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdDevice_GPIO": ClassInfo { this_class_name: "PikaStdDevice_GPIO", super_class_name: "TinyObj", method_list: {"disable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "disable", arg_list: None, return_type: None }, "enable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "enable", arg_list: None, return_type: None }, "getMode": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "getMode", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "getPin": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "getPin", arg_list: None, return_type: Some(PyType { type_name: "str" }) }, "high": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "high", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "init", arg_list: None, return_type: None }, "low": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "low", arg_list: None, return_type: None }, "platformDisable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setMode": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "setMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }, "setPin": MethodInfo { class_name: "PikaStdDevice_GPIO", name: "setPin", arg_list: Some(ArgList { py_arg_list: "pinName:str", list: {"pinName": PyArg { py_type: PyType { type_name: "str" }, name: "pinName" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdDevice_Time": ClassInfo { this_class_name: "PikaStdDevice_Time", super_class_name: "TinyObj", method_list: {"sleep_ms": MethodInfo { class_name: "PikaStdDevice_Time", name: "sleep_ms", arg_list: Some(ArgList { py_arg_list: "ms:int", list: {"ms": PyArg { py_type: PyType { type_name: "int" }, name: "ms" }} }), return_type: None }, "sleep_s": MethodInfo { class_name: "PikaStdDevice_Time", name: "sleep_s", arg_list: Some(ArgList { py_arg_list: "s:int", list: {"s": PyArg { py_type: PyType { type_name: "int" }, name: "s" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "PikaStdDevice_UART": ClassInfo { this_class_name: "PikaStdDevice_UART", super_class_name: "TinyObj", method_list: {"enable": MethodInfo { class_name: "PikaStdDevice_UART", name: "enable", arg_list: None, return_type: None }, "init": MethodInfo { class_name: "PikaStdDevice_UART", name: "init", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "PikaStdDevice_UART", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "id:int,baudRate:int", list: {"baudRate": PyArg { py_type: PyType { type_name: "int" }, name: "baudRate" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "PikaStdDevice_UART", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "id:int,length:int", list: {"id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }, "length": PyArg { py_type: PyType { type_name: "int" }, name: "length" }} }), return_type: Some(PyType { type_name: "str" }) }, "platformWrite": MethodInfo { class_name: "PikaStdDevice_UART", name: "platformWrite", arg_list: Some(ArgList { py_arg_list: "id:int,data:str", list: {"data": PyArg { py_type: PyType { type_name: "str" }, name: "data" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "read": MethodInfo { class_name: "PikaStdDevice_UART", name: "read", arg_list: Some(ArgList { py_arg_list: "length:int", list: {"length": PyArg { py_type: PyType { type_name: "int" }, name: "length" }} }), return_type: Some(PyType { type_name: "str" }) }, "setBaudRate": MethodInfo { class_name: "PikaStdDevice_UART", name: "setBaudRate", arg_list: Some(ArgList { py_arg_list: "baudRate:int", list: {"baudRate": PyArg { py_type: PyType { type_name: "int" }, name: "baudRate" }} }), return_type: None }, "setId": MethodInfo { class_name: "PikaStdDevice_UART", name: "setId", arg_list: Some(ArgList { py_arg_list: "id:int", list: {"id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "write": MethodInfo { class_name: "PikaStdDevice_UART", name: "write", arg_list: Some(ArgList { py_arg_list: "data:str", list: {"data": PyArg { py_type: PyType { type_name: "str" }, name: "data" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_ADC": ClassInfo { this_class_name: "STM32_ADC", super_class_name: "PikaStdDevice_ADC", method_list: {"platformEnable": MethodInfo { class_name: "STM32_ADC", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "STM32_ADC", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "pin:str", list: {"pin": PyArg { py_type: PyType { type_name: "str" }, name: "pin" }} }), return_type: Some(PyType { type_name: "float" }) }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_GPIO": ClassInfo { this_class_name: "STM32_GPIO", super_class_name: "PikaStdDevice_GPIO", method_list: {"platformDisable": MethodInfo { class_name: "STM32_GPIO", name: "platformDisable", arg_list: None, return_type: None }, "platformEnable": MethodInfo { class_name: "STM32_GPIO", name: "platformEnable", arg_list: None, return_type: None }, "platformHigh": MethodInfo { class_name: "STM32_GPIO", name: "platformHigh", arg_list: None, return_type: None }, "platformLow": MethodInfo { class_name: "STM32_GPIO", name: "platformLow", arg_list: None, return_type: None }, "platformSetMode": MethodInfo { class_name: "STM32_GPIO", name: "platformSetMode", arg_list: Some(ArgList { py_arg_list: "mode:str", list: {"mode": PyArg { py_type: PyType { type_name: "str" }, name: "mode" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_Time": ClassInfo { this_class_name: "STM32_Time", super_class_name: "PikaStdDevice_Time", method_list: {"sleep_ms": MethodInfo { class_name: "STM32_Time", name: "sleep_ms", arg_list: Some(ArgList { py_arg_list: "ms:int", list: {"ms": PyArg { py_type: PyType { type_name: "int" }, name: "ms" }} }), return_type: None }, "sleep_s": MethodInfo { class_name: "STM32_Time", name: "sleep_s", arg_list: Some(ArgList { py_arg_list: "s:int", list: {"s": PyArg { py_type: PyType { type_name: "int" }, name: "s" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }, "STM32_UART": ClassInfo { this_class_name: "STM32_UART", super_class_name: "PikaStdDevice_UART", method_list: {"platformEnable": MethodInfo { class_name: "STM32_UART", name: "platformEnable", arg_list: Some(ArgList { py_arg_list: "id:int,baudRate:int", list: {"baudRate": PyArg { py_type: PyType { type_name: "int" }, name: "baudRate" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }, "platformRead": MethodInfo { class_name: "STM32_UART", name: "platformRead", arg_list: Some(ArgList { py_arg_list: "id:int,length:int", list: {"id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }, "length": PyArg { py_type: PyType { type_name: "int" }, name: "length" }} }), return_type: Some(PyType { type_name: "str" }) }, "platformWrite": MethodInfo { class_name: "STM32_UART", name: "platformWrite", arg_list: Some(ArgList { py_arg_list: "id:int,data:str", list: {"data": PyArg { py_type: PyType { type_name: "str" }, name: "data" }, "id": PyArg { py_type: PyType { type_name: "int" }, name: "id" }} }), return_type: None }}, object_list: {}, import_list: {}, script_list: Script { content: "" } }}, class_now_name: Some("PikaMain") } \ No newline at end of file diff --git a/demo/stm32g070cbt6/pikascript/pikascript-api/pikaScript.c b/demo/stm32g070cbt6/pikascript/pikascript-api/pikaScript.c index 2acac1ccf..1900374c6 100644 --- a/demo/stm32g070cbt6/pikascript/pikascript-api/pikaScript.c +++ b/demo/stm32g070cbt6/pikascript/pikascript-api/pikaScript.c @@ -7,33 +7,15 @@ PikaObj * pikaScriptInit(){ PikaObj * pikaMain = newRootObj("pikaMain", New_PikaMain); - obj_run(pikaMain, "io1.init()"); - obj_run(pikaMain, "io1.setPin('PB4')"); - obj_run(pikaMain, "io1.setMode('out')"); - obj_run(pikaMain, "io1.enable()"); - obj_run(pikaMain, "io1.low()"); - obj_run(pikaMain, "adc1.init()"); - obj_run(pikaMain, "adc1.setPin('PA1')"); - obj_run(pikaMain, "adc1.enable()"); - obj_run(pikaMain, "uart1.init()"); - obj_run(pikaMain, "uart1.setBaudRate(115200)"); - obj_run(pikaMain, "uart1.setId(1)"); - obj_run(pikaMain, "uart1.enable()"); - obj_run(pikaMain, "print('hello pikascript')"); - obj_run(pikaMain, "print('mem.max :')"); - obj_run(pikaMain, "mem.max()"); - obj_run(pikaMain, "print('mem.now :')"); - obj_run(pikaMain, "mem.now()"); + obj_run(pikaMain, "uart.init()"); + obj_run(pikaMain, "uart.setBaudRate(115200)"); + obj_run(pikaMain, "uart.setId(1)"); + obj_run(pikaMain, "uart.enable()"); obj_run(pikaMain, "while True:"); - obj_run(pikaMain, " io1.low()"); obj_run(pikaMain, " time.sleep_ms(500)"); - obj_run(pikaMain, " io1.high()"); - obj_run(pikaMain, " time.sleep_ms(500)"); - obj_run(pikaMain, " val = adc1.read()"); - obj_run(pikaMain, " print('adc1 value:')"); - obj_run(pikaMain, " print(val)"); - obj_run(pikaMain, " print('mem.max :')"); - obj_run(pikaMain, " mem.max()"); + obj_run(pikaMain, " readBuff = uart.read(2);"); + obj_run(pikaMain, " print('read 2 char:')"); + obj_run(pikaMain, " print(readBuff)"); obj_run(pikaMain, ""); return pikaMain; } diff --git a/demo/stm32g070cbt6/pikascript/pikascript-lib/STM32/STM32_UART.c b/demo/stm32g070cbt6/pikascript/pikascript-lib/STM32/STM32_UART.c index 1142f2873..7a886f5c1 100644 --- a/demo/stm32g070cbt6/pikascript/pikascript-lib/STM32/STM32_UART.c +++ b/demo/stm32g070cbt6/pikascript/pikascript-lib/STM32/STM32_UART.c @@ -4,52 +4,51 @@ #include "dataStrs.h" #include -UART_HandleTypeDef pika_huart1; -UART_HandleTypeDef pika_huart2; -UART_HandleTypeDef pika_huart3; -UART_HandleTypeDef pika_huart4; - #define RX_BUFF_LENGTH 256 -char pika_huart1_rxBuff[RX_BUFF_LENGTH] = {0}; -char pika_huart2_rxBuff[RX_BUFF_LENGTH] = {0}; -char pika_huart3_rxBuff[RX_BUFF_LENGTH] = {0}; -char pika_huart4_rxBuff[RX_BUFF_LENGTH] = {0}; +struct _pika_uart_t +{ + UART_HandleTypeDef huart; + uint8_t id; + char rxBuff[RX_BUFF_LENGTH]; + uint16_t rxBuffOffset; + PikaObj *obj; +}; -PikaObj *pika_huart1_obj = NULL; -PikaObj *pika_huart2_obj = NULL; -PikaObj *pika_huart3_obj = NULL; -PikaObj *pika_huart4_obj = NULL; +typedef struct _pika_uart_t pika_uart_t; + +pika_uart_t pika_uart1; +pika_uart_t pika_uart2; +pika_uart_t pika_uart3; +pika_uart_t pika_uart4; + +static pika_uart_t* getPikaUart(uint8_t id){ + if (1 == id){ + return &pika_uart1; + } + if (2 == id){ + return &pika_uart2; + } + if (3 == id){ + return &pika_uart3; + } + if (4 == id){ + return &pika_uart4; + } + return NULL; +} static void setUartObj(uint8_t id, PikaObj *obj) { - if (1 == id) { - pika_huart1_obj = obj; - } - if (2 == id) { - pika_huart2_obj = obj; - } - if (3 == id) { - pika_huart3_obj = obj; - } - if (4 == id) { - pika_huart4_obj = obj; - } + pika_uart_t *pika_uart = getPikaUart(id); + pika_uart->obj = obj; } static PikaObj *getUartObj(uint8_t id) { - if (1 == id) { - return pika_huart1_obj; + pika_uart_t *pika_uart = getPikaUart(id); + if(NULL == pika_uart){ + return NULL; } - if (2 == id) { - return pika_huart2_obj; - } - if (3 == id) { - return pika_huart3_obj; - } - if (4 == id) { - return pika_huart4_obj; - } - return NULL; + return pika_uart->obj; } static USART_TypeDef *getUartInstance(uint8_t id) { @@ -69,51 +68,35 @@ static USART_TypeDef *getUartInstance(uint8_t id) { } static uint8_t getUartId(UART_HandleTypeDef *huart) { - if (huart == &pika_huart1) { + if (huart == &pika_uart1.huart) { return 1; } - if (huart == &pika_huart2) { + if (huart == &pika_uart2.huart) { return 2; } - if (huart == &pika_huart3) { + if (huart == &pika_uart3.huart) { return 3; } - if (huart == &pika_huart4) { + if (huart == &pika_uart4.huart) { return 4; } return 0; } static UART_HandleTypeDef *getUartHandle(uint8_t id) { - if (1 == id) { - return &pika_huart1; + pika_uart_t *pika_uart = getPikaUart(id); + if(NULL == pika_uart){ + return NULL; } - if (2 == id) { - return &pika_huart2; - } - if (3 == id) { - return &pika_huart3; - } - if (4 == id) { - return &pika_huart4; - } - return NULL; + return &(pika_uart->huart); } static char *getUartRxBuff(uint8_t id) { - if (1 == id) { - return pika_huart1_rxBuff; + pika_uart_t *pika_uart = getPikaUart(id); + if(NULL == pika_uart){ + return NULL; } - if (2 == id) { - return pika_huart2_rxBuff; - } - if (3 == id) { - return pika_huart3_rxBuff; - } - if (4 == id) { - return pika_huart4_rxBuff; - } - return NULL; + return pika_uart->rxBuff; } static uint8_t USART_UART_Init(uint32_t baudRate, uint8_t id) { @@ -243,11 +226,11 @@ static void UART_MspInit(UART_HandleTypeDef *uartHandle) { } /* Msp handle interrupt */ -void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&pika_huart1); } -void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&pika_huart2); } +void USART1_IRQHandler(void) { HAL_UART_IRQHandler(&pika_uart1.huart); } +void USART2_IRQHandler(void) { HAL_UART_IRQHandler(&pika_uart2.huart); } void USART3_4_IRQHandler(void) { - HAL_UART_IRQHandler(&pika_huart3); - HAL_UART_IRQHandler(&pika_huart4); + HAL_UART_IRQHandler(&pika_uart3.huart); + HAL_UART_IRQHandler(&pika_uart4.huart); } void STM32_UART_platformEnable(PikaObj *self, int baudRate, int id) { @@ -264,7 +247,27 @@ void STM32_UART_platformEnable(PikaObj *self, int baudRate, int id) { HAL_UART_Receive_IT(getUartHandle(id), (uint8_t *)getUartRxBuff(id), 1); } -char *STM32_UART_platformRead(PikaObj *self, int id, int length) {} +char *STM32_UART_platformRead(PikaObj *self, int id, int length) { + Args *buffs= New_strBuff(); + char *readBuff = NULL; + pika_uart_t * pika_uart = getPikaUart(id); + if(length >= pika_uart->rxBuffOffset){ + /* not enough str */ + length = pika_uart->rxBuffOffset; + } + readBuff = args_getBuff(buffs, length); + memcpy(readBuff, pika_uart->rxBuff, length); + obj_setStr(self, "readBuff", readBuff); + readBuff = obj_getStr(self, "readBuff"); + + /* update rxBuff */ + memcpy(pika_uart->rxBuff, pika_uart->rxBuff + length, pika_uart->rxBuffOffset - length); + pika_uart->rxBuffOffset -= length; + UART_Start_Receive_IT(&pika_uart->huart, (uint8_t *)(pika_uart->rxBuff + pika_uart->rxBuffOffset), 1); +exit: + args_deinit(buffs); + return readBuff; +} void STM32_UART_platformWrite(PikaObj *self, char *data, int id) { HAL_UART_Transmit(getUartHandle(id), (uint8_t *)data, strGetSize(data), 100); @@ -273,9 +276,13 @@ void STM32_UART_platformWrite(PikaObj *self, char *data, int id) { /* Recive Interrupt Handler */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t id = getUartId(huart); - char *RxBuff = getUartRxBuff(id); - uint16_t offSet = strGetSize(RxBuff); - HAL_UART_Receive_IT(getUartHandle(id), (uint8_t *)(RxBuff + offSet), 1); + pika_uart_t * pika_uart = getPikaUart(id); + + /* avoid recive buff overflow */ + if( pika_uart->rxBuffOffset +1 < RX_BUFF_LENGTH){ + pika_uart->rxBuffOffset ++; + } + UART_Start_Receive_IT(huart, (uint8_t *)(pika_uart->rxBuff + pika_uart->rxBuffOffset), 1); goto exit; exit: return; @@ -289,7 +296,7 @@ exit: */ int fputc(int ch, FILE *f) { - HAL_UART_Transmit(&pika_huart1, (uint8_t *)&ch, 1, 0xffff); + HAL_UART_Transmit(&pika_uart1.huart, (uint8_t *)&ch, 1, 0xffff); return ch; } @@ -302,6 +309,6 @@ int fputc(int ch, FILE *f) int fgetc(FILE *f) { uint8_t ch = 0; - HAL_UART_Receive(&pika_huart1, &ch, 1, 0xffff); + HAL_UART_Receive(&pika_uart1.huart, &ch, 1, 0xffff); return ch; } \ No newline at end of file diff --git a/src/package/pikascript/PikaStdDevice.py b/src/package/pikascript/PikaStdDevice.py index 7e001115c..6fba94612 100644 --- a/src/package/pikascript/PikaStdDevice.py +++ b/src/package/pikascript/PikaStdDevice.py @@ -80,3 +80,35 @@ class ADC(TinyObj): # need override def platformRead(pin: str) -> float: pass + + +class UART(TinyObj): + def init(): + pass + + def setBaudRate(baudRate: int): + pass + + def setId(id: int): + pass + + def enable(): + pass + + def write(data: str): + pass + + def read(length: int) -> str: + pass + + # need override + def platformEnable(id: int, baudRate: int): + pass + + # need override + def platformWrite(id: int, data: str): + pass + + # need override + def platformRead(id: int, length: int) -> str: + pass diff --git a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDeivce_GPIO.c b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDeivce_GPIO.c index 6dd411358..6423337fc 100644 --- a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDeivce_GPIO.c +++ b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDeivce_GPIO.c @@ -1,81 +1,80 @@ #include "BaseObj.h" #include "PikaStdDevice_GPIO.h" -void PikaStdDevice_GPIO_init(PikaObj *self){ - obj_setInt(self, "isEnable", 0); - obj_setStr(self, "pin", "PA0"); - obj_setStr(self, "mode", "out"); - obj_setInt(self, "isOn", 0); +void PikaStdDevice_GPIO_init(PikaObj* self) { + obj_setInt(self, "isEnable", 0); + obj_setStr(self, "pin", "PA0"); + obj_setStr(self, "mode", "out"); + obj_setInt(self, "isOn", 0); } -void PikaStdDevice_GPIO_disable(PikaObj *self){ - obj_setInt(self, "isEnable", 0); - obj_run(self, "platformDisable()"); +void PikaStdDevice_GPIO_disable(PikaObj* self) { + obj_setInt(self, "isEnable", 0); + obj_run(self, "platformDisable()"); } -void PikaStdDevice_GPIO_enable(PikaObj *self){ - obj_setInt(self, "isEnable", 1); - obj_run(self, "platformEnable()"); +void PikaStdDevice_GPIO_enable(PikaObj* self) { + obj_setInt(self, "isEnable", 1); + obj_run(self, "platformEnable()"); } -char *PikaStdDevice_GPIO_getMode(PikaObj *self){ - return obj_getStr(self, "mode"); +char* PikaStdDevice_GPIO_getMode(PikaObj* self) { + return obj_getStr(self, "mode"); } -char *PikaStdDevice_GPIO_getPin(PikaObj *self){ - return obj_getStr(self, "pin"); +char* PikaStdDevice_GPIO_getPin(PikaObj* self) { + return obj_getStr(self, "pin"); } -void PikaStdDevice_GPIO_low(PikaObj *self) -{ - obj_setInt(self, "isOn", 0); - obj_run(self, "platformLow()"); +void PikaStdDevice_GPIO_low(PikaObj* self) { + obj_setInt(self, "isOn", 0); + obj_run(self, "platformLow()"); } -void PikaStdDevice_GPIO_high(PikaObj *self){ - obj_setInt(self, "isOn", 1); - obj_run(self, "platformHigh()"); +void PikaStdDevice_GPIO_high(PikaObj* self) { + obj_setInt(self, "isOn", 1); + obj_run(self, "platformHigh()"); } -void PikaStdDevice_GPIO_setMode(PikaObj *self, char *mode){ - obj_setStr(self, "mode", mode); - obj_run(self, "platformSetMode(mode)"); +void PikaStdDevice_GPIO_setMode(PikaObj* self, char* mode) { + obj_setStr(self, "mode", mode); + obj_run(self, "platformSetMode(mode)"); } -void PikaStdDevice_GPIO_setPin(PikaObj *self, char *pinName){ - obj_setStr(self, "pin", pinName); +void PikaStdDevice_GPIO_setPin(PikaObj* self, char* pinName) { + obj_setStr(self, "pin", pinName); } -void PikaStdDevice_GPIO_platformDisable(PikaObj *self){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformDisable(PikaObj* self) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDevice_GPIO_platformEnable(PikaObj *self){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformEnable(PikaObj* self) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDevice_GPIO_platformLow(PikaObj *self){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformLow(PikaObj* self) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDevice_GPIO_platformHigh(PikaObj *self){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformHigh(PikaObj* self) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDevice_GPIO_platformSetMode(PikaObj *self, char *mode){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformSetMode(PikaObj* self, char* mode) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDevice_GPIO_platformOff(PikaObj *self){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformOff(PikaObj* self) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDevice_GPIO_platformOn(PikaObj *self){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_GPIO_platformOn(PikaObj* self) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } diff --git a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_ADC.c b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_ADC.c index e73e45479..1620dff14 100644 --- a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_ADC.c +++ b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_ADC.c @@ -1,30 +1,30 @@ -#include "BaseObj.h" #include "PikaStdDevice_ADC.h" +#include "BaseObj.h" -void PikaStdDevice_ADC_enable(PikaObj *self){ - obj_run(self, "platformEnable(pin)"); +void PikaStdDevice_ADC_enable(PikaObj* self) { + obj_run(self, "platformEnable(pin)"); } -void PikaStdDevice_ADC_init(PikaObj *self){ - obj_setStr(self, "pin", "PA0"); +void PikaStdDevice_ADC_init(PikaObj* self) { + obj_setStr(self, "pin", "PA0"); } -float PikaStdDevice_ADC_read(PikaObj *self){ - obj_run(self, "val = platformRead(pin)"); - return obj_getFloat(self, "val"); +float PikaStdDevice_ADC_read(PikaObj* self) { + obj_run(self, "val = platformRead(pin)"); + return obj_getFloat(self, "val"); } -void PikaStdDevice_ADC_setPin(PikaObj *self, char * pin){ - obj_setStr(self, "pin", pin); +void PikaStdDevice_ADC_setPin(PikaObj* self, char* pin) { + obj_setStr(self, "pin", pin); } -void PikaStdDevice_ADC_platformEnable(PikaObj *self, char * pin){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_ADC_platformEnable(PikaObj* self, char* pin) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -float PikaStdDevice_ADC_platformRead(PikaObj *self, char * pin){ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); - return -1; +float PikaStdDevice_ADC_platformRead(PikaObj* self, char* pin) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); + return -1; } \ No newline at end of file diff --git a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c index d322aa554..28a21be6a 100644 --- a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c +++ b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_Time.c @@ -1,13 +1,11 @@ -#include "BaseObj.h" #include "PikaStdDevice_Time.h" +#include "BaseObj.h" -void PikaStdDeivce_Time_sleep_ms(PikaObj *self, int ms) -{ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_Time_sleep_ms(PikaObj* self, int ms) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } -void PikaStdDeivce_Time_sleep_s(PikaObj *self, int s) -{ - obj_setErrorCode(self, 1); - obj_setSysOut(self, "[error] platform method need to be override."); +void PikaStdDevice_Time_sleep_s(PikaObj* self, int s) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); } \ No newline at end of file diff --git a/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c new file mode 100644 index 000000000..9d34761ae --- /dev/null +++ b/src/package/pikascript/pikascript-lib/PikaStdDevice/PikaStdDevice_UART.c @@ -0,0 +1,40 @@ +#include "PikaStdDevice_UART.h" +#include "BaseObj.h" + +void PikaStdDevice_UART_enable(PikaObj* self) { + obj_run(self, "platformEnable(id, baudRate)"); +} +void PikaStdDevice_UART_init(PikaObj* self) { + obj_setInt(self, "baudRate", 115200); + obj_setInt(self, "id", 1); + obj_setStr(self, "readBuff", ""); +} +char* PikaStdDevice_UART_read(PikaObj* self, int length) { + obj_setInt(self, "length", length); + obj_run(self, "readData = platformRead(id, length)"); + return obj_getStr(self, "readData"); +} +void PikaStdDevice_UART_setBaudRate(PikaObj* self, int baudRate) { + obj_setInt(self, "baudRate", baudRate); +} +void PikaStdDevice_UART_setId(PikaObj* self, int id) { + obj_setInt(self, "id", id); +} +void PikaStdDevice_UART_write(PikaObj* self, char* data) { + obj_setStr(self, "writeData", data); + obj_run(self, "platformWrite(id, writeData)"); +} + +void PikaStdDevice_UART_platformEnable(PikaObj* self, int baudRate, int id) { + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); +} +char * PikaStdDevice_UART_platformRead(PikaObj *self, int id, int length){ + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); + return NULL; +} +void PikaStdDevice_UART_platformWrite(PikaObj *self, char * data, int id){ + obj_setErrorCode(self, 1); + obj_setSysOut(self, "[error] platform method need to be override."); +} \ No newline at end of file diff --git a/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c b/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c index 223de7fa8..3fe244cfc 100644 --- a/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c +++ b/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_MemChecker.c @@ -1,17 +1,14 @@ -#include "dataStrs.h" #include "BaseObj.h" +#include "dataStrs.h" -void PikaStdLib_MemChecker_max(PikaObj *self) -{ - obj_sysPrintf(self, "%0.2f kB", pikaMemMax() / 1024.0); +void PikaStdLib_MemChecker_max(PikaObj* self) { + obj_sysPrintf(self, "%0.2f kB", pikaMemMax() / 1024.0); } -void PikaStdLib_MemChecker_now(PikaObj *self) -{ - obj_sysPrintf(self, "%0.2f kB", pikaMemNow() / 1024.0); +void PikaStdLib_MemChecker_now(PikaObj* self) { + obj_sysPrintf(self, "%0.2f kB", pikaMemNow() / 1024.0); } -void PikaStdLib_MemChecker_resetMax(PikaObj *self) -{ - pikaMemMaxReset(); +void PikaStdLib_MemChecker_resetMax(PikaObj* self) { + pikaMemMaxReset(); } diff --git a/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c b/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c index 9ed663965..0b781006d 100644 --- a/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c +++ b/src/package/pikascript/pikascript-lib/PikaStdLib/PikaStdLib_SysObj.c @@ -1,114 +1,98 @@ -#include "dataStrs.h" #include "BaseObj.h" +#include "dataStrs.h" -static int32_t __foreach_listEachArg(Arg *argEach, Args *handleArgs) -{ - Args *buffs = handleArgs; - if (NULL == handleArgs) - { - /* error: not handleArgs input */ - return 1; - } +static int32_t __foreach_listEachArg(Arg* argEach, Args* handleArgs) { + Args* buffs = handleArgs; + if (NULL == handleArgs) { + /* error: not handleArgs input */ + return 1; + } - char *argName = strsCopy(buffs, arg_getName(argEach)); - if (strIsStartWith(argName, "[")) - { - /* skip */ - return 0; - } - - char *stringOut = args_getStr(handleArgs, "stringOut"); - if (NULL == stringOut) - { - // stringOut no found - return 1; - } - - stringOut = strsAppend(buffs, stringOut, argName); - stringOut = strsAppend(buffs, stringOut, " "); - args_setStr(handleArgs, "stringOut", stringOut); + char* argName = strsCopy(buffs, arg_getName(argEach)); + if (strIsStartWith(argName, "[")) { + /* skip */ return 0; + } + + char* stringOut = args_getStr(handleArgs, "stringOut"); + if (NULL == stringOut) { + // stringOut no found + return 1; + } + + stringOut = strsAppend(buffs, stringOut, argName); + stringOut = strsAppend(buffs, stringOut, " "); + args_setStr(handleArgs, "stringOut", stringOut); + return 0; } -void PikaStdLib_SysObj_ls(PikaObj *self, char *objPath) -{ - obj_setErrorCode(self, 0); - Args *args = New_args(NULL); - args_setStr(args, "stringOut", ""); - obj_setSysOut(self, ""); - if (NULL == objPath) - { - /* no input obj path, use current obj */ - args_foreach(self->attributeList, __foreach_listEachArg, args); - obj_setSysOut(self, args_getStr(args, "stringOut")); - goto exit; - } - PikaObj *obj = obj_getObj(self, objPath, 0); - if (NULL == obj) - { - /* do not find obj */ - obj_setSysOut(self, "[error] list: object no found."); - obj_setErrorCode(self, 1); - goto exit; - } - /* list args */ - args_foreach(obj->attributeList, __foreach_listEachArg, args); +void PikaStdLib_SysObj_ls(PikaObj* self, char* objPath) { + obj_setErrorCode(self, 0); + Args* args = New_args(NULL); + args_setStr(args, "stringOut", ""); + obj_setSysOut(self, ""); + if (NULL == objPath) { + /* no input obj path, use current obj */ + args_foreach(self->attributeList, __foreach_listEachArg, args); obj_setSysOut(self, args_getStr(args, "stringOut")); + goto exit; + } + PikaObj* obj = obj_getObj(self, objPath, 0); + if (NULL == obj) { + /* do not find obj */ + obj_setSysOut(self, "[error] list: object no found."); + obj_setErrorCode(self, 1); + goto exit; + } + /* list args */ + args_foreach(obj->attributeList, __foreach_listEachArg, args); + obj_setSysOut(self, args_getStr(args, "stringOut")); exit: - args_deinit(args); + args_deinit(args); } -void PikaStdLib_SysObj_new(PikaObj *self, char *classPath, char *objPath) -{ - int32_t res = obj_newObj(self, objPath, classPath); - if (1 == res) - { - obj_setSysOut(self, "[error] new: class not found ."); - obj_setErrorCode(self, 1); - return; - } +void PikaStdLib_SysObj_new(PikaObj* self, char* classPath, char* objPath) { + int32_t res = obj_newObj(self, objPath, classPath); + if (1 == res) { + obj_setSysOut(self, "[error] new: class not found ."); + obj_setErrorCode(self, 1); + return; + } } -void PikaStdLib_SysObj_remove(PikaObj *self, char *argPath) -{ - obj_setErrorCode(self, 0); - int32_t res = obj_removeArg(self, argPath); - if (1 == res) - { - obj_setSysOut(self, "[error] del: object no found."); - obj_setErrorCode(self, 1); - return; - } - if (2 == res) - { - obj_setSysOut(self, "[error] del: arg not match."); - obj_setErrorCode(self, 2); - return; - } +void PikaStdLib_SysObj_remove(PikaObj* self, char* argPath) { + obj_setErrorCode(self, 0); + int32_t res = obj_removeArg(self, argPath); + if (1 == res) { + obj_setSysOut(self, "[error] del: object no found."); + obj_setErrorCode(self, 1); + return; + } + if (2 == res) { + obj_setSysOut(self, "[error] del: arg not match."); + obj_setErrorCode(self, 2); + return; + } } -void PikaStdLib_SysObj_type(PikaObj *self, char *argPath) -{ - if (NULL == argPath) - { - /* no input obj path, use current obj */ - PikaObj *objHost = obj_getContext(self); - Arg *objArg = obj_getArg(objHost, obj_getStr(self, "_n")); - if (NULL == objArg) - { - obj_setSysOut(self, "[error] type: arg no found."); - obj_setErrorCode(self, 1); - return; - } - obj_setSysOut(self, arg_getType(objArg)); - return; +void PikaStdLib_SysObj_type(PikaObj* self, char* argPath) { + if (NULL == argPath) { + /* no input obj path, use current obj */ + PikaObj* objHost = obj_getContext(self); + Arg* objArg = obj_getArg(objHost, obj_getStr(self, "_n")); + if (NULL == objArg) { + obj_setSysOut(self, "[error] type: arg no found."); + obj_setErrorCode(self, 1); + return; } - Arg *arg = obj_getArg(self, argPath); - if (NULL == arg) - { - obj_setSysOut(self, "[error] type: arg no found."); - obj_setErrorCode(self, 1); - return; - } - obj_setSysOut(self, arg_getType(arg)); + obj_setSysOut(self, arg_getType(objArg)); + return; + } + Arg* arg = obj_getArg(self, argPath); + if (NULL == arg) { + obj_setSysOut(self, "[error] type: arg no found."); + obj_setErrorCode(self, 1); + return; + } + obj_setSysOut(self, arg_getType(arg)); }