Send USSD code to modem in C# and ERROR in return

2019-02-27 16:53发布

问题:

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?

回答1:

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


回答2:

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)