Extended ETSI Hayes AT command parameters for SMS


AT+CSMS: Select Message Service:

Command Possible response(s) +CSMS=<Service> +CSMS: <mt>,<mo>,<bm>

+CMS ERROR: <err>

+CSMS?+CSMS: <service>,<mt>,<mo>,<bm> +CSMS=?+CSMS: (List of supported <service>s)

<service>: 0;

<mt>,<mo>,<bm>: 0=not supported, 1=supported

--> Only <mt> and <mo> is implemented;

AT+CPMS: Preferred Message Storage:

Command Possible response(s) +CPMS=<mem1>[,<mem2>[,<mem3>]] +CPMS: <used1>,<total1>,<used2>,<total2>,<used3>,<total3> +CPMS?+CPMS: <mem1>,<used1>,<total1>,<mem2>,<used2>,<total2>,... +CPMS=?+CPMS: (List of supported <mem1>s), (List of supported <mem2>s), (List of supported <mem3>s)

<mem1>: Memory used for reading and deleting of SMS messages (+CMGL, +CMGR, CMGD


<mem2>: Memory used for writing and sending of SMS messages (+CMGW-commando)

Defined values:

ME : Mobile Equipment, the handset;

SM : SIM card;

AT+CMGF: Message Format:

Command Possible response(s) +CMGF=[<mode>]  +CMGF?+CMGF: <mode> +CMGF=?+CMGF: (list of supported <mode>s)

<mode>: 0: PDU mode;

1: text mode;

--> Only text mode is implemented.

AT+CSCA: Service Center Address:

Command Possible response(s) +CSCA=<sca>[,<tosca>]  +CSCA?+CSCA: <sca>,<tosca> +CSCA=? 

<sca> = service center address;

SCA for Proximus Belgium is "+32 75 16 16 16". This always should contain the country code number!! Sending an SMS message doesn't work when the SCA number is not entered!

AT+CSMP: Set Text Mode Parameters:

Command Possible response(s) +CSMP=[<fo>[,<vp>[,<pid>[,<dcs>]]]]  +CSMP?+CSMP: <fo>,<vp>,<pid>,<dcs> +CSMP=? 

<fo>: First octet of SMS-DELIVER, SMS-SUBMIT (default 17), SMS-STATUS-REPORT, or SMS-COMMAND (default 2);

<vp>: Validity Period, depending on <fo>-setting in integer format or in time-string format;

<pid>: TP-protocol Indentifier;

<dcs>: Data Coding Scheme in integer format;

---> Default values: +CSMP: 17,167,0,0,0

Dit is SMS-SUBMIT, VP=24 uur;


AT+CSDH: Show Text Mode Parameters:

Command Possible response(s) +CSDH=[<show>]  + CSDH?+CSDH: <show> +CSDH=?+CSDH: (list of supported <show>s)

<Show>: 0: do not show header values defined in commands +CSCA and +CSMP

(<sca>,<tosca>,<fo>,<vp>,<pid> and <dcs>) nor <length>,<toda>,<tooa> in +CMT, +CMTL,

+CMGR result codes;

1: show the values in result codes;

---> Only '0' is supported, so no extra parameters in the result codes.

AT+CNMI: New Message indication to TE

Command Possible response(s) +CNMI=[<mode>[,<mt>[,<bm>[,<ds>[,<bfr>]]]]]  +CNMI?+CNMI: <mode>,<mt>,<bm>,<ds>,<bfr> +CNMI=?+CSCB: (list of supported <mode>s,<mt>s,<bm>s,<ds>s,<bfr>s)

<mode>: 0: buffer in TA;

1: discard indication and reject new SMs when TE-TA link is reserved; otherwise forward


2: buffer new Sms when TE-TA link is reserved and flush them to TE after reservation;

otherwise forward directly to the TE;

3: forward directly to TE;

<mt>: 0: no SMS-DELIVER are routed to TE;

1: +CMTI: <mem>,<index> routed to TE;

2: for all SMS_DELIVERs except class 2: +CMT: .... routed to TE;

class 2 is indicated as in <mt>=1;

3: Class 3: as in <mt>=2;

other classes: As in <mt>=1;

<bm>: same as <mt>, but for CBMs;

<ds>: 0: No SMS-STATUS-REPORT are routed to TE;

1: SMS-STATUS-REPORTs are routed to TE, using +CDS: ...

<bfr>: 0: TA buffer is flushed to TE (if <mode>=1..3);

1: TA buffer is cleared (if <mode>=1..3);

---> Only when <mt> is different from 0, you will get a message that a new SMS has been received.

AT+CMGL: List Messages:

Command Possible response(s) +CMGL[=<stat>] +CMGL: message... +CMGL=?+CMGL: (list of supported <stat>s)

<stat>: status of messages to be read.

defined values:

0: received unread

1: received read;

2: stored unsent;

3: stored sent;

4: all;

---> Only "ALL" (4) is supported!!

AT+CMGR: Read Message:

Command Possible response(s) +CMGR=<index> +CMGR: message... +CMGR=? 

1.10 AT+CMGS: Send Message:

Command Possible response(s) +CMGS=<da>[,<toda>] +CMGS: <mr> +CMGS=? 

<da> = Destination Address;

AT+CMGW: Write Message to Memory:

Command Possible response(s) +CMGW=<oa/da>[,<tooa>/<toda>[,<stat>]] +CMGW: <index> +CMGW=? 

1.12 AT+CMGD: Delete Message:

Command Possible response(s) +CMGD=<index>  +CMGD=? 

Please check if your current firmware supports SMS commands.


+CSMS: 1,1,0 ; Only <mo> and <mt> SM's are supported


Important Note :

If the card returns ERROR, then the modem does not support SMS. Please try updating with the latest GSM Activation Kit for GSM-Ready, or for GSM-Only.


AT+CPMS: "SM",1,10,"ME",4,5


AT+CPMS="ME","SM" ; Swap memories


AT+CMGF=1 ; select text-mode (DEFAULT!!)


AT+CSCA="+3275161616" ; Enter SCA number ( for Belgium, Proximus) This number is operator and country dependent. Please check with your local provider.


AT+CNMI=1,1,0,0,0 ; Enable de reception of SM's

+CMTI: "ME",3 ; a SM is received and stored in ME, index 3

AT+CPMS="ME" ; Make sure memory is OK


AT+CMGR=3 ; Read message


Hello world


AT+CMGL=4 ; Read all messages in ME

+CMGL: 3,"REC UNREAD",,, ; --> Only index 3 en 5 are used

Hello world

Send Message :

AT+CMGS="075261001" ; Send message to "075261001"

> Honey….put my dinner in the microwave. I'm on my way!!^Z (Ctrl+Z to finish and send the message)

+CMGS: 3 ; OK, message gone


Important ERROR messages:

CMS Errors:

300: ME Failure;

302: Operation not allowed;

303: Operation not supported;

304: Invalid PDU mode parameter;

305: Invalid text mode parameter;

320: memory failure;

321: invalid memory index;

322: memory full;

330: SCA unknown;

500: Unknown error;