int mmGetTextLists(struct ModemInterface* interface, int* ids, int length) { mmSendCommand(interface, F("AT+CMGL\r")); mmFind(interface->modem, F("AT+CMGL\r")); int count = 0; int c; int len; while(count < length){ int c = mmFindChars(interface->modem, 'O', '+'); if(c == '+'){ mmFindChar(interface->modem, ' '); // ids[count++] = mmParseInt(interface->modem); mmFindChar(interface->modem, ':'); mmFindChar(interface->modem, ','); mmFindChar(interface->modem, ','); len = mmParseInt(interface->modem); mmFindChar(interface->modem, '\r'); for(int i = 0; i < len; i++) if(mmRead(interface->modem) < 0) i--; }else{ break; } } return count; /*while (mmFindChar(interface->modem, '+') && i < length) { ids[i] = mmParseInt(interface->modem); i++; //mmFindChar(interface->modem, '+'); } return i;*/ }
int mmRetrieveTextMessage(struct ModemInterface* interface, char* buffer, int length, int id) { mmSendCommand(interface, F("AT+CMGR=")); mmPrinti(interface->modem, id); //mmSendCommand(interface, id); mmWriteByte(interface->modem, '\r'); mmFind(interface->modem, F("AT+CMGR=")); int c = mmFindChars(interface->modem, 'E', ':'); int len; if (c == ':') { //mmFindChar(interface->modem, ':')) { mmFindChar(interface->modem, ':'); for(int i = 0; i < 7; i++) mmFindChar(interface->modem, ','); len = mmParseInt(interface->modem); mmFindChar(interface->modem, '\n'); if(length > len) length = len; len = length; int count; do{ count = mmReadBytes(interface->modem,buffer,length); buffer+=count; length-=count; }while(length > 0); buffer[0] = 0; return len; } else { return 0; } }
int getTextLists(struct ModemInterface* interf, int* ids, int length) { int i = 0; int temp, j; #if defined(LINUX) || defined(ARDUINO) mmSendCommand(interf, F("AT+CMGL\r")); while (mmFind(interf->modem, F("AT+CMGL")) && i < length) { ids[i] = mmParseInt(interf->modem); i++; } #endif #ifdef _WIN32 char * buffer[32]; char * ptr; mmSendCommand(interf, "AT+CMGL\r"); if (!mmFind(interf->modem, "+CMGL: ")) return -1; else { if (mmReadBytesUntil(interf->modem, ',', buffer, 32)) { ids[i] = (int)strtol((const char *)buffer, &ptr, 10); i++; } } while (mmFind(interf->modem, "+CMGL: ") && i < length) { if (mmReadBytesUntil(interf->modem, ',', buffer, 32)) { temp = (int)strtol((const char *)buffer, &ptr, 10); for (j = 0; j < i && ids[j] != temp; j++); if (j == i) { ids[i] = temp; i++; } } } PurgeComm(interf->modem->hSerial, PURGE_RXCLEAR | PURGE_TXCLEAR); #endif return i; }