Skip to content

Commit 335c161

Browse files
committed
Merge pull request Omegaice#8 from Omegaice/cli
Implement a CLI
2 parents 72e8860 + fd1bdb7 commit 335c161

File tree

1 file changed

+149
-0
lines changed

1 file changed

+149
-0
lines changed

main.go

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,149 @@
1+
package main
2+
3+
import (
4+
"io/ioutil"
5+
"log"
6+
"os"
7+
"strings"
8+
9+
"github.com/Omegaice/go-xmodem/ymodem"
10+
"github.com/spf13/cobra"
11+
"github.com/tarm/serial"
12+
)
13+
14+
var Port, Message, Wait string
15+
16+
func main() {
17+
log.SetFlags(log.LstdFlags | log.Lshortfile)
18+
19+
var cmdSend = &cobra.Command{
20+
Use: "send [port]",
21+
Short: "Send file",
22+
Long: ``,
23+
Run: func(cmd *cobra.Command, args []string) {
24+
// Open connection
25+
connection, err := serial.OpenPort(&serial.Config{Name: Port, Baud: 115200})
26+
if err != nil {
27+
log.Fatalln(err)
28+
}
29+
30+
// Send initial message
31+
if len(Message) > 0 {
32+
if _, err := connection.Write([]byte(Message + "\r\n")); err != nil {
33+
log.Println(err)
34+
}
35+
}
36+
37+
// Wait for message
38+
if len(Wait) > 0 {
39+
var result string
40+
buffer := make([]byte, 64)
41+
for {
42+
n, err := connection.Read(buffer)
43+
if err != nil {
44+
log.Fatalln(err)
45+
}
46+
if n == 0 {
47+
break
48+
}
49+
result += string(buffer[0:n])
50+
if strings.Contains(result, Wait) {
51+
break
52+
}
53+
}
54+
}
55+
56+
// Open file
57+
fIn, err := os.Open(args[0])
58+
if err != nil {
59+
log.Fatalln(err)
60+
}
61+
62+
data, err := ioutil.ReadAll(fIn)
63+
if err != nil {
64+
log.Fatalln(err)
65+
}
66+
67+
fIn.Close()
68+
69+
// Send file
70+
if err := ymodem.ModemSend(connection, data, args[0]); err != nil {
71+
log.Fatalln(err)
72+
}
73+
74+
log.Println(args[0], "sent successful")
75+
},
76+
}
77+
cmdSend.Flags().StringVarP(&Port, "port", "p", "", "serial port to connect to")
78+
cmdSend.Flags().StringVarP(&Message, "message", "m", "", "message to initiate data transfer")
79+
cmdSend.Flags().StringVarP(&Wait, "wait", "w", "", "message to wait before initiating data transfer")
80+
81+
var cmdReceive = &cobra.Command{
82+
Use: "receive [port]",
83+
Short: "Receive file",
84+
Long: ``,
85+
Run: func(cmd *cobra.Command, args []string) {
86+
// Open connection
87+
connection, err := serial.OpenPort(&serial.Config{Name: Port, Baud: 115200})
88+
if err != nil {
89+
log.Fatalln(err)
90+
}
91+
92+
// Send initial message
93+
if len(Message) > 0 {
94+
if _, err := connection.Write([]byte(Message + "\r\n")); err != nil {
95+
log.Println(err)
96+
}
97+
}
98+
99+
// Wait for message
100+
if len(Wait) > 0 {
101+
var result string
102+
buffer := make([]byte, 64)
103+
for {
104+
n, err := connection.Read(buffer)
105+
if err != nil {
106+
log.Fatalln(err)
107+
}
108+
if n == 0 {
109+
break
110+
}
111+
result += string(buffer[0:n])
112+
if strings.Contains(result, Wait) {
113+
break
114+
}
115+
}
116+
}
117+
118+
// Receive file
119+
filename, data, err := ymodem.ModemReceive(connection)
120+
if err != nil {
121+
log.Fatalln(err)
122+
}
123+
124+
// Write file
125+
fOut, err := os.Create(filename)
126+
if err != nil {
127+
log.Fatalln(err)
128+
}
129+
fOut.Write(data)
130+
fOut.Close()
131+
132+
log.Println(filename, "write successful")
133+
},
134+
}
135+
cmdReceive.Flags().StringVarP(&Port, "port", "p", "", "serial port to connect to")
136+
cmdReceive.Flags().StringVarP(&Message, "message", "m", "", "message to initiate data transfer")
137+
cmdReceive.Flags().StringVarP(&Wait, "wait", "w", "", "message to wait before initiating data transfer")
138+
139+
var Root = &cobra.Command{
140+
Use: "go-xmodem",
141+
Short: "",
142+
Long: ``,
143+
Run: func(cmd *cobra.Command, args []string) {},
144+
}
145+
146+
Root.AddCommand(cmdSend)
147+
Root.AddCommand(cmdReceive)
148+
Root.Execute()
149+
}

0 commit comments

Comments
 (0)