|
@@ -51,8 +51,6 @@ void Database_init(uint16_t pushsize_loc, uint16_t pullsize_loc,uint16_t pushsiz
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
// Flash_ReadBytes((uint16_t*)&(dbeveptr->temppush),EveDbHeadStart,4);//读取loc头部是否发生写入
|
|
|
// if(dbeveptr->temppush.eve_pushIndex == 0xFFFF && dbeveptr->temppush.eve_pullIndex ==0xFFFF)//未写入
|
|
|
// {
|
|
@@ -76,182 +74,174 @@ void Database_init(uint16_t pushsize_loc, uint16_t pullsize_loc,uint16_t pushsiz
|
|
|
bool Overwrite_loc = false;
|
|
|
HAL_StatusTypeDef PushSta;
|
|
|
//***************定位信息入库
|
|
|
-
|
|
|
+bool twowrite = false;
|
|
|
//*20min最少一条
|
|
|
//*大于10km每5min一条
|
|
|
void Database_Push(uint8_t object)
|
|
|
{
|
|
|
if(object==0)//位置信息写入
|
|
|
{
|
|
|
+ if(dblocptr->headinfo.loc_pushIndex==0)//判断是否初次写入
|
|
|
+ {
|
|
|
+ printf("1\r\n");
|
|
|
+ PushSta = Flash_WriteBytes((uint16_t*)&(dblocptr->location.alarmFlagH),LocDbBodyStart,17);//34
|
|
|
+ if(PushSta==HAL_OK)
|
|
|
+ {
|
|
|
+ printf("区头开始写入\r\n");
|
|
|
+ }
|
|
|
+ dblocptr->headinfo.loc_pushIndex+=1; //入库索引
|
|
|
+ dblocptr->headinfo.loc_Conter+=1; //入库总计数
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,6);//向dblocptr->headinfo写入6*2个字节
|
|
|
+ }
|
|
|
#if timingPush==1
|
|
|
if(dblocptr->temppush.loc_pushIndex!=0 && dblocptr->location.speed>0)//速度大于10km/h入库(100)
|
|
|
#else
|
|
|
if(dblocptr->temppush.loc_pushIndex!=0 && dblocptr->location.speed>10)//速度大于10km/h入库
|
|
|
#endif
|
|
|
{
|
|
|
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppush.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pushIndex-1)*34),17);//读取body信息
|
|
|
- if(dblocptr->temppush.alarmFlagH==0xFFFF)
|
|
|
- {
|
|
|
- dblocptr->temppush.alarmFlagH=0;
|
|
|
- dblocptr->temppush.alarmFlagL=0;
|
|
|
- dblocptr->temppush.statusFlagH=0; //状态标志
|
|
|
- dblocptr->temppush.statusFlagL=0; //状态标志
|
|
|
- dblocptr->temppush.latitudeH=0; //纬度
|
|
|
- dblocptr->temppush.latitudeL=0; //纬度
|
|
|
- dblocptr->temppush.longitudeH=0; //经度
|
|
|
- dblocptr->temppush.longitudeL=0; //经度
|
|
|
- dblocptr->temppush.height=0; //高度
|
|
|
- dblocptr->temppush.speed=0; //速度
|
|
|
- dblocptr->temppush.direction=0; //方向
|
|
|
- dblocptr->temppush.timeBCD[0]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[1]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[2]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[3]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[4]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[5]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.signalCmd=0; //信号关键字
|
|
|
- dblocptr->temppush.signalCmd_len=0; //信号关键字长度
|
|
|
- dblocptr->temppush.CSQ=0; //信号强度
|
|
|
- dblocptr->temppush.atellitesCmd=0; //卫星关键字
|
|
|
- dblocptr->temppush.atellitesCmd_len=0;//卫星关键字长度
|
|
|
- dblocptr->temppush.satellitesNum=0; //卫星数量
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- PushSta = Flash_WriteBytes((uint16_t*)&(dblocptr->location.alarmFlagH),LocDbBodyStart + (dblocptr->headinfo.loc_pushIndex*34),17);
|
|
|
- TestPrintStruct(dblocptr,1,0);//读取Temp
|
|
|
- dblocptr->headinfo.loc_pushIndex+=1;
|
|
|
- dblocptr->headinfo.loc_Conter+=1;
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,6);//更新刻度
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
+ printf("2\r\n");
|
|
|
+ PushSta = Flash_WriteBytes((uint16_t*)&(dblocptr->location.alarmFlagH),LocDbBodyStart + (dblocptr->headinfo.loc_pushIndex*34),17);
|
|
|
+ dblocptr->headinfo.loc_pushIndex+=1;
|
|
|
+ dblocptr->headinfo.loc_Conter+=1;
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,6);//更新刻度
|
|
|
+
|
|
|
}
|
|
|
else if(timecount==4)//20min最少一条
|
|
|
{
|
|
|
+ printf("3\r\n");
|
|
|
timecount=0;
|
|
|
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppush.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pushIndex-1)*34),17);//读取body信息
|
|
|
- if(dblocptr->temppush.alarmFlagH==0xFFFF)
|
|
|
- {
|
|
|
- dblocptr->temppush.alarmFlagH=0;
|
|
|
- dblocptr->temppush.alarmFlagL=0;
|
|
|
- dblocptr->temppush.statusFlagH=0; //状态标志
|
|
|
- dblocptr->temppush.statusFlagL=0; //状态标志
|
|
|
- dblocptr->temppush.latitudeH=0; //纬度
|
|
|
- dblocptr->temppush.latitudeL=0; //纬度
|
|
|
- dblocptr->temppush.longitudeH=0; //经度
|
|
|
- dblocptr->temppush.longitudeL=0; //经度
|
|
|
- dblocptr->temppush.height=0; //高度
|
|
|
- dblocptr->temppush.speed=0; //速度
|
|
|
- dblocptr->temppush.direction=0; //方向
|
|
|
- dblocptr->temppush.timeBCD[0]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[1]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[2]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[3]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[4]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.timeBCD[5]=0; //时间戳(世纪秒)BCD
|
|
|
- dblocptr->temppush.signalCmd=0; //信号关键字
|
|
|
- dblocptr->temppush.signalCmd_len=0; //信号关键字长度
|
|
|
- dblocptr->temppush.CSQ=0; //信号强度
|
|
|
- dblocptr->temppush.atellitesCmd=0; //卫星关键字
|
|
|
- dblocptr->temppush.atellitesCmd_len=0;//卫星关键字长度
|
|
|
- dblocptr->temppush.satellitesNum=0; //卫星数量
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- PushSta = Flash_WriteBytes((uint16_t*)&(dblocptr->location.alarmFlagH),LocDbBodyStart + (dblocptr->headinfo.loc_pushIndex*34),17);
|
|
|
- TestPrintStruct(dblocptr,1,0);//读取Temp
|
|
|
- dblocptr->headinfo.loc_pushIndex+=1;
|
|
|
- dblocptr->headinfo.loc_Conter+=1;
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,6);//更新刻度
|
|
|
-
|
|
|
- }
|
|
|
+ PushSta = Flash_WriteBytes((uint16_t*)&(dblocptr->location.alarmFlagH),LocDbBodyStart + (dblocptr->headinfo.loc_pushIndex*34),17);
|
|
|
+ dblocptr->headinfo.loc_pushIndex+=1;
|
|
|
+ dblocptr->headinfo.loc_Conter+=1;
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,6);//更新刻度
|
|
|
}
|
|
|
-
|
|
|
- else if(dblocptr->headinfo.loc_pushIndex==0)//判断是否写入
|
|
|
- {
|
|
|
- PushSta = Flash_WriteBytes((uint16_t*)&(dblocptr->location.alarmFlagH),LocDbBodyStart,17);//34
|
|
|
- if(PushSta==HAL_OK)
|
|
|
- {
|
|
|
- printf("首次写入,->%d\r\n",dblocptr->temppush.loc_pushIndex);
|
|
|
- }
|
|
|
- dblocptr->headinfo.loc_pushIndex+=1; //入库索引
|
|
|
- dblocptr->headinfo.loc_Conter+=1; //入库总计数
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,6);//向dblocptr->headinfo写入6*2个字节
|
|
|
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppush.loc_pushIndex),LocDbHeadStart,6);//读取
|
|
|
+ else
|
|
|
+ {
|
|
|
+ printf("4\r\n");
|
|
|
+ printf("未获取定位信息\r\n");
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
if(dblocptr->headinfo.loc_pushIndex == dblocptr->headinfo.loc_pushSize)//入库达边界值
|
|
|
{
|
|
|
+ printf("5\r\n");
|
|
|
Overwrite_loc=true;
|
|
|
dblocptr->headinfo.loc_pushIndex=0;
|
|
|
printf("@@入库操作,当前索引%d,达边界值返回覆写----%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_Conter);
|
|
|
Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
|
|
|
}
|
|
|
-// if(dblocptr->location.latitudeL!=0)
|
|
|
-// {
|
|
|
- TestPrintStruct(dblocptr,0,0);//读取Worknow
|
|
|
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppush.loc_pushIndex),LocDbHeadStart,4);//读取loc头部写入信息
|
|
|
-// if(PushSta==HAL_OK)
|
|
|
-// {
|
|
|
- printf("写入%d完成,准备写入->%d\r\n",dblocptr->headinfo.loc_pushIndex-1,dblocptr->temppush.loc_pushIndex);
|
|
|
-// }
|
|
|
-// }
|
|
|
- ///*越界处理
|
|
|
-
|
|
|
+ if(dblocptr->headinfo.loc_pushIndex>0)
|
|
|
+ {
|
|
|
+ printf("6\r\n");
|
|
|
+ printf("写入%d完成,准备写入->%d\r\n",dblocptr->headinfo.loc_pushIndex-1,dblocptr->headinfo.loc_pushIndex);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
+bool lastPull = false;
|
|
|
void Database_Pull(uint8_t object)
|
|
|
{
|
|
|
if(object==0)//位置信息出库
|
|
|
{
|
|
|
+ printf("1\r\n");
|
|
|
Flash_ReadBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,6);//读取loc头部写入信息
|
|
|
|
|
|
if(dblocptr->headinfo.loc_pushIndex != dblocptr->headinfo.loc_pullIndex)//库内有数据
|
|
|
{
|
|
|
+ printf("2\r\n");
|
|
|
+ printf("库内有数据\r\n");
|
|
|
if(Overwrite_loc)
|
|
|
{
|
|
|
- if(dblocptr->headinfo.loc_pullIndex > dblocptr->headinfo.loc_pushSize)
|
|
|
+
|
|
|
+ printf("3\r\n");
|
|
|
+ printf("库内已被覆写\r\n");
|
|
|
+ if(dblocptr->headinfo.loc_pullIndex > dblocptr->headinfo.loc_pullSize)//到达界限
|
|
|
{
|
|
|
+
|
|
|
+ printf("4\r\n");
|
|
|
+ twowrite = false;
|
|
|
dblocptr->headinfo.loc_pullIndex=0;
|
|
|
}
|
|
|
- else
|
|
|
+ else if(dblocptr->headinfo.loc_pullIndex==0)//当前入库后的一组数据
|
|
|
{
|
|
|
+
|
|
|
+ printf("5\r\n");
|
|
|
+ twowrite = true;
|
|
|
+ printf("更新pullIndex\r\n");
|
|
|
dblocptr->headinfo.loc_pullIndex = dblocptr->headinfo.loc_pushIndex+1;
|
|
|
- printf("@@出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
+
|
|
|
+ }
|
|
|
+ else if(dblocptr->headinfo.loc_pullIndex < dblocptr->headinfo.loc_pushIndex)//置0后
|
|
|
+ {
|
|
|
+
|
|
|
+ printf("6\r\n");
|
|
|
+ printf("@@前出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
|
|
|
- //TestPrintStruct(dblocptr,2,1);//读取pullTemp
|
|
|
- //dblocptr->headinfo.loc_pullIndex+=1;
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
|
|
|
+ dblocptr->headinfo.loc_pullIndex+=1;
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
}
|
|
|
- if(dblocptr->headinfo.loc_pullIndex < dblocptr->headinfo.loc_pushIndex)
|
|
|
+ else if(dblocptr->headinfo.loc_pullIndex > dblocptr->headinfo.loc_pushIndex)//置0后
|
|
|
{
|
|
|
- printf("@@出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
+
|
|
|
+ printf("7\r\n");
|
|
|
+ printf("@@0后出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
|
|
|
- //TestPrintStruct(dblocptr,2,1);//读取pullTemp
|
|
|
dblocptr->headinfo.loc_pullIndex+=1;
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- printf("@@出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
+
|
|
|
+ printf("8\r\n");
|
|
|
+ printf("库内未被覆写,出库\r\n");
|
|
|
Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
|
|
|
- //TestPrintStruct(dblocptr,2,1);//读取pullTemp
|
|
|
dblocptr->headinfo.loc_pullIndex+=1;
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
}
|
|
|
+ //*后一出库
|
|
|
+// if(twowrite)
|
|
|
+// {
|
|
|
+//
|
|
|
+// printf("9\r\n");
|
|
|
+// printf("@@后出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
+// Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
|
|
|
+// dblocptr->headinfo.loc_pullIndex +=1;
|
|
|
+// Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
+// }
|
|
|
+
|
|
|
}
|
|
|
- else
|
|
|
+ else if(dblocptr->headinfo.loc_pushIndex == dblocptr->headinfo.loc_pullIndex && Overwrite_loc && dblocptr->headinfo.loc_Conter>=dblocptr->headinfo.loc_pushSize) //相同已返回总计数大于入库限制
|
|
|
{
|
|
|
+
|
|
|
+ printf("10\r\n");
|
|
|
+ printf("库内有数据并且都在头\r\n");
|
|
|
printf("@@出库操作,应出库%d当前索引%d\r\n",dblocptr->headinfo.loc_pushIndex,dblocptr->headinfo.loc_pullIndex);
|
|
|
+ dblocptr->headinfo.loc_pullIndex=dblocptr->headinfo.loc_pushIndex +1;
|
|
|
+ Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(dblocptr->headinfo.loc_pullIndex > dblocptr->headinfo.loc_pullSize)
|
|
|
+ {
|
|
|
+
|
|
|
+ printf("11\r\n");
|
|
|
dblocptr->headinfo.loc_pushIndex=0;
|
|
|
dblocptr->headinfo.loc_pullIndex=0;
|
|
|
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
|
|
|
- printf("@@出库完成,库内数据更新\r\n");
|
|
|
- Online=false;
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
}
|
|
|
+
|
|
|
+ if(dblocptr->headinfo.loc_pushIndex == dblocptr->headinfo.loc_pullIndex)
|
|
|
+ {
|
|
|
+ printf("12\r\n");
|
|
|
+
|
|
|
+ dblocptr->headinfo.loc_pushIndex=0;
|
|
|
+ dblocptr->headinfo.loc_pullIndex=0;
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
|
|
|
+ printf("@@出库完成,库内数据更新!!!!\r\n");
|
|
|
+ Online=false;
|
|
|
+
|
|
|
+ }
|
|
|
+ printf("13\r\n");
|
|
|
+ printf("@@出库操作当前索引%d\r\n",dblocptr->headinfo.loc_pullIndex);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -351,8 +341,6 @@ void PushpullWork(void)
|
|
|
#if timingPush==1
|
|
|
//if(Offline && timecountMin==5)//5min入库一个信息
|
|
|
if(Offline && timecountMin==1)//1min入库一个信息
|
|
|
-#else
|
|
|
- if(Offline)//入库
|
|
|
#endif
|
|
|
{
|
|
|
timecountMin=0;//5min清0
|
|
@@ -361,8 +349,14 @@ void PushpullWork(void)
|
|
|
}
|
|
|
else if(!Offline && Online)
|
|
|
{
|
|
|
- Database_Pull(0);
|
|
|
- tt808FsFunc((uint8_t*)&(dblocptr->temppull.alarmFlagH), 39, MessageID_Retrans);
|
|
|
+ Database_Pull(0);//读取
|
|
|
+ if(lastPull)
|
|
|
+ {lastPull=false;}
|
|
|
+ else
|
|
|
+ {
|
|
|
+ tt808FsFunc((uint8_t*)&(dblocptr->temppull.alarmFlagH), 39, MessageID_Retrans);//上传
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|