Contrôle d'un poste radio via le port COM avec ... PHP
Création de l'article : 30/09/2008 Ayant reçu un mail pour avoir des infos sur le façon d'envoyer des données sur un poste radio via PHP (procole CAT via un port COM), Tout d'abord à la lecture du manuel technique de mon poste j'ai trouvé une page plutôt sympa qui décrit comment marche le protocole CAT,
Explication Ici je change passe le mode de transmission du poste de radio sur : CW ce qui consiste à envoyer un bloc de 5 bits avec 200ms entre chaque bits et de mettre l'opcode à 07 [P1] x x x [07] avec P1 qui contient le code correspondant au mode : 02 00 00 00 07 YAESU nous permet aussi de changer la fréquence : 43 97 00 00 01 (avec l'opcode = 01)
Action ! La méthode consiste à préparer le code CAT à envoyer (sous forme de chaine de caractère)
/*
Contrôle d'un transceiver via le protocole CAT
decrit dans la DOC YAESU ...
Code testé sur un FT897 sous WINDOWS XP PRO
(c) 2008 Bastien Barbe
*/
//On prepare la connexion sur le port COM :
$com_id=1;
$state=`mode com$com_id: BAUD=4800 PARITY=N data=8 stop=2 xon=off`;
$_sock = fopen("COM".$com_id.":", "w+");
//On prepare les blocs HEXA à transmettre :
//Ici on envoi cette commande pour changer le mode (03=>CW)
//La methode utiliee ici consiste à préparer une chaine de caractere ....
//contenant le code à envoyer.
$hex_command_yaesu="\x03\x00\x00\x00\x07";
//On prepare les donnees :
$blocs = explode('\\',$hex_command_yaesu);
unset($blocs[0]);
//Ensuite on envoi paquet par paquet les données (CF PROTOCOLE CAT)
//sur le socket qui est "bindé" sur le COM1 ici :
if(is_array($blocs)){
foreach($blocs as $k=>$hex_bloc){
eval("\$str_hex=\"\\$hex_bloc\";");
$r=fwrite($_sock,$str_hex);
}
}
fclose($_sock);
bin2hex( )
- Créer une interface AJAX qui pilote votre poste radio (bientôt dans le logbook CRX disponible ici : www.crxcluster.com) - Créer une interface WEB qui pilote votre poste de radio (en y connectant le poste sur une webradio/shouotcast/flash streaming...).
La suite bientôt .... avec la mise à jour du logbook !
PS voilà une fonction pratique pour générer une chaines HEXA à envoyer pour contrôler le poste ;)
/**
*
* Will return : \x01\x40\x96\x00\x01 => mean 14096 so (14,.... mhz)
* Will return : \x14\x40\x96\x00\x01 => mean 144096 so (144,096 mhz !)
*
*/
function frequencyNormalyzerHumanKhzToYaesuTransceiver($digit_values_khz=array()){
$in_size=sizeof($digit_values_khz);
$pad = 9;
$padding_0_size = $pad - $in_size - 3;
//print 'PADDING 0 SIZE => '.$padding_0_size._BR_;
$i = 0;
$in_digit_id = 0;
$output_str_hex = '';
while($i<=10){
if($i<$padding_0_size){
$output_str_hex .= '0';
}
else{
$output_str_hex .= $digit_values_khz[$in_digit_id];
$in_digit_id++;
if($i>8){
$output_str_hex .= '0';
}
}
$i++;
}
$i=0;
$houtput_str_hex.='\x';
while($i<=10){
if($i%2 && $i<6 && isset($output_str_hex{$i}))$houtput_str_hex.=$output_str_hex{$i}.'\x';
else $houtput_str_hex.=$output_str_hex{$i};
$i++;
}
return $houtput_str_hex;
}
|
||||||||||
| © Bastien Barbe 2008 |