Skip to content

Commit 842cc88

Browse files
committed
add
1 parent 39f20ba commit 842cc88

24 files changed

+10582
-0
lines changed

Diff for: conf/app.conf

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
appname = serialTool
2+
httpport = 8080
3+
runmode = dev
4+
5+
AutoRender=true
6+
copyrequestbody = true

Diff for: controllers/default.go

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package controllers
2+
3+
import (
4+
"github.com/astaxie/beego"
5+
)
6+
7+
type MainController struct {
8+
beego.Controller
9+
}
10+
11+
func (c *MainController) Get() {
12+
c.TplName = "index.html"
13+
}

Diff for: controllers/serial.go

+178
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
package controllers
2+
3+
import (
4+
"encoding/hex"
5+
"encoding/json"
6+
"fmt"
7+
"io"
8+
"log"
9+
"strings"
10+
11+
"github.com/astaxie/beego"
12+
"github.com/gorilla/websocket"
13+
"github.com/jacobsa/go-serial/serial"
14+
)
15+
16+
var ReceiveType = 0
17+
var Serials map[string]io.ReadWriteCloser
18+
19+
var ReceiverWs = make(map[string]*websocket.Conn, 100)
20+
21+
func init() {
22+
Serials = make(map[string]io.ReadWriteCloser)
23+
24+
go func() {
25+
tmp := make([]byte, 1024)
26+
for {
27+
for k, v := range Serials {
28+
if n, err := v.Read(tmp); (n > 0) && (err == nil) {
29+
if v, ok := ReceiverWs[k]; ok == true {
30+
data := string(tmp[:n])
31+
if ReceiveType == 1 {
32+
data = hex.EncodeToString(tmp[:n])
33+
}
34+
msg := map[string]interface{}{"code": 0, "message": "serial receive success", "id": k, "data": data}
35+
err := v.WriteJSON(msg)
36+
if err != nil {
37+
delete(ReceiverWs, k)
38+
log.Printf("client.WriteJSON error: %v", err)
39+
v.Close()
40+
}
41+
}
42+
}
43+
}
44+
}
45+
}()
46+
}
47+
48+
type SerialOpenController struct {
49+
beego.Controller
50+
}
51+
52+
type SerialCloseController struct {
53+
beego.Controller
54+
}
55+
56+
type SerialSendController struct {
57+
beego.Controller
58+
}
59+
60+
type SerialReceiveController struct {
61+
beego.Controller
62+
}
63+
64+
type SerialReceiveTypeController struct {
65+
beego.Controller
66+
}
67+
68+
func (s *SerialOpenController) Post() {
69+
id := s.Ctx.Input.Param(":id")
70+
fmt.Println(id)
71+
if _, ok := Serials[id]; ok == true {
72+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "id error"}
73+
s.ServeJSON()
74+
return
75+
}
76+
77+
var opt serial.OpenOptions
78+
var err error
79+
if err = json.Unmarshal(s.Ctx.Input.RequestBody, &opt); err != nil {
80+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial open fail"}
81+
s.ServeJSON()
82+
return
83+
}
84+
85+
var tserial io.ReadWriteCloser
86+
tserial, err = serial.Open(opt)
87+
if err != nil {
88+
fmt.Println(err)
89+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial open fail"}
90+
s.ServeJSON()
91+
return
92+
}
93+
Serials[id] = tserial
94+
s.Data["json"] = map[string]interface{}{"code": 0, "message": "serial open success"}
95+
s.ServeJSON()
96+
}
97+
98+
func (s *SerialCloseController) Post() {
99+
id := s.Ctx.Input.Param(":id")
100+
if _, ok := Serials[id]; ok == false {
101+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "id error"}
102+
s.ServeJSON()
103+
return
104+
}
105+
if err := Serials[id].Close(); err != nil {
106+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial close fail"}
107+
s.ServeJSON()
108+
return
109+
}
110+
delete(Serials, id)
111+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial close success"}
112+
s.ServeJSON()
113+
}
114+
115+
func (s *SerialSendController) Post() {
116+
id := s.Ctx.Input.Param(":id")
117+
if _, ok := Serials[id]; ok == false {
118+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "id error"}
119+
s.ServeJSON()
120+
return
121+
}
122+
var data = struct {
123+
Type int //发送数据类型
124+
Data string
125+
}{}
126+
if err := json.Unmarshal(s.Ctx.Input.RequestBody, &data); err != nil {
127+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial send fail"}
128+
s.ServeJSON()
129+
return
130+
}
131+
132+
var bdata []byte
133+
if data.Type == 1 {
134+
str := strings.Replace(data.Data, " ", "", -1)
135+
var err error
136+
bdata, err = hex.DecodeString(str)
137+
if err != nil {
138+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial send fail,format error"}
139+
s.ServeJSON()
140+
return
141+
}
142+
} else {
143+
bdata = []byte(data.Data)
144+
}
145+
146+
if _, err := Serials[id].Write(bdata); err != nil {
147+
delete(Serials, id)
148+
s.Data["json"] = map[string]interface{}{"code": 1, "message": "serial send fail"}
149+
s.ServeJSON()
150+
return
151+
}
152+
s.Data["json"] = map[string]interface{}{"code": 0, "message": "serial send success"}
153+
s.ServeJSON()
154+
}
155+
156+
func (s *SerialReceiveController) Get() {
157+
fmt.Println("wesocket")
158+
id := s.GetString("id")
159+
ws, err := websocket.Upgrade(s.Ctx.ResponseWriter, s.Ctx.Request, nil, 1024, 1024)
160+
if err != nil {
161+
log.Fatal(err)
162+
}
163+
164+
ReceiverWs[id] = ws
165+
}
166+
167+
func (s *SerialReceiveTypeController) Get() {
168+
rtype := s.GetString("type")
169+
if rtype == "true" {
170+
ReceiveType = 1
171+
} else {
172+
ReceiveType = 0
173+
}
174+
175+
s.Data["json"] = map[string]interface{}{"code": 0, "message": "type set ok"}
176+
s.ServeJSON()
177+
178+
}

Diff for: main.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package main
2+
3+
import (
4+
_ "serialTool/routers"
5+
6+
"github.com/astaxie/beego"
7+
)
8+
9+
func main() {
10+
beego.Run()
11+
}

Diff for: routers/router.go

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package routers
2+
3+
import (
4+
"serialTool/controllers"
5+
6+
"github.com/astaxie/beego"
7+
"github.com/astaxie/beego/plugins/cors"
8+
)
9+
10+
func init() {
11+
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
12+
AllowAllOrigins: true,
13+
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
14+
AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
15+
ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
16+
AllowCredentials: true,
17+
}))
18+
beego.Router("/", &controllers.MainController{})
19+
beego.Router("/serial/open/:id", &controllers.SerialOpenController{})
20+
beego.Router("/serial/close/:id", &controllers.SerialCloseController{})
21+
beego.Router("/serial/send/:id", &controllers.SerialSendController{})
22+
beego.Router("/serial/receive", &controllers.SerialReceiveController{})
23+
beego.Router("/serial/receive/type", &controllers.SerialReceiveTypeController{})
24+
}

0 commit comments

Comments
 (0)