diff --git a/.gitignore b/.gitignore index ded517d..3c379ef 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ tty* -telegram.db \ No newline at end of file +telegram.db +.idea \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 25d714b..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/tele-recv.iml b/.idea/tele-recv.iml deleted file mode 100644 index c956989..0000000 --- a/.idea/tele-recv.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 9a1300d..0000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1608530373779 - - - - - - - - - - - - - true - - - - - - - \ No newline at end of file diff --git a/cmd/read.go b/cmd/read.go deleted file mode 100644 index d0d2799..0000000 --- a/cmd/read.go +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright © 2020 NAME HERE - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ -package cmd - -import ( - "fmt" - - "github.com/spf13/cobra" -) - -// readCmd represents the read command -var readCmd = &cobra.Command{ - Use: "read", - Short: "A brief description of your command", - Long: `A longer description that spans multiple lines and likely contains examples -and usage of using your command. For example: - -Cobra is a CLI library for Go that empowers applications. -This application is a tool to generate the needed files -to quickly create a Cobra application.`, - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("read called") - }, -} - -func init() { - rootCmd.AddCommand(readCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // readCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // readCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} - -func read() { - -} diff --git a/cmd/start.go b/cmd/start.go new file mode 100644 index 0000000..7b55f6e --- /dev/null +++ b/cmd/start.go @@ -0,0 +1,104 @@ +/* +Copyright © 2020 NAME HERE + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package cmd + +import ( + "fmt" + "it2000.com.cn/tele-recv/utils" + "log" + "os" + "os/signal" + "syscall" + + "github.com/spf13/cobra" +) + +// startCmd represents the start command +var startCmd = &cobra.Command{ + Use: "start", + Short: "A brief description of your command", + Long: `A longer description that spans multiple lines and likely contains examples +and usage of using your command. For example: + +Cobra is a CLI library for Go that empowers applications. +This application is a tool to generate the needed files +to quickly create a Cobra application.`, + Run: start, +} + +var run bool + +func init() { + rootCmd.AddCommand(startCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // startCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // startCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} + + +func start(cmd *cobra.Command, args []string){ + // Go signal notification works by sending `os.Signal` + // values on a channel. We'll create a channel to + // receive these notifications (we'll also make one to + // notify us when the program can exit). + sigs := make(chan os.Signal, 1) + done := make(chan bool, 1) + + // `signal.Notify` registers the given channel to + // receive notifications of the specified signals. + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + run = true + + // This goroutine executes a blocking receive for + // signals. When it gets one it'll print it out + // and then notify the program that it can finish. + go func() { + sig := <-sigs + fmt.Println() + fmt.Println(sig) + run = false + done <- true + }() + + // The program will wait here until it gets the + // expected signal (as indicated by the goroutine + // above sending a value on `done`) and then exit. + fmt.Println("awaiting signal") + for run { + if !utils.IsPortOpen() { + log.Println("try to open port") + err := utils.OpenPort(device, baudrate, bytesize) + if err != nil { + log.Fatal("error in open serial port ", err) + } + log.Println("starting read") + } + buffer, count := utils.ReadPort() + if count > 0 { + log.Print(string(buffer)) + } + } + <-done + fmt.Println("exiting") + +} diff --git a/cmd/test.go b/cmd/test.go index 26a9aa0..754a9a1 100644 --- a/cmd/test.go +++ b/cmd/test.go @@ -16,11 +16,9 @@ limitations under the License. package cmd import ( - "fmt" "github.com/spf13/cobra" - "github.com/tarm/serial" - "it2000.com.cn/tele-recv/database" - "os" + "it2000.com.cn/tele-recv/utils" + "log" ) // testCmd represents the test command @@ -34,18 +32,10 @@ Test load sqlite database and init table`, } func test(cmd *cobra.Command, args []string) { - fmt.Println("test called") - fmt.Println("device :", device) - c := &serial.Config{Name: device, Baud: baudrate, Size: bytesize} - s, err := serial.OpenPort(c) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - fmt.Println(c, "opened") - _ = s.Close() + log.Println("Testing environment") + _ = utils.OpenPort(device, baudrate, bytesize) - err = database.Init(dbFile, dbInit) + err := utils.InitDb(dbFile, dbInit) if err != nil { println("create database error ", err) } diff --git a/utils/serial.go b/utils/serial.go new file mode 100644 index 0000000..8c8feb1 --- /dev/null +++ b/utils/serial.go @@ -0,0 +1,45 @@ +package utils + +import ( + "github.com/tarm/serial" + "io" + "log" + "time" +) + +var( + device string + baudrate int + bytesize byte + port *serial.Port + portOpened bool +) + +func OpenPort(device string, baudrate int, bytesize byte) error { + log.Println("opening port device:", device, ", baudrate=", baudrate, ", bytesize=",bytesize) + config := &serial.Config{Name: device, Baud: baudrate, Size: bytesize, ReadTimeout: time.Second * 1} + var err error + port, err = serial.OpenPort(config) + if err!=nil { + log.Fatalln("error in open serial port ", err) + return err + } + log.Println("opened port ", port) + portOpened = true + return nil +} + +func ReadPort() ([]byte, int){ + buffer := make([]byte, 256) + count,err := port.Read(buffer) + if err != nil && err != io.EOF { + log.Println("error in read port ", err) + //TODO: 3 time fail try to + } + return buffer, count +} + +func IsPortOpen() bool { + return portOpened +} + diff --git a/database/sqlite.go b/utils/sqlite.go similarity index 93% rename from database/sqlite.go rename to utils/sqlite.go index 865ec39..fd68096 100644 --- a/database/sqlite.go +++ b/utils/sqlite.go @@ -1,4 +1,4 @@ -package database +package utils import ( "database/sql" @@ -16,7 +16,6 @@ const ( [tele_processed] int(1) NOT NULL DEFAULT 0, [tele_text] TEXT NOT NULL ) - ` ) var ( @@ -42,7 +41,7 @@ func getDb(file string, init bool) (*sql.DB, error) { return db, nil } -func Init(file string, init bool) error { +func InitDb(file string, init bool) error { var dbErr error db, dbErr = getDb(file, init) return dbErr