📄 flash.c
字号:
#include "flash.h"
#include "fm1808.h"
#include "comsub.h"
#include "common.h"
void Flash_Save(void)
{uchar *p1,*p2;
uint i;
FM_CS;
p2=D360_Buf2;
i=flash_page_index;
StorePage(i,p2,528);
flash_page_index++;
if(flash_page_index>=1100)
flash_page_index=0;
d360_save_flag2=NOOP;
}
//读取2天内行驶累计里程
ulong Get_2day_M(void)
{ulong t=0,lc=0;
uchar *p1,*p2,*p3;
uchar i,j,k;
uint i1,i2;
FM_CS;
p1=com1subbuf+3;
for (i=0; i<3; i++)
{
itime[i] = timeb2h(SYS_Time[i]);
*p1=SYS_Time[i];
p1++;
}
itime[3]=0;
itime[4]=0;
timepastforint();
itimelen = itimelen-1440;
locatetime();
lc=0;
i=d360_index_buf1;
if(!((i==0)&&(d360_save_flag2==NOOP)))
{if((i==0)&&(d360_save_flag2==NEEDSAVE))
{i=20;
p1=D360_Buf2;
}
else
{
p1=D360_Buf1;
}
j= TRUE;
p2=p1;
while((j == TRUE)&&(i>0))
{p1 = p2+(i-1) * 25 + 3;
if(comtime(p1)==TRUE)
{lc=lc+*(p1+6);
i--;
}
else
j = FALSE;
}
}
i1=flash_page_index;
if(i1==0)
{ p1=flash_buf;
LoadPage(i1,p1,528);
if(*(p1+500)==VALID)
{j=TRUE;
i1=1100;
}
else
j=FALSE;
}
i2=1100;
while((j==TRUE)&&(i1>0)&&(i2>0))
{ p1=flash_buf;
LoadPage(i1-1,p1,528);
if(*(p1+500)==VALID)
{ k=20;
while((j == TRUE)&&(k>0))
{ p1 = flash_buf+(k-1) * 25 + 3;
if(comtime(p1)==TRUE)
{ lc=lc+*(p1+6);
k--;
}
else
j = FALSE;
}
}
else
j=FALSE;
i2--;
i1--;
if(i1==0)
i1=1100;
}
t=lc;
p1=com1subbuf;
*p1=lc/65536;
lc=lc%65536;
p1++;
*p1=lc/256;
p1++;
*p1=lc%256;
return t;
}
//读取2天内行驶速度
void Get_2day_SPEED(void)
{ulong t=0,lc,k;
uchar *p1,*p2,*p3,i2;
uchar i,j,temp=0x55;
uint i1,k1;
send_data1();
Putc(0x55);
Putc(0x75);
temp^=0x75;
Putc(0x09);
temp^=0x09;
for (i=0; i<5; i++)
{
itime[i] = timeb2h(SYS_Time[i]);
}
timepastforint();
t = itimelen;
for (i=0; i<3; i++)
{
itime[i] = timeb2h(SYS_Time[i]);
}
itime[3]=0;
itime[4]=0;
timepastforint();
itimelen = itimelen-1440;
k = t - itimelen;
Putc((uchar)(k/256));
temp^=(uchar)(k/256);
Putc((uchar)(k%256));
temp^=(uchar)(k%256);
Putc(0);
temp^=0;
locatetime();
itimelen = t - 1;
lc=itimelen;
FM_CS;
p2=com1subbuf;
for(i=0;i<5;i++)
{*p2=time[i];
Putc(time[i]);
temp^=time[i];
p2++;
}
i=d360_index_buf1;
if(!((i==0)&&(d360_save_flag2==NOOP)))
{if((i==0)&&(d360_save_flag2==NEEDSAVE))
{i=20;
p1=D360_Buf2;
}
else
{
p1=D360_Buf1;
}
j= TRUE;
p3=p1;
while((j == TRUE)&&(i>0)&&(k>0))
{p1 = p3+(i-1) * 25 + 3;
for (i2=0; i2<5; i2++)
{
itime[i2] = timeb2h(*p1);
p1++;
}
timepastforint();
if(lc==itimelen)
{ *p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
else
{while(((lc-itimelen)>0)&&(k>0))
{*p2=0;
Putc(0);
temp^=0;
p2++;
lc--;
k--;
}
if(k==0)
j=FALSE;
else
{*p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
}
i--;
}
}
i1=flash_page_index;
if(j==TRUE)
{if(i1==0)
{ p1=flash_buf;
LoadPage(i1,p1,528);
if(*(p1+500)==VALID)
{j=TRUE;
i1=1100;
}
else
j=FALSE;
}
while((j==TRUE)&&(i1>0)&&(k>0))
{ p1=flash_buf;
LoadPage((i1 - 1),p1,528);
if(*(p1+500)==VALID)
{ k1=20;
while((j == TRUE)&&(k1>0)&&(k>0))
{ p1 =flash_buf+ (k1-1) * 25 + 3;
for (i2=0; i2<5; i2++)
{
itime[i2] = timeb2h(*p1);
p1++;
}
timepastforint();
if(lc==itimelen)
{ *p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
else
{while(((lc-itimelen)>0)&&(k>0))
{ *p2=0;
Putc(0);
temp^=0;
p2++;
lc--;
k--;
}
if(k==0)
j=FALSE;
else
{ *p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
}
k1--;
}
}
else
j=FALSE;
i1--;
if(i1==0)
i1=1100;
}
}
Putc(temp);
}
//读取360h内行驶速度
void Get_360h_SPEED(void)
{ulong t=0,lc,k;
uchar *p1,*p2,*p3,i2;
uchar i,j,temp=0x55;
uint i1,k1;
send_data1();
Putc(0x55);
Putc(0x75);
temp^=0x75;
Putc(0x05);
temp^=0x05;
for (i=0; i<5; i++)
{
itime[i] = timeb2h(SYS_Time[i]);
}
timepastforint();
t = itimelen;
itimelen = itimelen-21600;
k = 21600;
Putc((uchar)(k/256));
temp^=(uchar)(k/256);
Putc((uchar)(k%256));
temp^=(uchar)(k%256);
Putc(0);
temp^=0;
locatetime();
itimelen = t - 1;
lc=itimelen;
FM_CS;
p2=com1subbuf;
for(i=0;i<5;i++)
{*p2=time[i];
Putc(time[i]);
temp^=time[i];
p2++;
}
i=d360_index_buf1;
if(!((i==0)&&(d360_save_flag2==NOOP)))
{if((i==0)&&(d360_save_flag2==NEEDSAVE))
{i=20;
p1=D360_Buf2;
}
else
{
p1=D360_Buf1;
}
j= TRUE;
p3=p1;
while((j == TRUE)&&(i>0)&&(k>0))
{p1 = p3+(i-1) * 25 + 3;
for (i2=0; i2<5; i2++)
{
itime[i2] = timeb2h(*p1);
p1++;
}
timepastforint();
if(lc==itimelen)
{ *p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
else
{while(((lc-itimelen)>0)&&(k>0))
{*p2=0;
Putc(0);
temp^=0;
p2++;
lc--;
k--;
}
if(k==0)
j=FALSE;
else
{*p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
}
i--;
}
}
i1=flash_page_index;
if(j==TRUE)
{if(i1==0)
{ p1=flash_buf;
LoadPage(i1,p1,528);
if(*(p1+500)==VALID)
{j=TRUE;
i1=1100;
}
else
j=FALSE;
}
while((j==TRUE)&&(i1>0)&&(k>0))
{ p1=flash_buf;
LoadPage((i1 - 1),p1,528);
if(*(p1+500)==VALID)
{ k1=20;
while((j == TRUE)&&(k1>0)&&(k>0))
{ p1 =flash_buf+ (k1-1) * 25 + 3;
for (i2=0; i2<5; i2++)
{
itime[i2] = timeb2h(*p1);
p1++;
}
timepastforint();
if(lc==itimelen)
{ *p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
else
{while(((lc-itimelen)>0)&&(k>0))
{ *p2=0;
Putc(0);
temp^=0;
p2++;
lc--;
k--;
}
if(k==0)
j=FALSE;
else
{ *p2=*p1;
Putc(*p1);
temp^=*p1;
p2++;
lc--;
k--;
}
}
k1--;
}
}
else
j=FALSE;
i1--;
if(i1==0)
i1=1100;
}
}
Putc(temp);
}
//读取360H内行驶累计里程
ulong Get_360Hday_M(void)
{ulong t=0,lc=0;
uchar *p1,*p2,*p3;
uchar i,j,k;
uint i1,i2;
FM_CS;
p1=com1subbuf+11;
for (i=0; i<5; i++)
{
itime[i] = timeb2h(SYS_Time[i]);
*p1=SYS_Time[i];
p1++;
}
timepastforint();
itimelen = itimelen-21600;
locatetime();
lc=0;
i=d360_index_buf1;
if(!((i==0)&&(d360_save_flag2==NOOP)))
{if((i==0)&&(d360_save_flag2==NEEDSAVE))
{i=20;
p1=D360_Buf2;
}
else
{
p1=D360_Buf1;
}
j= TRUE;
p2=p1;
while((j == TRUE)&&(i>0))
{p1 = p2+(i-1) * 25 + 3;
if(comtime(p1)==TRUE)
{lc=lc+*(p1+6);
i--;
}
else
j = FALSE;
}
}
i1=flash_page_index;
if(i1==0)
{ p1=flash_buf;
LoadPage(i1,p1,528);
if(*(p1+500)==VALID)
{j=TRUE;
i1=1100;
}
else
j=FALSE;
}
i2=1100;
while((j==TRUE)&&(i1>0)&&(i2>0))
{ p1=flash_buf;
LoadPage(i1-1,p1,528);
if(*(p1+500)==VALID)
{ k=20;
while((j == TRUE)&&(k>0))
{ p1 =flash_buf+ (k-1) * 25 + 3;
if(comtime(p1)==TRUE)
{ lc=lc+*(p1+6);
k--;
}
else
j = FALSE;
}
}
else
j=FALSE;
i2--;
i1--;
if(i1==0)
i1=1100;
}
t=lc;
p1=com1subbuf+8;
*p1=lc/65536;
lc=lc%65536;
p1++;
*p1=lc/256;
p1++;
*p1=lc%256;
return t;
}
//取得同一驾驶员所有的疲劳驾驶信息
uchar Get_pilao_2day(void)
{ulong t=0;
uchar *p1,*p2,*p3;
uchar i,j,k=0,temp=0x55;
//cli();
p2=com1subbuf+1;
*p2=0x55;
p2++;
*p2=0x7a;
temp^=*p2;
p2++;
*p2=0x11;
temp^=*p2;
p2++;
*p2=0;
temp^=*p2;
p2++;
for (i=0; i<3; i++)
{
itime[i] = timeb2h(SYS_Time[i]);
}
itime[3]=0;
itime[4]=0;
timepastforint();
t = itimelen-1440;
p1=ConD_Buf;
p3=Driver_now__Buf+1;
if((condrv_index_buf==0)&&(*p1!=VALID))
{ *p2=k*10;
temp^=*p2;
p2++;
*p2=0;
temp^=*p2;
p2++;
*p2=temp;
p2=com1subbuf;
*p2=k;
return k;
}
else
{ p2++;
*p2=0;
temp^=*p2;
p2++;
if(condrv_index_buf==0)
{ //p2=com1subbuf+7;
for(i=0;i<16;i++)
{p1=ConD_Buf+i*14+1;
for (j=0; j<5; j++)
{
itime[j] = timeb2h(*(p1+3+j));
}
timepastforint();
if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(itimelen>=t))
{p1=p1+3;
for(j=0;j<10;j++)
{*p2=*p1;
temp^=*p2;
p2++;
p1++;
}
k++;
}
}
p1=p2;
p2=com1subbuf+5;
*p2=k*10;
temp^=*p2;
p2=p1;
*p2=temp;
p2=com1subbuf;
*p2=k;
return k;
}
else
{ //p2=com1subbuf+7;
for(i=condrv_index_buf;i<16;i++)
{p1=ConD_Buf+i*14+4;
for (j=0; j<5; j++)
{
itime[j] = timeb2h(*p1);
p1++;
}
timepastforint();
p1=ConD_Buf+i*14+1;
if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(*(p1-1)==VALID)&&(itimelen>=t))
{p1=p1+3;
for(j=0;j<10;j++)
{*p2=*p1;
temp^=*p2;
p2++;
p1++;
}
k++;
}
}
for(i=0;i<condrv_index_buf;i++)
{p1=ConD_Buf+i*14+4;
for (j=0; j<5; j++)
{
itime[j] = timeb2h(*p1);
p1++;
}
timepastforint();
p1=ConD_Buf+i*14+1;
if((*p1==*p3)&&(*(p1+1)==*(p3+1))&&(*(p1+2)==*(p3+2))&&(*(p1-1)==VALID)&&(itimelen>=t))
{p1=p1+3;
for(j=0;j<10;j++)
{*p2=*p1;
temp^=*p2;
p2++;
p1++;
}
k++;
}
}
p1=p2;
p2=com1subbuf+5;
*p2=k*10;
temp^=*p2;
p2=p1;
*p2=temp;
p2=com1subbuf;
*p2=k;
return k;
}
}
}
//取得同一驾驶员所有的疲劳驾驶信息
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -