LINUX.ORG.RU

Сообщения Eddy_Em

 

Как управлять DTR/RTS порта?

Пробую, как написано здесь сделать так:

int RTS_flag = TIOCM_RTS; // TIOCM_DTR
if(ioctl(comfd,TIOCMBIC,&RTS_flag) < 0) exit(-2);//Clear RTS pin
Не получается: ioctl возвращает ошибку -1.

Видимо, эти ioctl'ы старые. У меня ядро 5.0.4. Как в нем принято это делать? Работаю с эмулятором PL2303 на STM32F103.

UPD. Проверил на «настоящем китайском» PL2303: работает без ошибок. А мой эмулятор выдает ошибку и в dmesg вижу

pl2303 ttyUSB0: pl2303_set_control_lines - failed: -71
В общем, надо смотреть, что я там в обработчике накосячил.

 ,

Eddy_Em
()

usb_control_msg() выдает EPIPE

Когда я писал эмуляцию PL2303 на STM32, как-то не напрягался, что при открывании порта в dmesg вылезает ошибка: pl2303_set_line_request - failed: -32. Оно даже работало в прошивке-7 под виртуалбоксом. Однако, оказалось, что оно не работает (видимо, из-за этой ошибки) в прошивке-10 и в андроиде.

Ошибка возникает на запрос SET_LINE_CODING, который приходится обрабатывать «в два присеста», т.к. STM32 на первое прерывание получает лишь код контрольного сообщения, а во втором прерывании уже выдает данные для настройки линии. В этом-то и загвоздка: ошибка у меня в коде может быть как в первой половинке, где я просто отправляю ZLP, так и во второй, где уже вызывается обработчик.

Удручает, что wireshark вообще никаких ошибок не показывает! Лог от «настоящего» китайского PL2303 ничем не отличается от моей эмуляции. Т.е. что-то происходит еще в ядре, и до wireshark не доходит.

Что это может быть, а, железячники?

Ну и в догонку такой вопрос: иной раз дескрипторы получаются очень большими, и приходится их в несколько присестов отправлять. Я пробовал собрать CDC, пересылая конфигурационный дескриптор так же, как пересылаю HID дескриптор, но в wireshark вижу «mailformed»...

 ,

Eddy_Em
()

Dimez, так нельзя!

Почему ты трешь комментарии про ублюдка поцтеринга? Да ещё и со срезом скора...

Ты что, работаешь на эту тварь?

 

Eddy_Em
()

Ростелеком ворует пользовательские данные?

Только я возмутился хамскому поведению «ростелекома», как мне дают новую интересную историю сканирования портов пользователя через браузер. Понятно, что эта штука сработает как нужно лишь если в браузере есть дыры. Но осадочек-то остался!

Насчет советов вроде «перейди с ростелекома на другого провайдера» заранее сообщаю: у нас ростелеком находится в состоянии монополиста. Потому что у «мегафона» (от которого я благополучно в пользу МТС отказался) в нашем ауле только EDGE, билайн вообще еле-еле работает, а МТС показывает 4G лишь на работе, дома он — все тот же 2G (и лишь иногда 3G кажет)! Вот и остается лишь проводной ростелеком ☹

 , , ,

Eddy_Em
()

Еще раз

Прошу удалить мой аккаунт вместе со всеми 87546 сообщениями и 317+21=338 темами!

Задолбали!

 

Eddy_Em
()

Raspberry Pi зависает при активации USB

Развернул я на SD-карточке генту, скомпилировал ядро 4.1.15, гружусь, и вылезают проблемы. Сначала я думал, что подвисание происходит при инициализации сетевой карты, убрал из /lib/modules модуль smsc95xx.ko, и все равно при активации USB на стадии обнаружения этой карты происходит зависание:

[    2.219170] usb 1-1: New USB device found, idVendor=0424, idProduct=9514
[    2.227820] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    2.240352] hub 1-1:1.0: USB hub found
[    2.246298] hub 1-1:1.0: 5 ports detected
[    2.523857] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[    2.634324] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[    2.643335] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Может, кто сталкивался? Как решить проблему?

 

Eddy_Em
()

Не могу скомпилировать ядро для Raspberry

Весь день мучаюсь, перебрал несколько вариантов отсюда, однако, либо вообще попадается битое дерево, либо же вот такая ошибка вылезает:

drivers/staging/media/lirc/lirc_rpi.c:42:23: fatal error: mach/gpio.h: No such file or directory
compilation terminated.
make[4]: *** [drivers/staging/media/lirc/lirc_rpi.o] Ошибка 1
make[3]: *** [drivers/staging/media/lirc] Ошибка 2
make[2]: *** [drivers/staging/media] Ошибка 2
make[1]: *** [drivers/staging] Ошибка 2
make: *** [drivers] Ошибка 2
Мне-то lirc не нужен, но есть подозрение, что еще какая-нибудь бяка вылезет.

Может, пропатченное под малинку ядро из какого-то другого источника надо качать?

Очень хочу на генту перейти. Сил моих нет бодаться с дебилианом!

 ,

Eddy_Em
()

Как заставить cmake не удалять файлы при make clean?

Делаю русификацию. Вот начало:

set(PO_FILE ${LCPATH}/messages.po)
set(MO_FILE ${LCPATH}/LC_MESSAGES/${PROJ}.mo)
set(RU_FILE ${LCPATH}/ru.po)

find_package(Gettext REQUIRED)
find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext)
if(NOT GETTEXT_XGETTEXT_EXECUTABLE OR NOT GETTEXT_MSGFMT_EXECUTABLE)
	message(FATAL_ERROR "xgettext not found")
endif()
file(MAKE_DIRECTORY ${LCPATH})
file(MAKE_DIRECTORY ${LCPATH}/LC_MESSAGES)

add_custom_command(
	OUTPUT ${PO_FILE}
	WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
	COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} --from-code=utf-8 ${SOURCES} -c -k_ -kN_ -o ${PO_FILE}
	COMMAND sed -i 's/charset=.*\\\\n/charset=koi8-r\\\\n/' ${PO_FILE}
	COMMAND enconv ${PO_FILE}
	DEPENDS ${SOURCES}
)
А вот дальше — полная фигня!

Я хочу, чтобы можно было сказав make MO_FILE перекомпилировать его после изменения файла русификации. Пишу:

add_custom_target(
	MO_FILE
	COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ${RU_FILE} -o ${MO_FILE}
	DEPENDS ${RU_FILE}
)
Однако, чтобы этот файл сгенерировался при простом make, мне нужно писать
add_custom_command(
	OUTPUT ${MO_FILE}
	COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} ${RU_FILE} -o ${MO_FILE}
	DEPENDS ${RU_FILE}
)
Что приводит к удалению сего файла при make clean.

Аналогичная ситуация с RU_FILE: если я пишу

add_custom_command(
	OUTPUT ${RU_FILE}
	COMMAND [ -f ${RU_FILE} ] && ${GETTEXT_MSGMERGE_EXECUTABLE} -Uis ${RU_FILE} ${PO_FILE} || cp ${PO_FILE} ${RU_FILE}
	DEPENDS ${PO_FILE}
)
, то весь перевод нафиг удаляется после make clean, т.е. нужно писать
add_custom_target(
	RU_FILE
	COMMAND [ -f ${RU_FILE} ] && ${GETTEXT_MSGMERGE_EXECUTABLE} -Uis ${RU_FILE} ${PO_FILE} || cp ${PO_FILE} ${RU_FILE}
	DEPENDS ${PO_FILE}
)
add_custom_command(
	OUTPUT ${MO_FILE}
	COMMAND make RU_FILE && ${GETTEXT_MSGFMT_EXECUTABLE} ${RU_FILE} -o ${MO_FILE}
	DEPENDS ${RU_FILE}
)
Однако, в этом случае (если опустить custom_command для RU_FILE) получаю (как и следовало ожидать) ошибку:
make
make[2]: *** Нет правила для сборки цели `../locale/ru/ru.po', требуемой для `../locale/ru/LC_MESSAGES/fitsread.mo'.  Останов.
make[1]: *** [CMakeFiles/fitsread.dir/all] Ошибка 2
make: *** [all] Ошибка 2
, а еще файл ru.po перестает обновляться при изменении PO_FILE.

Как из этого замкнутого круга выйти и сделать так, чтобы файл русификации (ru.po) не удалялся при make clean, но в то же время при изменении ru.po файл .mo автоматом генерировался бы через make, а при изменении PO_FILE ru.po автоматом обновлялся?

 ,

Eddy_Em
()

Кошерная обработка параметров командной строки

Знаю, вопрос уже избитый. Но вот никак ничего подходящего для меня не могу найти. Отсюда (перечень гнутых утилит для обработки параметров) "в сыром виде" ничего не подходит.

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

Но вот понадобилось мне реализовать возможность задания определенных параметров несколько раз. И пришлось ваять это (почти весь день сегодня убил, благо, полдня ЛОР лежал и ничто не отвлекало). (на ЖЖшке).

Вот что получается при запуске:

./myopt_example -a 1e-5 -f type=as:xsz=5s something -a 3e-9 -f type=med:ysz=15 some_more -s again -f xsz=5 -s more -M diam=8:foc=10 -vvvv
Globals:
S_dev = 8 (default)
randAmp[0]: 1e-05
randAmp[1]: 3e-09
meet str args:
str[0] = again
str[1] = more
S_interp = 100
S_image = 1000
N_phot = 10000
randMask = 0
Mirror =
	D = 8
	F = 10
	Zincl = 0
	Aincl = 0
rewrite_ifexists = 0
verbose = 4
There's also 2 free parameters:
	   0: something
	   1: some_more
filter parameters:
0:
Wrong argument "5s" of parameter "xsz"
	bad params
1:
	filtertype = med, sizes: 3x15
2:
	filtertype = (null), sizes: 5x3
Т.е. есть переменные с инкрементом (-v — чем больше раз встречается, тем больше число), массивы (randAmp, str), обработка по порядку свободных параметров (something, some_more), предварительная (до передачи управления обратно в вызвавшую parce_args функцию) обработка вложенных аргументов и постобработка вложенных аргументов (filter parameters) — уже вне велосипеда.

Однако, скажем, ffmpeg умеет делать такие сложные вещи, как определение групп параметров между одноименными ключами. Как бы и мне сделать так, чтобы, скажем,

./myopt_example -f filt1:xzs=10 -h 10 -v 20 -f filt2:ysz=20 -s par -f filt3
Автоматом бы связывал каким-то образом параметры, чтобы при обработке первого -f к нему же были привязаны -h, -v; при обработке второго — -s?

Есть ли вообще библиотеки, умеющие сложный парсинг аргументов командной строки без съезжания крыши у пишущего код? А то я со своим-то велосипедом чуть не рехнулся с этими двойными и тройными указателями!

 

Eddy_Em
()

Поломался [code]

Не разбивает на строки.

Оригинал ([pre]):

строка 1
строка 2
строка 3
строка 4

То же в [code]:

строка 1
строка 2
строка 3
строка 4

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

Тема Black.

 ,

Eddy_Em
()

true_admin, верни шкворец!

true_admin, ты вообще опух?!

Какого черта ты удалил мою аватарку? Да еще и -10 снес...

Если так будет продолжаться и дальше, идите вы все в жопу. Я уйду нафиг из этого болота проприетастов и мудаков!

 

Eddy_Em
()

И смех, и грех

Посмотрите, к чему приводит вера в авторитет преподавателя: https://toster.ru/q/267058

Человек уверен, что если препод сказал так, то иначе и быть не может... То, что преподаватель — лопух, а аппаратуры при нем нет, может проверить любой.

 

Eddy_Em
()

Есть ли готовые реализации адаптивной медианной фильтрации на С?

Понадобилось мне сделать более-менее шуструю адаптивную медианную фильтрацию на сях. Накопал статью, по ней вышел на бенчмарки. К сожалению, оригинал написан на С++, а переписывать на С его не вижу смысла, т.к. над другим методом (скользящая медиана) он имеет преимущества лишь на больших размерах окна (мне это не нужно).

Навелосипедил пока из образца кода для фильтрации 1-мерных данных медианную фильтрацию изображений (правда, еще не думал, что с краями делать). Боюсь, что когда переделаю на адаптивную медианную, получится жутко медленно, а уже достаточно сильно тупит: случайно сгенерированное изображение 4000x4000 в среднем фильтруется 1.5с окном 3х3 пикселя; 4.5с окном 5х5 пикселей и 8.8с окном 7х7 пикселей.

Может кто занимался подобным, подскажите, вдруг где готовая реализация завалялась?

 ,

Eddy_Em
()

ssh, иксовые приложения запускаются на удаленном дисплее

Уже полчаса сижу, не могу понять: пытаюсь по ssh запустить hugin на ноуте, чтобы не вис компутер, а эта зараза открывает окно непосредственно на дисплее ноутбука! Любое другое иксовое приложение делает то же самое. echo $DISPLAY говорит 0:0, я вообще не понимаю, как так может быть! Конфигурация sshd вполне вроде бы нормальная...

 ,

Eddy_Em
()

Как обновить генту, если distfiles примонтирован по sshfs?

никак ☹

Eddy_Em
()

Аналог adBlock для тупняка в тытрубе

Мелкая уже задолбала просить всякое говно поставить на тытрубе: то какое-то дите в игрульки играется, то проходит какое-то говно.

Вопрос: есть ли для хромоногой поделки (в огнелисе тытруба до сих пор не работает) плагинчик, который говноканалы блокирует?

Eddy_Em
()

Ext2 или на худой конец VFAT для микроконтроллеров

Что-то меня "в гугле забанили": не могу найти ни одного простого готового модуля ФС для мелкоконтроллеров. Хочу научиться работать с SD-карточкой на STM32.

Смотрел fatfs "от Чена". Жуть жуткая: около 5000 строк кода только в модуле ФС! Да я ж год убью, если буду в этом разбираться!!! С Ext2 еще хуже: что-то как-то уныло все...

Есть что-нибудь готовое, или все-таки нужно велосипедить на основе кода модуля ext2 какого-нибудь старого линуксового ядра?

Eddy_Em
()

Разложение на простые множители на микроконтроллере

Вот сейчас пишу простую управлялку шаговиком и столкнулся с проблемой задания очень низких скоростей вращения: так как все таймеры 16-битные с 16-битным предмножителем, любые периоды задать, понятное дело, не выйдет. Простейший способ (скажем, увеличивать предмножитель в 100 раз, если период больше 65536) приводит к довольно большим ошибкам в районе 66000 (скажем, вместо 65599 будет 65500).

А есть ли вариант без большого потребления ресурсов (флеш памяти и/или вычислительных ресурсов) выполнить наиболее оптимальный для данного числа подбор множителей? Простой перебор — слишком долго, на табулирование никаких ресурсов не хватит...

Eddy_Em
()

Поругайте «стража» дочерних процессов

При реализации видеостримера (туда еще нужно будет обработку добавить, но пока основная функция — собирать кадры видео и выплевывать в браузер) на некоторых USB-камерах ffmpeg при длительной работе выпадает в assert (вообще, дикость!). Аналогичные проблемы бывают при использовании libwebsockets, которая в случае отключения клиента тоже выбрасывает assert.

Чтобы бороться с этим я решил делать форк в самом начале, а потом контролировать работу дочернего процесса и если помрет — перезапускать заново.

Вот что получилось:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>

int child_killed = 0;

void sighndlr(int sig){
	printf("got signal %d\n", sig);
	if(sig == SIGCHLD){
		printf("Child was killed\n");
		child_killed = 1;
	}else{
		printf("suicide\n");
		exit(sig);
	}
}

pid_t create_child(){
	child_killed = 0;
	int i;
	pid_t p = fork();
	if(p == 0){
		printf("child\n");
		char *ptr = malloc(10000);
		for(i = 0; i < 256; ++i, ptr += 1024){
			*ptr += i;
		}
	}
	return p;
}

int main(){
	int i;
	for(i = 0; i < 255; ++i)
		signal(i, sighndlr);
	for(i = 0; i < 10; ++i){
		pid_t p = create_child();
		if(p){
			printf("child #%d with PID %d\n", i, p);
			while(!child_killed)
				usleep(10000);
		}else return 0;
	}
	return 0;
}


Фактически функция create_child() в дочернем процессе будет запускать "падучие функции", а родительский только будет "пасти" дочерние.

Вопрос: есть ли какие-то недостатки у такой реализации?

 ,

Eddy_Em
()

В связи с кончиной сосфоржа, куда переместить репы на mercurial?

Конечно, у меня есть зеркало на гитхабе, но все-таки, судя по тому, что сначала гуглокод сдох, теперь вот сосфорж, хранить все яйца в одной корзине ой как не хочется!

Поэтому вопрос: куда можно с сосфоржа прожектики переместить? Т.е. это должен быть нормальный опенсорсный ресурс, поддерживающий работу с mercurial. Ну, на худой конец и git сойдет. Лишь бы ресурс был не огороженный (как гитлаб какой-нибудь).

UPD. Вроде бы битбакет удовлетворяет.

Все, что было только на сосфорже, переделал в гит и запушил на гитхаб, потом скопировал все на битбакет.

 ,

Eddy_Em
()

RSS подписка на новые темы