Извините за многабукав, возможно кому-то это будет интересно.
Поразбирался немного в коде примера "hello" из ketlaer, для работы с аудио/видео сопроцессорами там используются высокоуровневые функции доступных бинарных библиотек из sdk, дополняя отсутствующие своей библиотекой libketlaer. Мне интересна более низкоуровневая работа с сопроцессорами через механизм RPC.
Из линукса к сопроцессорам можно обращаться через устройства /dev/rpc/[0-7] используя модифицированный sun-rpc протокол. Устройства 0 и 1 предназначены для передачи данных аудиопроцессору в режимах опроса (poll) и прерывания (intr) соответственно, 4 и 5 - передача данных видеопроцессору, 2 и 3 - чтение из аудиопроцессора, 6 и 7 - чтение из видеопроцессора, еще есть устройство 100 (/dev/rpc/100) с не до конца ясным назначением.
Список и описание команд сопроцессоров можно найти в файлах AudioRPC_System.x и VideoRPC_System.x из архива 351H-OpenSource.zip.part[1-3].rar, расположенного по адресу
http://www.mediafire.com/?sharekey=46ab ... ebb871#4,1 или из CM3PVRxx_2.00.004_APP.tar.gz расположенного по адресу
http://download.conceptronic.net/GNU-GP ... /2.00.004/ CM3PVRxx_2.00.004_APP.tar.gz . Также в этих архивах есть значительная, но, к сожалению, не вся, часть исходных текстов приложения DvdPlayer. Не ясна лицензия файлов в этих архивах.
В файле VideoRPC_System.x написано, что видеопроцессор обеспечивает аппаратную поддержку двух слоев видео, двух слоев субтитров, слоя OSD и курсора. К сожалению исходные тексты модуля ClientStub.o, преобразующего аргументы функции сопроцессора в последовательность байт, записываемых в устройство управления отсутствуют. Если взять какую-нибудь простую RPC функцию, например, SetBackground, с аргументами равными bgColor.c1 = 0x11, bgColor.c2 = 0x22, bgColor.c3 = 0x33, bgColor.isRGB = 0x44, bgEnable = 0x55, то при запуске тестового приложения "hello" через strace видно что происходит запись в устройство /dev/rpc/5 последовательности байт
- Code: Select all
00 00 00 64 - 00 00 00 00 - 00 00 0b d6 - 00 00 04 72 - 00 00 00 05 - 10 01 d4 e8 - 11 22 33 44 55
насколько я смог понять здесь "00 00 00 64", "00 00 00 00" и "00 00 0b d6" это т. н. "номер программы", номер версии и номер функции SetBackground из VideoRPC_System.x (100, 0, 3030), "00 00 04 72" - PID процесса производящего запись, "00 00 00 05" - длина аргумента, "11 22 33 44 55" - значение аргумента, значение "10 01 d4 e8" неизвестно, оно меняется в зависимости от аргумента, возможно это какая-то контрольная сумма.
Если у кого-нибудь есть какие-либо идеи/информация о том как можно использовать сопроцессоры через /dev/rpc/* , то было бы интересно услышать.