Question

I am sending USSD code on modem through serial port. But always it is giving ERROR in response.

AT commands I am sending are: in sequence:

serialPort.Write("AT+CMGF=0" + "\r\n");
serialPort.Write("AT+CUSD=1,\"*135#\"" + "\r\n");

when I am configuring message format in first AT command, it is giving 'OK' response. But on sending USSD code, response is always 'ERROR'. Why is it so?

Was it helpful?

Solution

Don't use \n in end of command, use only \r.

Form of CUSD command is: AT+CUSD=1,"*135#",15.

In C# it should be:

serialPort.Write("AT+CMGF=0" + "\r");
serialPort.Write("AT+CUSD=1,\"*135#\",15" + "\r");

OTHER TIPS

First, AT command is ended by "\r" in C#. You may also to check TE Character set of your modem.

serialPort.Write("AT+CSCS?\r");

if Character Set is "UCS2" use the following conversation:

serialPort.Write("AT+CUSD=1,\"" + UnicodeStr2HexStr("*135#") + "\",15" + "\r");

And

public static String UnicodeStr2HexStr(String strMessage)
{
    byte[] ba = Encoding.BigEndianUnicode.GetBytes(strMessage);
    String strHex = BitConverter.ToString(ba);
    strHex = strHex.Replace("-", "");
    return strHex;
}

Please see also https://stackoverflow.com/a/25155746/638977 (Convert to UCS2)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top