нет, с FlowControl нет проблем и не было (просто тогда было совпадение).
queue_gprs_bytes сейчас 2000 байт, когда было 200 байт - то иногда не успевал обрабатывать и получались dropped.
Приоритетами играл - не то.
Вот еще что, я немного переделал функцию приема и вот что получилось:
Код
void get_rest_of_FW(unsigned long bytesleft, File * file)
{
LED_RedBlink(10);
struct netbuf * in_buf;
unsigned short k = 2;
while (bytesleft)
{
if (in_buf = netconn_recv(conn))
{
// успешно приняли что то
char * incoming_data;
unsigned long buflen = netbuf_len(in_buf);
if (incoming_data = (char *)pvPortMalloc(buflen))
{
{
char * data; u16_t len;
netbuf_data(in_buf, (void **)&data, &len);
printf_diagn("%d: %lX->%lX (%d:%d)\r\n\r\n", k, data, incoming_data, buflen, bytesleft-buflen );
}
netbuf_copy(in_buf, incoming_data, buflen);
if ( ((signed long)bytesleft - (signed long)buflen) < 0 ) //// заплатка
buflen = bytesleft;
file_write(file, buflen, (unsigned char *)incoming_data);
vPortFree(incoming_data);
}
else
{
LED_RedBlink(4);
}
bytesleft -= buflen;
netbuf_delete(in_buf);
k++;
}
else
{
//bytesleft = 0;
netconn_write(conn, "#M#push\r\n", strlen("#M#push\r\n"), NETCONN_NOCOPY); // заплатка
}
}
LED_RedBlink(0);
}
Здесь собственно что: когда данные из модема перестают поступать я кидаю строчку "#M#push\r\n" в сервер (это типа просто текстовое сообщение от клиента), после этого сервер начинает опять слать очередную порцию данных. И так соответственно 2 раза за 130кБ.
В конце массива я на 2 своих текстовых сообщения получаю 2 текстовых ответа-подтверждения (в рамках протокола Wialon). Просто не беру эти куски в учет и все... - файл передан.
В этой связи вопрос такой: может ли быть на сервере или у оператора gsm какое то ограничение на время отправки пакета с таким вот эффектом запора?