Przeglądaj źródła

新增、编辑、修改代码

niujiuru 3 tygodni temu
rodzic
commit
02b9ee8407
2 zmienionych plików z 46 dodań i 10 usunięć
  1. 34 2
      mcu_ctrl_board/bridge.go
  2. 12 8
      mcu_ctrl_board/mcu_ctrl_board.go

+ 34 - 2
mcu_ctrl_board/bridge.go

@@ -10,10 +10,12 @@ package mcu_ctrl_board
 import "C"
 
 import (
+	"encoding/json"
 	"fmt"
 	"sync"
 	"time"
 
+	"hnyfkj.com.cn/rtu/linux/baseapp"
 	"hnyfkj.com.cn/rtu/linux/netmgrd"
 	"hnyfkj.com.cn/rtu/linux/utils/jsonrpc2"
 )
@@ -150,12 +152,42 @@ func handleGetRTUStatus(r *jsonrpc2.Request) (*jsonrpc2.Response, error) {
 
 // 控制板发送传感器数据
 func handleSendSensorData(r *jsonrpc2.Request) (*jsonrpc2.Response, error) {
-	return jsonrpc2.BuildInternalError(r.ID), nil
+	if Board == nil || Board.OneEnvDataCh == nil {
+		return jsonrpc2.BuildInternalError(r.ID), nil
+	}
+	GlobalWorkState.Add(SensorDataReceiving)
+	defer GlobalWorkState.Remove(SensorDataReceiving)
+
+	var dataOne EnvSensorData
+	if err := json.Unmarshal([]byte(r.Params), &dataOne); err != nil {
+		return jsonrpc2.BuildInvalidParams(r.ID), nil
+	}
+
+	select {
+	case Board.OneEnvDataCh <- &dataOne:
+	default:
+		old := <-Board.OneEnvDataCh // 弹出旧数据
+		baseapp.Logger.Warnf("OneEnvData 通道满, 丢弃一条老数据: %s!", old.String())
+		Board.OneEnvDataCh <- &dataOne
+	}
+
+	return jsonrpc2.BuildResult(r.ID, "success")
 }
 
 // 控制板请求数据板拍照
 func handleTakePhoto(r *jsonrpc2.Request) (*jsonrpc2.Response, error) {
-	return jsonrpc2.BuildInternalError(r.ID), nil
+	if Board == nil || Board.ReqTakePhoCh == nil {
+		return jsonrpc2.BuildInternalError(r.ID), nil
+	}
+
+	select {
+	case Board.ReqTakePhoCh <- true:
+	default:
+		<-Board.ReqTakePhoCh // 弹出旧数据
+		Board.ReqTakePhoCh <- true
+	}
+
+	return jsonrpc2.BuildResult(r.ID, "success")
 }
 
 // 控制板发送预掉电通知

+ 12 - 8
mcu_ctrl_board/mcu_ctrl_board.go

@@ -5,6 +5,7 @@
 package mcu_ctrl_board
 
 import (
+	"fmt"
 	"sync"
 	"time"
 
@@ -18,6 +19,12 @@ var (
 	once  sync.Once
 )
 
+type MCUCtrlBoard struct {
+	OneEnvDataCh chan *EnvSensorData // 单条环境数据
+	ReqTakePhoCh chan bool           // 请求开始拍照
+	PwrWillOffCh chan struct{}       // 通知即将掉电
+}
+
 type EnvSensorData struct {
 	NowTime     string `json:"nowtm"`       // 时间, 格式:YYYY-MM-DD HH:MM:SS
 	Temperature string `json:"temperature"` // 温度, °C
@@ -28,10 +35,11 @@ type EnvSensorData struct {
 	Voltage     string `json:"voltage"`     // 电压, V
 }
 
-type MCUCtrlBoard struct {
-	OneEnvDataCh chan *EnvSensorData // 单条环境数据
-	ReqTakePhoCh chan bool           // 请求开始拍照
-	PwrWillOffCh chan struct{}       // 通知即将掉电
+func (d EnvSensorData) String() string {
+	return fmt.Sprintf(
+		"时间: %s, 温度: %s°C, 湿度: %s%%RH, 风速: %s m/s, 风向: %s°, 大气压: %s hPa, 电压: %s V",
+		d.NowTime, d.Temperature, d.Humidity, d.WindSpeed, d.WindDir, d.Pressure, d.Voltage,
+	)
 }
 
 // 初始化控制板的串口
@@ -82,7 +90,3 @@ func NotifyPwrWillOff() <-chan struct{} {
 	}
 	return Board.PwrWillOffCh
 }
-
-// 发送一条传感器数据
-
-// 请求数据板进行拍照