package main import ( "bufio" "encoding/hex" "encoding/json" "fmt" "math/rand" "os" "strings" "time" "git.cheetah.cat/cheetah/opentetraflex-go/common" "git.cheetah.cat/cheetah/opentetraflex-go/common/tmkind" // "strings" ) func main() { rand.Seed(time.Now().UnixNano()) var err error terminalClient := common.NewTerminalClient("192.168.133.106:42381") // err = terminalClient.Connect() if err != nil { panic(err) } // myAddr := common.TetraFlexAddress{ Kind: common.UserNo, UserNo: "9400001", } err = terminalClient.Authenticate(myAddr) if err != nil { panic(err) } // err = terminalClient.SubscribeEvents([]tmkind.TetraFlexTerminalMessageKinds{ tmkind.IpApiCallUpdateNotification, tmkind.IpApiSdsTlReportNotification, tmkind.IpApiSdsTlShortReportNotification, tmkind.IpApiSdsDataType4Notification, tmkind.IpApiSdsStatusNotification, tmkind.IpApiSdsTlTransferNotification, }) if err != nil { panic(err) } // //fmt.Println(hex.EncodeToString(parsedMsg.Bytes())) regInfoBytes, _ := json.Marshal(terminalClient.RegistrationInfo) fmt.Println(string(regInfoBytes)) err = terminalClient.AttachGroups([]common.GroupConfig{ { Group: common.NewAddressFromSSINumber(101), ScanMode: common.Scanned, }, { Group: common.NewAddressFromSSINumber(102), ScanMode: common.Scanned, }, { Group: common.NewAddressFromSSINumber(103), ScanMode: common.Scanned, }, }) if err != nil { panic(err) } fmt.Println("Groups attached") go func() { groupAddr := common.NewAddressFromSSINumber(101) fmt.Println("Test callSetup") callRef, err := terminalClient.CallSetup(*groupAddr, common.CallTypeGroup, common.CallPriorityDefault, false, common.TetraFlexIdentityInfo{ Description: "2m/FM Gateway SWM", /* Kind: common.IdentityKindApplication, Address: *common.NewAddressFromSSINumber(1002), UnifiedSSIKinds: common.UnifiedKindExternalNumber, */ Kind: common.IdentityKindTerminal, Address: *common.NewAddressFromSSINumber(9400001), UnifiedSSIKinds: common.UnifiedKindPersonalNumber, }) if err != nil { panic(err) } fmt.Printf("callRef=%d\n", callRef) err = terminalClient.CallStreamRequest(0, callRef, 0, common.AudioChannel_CMoIP_Tetra) // CMoIP_aLaw if err != nil { panic(err) } // IpApiCallStreamRequest err = terminalClient.PTTRequest(callRef, common.TetraFlexIdentityInfo{ Description: "Blaa", /* Kind: common.IdentityKindApplication, Address: *common.NewAddressFromSSINumber(1002), UnifiedSSIKinds: common.UnifiedKindExternalNumber, */ Kind: common.IdentityKindTerminal, Address: *common.NewAddressFromSSINumber(1002), UnifiedSSIKinds: common.UnifiedKindPersonalNumber, }, 0) if err != nil { panic(err) } time.Sleep(1 * time.Second) // Connect RTP err = terminalClient.RTPConnect() if err != nil { panic(err) } file, err := os.Open("./test.tetra.txt") if err != nil { panic(err) } defer file.Close() scanner := bufio.NewScanner(file) var counter byte = 0 var voiceArray [][]byte for scanner.Scan() { hexData := scanner.Text() hexData = strings.Trim(hexData, " ") byteData, _ := hex.DecodeString(hexData) fmt.Println(hexData) voiceArray = append(voiceArray, byteData) } for { for _, byteData := range voiceArray { fmt.Println(byteData) byteData[8] = counter err = terminalClient.RTPSend(byteData) if err != nil { panic(err) } if counter == 255 { counter = 128 } else { counter++ } time.Sleep(20 * time.Millisecond) } } /* time.Sleep(3 * time.Second) // PTT Release err = terminalClient.PTTRelease(callRef) if err != nil { panic(err) } time.Sleep(3 * time.Second) err = terminalClient.CallDisconnect(callRef, common.DisconnectReason_CallRejectedByCalled) if err != nil { panic(err) } */ // IpApiCallPttRequest }() // idk send help xD for { select { case parsedMsg := <-terminalClient.RX: fmt.Println(hex.EncodeToString(parsedMsg.Bytes())) if parsedMsg.Kind == tmkind.IpApiAuthenticationChallenge { authChall, err := parsedMsg.AsAuthenticationChallenge() if err != nil { panic(err) } if authChall.PinRequested { fmt.Println("Sending Auth Pin") //terminalClient.SendTM() } } } } }