Пользуем андройдовский TTS удаленно.

Как это не странно, но в андройде появились TTS движки, от которых уже не тошнит. Потому, я оставил мысль собирать qemu в режиме исполнения x86 кода на arm, для запуска cepstral’овского синтеза, и решил заюзать родной андройдовский.
Пришлось вспоминать жабу. Опыт программирования на ней у меня сводился к написанию какого-то хеллоуворлда на j2me года эдак 4 назад.
После энного количества мытарств получилось это: Небольшая софтинка NetTTS.


(далее…)

ВундерМедиа 8650: Дорабатываем напильником.

В прямом смысле слова.
Недавно разжился таблеткой на субжевом чипе. Привлекло наличие исходников ядра, цена, а так же надобность в железке для кое каких эмбеддед нужд. Получив оную таблетку, первое что я сделал, это разобрал идущий в комплекте разъем на усб и эзернет. Руки зачесались, разобрал… Внутри видим отсутствующие электролиты на развязке по питанию USB, и вот эту прелесть.

(далее…)

GS6300 в виде автомобильного зарядника для таблетки

Некоторое время назад достал GS6300 в количестве штук эдак 30. Лежали они у меня на полке с полгода, и тут приперло меня соорудить в автомобиль зарядник для планшетника. Ехать скоро, GPS на большом экране штука удобная, все дела. В общем самое то.
На адаптере написано 9в, а выходной ток до 2.5А, что намекает на прожорливость таблетки при зарядке.
Даташит на микросхему попался на редкость тупой. Мало информации, кое о чем приходится догадываться. И только один пример применения. По счастью, достаточно простой, чтобы его быстренько перечеркать.

Подсказки: Выбираем хороший сердечник для индуктивности. Если свинтили/раздобыли не тот, то при таком токе материал уйдет в насыщение, индуктивность упадет, GS6300 будет греться и уходить в термал шатдаун уже при 500-700мА.
Если выбрать неправильный диод с большим временем обратного восстановления (reverse recovery time) (а работаем мы на 52kHz), он будет греться и тока нормального опять таки не получим.
Так как хотя бы порядок сопротивлений никто не удосужился указать, то я сначала для подстройки напруги воткнул потенциометр на 10к. Получил жуткий разброд и шатание напряжения на выходе при подключении малейшей нагрузки. Воткнул 1к — и осциллограф показал что все работает великолепно.
Задняя площадка подсоединена к земле, хотя в DS этого не сказано. Проверяется на прозвоне мультиметром. Потому на плате надо делать БОЛЬШОЙ земляной полигон. На него будет уходить тепло, которое булет появляться при большом токе. Говорим спасибо тем, кто впендюрил внутри микросхемы в схему переключения биполярные, а не полополевые транзисторы.
Вот фото хреновины в сборе:

Так как штекера в прикуриватель у меня рядом не было, я разобрал DC-DC на 5 вольт и подцепил проводком из него сырое бортовое напряжение, которое уже потом передаю на степдаун, а потом в таблетку.

Подставочка для пробирочек

Все таки хорошо, когда есть доступ к станочку лазерной резки и немного акрилика. Некоторое время назад я запилил себе вот такую вот подставку под пробирки.

Ну… На самом деле не пробирки, а банки от ‘бифидума бактерина’, коим я выправляю периодически убитый антибиотиками желудок. (А в случае жесткой ангины оные кушать приходится) В общем баночек осталось у меня до черта, и использую я их вместо химпосуды. Дешево и сердито. Подставка вышла примерно такая:

А вот исходничек в OpenSCADе под ‘пивной’ лицензией.

rows=2;
cols=5;
spacing=2;
borderspace_w = 4;
borderspace_l   =  20;
radius=8.5;
drill_via=1.6;
delta=0.1;

TARGET=2;
//////////////////////////

length  =  borderspace_l*2 +  spacing + (radius*2+spacing) * cols;
width   =  borderspace_w*2 + spacing + (radius*2+spacing) * rows;

module vials(rows,cols,spacing,radius, borderspace_l, borderspace_w, shift)
{
length  =  borderspace_l*2 +  spacing + (radius*2+spacing) * cols;
width   =  borderspace_w*2 + spacing + (radius*2+spacing) * rows;
echo("Vial holder: length: ",length, "width:", width);
difference(){
	for (j=[0:rows-1])
	{

	for (i=[0:cols-1+ ( j % 2)])
		{
		#translate(
			[
			borderspace_w +radius+spacing + (radius*2+spacing)*j,
			-shift * (j %2 )  + borderspace_l  +radius+spacing + (radius*2+spacing)*i
			]
			) circle(radius);

		}
	}
}
}

difference()
{
	square([width,length]);
	# translate ([width/4,borderspace_l/3])circle(drill_via);
	# translate ([3*width/4,borderspace_l/3])circle(drill_via);
	# translate ([width/4,length-borderspace_l/3])circle(drill_via);
	# translate ([3*width/4,length-borderspace_l/3])circle(drill_via);

	# translate ([2*width/20,length/2-radius-spacing/2])circle(drill_via);
	# translate ([2*width/20,length/2+radius+spacing/2])circle(drill_via);
	# translate ([18*width/20,length/2])circle(drill_via);
}

if ( TARGET==1 )
{
	translate([width+delta,0]) difference(){
	square([width,length]);
	# vials(rows,cols,spacing,radius, borderspace_l, borderspace_w, radius);
	# translate ([width/4,borderspace_l/3])circle(drill_via);
	# translate ([3*width/4,borderspace_l/3])circle(drill_via);
	# translate ([width/4,length-borderspace_l/3])circle(drill_via);
	# translate ([3*width/4,length-borderspace_l/3])circle(drill_via);

	# translate ([2*width/20,length/2-radius-spacing/2])circle(drill_via);
	# translate ([2*width/20,length/2+radius+spacing/2])circle(drill_via);
	# translate ([18*width/20,length/2])circle(drill_via);

	}
}
else
{
	translate([0,0,15]) difference(){
	square([width,length]);
	# vials(rows,cols,spacing,radius, borderspace_l, borderspace_w, radius);
	# translate ([width/4,borderspace_l/3])circle(drill_via);
	# translate ([3*width/4,borderspace_l/3])circle(drill_via);
	# translate ([width/4,length-borderspace_l/3])circle(drill_via);

	# translate ([2*width/20,length/2-radius-spacing/2])circle(drill_via);
	# translate ([2*width/20,length/2+radius+spacing/2])circle(drill_via);
	# translate ([18*width/20,length/2])circle(drill_via);
}
}

RTL8196 vs OpenWRT

Не так давно откопал валявшийся на даче edup’овский роутер и решил домучать. Купил хрень? Мучайся! Не то чтобы не было денег или возможности выкинуть и купить поддерживаемую железку. тут уж дело принципа.
Итак, внутри у него RTL8196C. Некоторое время у же проходил занимательный, познавательный и увлекательный квест по имени «собери все патчи и получи тулчейн«. Дальше от одного взгляда на BSP реалтека появилась депрессия, уныние, отчаяние, ощущение безысходности, тошнота и приступы агрессии… Если у Вас слабое здоровье — не смотрите их код…
Собственно, ниже привожу весь треш и угар, который откопал в их BSP.
Если это случаем читают программисты реалтека сделавшие такое нечто… Убейте себя. Спасите планету!
Итак, начнем с веселого.


necromant@ilwyn:/media/NC-OS/pocket_router/linux-2.6.30-veteran/arch/mips/rtl8196b$ ls -la
итого 64
drwxr-xr-x 2 necromant necromant 4096 2010-12-17 11:48 .
drwxr-xr-x 19 necromant necromant 4096 2010-12-17 11:48 ..
-rw-r--r-- 1 necromant necromant 6268 2010-02-22 05:35 int.c
-rw-r--r-- 1 necromant necromant 236 2010-02-22 05:35 Makefile
-rw-r--r-- 1 necromant necromant 2615 2010-02-22 05:35 mem.c
lrwxrwxrwx 1 necromant necromant 84 2011-08-21 14:14 pci.c -> /home/bo_zhao/8196/linux-2.6.19/linux-2.6.x/arch/mips/realtek/rtl8196b/pci-rtl8196.c
-rw-r--r-- 1 necromant necromant 1996 2010-02-22 05:35 pci.h
-rw-r--r-- 1 necromant necromant 14802 2010-02-22 05:35 pci-rtl8196.c
-rw-r--r-- 1 necromant necromant 1111 2010-02-22 05:35 printf.c
-rw-r--r-- 1 necromant necromant 4383 2010-02-22 05:35 setup.c
-rw-r--r-- 1 necromant necromant 2240 2010-02-22 05:35 timer.c

pci.c является симлинком в /home/%индуснейм%/…, а учитывая что %индуснейм% != necromant у меня оно бы не собралось. Просто чудо, что эти файлики оказались не сильно нужными/дублирующимися. Такое там в 5-6 местах и некоторые опции Kconfig’a явно приведут к фейлу при сборке по причине отсутствуюзих файлов.

Из ядра куча симлинков ведет наружу. Бордоспецифичная инициализаия тут не в mach-boardname.c, а целый каталог bsp ведущий симлинком во вне дерева ядра. И то, бордоспецифичного кода там ноль целых хрен десятых.

gpio для светодиодов и кнопочек сделан в виде char драйвера не совместимого ни с чем. Забудем про /sys/class/leds/, лед-триггеры и прочее — сделаем свой велосипед, с блэкджеком! Бордоспецифичные дефайны светодиодов находятся не в каталоге bsp, о котором я писал выше, а в нем самом. Привет программерам Трындец-Нета. Хотя… Их можно понять. Разбираться в дзене реалтековцев то еще удовольствие.

Для LexraCore (MIPS-инвалид без пятка инструкций) сделана отдельная архитектура rlx с большим количеством копипасты.

Makefile’ы ядра хакнуты, чтобы собиралось допотопным gcc версии 3.3х, местмами хакнуты чтобы утягивал объявление каталогов от билдсистемы bsp.

Извращенцы реалтека пишут camelCase’ом в ядре. Взять и расстрелять на месте!

комментарии в дмесг видавыглядят просто абзац, как информативно.

паковщик образов ядра rtkload впендюрен в дерево ядра, и вызывает cvimg, который собирается вместе с goahead (веб сервер, что ли?) запихнутым вместе с софтом корневой фс. Корневуха пришпандоревается к образу при момощи mgbin из той же задницы.

Драйвер mtd выставляет размеры разделов из Kconfig ядра. Никаких вам mach-%boardname%, %юзернейм%.

Если утилитам cvimg или mgbin передать достаточно длинное имя файла, то они с треском свалятся в корку, или размажут стек. Просто туда, куда делается strcpy из argv[1] не знает о том, что границы массивов надо проверять… И про strdup не знаем тоже.

Баудрейт для earlyprintk и настройки частоты оного запихнуты не в бордоспецифичную инициализацию, а в какую-то задницу.h (пардоньте мой френч) в arch/rlx/include. После всего вышеописанного это просто не смешно уже.

А многие и не знают, что на этом треше работает их шелезячка…

ДОПОЛНЕНИЕ
Из их драйвера GPIO:

 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27)
 kill_proc(1,SIGTERM,1);
 #else
...

Это было достойно занесения на govnokod.ru =))

P.S. начальный порт OpenWRT тут: http://invyl.ath.cx/cgit/cgit.cgi/openwrt/
Желающие рискнуть здоровьем и помочь в этом нелегком деле — стучитесь в почту.

OpenWRT на ноунейм роутере (RT3050F) (Теперь с USB!)

Как и обещал, прикрутил к этому зверю USB. Спасибо говорим Layne Edwards за его dwc_otg патчи — теперь все пашет.
Так как я сам активно юзаю эту железку, то буду делать бинарные билды.
Хватаем бинарную сборку на странице загрузки download page
Release notes:

  • comgt для 3g модемов встроен
  • USB host и dwc_otg вкомпилены в ядро, форвард портированы до транка
  • Подрехтовал размер mtd
Известные баги:
Так как usb вкомпилено в ядро доп. пакеты ставятся при помощи —force-depends

Переключалка для ригола

Хорошая фича моего 50 мегагерцового ригола — усб порт, куда можно воткнуть флешку и скинуть данные. Например, в csv, чтобы потом распарсить скриптами. Или тупо скриншоты. Но вот только если измерения обрабатываешь скриптами, да дебажишь что-то, флешку приходится дергать туда-сюда много. Очень. Это убивает порт и задалбывает меня. А я существо крайне ленивое.
Ну так в чем проблема, давайте поправим?
Порывшись в хламе был обнаружен древний советский переключатель. Далее сооружена небольшая платка, и вся конструкция закреплена прямо в полку с осциллографом. надо будет еще покрыть платку уретаном. Фото ниже:



Работает оно тупо. Очень. Тупо переключает линии данных от одного устройства к другому. Так что если я хочу подрубить флешку к планшету, вместо ригола … Я дергаю переключатель. Позже, после тестов я добавил 30к тянущих линии данных на землю, дабы не видел устройства когда его нет. (Остатки проводящего флюса? Наводки из астрала?)
Так же всплыл забавный баг с некоторыми влешками: Так как питание не отрубается при переключении, они не сбрасываются при переключении, и, разумеется, неработают. В моем случае я тупо воткнул другой кардридер. В идеале, надо при переключении отрубать питание, чтобы такие вот девайсы заработали, но мне проще было воткнуть другой.

Разводка в Kicad (принципиалка крайне топорная, ибо делал второпях) тута.
NB: И не забываем взять библиотеки от игла, сконвертированные в формат кикада. Там футпринты тех миниусб, что я посадил на плату.

Портируем OpenWRT на китайский безымянный роутер

Ладно, не портируем, а добавляем поддержку борды, чип то уже опенвртподдерживают в транке, но не суть.
Добыл я сию прелесть там, где обычно просаживаю деньги — на DX. Внутрях RTL3050F, 32MB RAM, 4MB FLASH, работает на частоте 320Mhz. Плюшки в виде усб и спрятанного внутрях уарта.
Фото в сборе:

Окей, что дальше? Первым делом, как и обычно, разбираем и подпаиваем штыри для уарта. Это я уже на автоматизме делаю.
УАРТ тут как обычно 4 ноги. GND, RX, TX and Vcc. Логика пашет на 3.3 вольтах (А вы чего ждали?), так что подпаиваем туда штыри, подключаем бас пират или иной мост на 3.3 вольтовый уарт, и начинаем красноглазие.

На борту стоит загрузчик убут, jtag’а нет и в помине (окирпичите — потом восстановить уже никак, только чип флеша отпаивать да зашивать!).
Ну и, конечно, берем из svn свежий опенврт. нам нужен разработческий транк, так как в стабильных билдах оно пока не поддерживается… Облом состоял в том, что ни один из сгенерированных опенвртшкой образов не грузился.
только образ для MOFI3500-3GN выдал кое какой выхлоп ядра, а потом заругался на mtd и невозможность подмонтировать корень. Видимо у того флеша было 8 мегабайт, а у нашего дружка 4 — разбивка не та.
Самое время заправиться кофе и браться за работу.

За три дня красноглазия вечерами я осилил:

  • Сварганил новый mach-type ‘mach-unbranded-3gn’
  • Починил скрипты, чтобы те правильно извлекали из нужного mtd раздела прошивку для wifi чипа.
  • Методом высоконаучного тыка разузнал на каких линиях висят светодиоды, и теперь ими всеми (5+1 штука) можно рулить через /sys/class/leds
  • Аналогичным образом сделал для двух кнопок сзади
  • Поправил скрипты паковки образов, чтобы они готовили корректно прошивку под наш роутер
  • Выслал патчи в список рассылки OpenWRT.
УСБ пахать отказался, потому я вытащил сырцы от асусовского роутера на том же чипе (в отличие от китайцев асус GPL соблюдает и исходники выкладывает исправно). Из заголовков стало ясно, что ралинк разжился усб контроллером у синопсиса, зовется оно dwc_otg, и работать может как усб хост, или как усб отг, но переключаться не умеет без перекомпиляции ядра.
Спасибо индусам из синопсиса, которые начихали на ohci/ehci, и изобрели свой велосипед с блэкджеком… эээ… с шахматами и поэтессами. В итоге код лежит в drivers/usb/dwc_otg выглядит как белый в центре черного квартала.
Layne Edwards из рассылки OpenWRT-devel уже опередил меня и патчи под свежее ядро есть, но:
  • Я их еще не опробовал
  • Их нет в OpenWRT транке
Так что с усб придется недельку подождать, пока я соберусь их накатать.
Чтобы прошиться надо подрубиться к уарту, 57600 baud 8n1 (для чайников: скрость 57600, 8 бит данных, нет четности, 1 стоповый бит, без программного управления потоком, без аппаратного управления потоком).
Как только оно прочихается и будет виден обратный отсчет — давим кнопочку «ANY», выбираем «2».
Для прошивки на компьютере надо будет поднять tftp сервер — так оно по эзернету льет на роутер прошивку.
Если все сделать правильно, то в скором времени в логе через уарт можно увидеть такое:

U-Boot 1.1.3 (Apr 7 2010 - 09:43:57)

Board: Ralink APSoC DRAM: 32 MB
relocate_code Pointer at: 81fac000
======= config usb otg =====
flash_protect ON: from 0xBF000000 to 0xBF0205C3
protect on 0
protect on 1
protect on 2
protect on 3
protect on 4
protect on 5
protect on 6
protect on 7
protect on 8
protect on 9
flash_protect ON: from 0xBF030000 to 0xBF03FFFF
protect on 10
============================================
Ralink UBoot Version: 3.2
--------------------------------------------
ASIC 3052_MP2 (Port5<->None)
DRAM COMPONENT: 256Mbits
DRAM BUS: 16BIT
Total memory: 32 MBytes
Date:Apr 7 2010 Time:09:43:57
============================================
icache: sets:128, ways:4, linesz:32 ,total:16384
dcache: sets:128, ways:4, linesz:32 ,total:16384

##### The CPU freq = 320 MHZ ####

SDRAM bus set to 16 bit
SDRAM size =32 Mbytes

Please choose the operation:
1: Load system code to SDRAM via TFTP.
2: Load system code then write to Flash via TFTP.
3: Boot system code via Flash (default).
4: Entr boot command line interface.
9: Load Boot Loader code then write to Flash via TFTP.
0

3: System Boot system code via Flash.
## Booting image at bf050000 ...
Image Name: MIPS OpenWrt Linux-2.6.39.2
Created: 2011-08-04 17:34:58 UTC

System Control Status = 0x00400000
Image Type: MIPS Linux Kernel Image (lzma compressed)
Data Size: 804635 Bytes = 785.8 kB
Load Address: 80000000
Entry Point: 80000000
Verifying Checksum ... OK
Uncompressing Kernel Image ... OK
No initrd
## Transferring control to Linux (at address 80000000) ...
## Giving linux memsize in MB, 32

Starting kernel ...

Linux version 2.6.39.2 (necromant@ilwyn) (gcc version 4.5.4 20110526 (prerelease) (Linaro GCC 4.5-2011.06-0) ) #18 Thu Aug 4 21:34:21 MSD 2011
bootconsole [early0] enabled
CPU revision is: 0001964c (MIPS 24Kc)
Ralink RT3350 id:1 rev:2 running at 320.00 MHz
Determined physical RAM map:
memory: 02000000 @ 00000000 (usable)
Initrd not found or empty - disabling initrd
Zone PFN ranges:
Normal 0x00000000 -> 0x00002000
Movable zone start PFN for each node
early_node_map[1] active PFN ranges
0: 0x00000000 -> 0x00002000
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
Kernel command line: board=NONAME-3GN mtdparts=physmap-flash.0:192k(u-boot)ro,64k(devdata)ro,64k(devconf)ro,832k(kernel),2944k(rootfs),3776k@0x50000(firmware) console=ttyS1,57600 rootfstype=squashfs,jffs2
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Primary instruction cache 16kB, VIPT, 4-way, linesize 32 bytes.
Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 32 bytes
Writing ErrCtl register=0007a000
Readback ErrCtl register=0007a000
Memory: 30032k/32768k available (1849k kernel code, 2736k reserved, 312k data, 148k init, 0k highmem)
SLUB: Genslabs=9, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
NR_IRQS:48
console [ttyS1] enabled, bootconsole disabled
console [ttyS1] enabled, bootconsole disabled
Calibrating delay loop... 212.58 BogoMIPS (lpj=1062912)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
NET: Registered protocol family 16
MIPS: machine is Unbranded 3G router from DX
bio: create slab at 0
Switching to clocksource MIPS
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
squashfs: version 4.0 (2009/01/31) Phillip Lougher
JFFS2 version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
msgmni has been set to 58
io scheduler noop registered
io scheduler deadline registered (default)
Serial: 8250/16550 driver, 2 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x10000500 (irq = 13) is a 16550A
serial8250: ttyS1 at MMIO 0x10000c00 (irq = 20) is a 16550A
physmap platform flash device: 00800000 at bf000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 16-bit bank. Manufacturer ID 0x0000c2 Chip ID 0x0022a8
Amd/Fujitsu Extended Query Table at 0x0040
Amd/Fujitsu Extended Query version 1.1.
Silicon revision: 0
Address sensitive unlock: Required
Erase Suspend: Read/write
Block protection: 4 sectors per group
Temporary block unprotect: Supported
Block protect/unprotect scheme: 4
Number of simultaneous operations: 0
Burst mode: Not supported
Page mode: Not supported
Vpp Supply Minimum Program/Erase Voltage: 9.5 V
Vpp Supply Maximum Program/Erase Voltage: 10.5 V
Top/Bottom Boot Block: Bottom boot
number of CFI chips: 1
cmdlinepart partition parsing not available
RedBoot partition parsing not available
Using physmap partition information
Creating 6 MTD partitions on "physmap-flash.0":
0x000000000000-0x000000030000 : "u-boot"
0x000000030000-0x000000040000 : "config"
0x000000040000-0x000000050000 : "factory"
0x000000050000-0x000000120000 : "kernel"
0x000000120000-0x000000800000 : "rootfs"
mtd: partition "rootfs" extends beyond the end of device "physmap-flash.0" -- size truncated to 0x2e0000
mtd: partition "rootfs" set to be root filesystem
mtd: partition "rootfs_data" created automatically, ofs=260000, len=1A0000
0x000000260000-0x000000400000 : "rootfs_data"
0x000000050000-0x000000800000 : "firmware"
mtd: partition "firmware" extends beyond the end of device "physmap-flash.0" -- size truncated to 0x3b0000
TCP westwood registered
NET: Registered protocol family 17
802.1Q VLAN Support v1.8 Ben Greear
All bugs added by David S. Miller
lib80211: common routines for IEEE802.11 drivers
VFS: Mounted root (squashfs filesystem) readonly on device 31:4.
Freeing unused kernel memory: 148k freed
- preinit -
Press the [f] key and hit [enter] to enter failsafe mode
- regular preinit -
JFFS2 notice: (290) jffs2_build_xattr_subsystem: complete building xattr subsystem, 1 of xdatum (1 unchecked, 0 orphan) and 4 of xref (0 dead, 2 orphan) found.
switching to jffs2
- init -

Please press Enter to activate this console. Compat-wireless backport release: compat-wireless-2011-06-23
Backport based on wireless-testing.git master-2011-06-22
cfg80211: Calling CRDA to update world regulatory domain
device eth0.1 entered promiscuous mode
device eth0 entered promiscuous mode
br-lan: port 1(eth0.1) entering forwarding state
br-lan: port 1(eth0.1) entering forwarding state
PPP generic driver version 2.4.2
ip_tables: (C) 2000-2006 Netfilter Core Team
NET: Registered protocol family 24
nf_conntrack version 0.5.0 (471 buckets, 1884 max)
cfg80211: World regulatory domain updated:
cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)
cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
cfg80211: (2457000 KHz - 2482000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
cfg80211: (2474000 KHz - 2494000 KHz @ 20000 KHz), (300 mBi, 2000 mBm)
cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)
cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

BusyBox v1.18.5 (2011-08-02 21:37:04 MSD) built-in shell (ash)
Enter 'help' for a list of built-in commands.

_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
ATTITUDE ADJUSTMENT (bleeding edge, r27878) ----------
* 1/4 oz Vodka Pour all ingredients into mixing
* 1/4 oz Gin tin with ice, strain into glass.
* 1/4 oz Amaretto
* 1/4 oz Triple sec
* 1/4 oz Peach schnapps
* 1/4 oz Sour mix
* 1 splash Cranberry juice
-----------------------------------------------------
root@OpenWrt:/#

Necromant’s MultiDrop UART: Софтовая часть

Хех, несмотря на все, в девайсе нашлиись баги. Причем аппаратные в схемотехнике, которые надо будет переделывать. Например, транзюки в открытом состоянии давали просадку в 0.2 вольта, а следующий за ним диод добавлял еще 0.1 вольт, в итоге 3.3 превращались в 3.0 вольт. Терпимо, но неприятно. потому P мосфеты уже летят ко мне из солнечного китая.
ну а пока они летят, я занялся софтом. Немного красноглазия и на свет родилась простая консольная утилитка muart-ctl, которая переключает канал и напряжение. А фронтенд… хех..
Я замахнулся на плазмойд для KDE4 в виде фронтэнда.

Думаю, основное скажет скрншот:
А вот так выглядит на всем досктопе :

Управление профилями пок еще не реализовано, и будет сделано в мелкой утилитке для командной строки. В остальном, все работает.
Плазмойд сварганен на javascript’e. Биндинги оказались документированы фигово, потому пришлось немного поработать телепатом. Неприятным сюрпризом оказалось отсутствие у жабаскрипта апи к dbus’у. То есть утилитка не сможет пнуть плазмойд, чтобы тот перерисовался при изменении параметров из командной строки. (Никита Мельниченко в своем плазмойде makeProgress сварганил эту часть в виде датаэнджина на питоне, но я что-то как-то не хочу так извращаться. Подожду апи, наверное.) Так или иначе, для первого проектика на джаваскрипте неплохо.
И опять огромное спасибо Никите за его плазмойд makeprogress. Его я зазобрал на куски и пользовал вместо документации.

ASUS wl520gu: Доводим клиента до кондиции (ч.1)

Не так давно приобрел себе это чудо. На радостях, что в него можно закатать OpenWRT и обеспечить раздачу интернетов с 3g модема на даче. На сайте OpenWRT писали, что у него проблемы с usb 2.0, и от этого он вешается…

На всякий пожарный нафиг отрубаю usb-ehci, собираю запускаю…
И пошли зависания. Стоит поднять ppp соединение с интернетом как не проходит и 20 секунд, как оно вешается. Пинги идут нормально, но стоит открыть, например, speedtest.net и все, кранты.
Распаиваем последовательный порт, подрубаем терминал, читаем вывод.
Хост контроллер тихонечко умирает, о чем нам сообщает (HC died), подчищает за собой мусор, и отпускает 8е прерывание. Которое вскоре дергается вызывая сотни строк ругани в последовательный порт, отрубание вообще всей сети и звисание.
После нескольких дней лютого красноглазия, а так же чтения спецификацияй usb я понял… что ничего не понял. На вид все должно работать, так откуда-же приходит информация, что хост контроллер скопытился?
Следующим этапом переключился с OpenWRT backfire на trunk. Оный там обозвали attitude adjustment и при входе в систему вывесили уже другой рецептик чего-то спиртосодержащего… Лучше я этот рецептик пробовать не буду…

Собирал оный я опять без ehci, и опять же напоролся на тот же самый баг. Подрубаю на всякий случай флешку, перекидываю туда сюда файлы, копирую образ бубунты… Зависаний нет. А от модема есть. Может наводка?
В общем рылся я долго и нудно, пока не рискнул включить таки этот долбаный ehci, и взять usb2.0 хаб… Внезапно оно заработало. Втыкаем модем напрямую — зависон, врубаем через хаб — работает. Просидел в сети два часа, после чего тест прекратил. В чем же дело? И тут поиск по интернету с другии ключевыми словами откопал вот этот пост на вртшном форуме: https://forum.openwrt.org/viewtopic.php?pid=107593#p107593

Иными словами, между роутером и следующим по течению устройством связь должна быть строго по 2.0. Тогда все нормально. Если мы к внешнему хабу втыкаем 1.1 устройства, то уже головная боль хаба перетранслировать 1.1 в 2.0 и отправить роутеру. Встроенный же хаб роутера так делать лучше не заставлять. Забавно, что как пишут там же, хувеевский роутер D100 на том же чипе нормально работает а хуавеевская прошивка на асусовском роутере точно так же виснет.

В итоге погоняв 2.0 встретил небольшие зависания без сообщений в лог. Но уже редкие и при большом трафике по usb. По счастью в код не полез — догадался пощупать чип, и сразу же насадил на него радиатор. После этого зависания пропали, хочется верить, окончательно.

Ну что же, остается только доделать к нему автономное питание и все будет очень и очень неплохо…