a Go library for reading iridium short data bursts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.5 KiB

  1. package main
  2. import (
  3. "git.binarythought.com/cdramey/sdb"
  4. "fmt"
  5. "io/ioutil"
  6. "os"
  7. )
  8. func main() {
  9. if len(os.Args) < 2 {
  10. fmt.Fprintf(os.Stderr,
  11. "required argument missing\n")
  12. os.Exit(1)
  13. }
  14. raw, err := ioutil.ReadFile(os.Args[1])
  15. if err != nil {
  16. fmt.Fprintf(os.Stderr,
  17. "error reading \"%s\": %s\n",
  18. os.Args[1], err.Error())
  19. }
  20. data, err := sdb.ParseSDB(raw)
  21. if err != nil {
  22. fmt.Fprintf(os.Stderr,
  23. "%s\n", err.Error())
  24. os.Exit(1)
  25. }
  26. fmt.Printf("Protocol Revision: %d\n",
  27. data.ProtocolRevision)
  28. fmt.Printf("Message Length: %d\n",
  29. data.Length)
  30. for c, i := range data.Elements {
  31. if c > 0 {
  32. fmt.Println()
  33. }
  34. switch v := i.(type) {
  35. case sdb.MOHeader:
  36. fmt.Printf("\tMO Header IEI: %d\n",
  37. v.IEI)
  38. fmt.Printf("\tMO Header Length: %d\n",
  39. v.Length)
  40. fmt.Printf("\tMO Header CDR Reference: %d\n",
  41. v.CDRReference)
  42. fmt.Printf("\tMO Header IMEI: %s\n",
  43. v.IMEI)
  44. fmt.Printf("\tMO Header Status: %s (%d)\n",
  45. v.StatusString(), v.Status)
  46. fmt.Printf("\tMO Header MOMSN: %d\n",
  47. v.MOMSN)
  48. fmt.Printf("\tMO Header MTMSN: %d\n",
  49. v.MTMSN)
  50. fmt.Printf("\tMO Header Session Time: %s\n",
  51. v.SessionTime().String())
  52. case sdb.MOPayload:
  53. fmt.Printf("\tMO Payload IEI: %d\n",
  54. v.IEI)
  55. fmt.Printf("\tMO Payload Length: %d\n",
  56. v.Length)
  57. case sdb.MOConfirmation:
  58. fmt.Printf("\tMO Confirmation IEI: %d\n",
  59. v.IEI)
  60. fmt.Printf("\tMO Confirmation Length: %d\n",
  61. v.Length)
  62. fmt.Printf("\tMO Confirmation Status: %d\n",
  63. v.Status)
  64. }
  65. }
  66. }