Вопрос по проблеме драйвера Linux n_gsm 0710 при обработке полученных данныхLinux

Ответить
Anonymous
 Вопрос по проблеме драйвера Linux n_gsm 0710 при обработке полученных данных

Сообщение Anonymous »

Когда я пытаюсь собрать DLCI 1, похоже, это не удалось, вот журнал,
//открываем DLCI 0,
gsm_send_packet: 00000000: f9 03 3f 01 1c f9
gsmld_receive_buf: 00000000: f9 03 73 01 d7 f9

//открываем DLCI 1,
07-10 15:31:34.399 950 950 I gsm_send_packet: 00000000: f9 07 3f 01 de f9
07-10 15:31:34.399 950 950 I gsmld_output: 00000000: f9 07 3f 01 de f9
07-10 15:31:34.399 950 950 E : gsm_data_kick list_empty! return!
07-10 15:31:34.399 950 950 E : gsmld_write_task
07-10 15:31:34.399 950 950 E : gsm_data_kick ttyflag=2048

// одновременно запускаем SABM (можно ли это удалить? или это обязательно?)
07-10 15:31:34.399 950 950 I gsm_send_packet: 00000000: f9 03 ef 09 e3 05 07 8d fb f9
07-10 15:31:34.399 950 950 I gsmld_output: 00000000: f9 03 ef 09 e3 05 07 8d fb f9
07-10 15:31:34.399 950 950 E : gsm_data_kick list_empty! return!

//UA от хоста B для обоих отправленных выше кадров вернулось (всего 26 октетов)
07-10 15:31:34.407 249 249 I gsmld_receive_buf: 00000000: f9 07 73 01 15 f9 f9 01 ff 09 e3 05 07 8d 8f f9
07-10 15:31:34.408 249 249 I gsmld_receive_buf: 00000010: f9 03 ff 09 e1 05 07 8d ee f9
07-10 15:31:34.408 249 249 E : gsmld_receive_buf --flag 0 count=26
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->state=0
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->fcs=255
07-10 15:31:34.408 249 249 E : gsmld_receive_buf --flag 0 count=25
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->state=2
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->fcs=186
07-10 15:31:34.408 249 249 E : gsmld_receive_buf --flag 0 count=24
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->state=3
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->fcs=15
07-10 15:31:34.408 249 249 E : gsmld_receive_buf --flag 0 count=23
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->state=8
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->fcs=234
07-10 15:31:34.408 249 249 E : gsmld_receive_buf --flag 0 count=22
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->state=6
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->fcs=207
07-10 15:31:34.408 249 249 E : gsmld_receive_buf --flag 0 count=21
07-10 15:31:34.408 249 249 E : gsm0_receive gsm->state=10
07-10 15:31:34.408 249 249 E : gsm_queue addr=3, gsm->fcs=207
07-10 15:31:34.408 249 249 E : gsm_dlci_open state=2

//здесь процедура необоснованно останавливает обработку полученных данных буфера, около 1 с
//затем происходит тайм-аут T2 и вызывается gsm_control_retransmit.
07-10 15:31:35.434 0 0 E : [ C2] gsm_control_retransmit ctrl=759782080
07-10 15:31:35.434 950 950 E : gsmld_write_task
07-10 15:31:35.434 950 950 E : gsm_data_kick ttyflag=2048
07-10 15:31:35.434 950 950 I gsm_send_packet: 00000000: f9 03 ef 09 e3 05 07 8d fb f9

Кто-нибудь знает, почему 'gsmld_receive_buf' прекращает обработку полученных данных буфера в 21 октете?
вот такой же исходный код,
https://github.com/torvalds/linux/blob/ ... ty/n_gsm.c
static void gsmld_receive_buf(struct tty_struct *tty, const u8 *cp,
const u8 *fp, size_t count)
{
struct gsm_mux *gsm = tty->disc_data;
u8 flags = TTY_NORMAL;

if (debug & DBG_DATA)
gsm_hex_dump_bytes(__func__, cp, count);

for (; count; count--, cp++) {
if (fp)
flags = *fp++;
switch (flags) {
case TTY_NORMAL:
if (gsm->receive)
gsm->receive(gsm, *cp);
break;
case TTY_OVERRUN:
case TTY_BREAK:
case TTY_PARITY:
case TTY_FRAME:
gsm_error(gsm);
break;
default:
WARN_ONCE(1, "%s: unknown flag %d\n",
tty_name(tty), flags);
break;
}
}
/* FASYNC if needed ? */
/* If clogged call tty_throttle(tty); */
}



Подробнее здесь: https://stackoverflow.com/questions/787 ... eived-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»