예제 #1
0
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;*/
}
예제 #2
0
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;
	}
}
예제 #3
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;
}