The AT command +CMGD (command name in text: Delete Message) is used to delete SMS message(s) from message storage. The message storage area from which SMS messages are deleted is specified by the +CPMS AT command (command name in text: Preferred Message Storage). Details about the +CPMS AT command can be found in the earlier section "Preferred Message Storage (AT+CPMS)" of this SMS tutorial.
1. Syntax of the +CMGD AT Command
The syntax of the +CMGD AT command is: (Optional parameters are enclosed in square brackets.)
+CMGD=index[,flag]
In the above line, index is an integer specifying the location of the SMS message to be deleted from the message storage area by the +CMGD AT command, and flag is an integer specifying whether to delete SMS messages according to their message status. The SMS specification has defined these flag values: 0, 1, 2, 3 and 4.
0. Meaning: Delete only the SMS message stored at the location index from the message storage area. This is the default value.
1. Meaning: Ignore the value of index and delete all SMS messages whose status is "received read" from the message storage area.
2. Meaning: Ignore the value of index and delete all SMS messages whose status is "received read" or "stored sent" from the message storage area.
3. Meaning: Ignore the value of index and delete all SMS messages whose status is "received read", "stored unsent" or "stored sent" from the message storage area.
4. Meaning: Ignore the value of index and delete all SMS messages from the message storage area.
To find the flag values supported by your GSM/GPRS modem or mobile phone, you can perform a test operation using the +CMGD AT command. See the next section for the details.
2. Finding the Supported Indexes and Flag Values
Performing a test operation with the +CMGD AT command allows you to find all indexes that are supported by the index parameter. The test operation may also return all supported values of the flag parameter. Here is the format of the information response returned after the execution of the test command "+CMGD=?": (Optional fields are enclosed in square brackets.)
+CMGD: (list_of_indexes)[,(list_of_flag_values)]
The values inside the first parentheses are the values that are supported by the index parameter of the +CMGD AT command.
The values inside the second parentheses are the values that are supported by the flag parameter of the +CMGD AT command. Note: A GSM/GPRS modem or mobile phone might not provide these values since the SMS specification defines them as optional.
As an example, here is the response returned from my Nokia 6021 mobile phone to Windows' HyperTerminal program after the execution of the test command "+CMGD=?":
AT+CMGD=?
+CMGD: (1-10),(0-4)
OK
From above, we know that the Nokia 6021 mobile phone allows any integer between 1 and 10 to be assigned to the index parameter of the +CMGD AT command. Also, the Nokia 6021 mobile phone supports all of the five flag values defined in the SMS specification.
Do you remember that we described the format of values inside parentheses in the section "Test Command -- Checks Whether a Certain AT Command is Supported"? If not, you may want to go back and have a look. Here are a few examples showing some of the possibilities: "(0-4)", "(0,1,2,3,4)", "(0,2-4)".
3. Example Demonstrating How to Use the +CMGD AT Command to Delete SMS Text Messages
Now let's see an example that demonstrates how to use the +CMGD AT command to delete an SMS text message from the message storage area. Suppose you have written an SMS text message to the message storage area by the +CMGW AT command (details about the +CMGW AT command can be found in the earlier section "Writing SMS Messages to Memory / Message Storage (AT+CMGW)" of this SMS tutorial), like this:
AT+CMGW="+85291234567"
> A simple demo of SMS text messaging.
+CMGW: 1
OK
The information response of the +CMGW AT command tells us that the SMS text message is stored in the memory location at index 1. To delete the SMS text message, specify 1 to the index parameter of the +CMGD AT command, like this:
(Important note: Make sure you are writing text messages to and deleting text messages from the same message storage area. If not, you may delete the wrong text message. Details about message storage areas can be found in the earlier section "Preferred Message Storage (AT+CPMS)" of this SMS tutorial.)
AT+CMGD=1
OK
The final result code OK indicates the SMS text message "A simple demo of SMS text messaging." was deleted successfully. If the operation fails, the final result code returned will either be ERROR or +CMS ERROR.
Here is another example. Suppose you want to delete all SMS messages stored in the message storage area. To do this, assign 4 to the flags parameter of the +CMGD AT command. The value assigned to the index parameter does not matter since it will be ignored by the GSM/GPRS modem or mobile phone.
AT+CMGD=1,4
OK
from developershome .com