Skip to content

Instantly share code, notes, and snippets.

@doorbash
Last active November 27, 2019 15:09
Show Gist options
  • Select an option

  • Save doorbash/02db4dd739d8f0439dca601d75c4e8fb to your computer and use it in GitHub Desktop.

Select an option

Save doorbash/02db4dd739d8f0439dca601d75c4e8fb to your computer and use it in GitHub Desktop.
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