Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Homebrew/example/php

From BrandMeister Wiki

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.


#!/usr/bin/php
<?php
  $master = "localhost:62030";
  $repeater_id = 9991234;  // Change this to your own ID
  $password = "somepassword";  // This needs to match the password in the master

  $number = sprintf("%08X", $repeater_id); 
  $handle = fsockopen("udp://$master");
  stream_set_timeout($handle, 10);
 
  $state = 0;
  $message = "RPTL$number";
  fwrite($handle, $message);
  print(">> $message\n");
 
  while (true)
  {
    $buffer = fread($handle, 200);
 
    if (strlen($buffer) == 0)
    {
      $message = "MSTPING$number";
      fwrite($handle, $message);
      print(">> $message\n");
      continue;
    }
 
    if (substr($buffer, 0, 4) == "DMRD")
    {
      $data = substr($buffer, 4);
      print(">> [DMR Data] " . bin2hex($data) . "\n");
      continue;
    }
 
    print("<< $buffer\n");
 
    if ((substr($buffer, 0, 6) == "MSTACK") &&
        (strlen($buffer) == 22))
    {
      $salt = substr($buffer, 14, 8);
      $digest = hash("sha256", "$salt$password");
      print("Salt: $salt Digest: $digest\n");
 
      $message = "RPTK$number$digest";
      fwrite($handle, $message);
      print(">> $message\n");
    }
 
    if ((substr($buffer, 0, 6) == "MSTACK") &&
        (strlen($buffer) == 14) &&
        ($state == 0))
    {
      $state = 1;
 
      $message = "RPTC";
      $message .= sprintf("%-8s", "R3ABM-T"); //Name of the repeater
      $message .= $number;                    //ID
      $message .= "433787500";                // RX
      $message .= "438787500";                // TX
      $message .= "99";                       // Power
      $message .= "15";                       // Colot Code
      $message .= sprintf("%-08f", 0);        // Latitude
      $message .= sprintf("%-09f", 0);        // Longitude
      $message .= "999";                      // Height
      $message .= sprintf("%-20s", "Moscow"); // Location
      $message .= sprintf("%-20s", "Description"); //Description
      $message .= sprintf("%-124s", "www.dstar.su"); //URL
      $message .= sprintf("%-40s", "linux:dmrrepeater-20150702"); // Software ID 
      $message .= sprintf("%-40s", "rpm:dmrrepeater-20150720-2_i386");  // Package ID
 
      $length = strlen($message);
      print("Repeater configuration: $length bytes\n");
 
      fwrite($handle, $message);
      print(">> $message\n");
    }
 
    if ((substr($buffer, 0, 6) == "MSTNAK") &&
        (strlen($buffer) == 14) &&
        ($state == 1))
    {
      $state = 0;
      $message = "RPTL$number";
      fwrite($handle, $message);
      print(">> $message\n");
    }
  }
 
  fclose($handle);
 
?>