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?
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");
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)