MicroLog.MyPower.CZ

… designed for freedom of automation.

Uživatelské nástroje

Nástroje pro tento web


source

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revizePředchozí verze
Následující verze
Předchozí verze
source [2013/09/10 23:13] mypower_czsource [2016/04/22 21:34] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 3: Řádek 3:
 ===== Info ===== ===== Info =====
  
-Verze 2.03 - pravděpodobně poslední testovací verze před vydáním první veřejné verze+Verze 2.04
  
 +===== Kompilace projektu =====
 +
 +**Pozor: Pro kompilaci je potřeba použít [[https://www.arduino.cc/en/Main/OldSoftwareReleases#previous|starší verzi Arduino IDE]], ideálně verzi 1.0.5**
 +
 +V nových verzích se můžete setkat s chybou
 +
 +  microlog2:897: error: 'WebServer_p' was not declared in this scope
 +
 +nebo
 +
 +  microlog2:899: error: 'WebServer_p' was not declared in this scope
 ===== Notes ===== ===== Notes =====
  
-  * přidána emulace displaye (provoz displaye bez fyzického displaye) +  * přidána podpora pro datum a čas, synchronizováno při přenosu na mypower.cz 
-  * opraven bug s - znaménkem u malých čísel +  * čítač sekund byl změněn na uint32_t 
-  * přidána volitelná negativní logika pro digitální výstupy +  * mapa eprom byla esunuta z kódu na [[mod:eprom|wiki]] 
-  * opravy www rozhraní + 
-  * přidána záloha epromObnova eprom bude dostupná po zprovoznění podpory pro SD.+  * [[http://microlog.mypower.cz/source?do=revisions|starší verze]]
  
 ===== Download ===== ===== Download =====
Řádek 29: Řádek 40:
 // ---[ VERSION ]------------------------------------- // ---[ VERSION ]-------------------------------------
  
-#define MPWMicroLogVersion     "2.03"+#define MPWMicroLogVersion     "2.04"
  
 // ---[ INCLUDE ]------------------------------------- // ---[ INCLUDE ]-------------------------------------
Řádek 76: Řádek 87:
  
 // mod WebServer // mod WebServer
-#define modWebServer     1         // 1=on 0=off +#define modWebServer       1         // 1=on 0=off 
-#define modWebServerPort 80        // default: 80+#define modWebServerPort   80        // default: 80
  
 // mod Display // mod Display
-#define modDisplay       1         // 1=on 0=off +#define modDisplay         1         // 1=on 0=off 
-#define modDisplayType   1602      // typ displaye+#define modDisplayType     1602      // typ displaye
  
 // mod DisplayEmulation // mod DisplayEmulation
-#define modDisplayEmulation   0    // 1=display neni fyzicky pripojen - zobrazeni jen na www rozhrani  +#define modDisplayEmulation     0    // 1=display neni fyzicky pripojen - zobrazeni jen na www rozhrani  
-                                   // 0=display pripojen - zobrazeni na fyzickem displayi i na www rozhrani+                                     // 0=display pripojen - zobrazeni na fyzickem displayi i na www rozhrani
  
 // --------------------------------------------------- // ---------------------------------------------------
Řádek 91: Řádek 102:
 byte lxLed=0; byte lxLed=0;
 byte lxTime=0; byte lxTime=0;
-long lxSeconds=0; +uint32_t lxSeconds=0; 
-long lxSendIndex=0;+uint32_t lxSendIndex=0;
 byte lxHttpOk=0; byte lxHttpOk=0;
 byte lxHttpErrors=0; byte lxHttpErrors=0;
Řádek 125: Řádek 136:
 #define xpinOPTsampleG2  B00001000 #define xpinOPTsampleG2  B00001000
 #define xpinOPTsampleG3  B00001100 #define xpinOPTsampleG3  B00001100
- 
-// ---------------------------------------------------- 
- 
-// EEPROM 
-//      0 - 40  PIN0 CONF (41 bytes struct tPinConf) 
-//     41 - 81  PIN1 CONF 
-//    82 - 122  PIN2 CONF 
-//   123 - 163  PIN3 CONF 
-//   164 - 204  PIN4 CONF 
-//   205 - 245  PIN5 CONF 
-//   246 - 286  PIN6 CONF 
-//   287 - 327  PIN7 CONF 
-//   328 - 368  PIN8 CONF 
-//   369 - 409  PIN9 CONF 
-//   410 - 450  PIN10 CONF 
-//   451 - 491  PIN11 CONF 
-//   492 - 532  PIN12 CONF 
-//   533 - 573  PIN13 CONF 
-//   574 - 614  PIN14 CONF 
-//   615 - 656  PIN15 CONF 
-//   657 - 683  DeviceConf           (struct tDeviceConf) 
-//  684 - 2047  Display program      (char []) 
-// 2048 - 2067  DPIN Name 0          (char [20]) 
-// 2068 - 2087  DPIN Name 1 
-// 2088 - 2107  DPIN Name 2 
-// 2008 - 2127  DPIN Name 3 
-// 2028 - 2147  DPIN Name 4 
-// 2048 - 2167  DPIN Name 5 
-// 2068 - 2187  DPIN Name 6 
-// 2088 - 2207  DPIN Name 7 
-// 2008 - 2227  DPIN Name 8 
-// 2028 - 2247  DPIN Name 9 
-// 2048 - 2267  DPIN Name 10 
-// 2068 - 2287  DPIN Name 11 
-// 2088 - 2307  DPIN Name 12 
-// 2008 - 2327  DPIN Name 13 
-// 2028 - 2347  DPIN Name 14 
-// 2048 - 2367  DPIN Name 15 
-// 2368 ...     FREE 
  
 struct tPinConf { struct tPinConf {
Řádek 175: Řádek 147:
 }; };
  
-#define xComStatusNop        B00000000 +#define xComStatusNop               B00000000 
-#define xComStatusASchanged  B00000001 +#define xComStatusASchanged         B00000001 
-#define xComStatusDSchanged  B00000010+#define xComStatusDSchanged         B00000010 
 +#define xComStatusIsLastDayInMonth  B00000100 
 +#define xComStatusIsDST             B00001000 
 + 
 +#define xComStatusXXDaysMonthMask   B00110000 
 +#define xComStatus28DaysMonth       B00000000 
 +#define xComStatus29DaysMonth       B00010000 
 +#define xComStatus30DaysMonth       B00100000 
 +#define xComStatus31DaysMonth       B00110000 
 + 
 +struct tMpwAccess {  
 +  byte xComStatus;                    //  flags 
 +  uint16_t mpwremoteDateYear;         //  2013 ... 
 +   uint8_t mpwremoteDateMonth;        //  1-12 
 +   uint8_t mpwremoteDateDay;          //  1-31 
 +   uint8_t mpwremoteDateWeek;         //  1-53 
 +   uint8_t mpwremoteDateDayOfWeek;    //  1 (for Monday) through 7 (for Sunday) 
 +  signed long mpwremoteTimeS;         //  0-86400, -1 - not known 
 +  uint32_t mpwremoteCheckedAtS;       //  local timeS (seconds counter) 
 +  uint32_t mpwlogintimeS;             //  login local timeS  
 +  uint32_t mpwDeviceId;               //  your device ID on mpw server 
 +  uint32_t mpwAccessId;               //  your access ID on mpw server 
 +} xMpwAccess;
  
-struct tMpwAccess byte xComStatus; unsigned long mpwtime; unsigned long mpwtimeAtMS; } xMpwAccess;+struct tMpwDateTime  
 +  int xyear, xmonth, xday, xhour, xminute, xsecond 
 +  };
  
 #define xdcOptBuiltIn      0x00; #define xdcOptBuiltIn      0x00;
Řádek 232: Řádek 228:
 void lcdPrintAt(char * str,int x) {  void lcdPrintAt(char * str,int x) { 
   int ix=strlen(str);for (int i=0;((i+x<sizeof(_lcdlbuf)-1) && (i<ix));i++) if (x>=0) _lcdlbuf[i+x]=str[i]; }   int ix=strlen(str);for (int i=0;((i+x<sizeof(_lcdlbuf)-1) && (i<ix));i++) if (x>=0) _lcdlbuf[i+x]=str[i]; }
 +//  int ix=strlen(str);for (int i=0;((i+x<sizeof(_lcdlbuf)-1) && (i<ix));i++) if ((x+i)>=0) _lcdlbuf[i+x]=str[i]; } ??????
 void lcdClearLine() { int i; for (i=0;i<sizeof(_lcdlbuf)-1;i++) _lcdlbuf[i]=32; _lcdlbuf[i]=0; } void lcdClearLine() { int i; for (i=0;i<sizeof(_lcdlbuf)-1;i++) _lcdlbuf[i]=32; _lcdlbuf[i]=0; }
 void lcdPrintLine(int y) {  void lcdPrintLine(int y) { 
Řádek 266: Řádek 263:
  
 #if (modSerialLog == 1) #if (modSerialLog == 1)
-XLog(sn1);XLog(sn2); +XLog(sn1);XLog(sn2);XLog(MPWMicroLogVersion); 
-XLog(MPWMicroLogVersion);+
 #if (modMyPowerLog == 1) #if (modMyPowerLog == 1)
-xMpwAccess.mpwtimeAtMS=0;+xMpwAccess.mpwremoteDateYear=0; 
 +xMpwAccess.mpwremoteDateMonth=0; 
 +xMpwAccess.mpwremoteDateDay=0; 
 +xMpwAccess.mpwremoteDateWeek=0; 
 +xMpwAccess.mpwremoteDateDayOfWeek=0; 
 +xMpwAccess.mpwremoteTimeS=-1; 
 +xMpwAccess.mpwremoteCheckedAtS=0; 
 +xMpwAccess.mpwlogintimeS=0; 
 +xMpwAccess.mpwDeviceId=0; 
 +xMpwAccess.mpwAccessId=0;
 xMpwAccess.xComStatus=xComStatusNop; xMpwAccess.xComStatus=xComStatusNop;
-XLog("+mpwlog");+char cx[50]="+mpwlog ";strcat(cx,modMyPowerHost);XLog(cx);
 #endif #endif
-#if (modDisplay == 1) 
  
 +#if (modDisplay == 1)
 +char ccx[50]="";
 #if (modDisplayEmulation == 1 ) #if (modDisplayEmulation == 1 )
-XLog("+dispemu");+sprintf(ccx,"+dispemu @ %04d",modDisplayType);
 #else #else
-XLog("+disp");+sprintf(ccx,"+disp @ %04d",modDisplayType);
 #endif #endif
 +XLog(ccx);
 #endif #endif
 +
 #endif #endif
  
Řádek 293: Řádek 301:
  
 DPINResetHW(); DPINResetHW();
-pinMode(10, OUTPUT);digitalWrite(10,HIGH);+pinMode(53, OUTPUT);digitalWrite(53,HIGH);
  
 int xret=0; int xret=0;
Řádek 343: Řádek 351:
 server.begin(); server.begin();
 #if modSerialLog == 1 #if modSerialLog == 1
-char c[30]="";sprintf(c,"+www@%d",modWebServerPort);XLog(c);+char c[30]="";sprintf(c,"+www @ %d",modWebServerPort);XLog(c);
 #endif #endif
 #endif #endif
Řádek 433: Řádek 441:
 if (lxHttpOk==2) xsi=xsr; if (lxHttpOk==2) xsi=xsr;
 if (xsi<30) xsi=30; if (xsi<30) xsi=30;
-long qlxSendIndex=lxSeconds;+uint32_t qlxSendIndex=lxSeconds;
 if ((lxSendIndex+xsi<=qlxSendIndex) || (lxHttpOk==0)) if ((lxSendIndex+xsi<=qlxSendIndex) || (lxHttpOk==0))
   {   {
Řádek 452: Řádek 460:
     client.write((byte*)xtext,strlen(xtext));       client.write((byte*)xtext,strlen(xtext));  
  
-//struct tMpwAccess { unsigned long mpwtime; unsigned long mpwtimeAtMS; } xMpwAccess; +    boolean islogin=(xMpwAccess.mpwlogintimeS==0);
- +
-    boolean islogin=(xMpwAccess.mpwtimeAtMS==0);+
  
 if (islogin) if (islogin)
Řádek 466: Řádek 472:
   }   }
    
-      sprintf(xtext,"utime=%lu/%ld; ",millis(),lxSeconds);+      sprintf(xtext,"utime=%lu/%lu; ",millis(),lxSeconds);
       client.write((byte*)xtext,strlen(xtext));       client.write((byte*)xtext,strlen(xtext));
       sprintf(xtext,"AX=VSAMX; ");       sprintf(xtext,"AX=VSAMX; ");
Řádek 569: Řádek 575:
  
 void ParseHTTPResult(char * xtext) {  void ParseHTTPResult(char * xtext) { 
-xMpwAccess.mpwtimeAtMS=millis(); 
-if (strcmp(xtext,"result:OK")==0) lxHttpOk=1; 
 #if modSerialLog == 1 #if modSerialLog == 1
 XLog2(xtext,"# "); XLog2(xtext,"# ");
 #endif #endif
 +if (strcmp(xtext,"result:OK")==0) lxHttpOk=1; else
 +if (strncmp(xtext,"qid:",4)==0) ParseQID(xtext+4);
 +}
 +
 +void ParseQID(char * xtext) {
 +if (xMpwAccess.mpwlogintimeS==0) xMpwAccess.mpwlogintimeS=lxSeconds;
 +char * p=strchr(xtext,'.');
 +if (p!=NULL)
 +  {  
 +  p[0]=0;
 +  xMpwAccess.mpwDeviceId=atol(xtext);
 +  p++;
 +  char * px=strchr(p,'.');
 +  if (px!=NULL)
 +    {
 +    px[0]=0;
 +    px++;
 +    xMpwAccess.mpwAccessId=atol(p);
 +    if (strlen(px)==20)
 +      {
 +      char c[30]="";
 +      strncpy(c,px,4);c[4]=0;xMpwAccess.mpwremoteDateYear=atoi(c);px+=4;
 +      strncpy(c,px,2);c[2]=0;xMpwAccess.mpwremoteDateMonth=atoi(c);px+=2;
 +      strncpy(c,px,2);c[2]=0;xMpwAccess.mpwremoteDateDay=atoi(c);px+=2;
 +      strncpy(c,px,2);c[2]=0;signed long xhour=atoi(c);px+=2;
 +      strncpy(c,px,2);c[2]=0;signed long xminute=atoi(c);px+=2;
 +      strncpy(c,px,2);c[2]=0;signed long xsecond=atoi(c);px+=2;
 +      strncpy(c,px,2);c[2]=0;byte xdaysinmonth=atoi(c);px+=2;
 +      strncpy(c,px,1);c[1]=0;byte xisdst=atoi(c);px+=1;
 +      strncpy(c,px,1);c[1]=0;xMpwAccess.mpwremoteDateDayOfWeek=atoi(c);px+=1;
 +      strncpy(c,px,2);c[2]=0;xMpwAccess.mpwremoteDateWeek=atoi(c);px+=2;
 +
 +      if (xisdst==1)
 +        xMpwAccess.xComStatus|=xComStatusIsDST;
 +      else
 +        xMpwAccess.xComStatus&=~xComStatusIsDST;
 +
 +      if (xdaysinmonth==xMpwAccess.mpwremoteDateDay)
 +        xMpwAccess.xComStatus|=xComStatusIsLastDayInMonth;
 +      else
 +        xMpwAccess.xComStatus&=~xComStatusIsLastDayInMonth;
 +        
 +      xMpwAccess.xComStatus&=~xComStatusXXDaysMonthMask;
 +      if (xdaysinmonth==28) xMpwAccess.xComStatus|=xComStatus28DaysMonth;
 +      if (xdaysinmonth==29) xMpwAccess.xComStatus|=xComStatus29DaysMonth;
 +      if (xdaysinmonth==30) xMpwAccess.xComStatus|=xComStatus30DaysMonth;
 +      if (xdaysinmonth==31) xMpwAccess.xComStatus|=xComStatus31DaysMonth;
 +        
 +      xMpwAccess.mpwremoteTimeS=(xhour*3600)+(xminute*60)+(xsecond);
 +      xMpwAccess.mpwremoteCheckedAtS=lxSeconds;
 +      }
 +    }
 +  
 +  }
 +
 +/*  
 +char xstr[50]="";
 +tMpwDateTime xMpwDateTime;
 +GetCurrentDateTime(&xMpwDateTime);
 +FormatDateTimeStr(xstr, "j.n.Y H:i:s",&xMpwDateTime,sizeof(xstr));
 +Serial.println(xstr);
 +*/
 } }
 #endif #endif
 +
 +
 +
 +void FormatDateTimeStr(char * xstr, char * xfmt, struct tMpwDateTime * xMpwDateTime,int xmaxlen)
 +{
 +xstr[0]=0;
 +while (strlen(xfmt)>0)
 +  {
 +  char ch=xfmt[0];
 +  char cout[20]="";
 +  if (ch=='d') sprintf(cout,"%02d",xMpwDateTime->xday); else
 +  if (ch=='j') sprintf(cout,"%d",xMpwDateTime->xday); else
 +  if (ch=='m') sprintf(cout,"%02d",xMpwDateTime->xmonth); else
 +  if (ch=='n') sprintf(cout,"%d",xMpwDateTime->xmonth); else
 +  if (ch=='Y') sprintf(cout,"%d",xMpwDateTime->xyear); else
 +  if (ch=='y') sprintf(cout,"%d",xMpwDateTime->xyear%99); else
 +  if (ch=='g') sprintf(cout,"%d",((xMpwDateTime->xhour%12)+1)); else
 +  if (ch=='G') sprintf(cout,"%d",(xMpwDateTime->xhour)); else
 +  if (ch=='h') sprintf(cout,"%02d",((xMpwDateTime->xhour%12)+1)); else
 +  if (ch=='H') sprintf(cout,"%02d",(xMpwDateTime->xhour)); else
 +  if (ch=='i') sprintf(cout,"%02d",(xMpwDateTime->xminute)); else
 +  if (ch=='s') sprintf(cout,"%02d",(xMpwDateTime->xsecond)); else
 +    { cout[0]=ch;cout[1]=0; }
 +    
 +  xfmt++;
 +  if (strlen(xstr)+strlen(cout)<xmaxlen) strcat(xstr,cout); else break;
 +  }
 +}
 +
 +int GetCurrentDateTime_DaysInMonth()
 +{
 +int xret=28;
 +int xst=xMpwAccess.xComStatus&xComStatusXXDaysMonthMask;
 +if (xst==xComStatus28DaysMonth) xret=28; else
 +if (xst==xComStatus29DaysMonth) xret=29; else
 +if (xst==xComStatus30DaysMonth) xret=30; else
 +if (xst==xComStatus31DaysMonth) xret=31;
 +return xret;
 +}
 + 
 +void GetCurrentDateTime(struct tMpwDateTime * xMpwDateTime)
 +{
 +if (xMpwAccess.mpwremoteCheckedAtS>0)
 +  {
 +  xMpwDateTime->xyear=xMpwAccess.mpwremoteDateYear;
 +  xMpwDateTime->xmonth=xMpwAccess.mpwremoteDateMonth;
 +  xMpwDateTime->xday=xMpwAccess.mpwremoteDateDay;
 +  uint32_t xtime=lxSeconds-xMpwAccess.mpwremoteCheckedAtS+xMpwAccess.mpwremoteTimeS;
 +  if (xtime>=86400)
 +    {
 +    int xdaysover=xtime/86400UL;
 +    int xtimeover=xtime%86400UL;
 +
 +    if (xdaysover>25) // max 25 days without time sync
 +      {
 +      xMpwDateTime->xyear=0;
 +      xMpwDateTime->xmonth=0;
 +      xMpwDateTime->xday=0;
 +      }
 +    else
 +      { 
 +      int xdaysinmonth=GetCurrentDateTime_DaysInMonth();
 +      for (int i=0;i<xdaysover;i++)
 +        {
 +        if (xMpwDateTime->xday<xdaysinmonth)
 +          xMpwDateTime->xday++;  
 +        else
 +          {
 +          xMpwDateTime->xday=1;
 +          if (xMpwDateTime->xmonth<12)
 +            xMpwDateTime->xmonth++;
 +          else
 +            {
 +            xMpwDateTime->xmonth=1;
 +            xMpwDateTime->xyear++;
 +            }
 +          }
 +        }
 +      }
 +  
 +    xtime=xtimeover;
 +    }
 +  xMpwDateTime->xhour=(xtime/3600)%24;
 +  int xmod=(xtime%3600);
 +  xMpwDateTime->xminute=(xmod/60)%60;
 +  xMpwDateTime->xsecond=xmod%60;
 +  }
 +else
 +  {
 +  uint32_t xtime=lxSeconds;
 +  xMpwDateTime->xyear=0;
 +  xMpwDateTime->xmonth=0;
 +  xMpwDateTime->xday=(xtime/86400UL);
 +  xMpwDateTime->xhour=((xtime%86400UL)/3600)%24;
 +  signed long xmod=((xtime%86400L)%3600);
 +  xMpwDateTime->xminute=(xmod/60)%60;
 +  xMpwDateTime->xsecond=xmod%60;    
 +  }
 +}
 +
 +
 +
 +
  
 void FlashError(byte xcount) void FlashError(byte xcount)
Řádek 1105: Řádek 1274:
             (int)lxHttpErrors,(int)modSerialLog,(int)modDisplay,(modDisplay==1)?(int)modDisplayType:(int)0);             (int)lxHttpErrors,(int)modSerialLog,(int)modDisplay,(modDisplay==1)?(int)modDisplayType:(int)0);
             client.write((byte*)xln,strlen(xln));             client.write((byte*)xln,strlen(xln));
-            sprintf(xln,".%lu\nf:%s\nh:%s\nx:%d\nr:",(long)lxSeconds,modMyPowerFVEID,modMyPowerHost,(int)modMyPowerLog);+            sprintf(xln,".%lu\nf:%s\nh:%s\nx:%d\nr:",(unsigned long)lxSeconds,modMyPowerFVEID,modMyPowerHost,(int)modMyPowerLog);
             client.write((byte*)xln,strlen(xln));             client.write((byte*)xln,strlen(xln));
             sprintf(xln,cq,(int)freeRam(),(int)ARDUINO,(int)RAMEND,(int)XRAMEND,             sprintf(xln,cq,(int)freeRam(),(int)ARDUINO,(int)RAMEND,(int)XRAMEND,
Řádek 1137: Řádek 1306:
             sprintf(xln,"/%04X/%04X\n",DPINstatus,DPINlogicmask);             sprintf(xln,"/%04X/%04X\n",DPINstatus,DPINlogicmask);
             client.write((byte*)xln,strlen(xln));                       client.write((byte*)xln,strlen(xln));          
 +
 +char xstr[30]="";
 +tMpwDateTime xMpwDateTime;
 +GetCurrentDateTime(&xMpwDateTime);
 +FormatDateTimeStr(xstr, "j.n.Y@H:i:s",&xMpwDateTime,sizeof(xstr));
 +
 +
 +            sprintf(xln,"mpw:%s/%d.%d.%d.%ld/%lu/%lu/%lu/%lu/%d/%d/%d/%lu\n",xstr,(int)xMpwAccess.mpwremoteDateYear,
 +              (int)xMpwAccess.mpwremoteDateMonth,
 +              (int)xMpwAccess.mpwremoteDateDay,
 +              (signed long)xMpwAccess.mpwremoteTimeS,
 +              xMpwAccess.mpwremoteCheckedAtS,
 +              xMpwAccess.mpwlogintimeS,
 +              xMpwAccess.mpwDeviceId,
 +              xMpwAccess.mpwAccessId,
 +              (int)xMpwAccess.xComStatus,
 +              (int)xMpwAccess.mpwremoteDateWeek,
 +              (int)xMpwAccess.mpwremoteDateDayOfWeek,
 +              (unsigned long)(lxSeconds-xMpwAccess.mpwremoteCheckedAtS));
 +            client.write((byte*)xln,strlen(xln));          
 +            
             }             }
           else           else
Řádek 1706: Řádek 1896:
         xvar->xval=0;         xvar->xval=0;
         xvar->xval10000=0;         xvar->xval10000=0;
-        DisplayFillVarByPinValue(xpin,xvar,r);+         
 +        if ( (xvar->xname[0]=='@') && (xvar->xname[1]=='T') ) 
 +          DisplayFillVarByTimeVar(xvar); 
 +        else 
 +          DisplayFillVarByPinValue(xpin,xvar,r); 
 +        
         }         }
       else       else
Řádek 1888: Řádek 2083:
     {     {
     if (c=='.') { c=xsrc[i+1];     if (c=='.') { c=xsrc[i+1];
 +      if (c=='R') { xdecs=0xFE; i++; }  else
       if ((c>='0') && (c<='9')) { xdecs=c-'0';i++; }       if ((c>='0') && (c<='9')) { xdecs=c-'0';i++; }
       c='#';  }       c='#';  }
Řádek 1924: Řádek 2120:
         {         {
         char pxval[50]="";         char pxval[50]="";
-        char qsc[]=" kMGT"; +        if ( (xvar->xname[0]=='@') && (xvar->xname[1]=='T')
-        char *xsc=qsc; +
-        signed long xval=xvar->xval; +
-        int xval10k=xvar->xval10000; +
-        while (xval>1500)+
           {           {
-          if (xsc[1]==0) break; +          DisplayGetValueByTimeVar(pxval,xvar->xname,sizeof(pxval)); 
-          int64 xq,xr; word xmod; +          } 
-          i64x10k2int10k(&xq, xval,xval10k); +        else 
-          i64divW(&xr, &xmod, &xq, 1000); +          { 
-          i64int10k2x10k(&xval,&xval10k,&xr); +          char qsc[]=" kMGT"; 
-          xsc++;+          char *xsc=qsc; 
 +          signed long xval=xvar->xval; 
 +          int xval10k=xvar->xval10000; 
 + 
 +          if (xdecs==0xFE) 
 +            { 
 +            sprintf(pxval,"%ld",xval); 
 +            } 
 +          else 
 +            { 
 +            while (xval>1500) 
 +              { 
 +              if (xsc[1]==0) break; 
 +              int64 xq,xr; word xmod; 
 +              i64x10k2int10k(&xq, xval,xval10k); 
 +              i64divW(&xr, &xmod, &xq, 1000); 
 +              i64int10k2x10k(&xval,&xval10k,&xr); 
 +              xsc++; 
 +              } 
 +            sprint10k(pxval,xval,xval10k); // minus bugfix 
 +    //        sprintf(pxval,"%ld.%04d",xval,xval10k); 
 +            DisplayCorrectDecs(pxval,xdecs); 
 +            if ((xsc[0]!=' ') && (xsc[0]!=0)) { xsc[1]=0; strcat(pxval,xsc);
 +            }
           }           }
-        sprint10k(pxval,xval,xval10k); // minus bugfix 
-//        sprintf(pxval,"%ld.%04d",xval,xval10k); 
-        DisplayCorrectDecs(pxval,xdecs); 
-        if ((xsc[0]!=' ') && (xsc[0]!=0)) { xsc[1]=0; strcat(pxval,xsc); } 
         for (int cc=0;cc<strlen(pxval);cc++)         for (int cc=0;cc<strlen(pxval);cc++)
           if (ix<xmaxlen-1) { xdst[ix]=pxval[cc];ix++;xdst[ix]=0; }           if (ix<xmaxlen-1) { xdst[ix]=pxval[cc];ix++;xdst[ix]=0; }
Řádek 1955: Řádek 2166:
   hasvar=(c=='$');   hasvar=(c=='$');
   if ((!hasvar) && (ix<xmaxlen-1)) { xdst[ix]=c;ix++;xdst[ix]=0; }   if ((!hasvar) && (ix<xmaxlen-1)) { xdst[ix]=c;ix++;xdst[ix]=0; }
 +  }
 +}
 +
 +
 +void DisplayFillVarByTimeVar(struct tDispVar * xvar)
 +{
 +char px[30]="";
 +DisplayGetValueByTimeVar(px,xvar->xname,sizeof(px));
 +xvar->xval=atol(px);
 +xvar->xval10000=0;
 +}
 +
 +
 +void DisplayGetValueByTimeVar(char * xbuf,char * xvarname,int xbufmaxsize)
 +{
 +xbuf[0]=0;
 +if ((xvarname[0]=='@') && (xvarname[1]=='T'))
 +  {
 +  if (strlen(xvarname)>=3)
 +    {
 +char xfmt[5]="";xfmt[0]=xvarname[2];xfmt[1]=0;
 +tMpwDateTime xMpwDateTime;GetCurrentDateTime(&xMpwDateTime);
 +FormatDateTimeStr(xbuf,xfmt,&xMpwDateTime,xbufmaxsize);
 +    }
   }   }
 } }
Řádek 2389: Řádek 2624:
 DPINUpdateHW(); DPINUpdateHW();
 } }
 +
  
  
 </file> </file>
source.1378847625.txt.gz · Poslední úprava: 2013/09/11 05:13 (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki