Explorar o código

编辑新增代码

niujiuru hai 1 mes
pai
achega
2f8d902a55

+ 7 - 0
.vscode/settings.json

@@ -0,0 +1,7 @@
+{
+  "files.associations": {
+    "mcu_ctrl_board.h": "c",
+    "serial.h": "c",
+    "include_swapilib.h": "c"
+  }
+}

+ 22 - 0
mcu_ctrl_board/bridge.go

@@ -4,3 +4,25 @@ package mcu_ctrl_board
 #include "mcu_ctrl_board.h"
 */
 import "C"
+
+import (
+	"fmt"
+)
+
+// 打开与MCU控制板的串口通讯
+func mcuCtrlBoard_ComInit() (int, error) {
+	ret := int(C.MCBComInit())
+	if ret != 0 {
+		return ret, fmt.Errorf("an error occurred while calling the C.MCBComInit function(%d)", ret)
+	}
+	return 0, nil
+}
+
+// 关闭与MCU控制板的串口通讯
+func mcuCtrlBoard_ComExit() error {
+	ret := int(C.MCBComExit())
+	if ret != 0 {
+		return fmt.Errorf("an error occurred while calling the C.MCBComExit function(%d)", ret)
+	}
+	return nil
+}

+ 47 - 0
mcu_ctrl_board/mcu_ctrl_board.c

@@ -1 +1,48 @@
 #include "mcu_ctrl_board.h"
+#include "../../rtu_linux_modules/swapi/subjects/serial/serial.h"
+
+// 模块名称
+static const char MODULE_NAME[] = "MCUCtrlBoard";
+
+// 定义与单片机进行通讯的结构体, 同时定义结构体对象
+typedef struct
+{
+  void *h;
+} SMCBCom;
+
+static SMCBCom s_myCom = { 0 };
+
+// 接收处理来自MCU控制板的数据报文帧, 串口-线程回调
+static int comio_data_recv_proc(unsigned long wParam/*传递打开的串口句柄*/, unsigned long lParam/*保留暂未使用*/)
+{
+  return 1;
+}
+
+// 打开与MCU控制板的串口通讯, 返回: 0成功, <0时失败
+int MCBComInit()
+{
+#ifdef _DEBUG // 上位机单元测试时使用
+  const char *serialName = "/dev/ttyS0";   int baudrate = 115200;
+#else
+  const char *serialName = "/dev/ttymxc2"; int baudrate = 115200;
+#endif
+  const char *parityCheck = "none"; // 无校检
+  s_myCom.h = serial_open(serialName, baudrate, parityCheck, \
+                          comio_data_recv_proc, comio_data_recv_proc, NULL);
+  if(!s_myCom.h)
+  {
+    sw_log_error("[%s] failed to open the \"%s:%d(%s parity)\" device!!", \
+                 MODULE_NAME, serialName, baudrate, parityCheck);
+    MCBComExit(); return -1;
+  }
+
+  return 0;
+}
+
+// 关闭与MCU控制板的串口通讯, 返回: 0成功, <0时失败
+int MCBComExit()
+{
+  if(s_myCom.h) serial_close(s_myCom.h, WAITTHRD_SAFEEXIT_TIMEOUT);
+  memset(&s_myCom, 0, sizeof(s_myCom));
+  return 0;
+}

+ 38 - 0
mcu_ctrl_board/mcu_ctrl_board.go

@@ -1 +1,39 @@
 package mcu_ctrl_board
+
+import (
+	"time"
+
+	"hnyfkj.com.cn/rtu/linux/baseapp"
+)
+
+const (
+	MODULE_NAME = "MCUCtrlBoard"
+)
+
+// 初始化MCU控制板
+func ModuleInit() bool {
+	var ret int
+	var err error
+	for range 5 {
+		if baseapp.IsExit1() {
+			return false
+		}
+		ret, err = mcuCtrlBoard_ComInit()
+		if ret == -1 {
+			time.Sleep(1 * time.Second)
+			continue
+		} else {
+			break
+		}
+	}
+	if err != nil {
+		baseapp.Logger.Errorf("[%s] 初始化与MCU控制板通信失败: %v!!", MODULE_NAME, err)
+	}
+
+	return true
+}
+
+// 释放掉MCU控制板
+func ModuleExit() {
+	mcuCtrlBoard_ComExit()
+}

+ 8 - 0
mcu_ctrl_board/mcu_ctrl_board.h

@@ -4,11 +4,19 @@
 #ifndef __MCU_CTRL_BOARD_H__
 #define __MCU_CTRL_BOARD_H__
 
+#include "../../rtu_linux_modules/swapi/include_swapiLib.h"
+
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
+// 打开与MCU控制板的串口通讯, 返回: 0成功, <0时失败
+int MCBComInit();
+
+// 关闭与MCU控制板的串口通讯, 返回: 0成功, <0时失败
+int MCBComExit();
+
 #ifdef __cplusplus
 }
 #endif