3

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?

Behzad Ebrahimi
  • 992
  • 1
  • 16
  • 28
Robin Purbia
  • 227
  • 2
  • 17

2 Answers2

5

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");
Alex Essilfie
  • 12,339
  • 9
  • 70
  • 108
pumaikar
  • 78
  • 6
3

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)

Community
  • 1
  • 1
Behzad Ebrahimi
  • 992
  • 1
  • 16
  • 28