Нашёл тему по BGS2, поэтому пишу сюда.
Передаю данные по жпрсу, для чтения данных использую команду at^sisr=0,8 (читаю по 8 символов из первого профиля). Согласно доке, если правильно понял, сигнал о том, что данные прилетели, служит асинхронно выскакивающая ^SISR: 0,1. Соединение устанавливается и, когда данные приходят, ^SISR: 0,1 выскакивает, данные читаются и обрабатываются. Но так происходит только один раз, самый первый раз. Дальше, когда данные приходят (а они точно приходят, ибо если насильно запустить at^sisr, данные можно считать), ^SISR: 0,1
НЕ выскакивает. В чем дело? Буду признателен за помощь.
Кусок кода, вызываемый для обработки входящих, данных вот такой:
Код
if(uart0RxNotEmpty()==0) return;
getResponseFromBgs2ByTime(buf,100);
/* Прочитать есть ли данные в буфере. Запрашиваю, жду ответа TIME_TO_WAIT_COMMON и ответ ложу в buf */
if(bgs2Write("AT^SISR=0,8\r\n",13,buf,TIME_TO_WAIT_COMMON)==0) return;//100
/* Найте место, где заканчивается эхо */
while(buf[i]!='\n')i++;
i++;
/* если все отвалилось */
if(memCmp("^SISR: 0,-2",&buf[i],11)==0)
{
reconnectGprs(buf);
return;
}
/* Считать сведения о принятых данных */
sscanf(&buf[i],"^SISR: %d,%d",&tmp,&dataLen);
/* Не продолжать если данныx нет */
if(dataLen==0) return;
/* Если данные есть, найти их начало */
i+=10;
while(buf[i] != '\n')i++;
memcpy(tmpBuf,&buf[i+1],10);
/* Обработать данные */
if(processModbusMsg((unsigned char*)tmpBuf,(unsigned char*)buf,&dataLen) == 0) return;
/* ответить */
memset(tmpBuf,0,100);
sprintf(tmpBuf,"AT^SISW=0,%d\r\n",dataLen);
sendStringToBgs2(tmpBuf,strlen(tmpBuf));
getResponseFromBgs2ByTime (tmpBuf,TIME_TO_WAIT_COMMON);
sendStringToBgs2(buf,dataLen);