LINUX.ORG.RU

Снова mgetty


0

1

Продолжаю ковырять mgetty. Столкнулся с такой проблемой. Мне нужно определять номер, с которого звонят. Я даю команду своему модему, чтобы он отображал расширенную информацию о звонящем

AT+CRC=1
AT+CLIP=1 

Информация о звонящем приходит — но mgetty отказывается снимать трубку. Она, видите ли, ждет RING, а приходит +CRING:.... (там дальше инфа о звонящем). Если же указанных команд нет — приходит RING и mgetty берет трубку.

Посоветуйте, пожалуйста, как это побороть?

Ответ на: комментарий от decadent

grep -R RING * | wc -l
385

Не так уж и много. Но, я бы начал с:

$ grep -R RING_DETECTED *
voice/scripts/Vgetty.sh: NO_DIAL_TONE|NO_VOICE_ENERGY|RING_DETECTED|RINGBACK_DETECTED|\
voice/scripts/Vgetty.sh.EXAMPLE:X NO_DIAL_TONE|NO_VOICE_ENERGY|RING_DETECTED|RINGBACK_DETECTED|\
voice/ChangeLog: * RING_DETECTED is now supported as an event in WAITING (event.c)
voice/include/event.h:#define RING_DETECTED (0x200f)
voice/doc/Readme.voice_shell: Event: RING_DETECTED
voice/libvoice/event.c: {«RING_DETECTED», RING_DETECTED},
voice/libvoice/event.c: case RING_DETECTED:
voice/libvoice/IS_101.c: return(queue_event(create_event(RING_DETECTED)));
voice/libvoice/shell.c: case RING_DETECTED:
voice/libvoice/shell.c: if (voice_write_shell(«RING_DETECTED») != OK)
voice/Perl/Vgetty.pm: NO_DIAL_TONE NO_VOICE_ENERGY RING_DETECTED RINGBACK_DETECTED
voice/Perl/Vgetty.pm:=item RING_DETECTED

То есть:

$ grep -Rl RING_DETECTED *
voice/scripts/Vgetty.sh
voice/scripts/Vgetty.sh.EXAMPLE
voice/ChangeLog
voice/include/event.h
voice/doc/Readme.voice_shell
voice/libvoice/event.c
voice/libvoice/IS_101.c
voice/libvoice/shell.c
voice/Perl/Vgetty.pm

Если выкинуть документацию и примеры остаётся всего 6 файлов.
Кто-то из сишников в округе есть?

imul ★★★★★
()
Ответ на: комментарий от imul

Думаю, что надо в файле ring.c перед строками:

        /* now check the different RING types 
         * if not "RING<whatever>", clear buffer and get next line
         */
        if ( strncmp( buf, "RING", 4 ) != 0 )
            { w = 0; lprintf( L_NOISE, "got: " ); continue; }

добавить такое:

 if ( strncmp( buf, "+СRING:",  7) == 0 ) { break; }  

Это должно заставить его брать трубку, хотя, там надо более подробно разбиратся и определять как и куда сохранить инфу о звонящем.

Другое дело, хватит ли у ТС квалификации вобще просто собрать mgetty из исходников, даже ничего не патчя?

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.