Мое продвижение по пути создания аналогов equark и bquark для линукса притормозилось из-за досадных обстоятельств — сначала я забыл модем на даче, а потом, упав, повредил руку так, что теперь не могу водить машину и съездить за модемом.

Зато есть прогресс в других направлениях. Я наконец установил нормальный линукс я ядром 2.6 на NSLU (SlugOS) и избавился от твердого диска, заменив его на флешку 4Gb. Так что теперь NSLU вполне можно ставить в трансформаторную будку. Впрочем, есть еще один досадный момент — NSLU обладает тем свойством, что после подачи питания не загружается, пока не нажмешь кнопку на его корпусе. Это лечится, но с помощью паяльника.

А еще мне удалось несколько улучшить (на мой взгляд) скрипт mon230, входящий в состав пакета counter.
А именно, я избавился от внешних утилит crc и mbtx, заменив все вычисления CRC с помощью вызовов пакета Digest::CRC
(Этот пакет можно настроить практически на любой вид CRC)

Изменения выглядят примерно так:

use Digest::CRC;
my $ctx = Digest::CRC->new(width=>16, init=>0xffff, xorout=>0x0000,
poly=>0x8005, refin=>1, refout=>1, cont=>0);

sub iscrc {
my (@data) = @_;
my $hstr = «»;
for my $i (@data) { $hstr .= sprintf «%02x», hex($i); }
my $data = pack («H*», $hstr);
$ctx->reset;
$ctx->add($data);
my $crc16 = $ctx->digest;
return $crc16 ? ‘crc-error’ : ‘ok’;
}

sub _send {
my ($device,$addr, @str) = @_;
my $hstr = «$addr «.join(‘ ‘,@str);
my @a = split / /, $hstr;
$hstr = «»;
for my $i (@a) { $hstr .= sprintf «%02x», hex($i); }
my $data = pack («H*», $hstr);
$ctx->reset;
$ctx->add($data);
my $crc16 = $ctx->digest;
$data .= chr($crc16 & 0xff);
$data .= chr(($crc16 >> 8) & 0xff);
$port->write($data);
}

Все остальное осталось без изменений (и разумеется можно выбросить упоминания об утилитах crc и mbtx)
В остальные скрипты я не лазил, поскольку не использую их (пока).

 

Добавить комментарий

Set your Twitter account name in your settings to use the TwitterBar Section.