Модуль "Справочник" (часть 4) - GetPhoneBookParams

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 107
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
function TfrmAT_PhoneBook.GetPhoneBookParams(var xPP: TxPhoneBookParam): boolean;
var
  str, tmp, tmp2: string;
  x, i, min, max: integer;
  xStrLst: TStringList;
begin
result:= false;
if Form1.IsATConnected then
  begin
    min:= 0; max:= 0;
    FillMemory(@xPP, sizeof(xPP), 0);
    Logger('*** AT+CPBS=ME');
    str:= SendATCommand('AT+CPBS=ME');
    Logger(str);

    if (str <> '') and (xComPort.ATResult) then
      begin
        Logger('AT+MPBR=?');
        str:= SendATCommand('AT+MPBR=?');
        Logger(str);
        if (str <> '') and (xComPort.ATResult) then
          begin
            str:= ParseRevers(str, ':');
            Delete(str, 1, 1);
            tmp:= ExtractStr(str, ',');
            tmp:= ParseRevers(tmp, '-'); xPP.MECount:= strtoint(tmp);
            tmp:= ExtractStr(str, ',');  xPP.ME_NumberLength:= strtoint(tmp);
            tmp:= ExtractStr(str, ',');  xPP.ME_NameLength:= strtoint(tmp);
            tmp:= ExtractStr(str, ',');  xPP.PTypes:= strtoint(tmp);
            tmp:= ExtractStr(str, ',');
            tmp:= ExtractStr(str, ',');  xPP.ME_EmailLength:= strtoint(tmp);
            tmp:= ExtractStr(str, ',(');
            ExtractStr(str, ',(');
            ExtractStr(str, ',(');
            //~~~~~~~~
            xStrLst:= TStringList.Create;
            tmp:= ParseRevers(tmp, '(');
            ParseRevers(tmp, ')');
            xStrLst.CommaText:= tmp;
            for x:=0 to xStrLst.Count-1 do
              begin
                tmp2:= xStrLst[x];
                if Pos('-', tmp2) > 0 then
                  begin
                    tmp2:= xStrLst[x];
                    try min:= StrToInt(ExtractStr(tmp2, '-')); except Logger('ошибка конвертирования в integer '  + tmp2); end;
                    try max:= StrToInt(tmp2); except Logger('ошибка конвертирования в integer '  + tmp2); end;
                    for i:= min to max do  xPP.AvailRingsNumber[i]:= 1;
                  end
                else begin
                       i:= StrToInt(tmp2);
                       xPP.AvailRingsNumber[i]:= 1;
                     end
              end;
            xStrLst.Free;
            //~~~~~~~~
            tmp:= ExtractStr(str, ')');
            tmp:= ParseRevers(tmp, '-');
            xPP.CategoryRange:= strtoint(tmp);
            if iPhoneBookType = 0 then result:= true
            else  if iPhoneBookType = 1
                    then begin
                           Logger('*** Дополнительные поля справочника ****');
                           Logger(str);
                           //',(255),25,(0-1,255),264,(0),30,30,30,30,7,20,24,0'#$D#$A#$D#$A'OK'#$D#$A
                           //,(255),25,(0-1,255),264,(0),30,30,30,30,7,20,24
                           str:= ExtractStr(str, #13);
                           tmp:= ExtractStr(str, ')'); Logger(str);
                           tmp:= ExtractStr(str, ')'); Logger(str);
                           tmp:= ExtractStr(str, '),'); Logger(str);
                           //'30,30,30,30,7,20,24,0'#$D#$A#$D#$A'OK'#$D#$A
                           tmp:= ExtractStr(str, ','); xPP.Street1Length:= strtoint(tmp); Logger(str);
                           tmp:= ExtractStr(str, ','); xPP.Street2Length:= strtoint(tmp); Logger(str);
                           tmp:= ExtractStr(str, ','); xPP.CityLength:= strtoint(tmp); Logger(str);
                           tmp:= ExtractStr(str, ','); xPP.RegionLength:= strtoint(tmp); Logger(str);
                           tmp:= ExtractStr(str, ','); xPP.PostIndexLength:= strtoint(tmp); Logger(str);
                           tmp:= ExtractStr(str, ','); xPP.CountryLength:= strtoint(tmp); Logger(str);
                           tmp:= ExtractStr(str, ','); xPP.NicknameLength:= strtoint(tmp); Logger(str);
                         end;
          end;
      end;
    str:= '';
    Logger('*** параметры sim ***');
    Logger('AT+CPBS=SM');
    str:= SendATCommand('AT+CPBS=SM');
    Logger(str);
    if (str <> '') and (xComPort.ATResult) then
      begin
        Logger('AT+MPBR=?');
        str:= SendATCommand('AT+MPBR=?');
        Logger(str);
        // #$D#$A'+MPBR: 1001-1200,40,26,8,0-1,50,(0-5,10-14,16-19,255),(0),(0-1),(1-30),(255),25,(0-1,255),263,(0)'#$D#$A#$D#$A'OK'#$D#$A
               // +MPBR: 1-180,40,20,14,0-1,64,(255),(0),(0-1),(1-10),(255),32,(0-1,255),264,(0),62,62,32,32,32,32,50,264
        if (str <> '') and (xComPort.ATResult) then
        begin
          result:= true;
          str:= ParseRevers(str, ':');
          Logger(str);
          Delete(str, 1, 1);
          tmp:= ExtractStr(str, ','); Logger(str);
          min:= StrToInt(ExtractStr(tmp, '-')); Logger(tmp);
          max:= StrToInt(tmp);
          xPP.TotalRec:= max;
          xPP.SMCount:= max-min;
          tmp:= ExtractStr(str, ',');  xPP.SM_NumberLength:= strtoint(tmp); Logger(str);
          tmp:= ExtractStr(str, ',');  xPP.SM_NameLength:= strtoint(tmp); Logger(str);
        end;
      end
    else result:= false;
    Logger('*** Завершение определения параметров справочника ***');
    Logger('AT+CPBS=MT');
    str:= SendATCommand('AT+CPBS=MT');
    Logger(str);
  end;
end;
Rambler's Top100