Модуль "Календарь" (часть 6) - GetDateBookEntries

Рубрика: Исходники
Среда, 21 апреля 2010 г.
Просмотров: 173
последняя версия: 3.0.9 build 961 beta
от 07 декабря 2007 г.
function TfrmAT_DateBook.GetDateBookEntries(var AEvents: array of TDateBookEvent; AfrmProgress: TfrmProgress): boolean;
var
  str, tmp, s: string;
  i, k, t: integer;
  ModReadCnt, DivReadCnt, tmpDivReadCnt, tmpCnt: integer;
  xDateBook: TDateBookEvent;
begin
  result:= false;
  if not LockDateBook('1') then exit;
  if not Set_UCS2_Mode then exit;

  {==> AT+MDBR=?
   +MDBR: 500,3,64,8,2
  }
  for i:= Low(AEvents) to High(AEvents) do AEvents[i].index:= MaxInt;
  //ModReadCnt:= xDateBookParam.Count mod 30;
  //DivReadCnt:= xDateBookParam.Count div 30;
  ModReadCnt:= xDateBookParam.Count mod 1;
  DivReadCnt:= xDateBookParam.Count div 1;
  k:=0;
  tmpDivReadCnt:= DivReadCnt;
  if ModReadCnt > 0 then inc(DivReadCnt);
  AfrmProgress.AdvProgressBar1.Value:= 0;
  AfrmProgress.AdvProgressBar1.MaxValue:= xDateBookParam.Count;
  AfrmProgress.GradientLabel1.Caption:= at_db_pw_text01;
  AfrmProgress.Update;
  for t:=1 to DivReadCnt do
    begin
      if ModReadCnt > 0
        then begin
               if tmpDivReadCnt = 0 then tmpCnt:= ModReadCnt
                                    //else tmpCnt:= 30;
                                    else tmpCnt:= 1;
             end
        //else tmpCnt:= 30;
        else tmpCnt:= 1;
      tmp:= Format('AT+MDBR=%d,%d', [k, (k+tmpCnt-1)]);
      Logger('>> ' + tmp);
      tmp:= SendATCommand(tmp);
      Logger('<< ' + tmp);
      if (tmp = '') or (POs('ERROR', tmp) > 0)then break;
      {
      #$D#$A'+MDBR: 0,003100320033003400350036,1,0,"00:04","06-29-2005",1,"00:00","00-00-2000",1'
      #$D#$A'+MDBR: 1,042904400438,            1,1,"14:57","06-29-2005",2,"14:56","06-29-2005",1'
      #$D#$A'OK'#$D#$A
      }
      {
      L7e
      +MDBR: 0,00520065006E0074,1,1,"10:00","04-14-2007",,"09:55","04-14-2007",4,"11:00","04-14-2007","",0,,,501,1,0,,"00-00-2000"
      OK
      }
      tmp:= Trim(tmp);
      Delete(tmp, length(tmp) - 1, 2);
      for i:=1 to tmpCnt do
        begin
          if (tmp <> '') and (length(tmp) > 2)
            then begin
                   str:= ExtractStr(tmp, #13#10);
                   if (length(tmp) >= 2) and (tmp[1] = #13) and (tmp[2]=#10) then Delete(tmp, 1, 2);
                   //str:= ExtractStr(tmp, #13#10#13#10);
                   ExtractStr(str, '+MDBR: ');
                   xDateBook.index:= strToint(ExtractStr(str, ','));
                   s:= ExtractStr(str, ',');
                   s:= UCS2ACSI(s, true);
                   xDateBook.Title:= s; {***} Logger(Format('DateBook.Title: %s',[s]));
                   xDateBook.Timed:= ExtractStr(str, ',')[1]; {***} Logger(Format('DateBook.Timed: %s',[xDateBook.Timed]));
                   xDateBook.IsAlarm:= ExtractStr(str, ',"')[1]; {***} Logger(Format('DateBook.IsAlarm: %s',[xDateBook.IsAlarm]));
                   xDateBook.StartTime:= ExtractStr(str, '","'); {***} Logger(Format('DateBook.StartTime: %s',[xDateBook.StartTime]));
                   xDateBook.StartDate:= ExtractStr(str, '",');  {***} Logger(Format('DateBook.StartDate: %s',[xDateBook.StartDate]));
                   xDateBook.Duration:= ExtractStr(str, ',"');   {***} Logger(Format('DateBook.Duration: %s',[xDateBook.Duration]));
                   xDateBook.al_time:= ExtractStr(str, '","');   {***} Logger(Format('DateBook.al_time: %s',[xDateBook.al_time]));
                   xDateBook.al_date:= ExtractStr(str, '",');    {***} Logger(Format('DateBook.al_date: %s',[xDateBook.al_date]));
                   xDateBook.repeat_ev:= str[1];                 {***} Logger(Format('DateBook.repeat_ev: %s',[xDateBook.repeat_ev]));
                   // ищем запятую, если есть, то это новый тип ежедневника
                   //+MDBR: 0,00520065006E0074,        1,1,"10:00","04-14-2007", ,"09:55","04-14-2007",4   ,"11:00","04-14-2007",  "",    0,   ,    ,   501,   1,  0,    ,   "00-00-2000"
                   if iDateBookType > 0 then
                     begin
                       ExtractStr(str, ',"');
                       xDateBook.EndTime:= ExtractStr(str, '","'); {***} Logger(Format('DateBook.EndTime: %s',[xDateBook.EndTime]));
                       xDateBook.EndDate:= ExtractStr(str, '",'); {***} Logger(Format('DateBook.EndDate: %s',[xDateBook.EndDate]));
                       // осталось
                       //"{мелодия, если есть, то кавычек нет}",0{тип события},{ячейка},{записи},501,1{событие весь день},0{повтор},,"00-00-2000" - надо разбираться
                       // ячейка
                       {
   +MDBR: 1,04140435043D044C00200440043E043604340435043D0438044F0020041D04300442043004480438,0,1,"00:00","03-14-2007",,
   "09:00","03-14-2007",6,"00:00","03-15-2007",002F0062002F006D006F00620069006C0065002F0061007500640069006F002F005200750073002F041E043A04350430043D00200415043B044C043704380020002D002004110435043700200431043E044E002E006D00700033,4,,,501,0,0,,"00-00-2000"
                       }
                       //ExtractStr(str, '"');
                       //ExtractStr(str, '",');
                       ExtractStr(str, ',');
                       //0{тип события},{ячейка},{записи},501,1{хз},0{дни},,"00-00-2000" - надо разбираться
                       s:= ExtractStr(str, ',');
                       xDateBook.EventType:= strtoint(s); {***} Logger(Format('DateBook.EventType: %d',[xDateBook.EventType]));
                       //{ячейка},{записи},501,1,0{дни},,"00-00-2000" - надо разбираться
                       s:= ExtractStr(str, ',');
                       //{записи},501,1{хз},0{дни},,"00-00-2000" - надо разбираться
                       s:= UCS2ACSI(s, true);
                       xDateBook.Cell:= s; {***} Logger(Format('DateBook.Cell: %s',[xDateBook.Cell]));
                       s:= ExtractStr(str, ',');
                       //501,1{хз},0{дни},,"00-00-2000" - надо разбираться
                       s:= UCS2ACSI(s, true);
                       xDateBook.Records:= s; {***} Logger(Format('DateBook.Records: %s',[xDateBook.Records]));
                       {??????} s:= ExtractStr(str, ','); //501 
                       s:= ExtractStr(str, ','); //
                       //1{хз},0{дни},,"00-00-2000" - надо разбираться
                       xDateBook.xState:= strtoint(s);
                       s:= ExtractStr(str, ',');
                       //0{дни},,"00-00-2000" - надо разбираться
                       xDateBook.Days:= strtoint(s); {***} Logger(Format('DateBook.Days: %d',[xDateBook.Days]));
                       s:= ExtractStr(str, ',');
                       //{},"00-00-2000" - надо разбираться
                       //xDateBook.Repeats:= boolean(strtont(s));
{
ошибка при чтении - длинная строка начинающаяся с '002F0062002F006D.......' is not valid integer valueBeZ, Сегодня, 0:52:48а дай в терминале команду
AT+CSCS=UCS2
AT+MDBL=1
AT+MDBR=0
AT+MDBR=1
AT+MDBR=2
AT+MDBR=3
AT+MDBR=4
AT+MDBR=5Мерль, Сегодня, 0:54:13==> AT+CSCS=UCS2
<== 
OK
==> AT+MDBL=1
<== 
ERROR
==> AT+MDBR=0
<== 
+MDBR: 0,04140435043D044C00200440043E043604340435043D0438044F0020041D04350442043000200410043D0438,0,1,"00:00","01-27-2007",,"12:00","01-27-2007",6,"00:00","01-28-2007","",4,04140435043D044C,043F043E0437043404400430043204380442044C,501,0,0,,"00-00-2000"
OK
==> AT+MDBR=1
<== 
+MDBR: 1,04140435043D044C00200440043E043604340435043D0438044F0020041D04300442043004480438,0,1,"00:00","03-14-2007",,"09:00","03-14-2007",6,"00:00","03-15-2007",002F0062002F006D006F00620069006C0065002F0061007500640069006F002F005200750073002F041E043A04350430043D00200415043B044C043704380020002D002004110435043700200431043E044E002E006D00700033,4,,,501,0,0,,"00-00-2000"
OK
==> AT+MDBR=2
<== 
+MDBR: 2,04140435043D044C00200440043E043604340435043D0438044F0020041D0438043D044B,0,1,"00:00","02-21-2007",,"12:00","02-21-2007",6,"00:00","02-22-2007","",4,,,501,0,0,,"00-00-2000"
OK
==> AT+MDBR=3
<== 
+MDBR: 3,04140440002004250435043B044C043C044B,0,1,"00:00","07-10-2007",,"10:00","07-10-2007",6,"00:00","07-11-2007",002F0062002F006D006F00620069006C0065002F0061007500640069006F002F00540065006C006F006800720061006E006900740065006C002E006D00700033,4,,,501,0,0,,"00-00-2000"
OK
==> AT+MDBR=4
<== 
+MDBR: 4,041704430431044B,1,1,"11:00","06-14-2007",,"10:30","06-14-2007",0,"12:00","06-14-2007","",3,,,501,0,0,,"00-00-2000"
OK
==> AT+MDBR=5
<== 
OK
}
                     end;
                   AEvents[xDateBook.index]:= xDateBook;
                 end;
        end;  {for i:=1 to tmpCnt do}
      AfrmProgress.AdvProgressBar1.Value:= k;
      AfrmProgress.Update;
      k:= k+tmpCnt;
      dec(tmpDivReadCnt);
    end; {for t:=1 to DivReadCnt do}
    result:= true;
    LockDateBook('0');
end;
Rambler's Top100