Netelegrafistovo MorseIP

Obecně se o mně říká, že jsem odpůrcem telegrafie. Což je blbost. Nicméně jsem i milovníkem minimalistických strojků, postavených nad linuxem a minimálním hardwarem. Což blbost není, naopak, je to výzva.

Pro jeden takový strojek, který nemá ani monitor, jsem potřeboval, aby tento strojek uměl sdělit světu, na kterém IP se nachází (protože pracuje na různých sítích s DHCP), aby bylo možné se k němu následně připojit pomocí SSH. Jako jediné výstupní zařízení, které je možno na zcela holé systémové desce použít pro tento účel bez přídavných kusů hardwaru, se jeví systémový bzučák (beeper). Jistě, bylo by možné využít i audiosystému desky, neřku-li voice syntezátoru, ale to už vyžaduje poměrně složitou instalaci zvukové podpory do systému (ALSA, OSS, PulseAudio nebo něco takového) a navíc ne vždy si takováto podpora reálného audia sedne s hardwarem. Dalším negativem je, že potřebujeme alespoň sluchátka, nebo reproduktory, abychom si zvuk poslechli. Zkrátka, vyhrál kvičík.

 

Výsledný perlový kód je následující:

#!/usr/bin/perl

use Audio::Beep;
use Time::HiRes qw( usleep );
use Net::Address::IP::Local;

%t=(
'1' => '.----',
'2' => '..---',
'3' => '...--',
'4' => '....-',
'5' => '.....',
'6' => '-....',
'7' => '--...',
'8' => '---..',
'9' => '----.',
'0' => '-----',
'.' => ' - ',
'i' => '..',
'p' => '.--.'
);

$freq=800;
$dt=100;

$ip='ip '.Net::Address::IP::Local->public;

$c='';
foreach $ipc (split //, $ip) { $c.=$t{$ipc}.' '; };
foreach $e (split //, $c) 
 {
  beep ($freq,$dt) if ($e eq '.');
  beep ($freq,3*$dt) if ($e eq '-');
  usleep(2000*$dt) if ($e eq ' ');
  usleep(1000*$dt);
 };


Blíže vysvětlovat netřeba, pomocí proměnných $freq a $dt nastavíme frekvenci v Hertzech a dobu trvání základního elementu morse značky v milisekundách. Všechny použité perlové moduly jsou standardní a lze je bez problémů nainstalovat jako balíčky Vaší oblíbené distribuce, nebo „oldschool“ zkompilovat z MetaCPANu.

 

Pak už jen stačí ve vhodný okamžik (typicky v průběhu bootu) zajistit jeho spuštění na pozadí, aby nezdržoval boot … a pečlivě poslouchat.