|
|
@@ -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")
|
|
|
}
|
|
|
|
|
|
// 控制板发送预掉电通知
|