NOTE: This example does not seem to work any more (january 2017), probably due to protocol changes on the server side.

You will find an adapted and more verbose version of the PHP example here.


<syntaxhighlight lang="php">

  1. !/usr/bin/php

<?php

  1. $master = "localhost:62030";
  2. $repeater_id = 9991234; // Change this to your own ID
  3. $password = "somepassword"; // This needs to match the password in the master
  1. $number = sprintf("%08X", $repeater_id);
  2. $handle = fsockopen("udp://$master");
  3. stream_set_timeout($handle, 10);
  4.  
  5. $state = 0;
  6. $message = "RPTL$number";
  7. fwrite($handle, $message);
  8. print(">> $message\n");
  9.  
  10. while (true)
  11. {
  12. $buffer = fread($handle, 200);
  13.  
  14. if (strlen($buffer) == 0)
  15. {
  16. $message = "MSTPING$number";
  17. fwrite($handle, $message);
  18. print(">> $message\n");
  19. continue;
  20. }
  21.  
  22. if (substr($buffer, 0, 4) == "DMRD")
  23. {
  24. $data = substr($buffer, 4);
  25. print(">> [DMR Data] " . bin2hex($data) . "\n");
  26. continue;
  27. }
  28.  
  29. print("<< $buffer\n");
  30.  
  31. if ((substr($buffer, 0, 6) == "MSTACK") &&
  32. (strlen($buffer) == 22))
  33. {
  34. $salt = substr($buffer, 14, 8);
  35. $digest = hash("sha256", "$salt$password");
  36. print("Salt: $salt Digest: $digest\n");
  37.  
  38. $message = "RPTK$number$digest";
  39. fwrite($handle, $message);
  40. print(">> $message\n");
  41. }
  42.  
  43. if ((substr($buffer, 0, 6) == "MSTACK") &&
  44. (strlen($buffer) == 14) &&
  45. ($state == 0))
  46. {
  47. $state = 1;
  48.  
  49. $message = "RPTC";
  50. $message .= sprintf("%-8s", "R3ABM-T"); //Name of the repeater
  51. $message .= $number; //ID
  52. $message .= "433787500"; // RX
  53. $message .= "438787500"; // TX
  54. $message .= "99"; // Power
  55. $message .= "15"; // Colot Code
  56. $message .= sprintf("%-08f", 0); // Latitude
  57. $message .= sprintf("%-09f", 0); // Longitude
  58. $message .= "999"; // Height
  59. $message .= sprintf("%-20s", "Moscow"); // Location
  60. $message .= sprintf("%-20s", "Description"); //Description
  61. $message .= sprintf("%-124s", "www.dstar.su"); //URL
  62. $message .= sprintf("%-40s", "linux:dmrrepeater-20150702"); // Software ID
  63. $message .= sprintf("%-40s", "rpm:dmrrepeater-20150720-2_i386"); // Package ID
  64.  
  65. $length = strlen($message);
  66. print("Repeater configuration: $length bytes\n");
  67.  
  68. fwrite($handle, $message);
  69. print(">> $message\n");
  70. }
  71.  
  72. if ((substr($buffer, 0, 6) == "MSTNAK") &&
  73. (strlen($buffer) == 14) &&
  74. ($state == 1))
  75. {
  76. $state = 0;
  77. $message = "RPTL$number";
  78. fwrite($handle, $message);
  79. print(">> $message\n");
  80. }
  81. }
  82.  
  83. fclose($handle);
  84.  

?> </syntaxhighlight>