Last active
November 27, 2019 15:09
-
-
Save doorbash/02db4dd739d8f0439dca601d75c4e8fb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "fmt" | |
| "github.com/itchyny/volume-go" | |
| "github.com/micmonay/keybd_event" | |
| "github.com/tarm/serial" | |
| "log" | |
| "strconv" | |
| "strings" | |
| "time" | |
| ) | |
| var phoneNumers = map[string]bool{ | |
| "+989XXXXXXXXX": true, | |
| } | |
| var port *serial.Port | |
| var readyToReadMessage bool = false | |
| var message string = "" | |
| func main() { | |
| var err error | |
| port, err = serial.OpenPort(&serial.Config{Name: "COM3", Baud: 9600}) | |
| if err != nil { | |
| log.Fatal(err) | |
| } | |
| buf := make([]byte, 128) | |
| line := "" | |
| for { | |
| n, err := port.Read(buf) | |
| if err != nil { | |
| log.Println(err) | |
| } | |
| startIndex := 0 | |
| for i := range buf[:n] { | |
| r := buf[i] | |
| //log.Printf(">> " + strconv.Itoa(int(r))) | |
| if r == '\n' { | |
| if startIndex < i { | |
| line = fmt.Sprintf("%s%s", line, string(buf[startIndex:i])) | |
| } | |
| handleLine(line[:len(line)-1]) | |
| line = "" | |
| startIndex = i + 1 | |
| } | |
| } | |
| if startIndex < n { | |
| line = fmt.Sprintf("%s%s", line, string(buf[startIndex:n])) | |
| } | |
| } | |
| } | |
| func handleLine(line string) { | |
| log.Println(line) | |
| if strings.HasPrefix(line, "+CMGR:") { | |
| s := strings.Split(line, "\"") | |
| if s[1] != "REC UNREAD" { | |
| log.Println("message is not unread") | |
| return | |
| } | |
| if _, ok := phoneNumers[s[3]]; !ok { | |
| log.Println("phone number is not in the list") | |
| return | |
| } | |
| zone, _ := time.Now().Zone() | |
| log.Println(s[5][:17] + zone) | |
| messageTime, _ := time.Parse("06/01/02,15:04:05-0700", s[5][:17]+zone) | |
| currentTime := time.Now() | |
| log.Println(messageTime) | |
| log.Println(currentTime) | |
| diff := currentTime.Sub(messageTime).Milliseconds() | |
| log.Printf("diff is %v\n", diff) | |
| if diff >= 0 && diff <= 100000 { | |
| readyToReadMessage = true | |
| } else { | |
| log.Println("message is old.. ignore it") | |
| } | |
| } else if readyToReadMessage { | |
| if line == "OK" { | |
| log.Printf("ok message is %s\n", message) | |
| handleMessage() | |
| message = "" | |
| readyToReadMessage = false | |
| } else { | |
| if len(message) == 0 { | |
| message = line | |
| } else { | |
| message = fmt.Sprintf("%s%s%s", message, "\n", line) | |
| } | |
| } | |
| } | |
| } | |
| func handleMessage() { | |
| if message == "Mute" { | |
| volume.Mute() | |
| } else if message == "Unmute" { | |
| volume.Unmute() | |
| } else if strings.HasPrefix(message, "Volume") { | |
| v, err := strconv.Atoi(strings.Split(message, " ")[1]) | |
| if err != nil { | |
| log.Println(err) | |
| return | |
| } | |
| err = volume.SetVolume(v) | |
| if err != nil { | |
| log.Println(err) | |
| } | |
| } else if message == "Play" { | |
| kb, err := keybd_event.NewKeyBonding() | |
| if err != nil { | |
| panic(err) | |
| } | |
| kb.SetKeys(keybd_event.VK_MEDIA_PLAY_PAUSE) | |
| err = kb.Launching() | |
| } else if message == "Next" { | |
| kb, err := keybd_event.NewKeyBonding() | |
| if err != nil { | |
| panic(err) | |
| } | |
| kb.SetKeys(keybd_event.VK_MEDIA_NEXT_TRACK) | |
| err = kb.Launching() | |
| } else if message == "Prev" { | |
| kb, err := keybd_event.NewKeyBonding() | |
| if err != nil { | |
| panic(err) | |
| } | |
| kb.SetKeys(keybd_event.VK_MEDIA_PREV_TRACK) | |
| err = kb.Launching() | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment