С наступившим! Решил проблему запроса баланса через AT команды. Если кому интересно, распишу что и как, сейчас лень
. Просто выложу часть кода.
Код:
IF T_500ms.Q AND TargetVars.xIsRegistration THEN
CASE TargetVars.startBalance OF
0:
TargetVars.sAtCommandText:='AT+CSCS="GSM"';
TargetVars.xSendAtCommand:=TRUE;
IF TargetVars.sAtCommandAnswer='$R$NOK$R$N' THEN
TargetVars.xSendAtCommand:=FALSE;
TargetVars.xConfirmAtAnswer:=TRUE;
TargetVars.startBalance:=1;
END_IF
1:
IF TargetVars.xConfirmAtAnswer THEN
TargetVars.xConfirmAtAnswer:=FALSE;
END_IF
IF TargetVars.askBalance THEN
TargetVars.sAtCommandText:='ATV0';
TargetVars.xSendAtCommand:=TRUE;
TargetVars.wsUTF16:="Отправка запроса баланса оператору...";
IF TargetVars.sAtCommandAnswer='0$R$N' THEN
TargetVars.xSendAtCommand:=FALSE;
TargetVars.startBalance:=2;
END_IF
END_IF
2:
IF TargetVars.askBalance THEN
TargetVars.sAtCommandText:=TargetVars.sATBalanceAsk; // здесь сформированный AT запрос (например: AT+CUSD=1,"*165#")
TargetVars.xSendAtCommand:=TRUE;
TargetVars.wsUTF16:=UTF16_TO_WSTRING(TargetVars.sAtCommandAnswer);
ELSE
TargetVars.xSendAtCommand:=FALSE;
END_IF
3:
TargetVars.sAtCommandText:='ATV1';
TargetVars.xSendAtCommand:=TRUE;
IF TargetVars.sAtCommandAnswer='$R$NOK$R$N' THEN
TargetVars.xSendAtCommand:=FALSE;
TargetVars.xConfirmAtAnswer:=TRUE;
TargetVars.startBalance:=1;
END_IF
END_CASE
END_IF
Функция UTF16_TO_WSTRING
Код:
IF FIND(UTF16,'0$R$N+CUSD: 0, "')<>0 THEN
stemp:=OSU.ReplaceSubstring(UTF16,'0$R$N+CUSD: 0, "','');
FOR i:=1 TO LEN(stemp)-4 BY 4 DO
theChar[0]:=WSTRING_TO_WORD(WCONCAT("16#",WMID(OSU.CP1251_TO_UNICODE(stemp),4,i)));
UTF16_TO_WSTRING:=WCONCAT(UTF16_TO_WSTRING,theChar);
END_FOR
TargetVars.xSendAtCommand:=TargetVars.askBalance:=FALSE;
TargetVars.startBalance:=3;
ELSE
UTF16_TO_WSTRING:="Пожалуйста подождите...";
END_IF