123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368 |
- #include "database.h"
- #include "usart.h"
- #include "tt808.h"
- uint16_t PDA_pushArr[1024];
- extern TipsFlag tipsflag;
- extern Menu_table menu;
- DatabaseLoc dbloc;
- DatabaseEvent dbeve;
- DatabaseLoc *dblocptr = &dbloc;
- DatabaseEvent *dbeveptr = &dbeve;
- bool uploaweork=false;
- /**
- * @breaf 数据库初始化
- * @Explanation 向各头部写入关键信息
- */
- void Database_init(uint16_t pushsize_loc, uint16_t pullsize_loc,uint16_t pushsize_eve, uint16_t pullsize_eve)
- {
- dblocptr->headinfo.loc_Conter=0;
-
- dblocptr->location.alarmFlagH=0;
- dblocptr->location.alarmFlagL=0;
-
- dblocptr->location.height=0;
- dblocptr->location.direction=0;
- dblocptr->location.signalCmd=0x30;
- dblocptr->location.signalCmd_len=0x01;
- dblocptr->location.atellitesCmd=0x31;
- dblocptr->location.atellitesCmd_len=0x01;
-
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppush.loc_pushIndex),LocDbHeadStart,4);//读取loc头部是否发生写入
- if(dblocptr->temppush.loc_pullIndex == 0xFFFF && dblocptr->temppush.loc_pushIndex==0xFFFF)//未写入
- {
- dblocptr->headinfo.loc_pushIndex = 0;
- dblocptr->headinfo.loc_pullIndex = 0;
- dblocptr->headinfo.loc_pushSize = pushsize_loc;
- dblocptr->headinfo.loc_pullSize = pullsize_loc;
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);
- }
- else
- {
- //*高地址字节在前
- dblocptr->headinfo.loc_pushIndex = dblocptr->temppush.loc_pushIndex;
- dblocptr->headinfo.loc_pullIndex = dblocptr->temppush.loc_pullIndex;
- dblocptr->headinfo.loc_pushSize = dblocptr->temppush.loc_pushSize;
- dblocptr->headinfo.loc_pullSize = dblocptr->temppush.loc_pullSize;
- }
-
- // Flash_ReadBytes((uint16_t*)&(dbeveptr->temppush),EveDbHeadStart,4);//读取loc头部是否发生写入
- // if(dbeveptr->temppush.eve_pushIndex == 0xFFFF && dbeveptr->temppush.eve_pullIndex ==0xFFFF)//未写入
- // {
- // dbeveptr->headinfo.eve_pushIndex = 0;
- // dbeveptr->headinfo.eve_pullIndex = 0;
- // dbeveptr->headinfo.eve_pushSize = pushsize_loc;
- // dbeveptr->headinfo.eve_pullSize = pullsize_loc;
- // Flash_WriteBytes((uint16_t*)&(dbeveptr->headinfo),EveDbHeadStart,4);
- // }
- // else
- // {
- // //*高地址字节在前
- // dbeveptr->headinfo.eve_pushIndex = dbeveptr->temppush.eve_pushIndex;
- // dbeveptr->headinfo.eve_pullIndex = dbeveptr->temppush.eve_pullIndex;
- // dbeveptr->headinfo.eve_pushSize = dbeveptr->temppush.eve_pushSize;
- // dbeveptr->headinfo.eve_pullSize = dbeveptr->temppush.eve_pullSize;
- // }
- }
- bool Overwrite_loc = false;
- HAL_StatusTypeDef PushSta;
- //***************定位信息入库
- bool twowrite = false;
- //*20min最少一条
- //*大于10km每5min一条
- void Database_Push(uint8_t object)
- {
- if(object==0)//位置信息写入
- {
- printf("@1->%d\r\n",dblocptr->headinfo.loc_pushIndex);
- #if timingPush==1
- if(dblocptr->headinfo.loc_pushIndex!=0 && dblocptr->location.speed>100)//速度大于10km/h入库(100)
- #else
- if(dblocptr->temppush.loc_pushIndex!=0 && dblocptr->location.speed>100)//速度大于10km/h入库
- #endif
- {
- 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(dblocptr->headinfo.loc_pushIndex==0)//判断是否初次写入
- {
- printf("3\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个字节
- }
- else if(timecount==4)//20min最少一条
- {
- printf("4\r\n");
- timecount=0;
- 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
- {
- printf("5\r\n");
- printf("未获取定位信息\r\n");
- }
- }
- if(dblocptr->headinfo.loc_pushIndex == dblocptr->headinfo.loc_pushSize)//入库达边界值
- {
- printf("6\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->headinfo.loc_pushIndex>0)
- {
- printf("7\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)
- {
-
- printf("3\r\n");
- printf("库内已被覆写\r\n");
- if(dblocptr->headinfo.loc_pullIndex==0 && dblocptr->headinfo.loc_Conter>dblocptr->headinfo.loc_pullSize && !lastPull)//当前入库后的一组数据
- {
-
- printf("4\r\n");
- twowrite = true;
- printf("更新pullIndex\r\n");
- dblocptr->headinfo.loc_pullIndex = dblocptr->headinfo.loc_pushIndex+1;
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
- }
- else if(dblocptr->headinfo.loc_pullIndex < dblocptr->headinfo.loc_pushIndex)//置0后
- {
-
- printf("5\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 if(dblocptr->headinfo.loc_pullIndex > dblocptr->headinfo.loc_pushIndex)//置0后
- {
-
- printf("6\r\n");
- printf("@@0后出库操作,当前索引%d\r\n",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
- {
-
- printf("7\r\n");
- printf("库内未被覆写,出库\r\n");
- 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);//更新刻度
- }
- }
- if(dblocptr->headinfo.loc_pullIndex > dblocptr->headinfo.loc_pullSize)//到达界限
- {
-
- printf("8\r\n");
- twowrite = false;
- lastPull = true;
- dblocptr->headinfo.loc_pullIndex=0;
- Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo.loc_pushIndex),LocDbHeadStart,4);//更新刻度
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart + ((dblocptr->headinfo.loc_pullIndex)*34),17);//读取出库body信息
- }
- if(dblocptr->headinfo.loc_pushIndex == dblocptr->headinfo.loc_pullIndex && Overwrite_loc && dblocptr->headinfo.loc_Conter>=dblocptr->headinfo.loc_pushSize) //相同已返回总计数大于入库限制
- {
-
- printf("9\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);//更新刻度
- }
-
- {
- printf("10\r\n");
- printf("@@出库操作当前索引%d\r\n",dblocptr->headinfo.loc_pullIndex);
-
- 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.loc_pushIndex),LocDbHeadStart,4);//更新刻度
- printf("@@出库完成,库内数据更新!!!!\r\n");
- Online=false;
- lastPull=false;
- Overwrite_loc=false;
-
- }
- if(dblocptr->headinfo.loc_pullIndex == dblocptr->headinfo.loc_pushIndex)
- {
- 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;
- lastPull=false;
- Overwrite_loc=false;
- }
- }
- }
- }
- void TestPrintStruct(DatabaseLoc *ptr,uint8_t temppush,uint8_t temppull)
- {
- if(temppush==1)
- {
- printf("temp:%04X%04X%04X%04X%04X%04X%04X%04X%04X%04X%04X%d%d%d%d%d%d%02X%02X%02X%02X%02X%02X\r\n", \
- ptr->temppush.alarmFlagH, \
- ptr->temppush.alarmFlagL, \
- ptr->temppush.statusFlagH, \
- ptr->temppush.statusFlagL, \
- ptr->temppush.latitudeH, \
- ptr->temppush.latitudeL, \
- ptr->temppush.longitudeH, \
- ptr->temppush.longitudeL, \
- ptr->temppush.height, \
- ptr->temppush.speed, \
- ptr->temppush.direction, \
- ptr->temppush.timeBCD[0], \
- ptr->temppush.timeBCD[1], \
- ptr->temppush.timeBCD[2], \
- ptr->temppush.timeBCD[3], \
- ptr->temppush.timeBCD[4], \
- ptr->temppush.timeBCD[5], \
- ptr->temppush.signalCmd, \
- ptr->temppush.signalCmd_len, \
- ptr->temppush.CSQ, \
- ptr->temppush.atellitesCmd, \
- ptr->temppush.atellitesCmd_len, \
- ptr->temppush.satellitesNum);
- }
- else if(temppush==0)
- {
- printf("now:%04X%04X%04X%04X%04X%04X%04X%04X%04X%04X%04X%d%d%d%d%d%d%02X%02X%02X%02X%02X%02X\r\n", \
- ptr->location.alarmFlagH, \
- ptr->location.alarmFlagL, \
- ptr->location.statusFlagH, \
- ptr->location.statusFlagL, \
- ptr->location.latitudeH, \
- ptr->location.latitudeL, \
- ptr->location.longitudeH, \
- ptr->location.longitudeL, \
- ptr->location.height, \
- ptr->location.speed, \
- ptr->location.direction, \
- ptr->location.timeBCD[0], \
- ptr->location.timeBCD[1], \
- ptr->location.timeBCD[2], \
- ptr->location.timeBCD[3], \
- ptr->location.timeBCD[4], \
- ptr->location.timeBCD[5], \
- ptr->location.signalCmd, \
- ptr->location.signalCmd_len, \
- ptr->location.CSQ, \
- ptr->location.atellitesCmd, \
- ptr->location.atellitesCmd_len, \
- ptr->location.satellitesNum);
- }
- else if(temppull==1)
- {
- printf("ptem:%04X%04X%04X%04X%04X%04X%04X%04X%04X%04X%04X%d%d%d%d%d%d%02X%02X%02X%02X%02X%02X\r\n", \
- ptr->temppull.alarmFlagH, \
- ptr->temppull.alarmFlagL, \
- ptr->temppull.statusFlagH, \
- ptr->temppull.statusFlagL, \
- ptr->temppull.latitudeH, \
- ptr->temppull.latitudeL, \
- ptr->temppull.longitudeH, \
- ptr->temppull.longitudeL, \
- ptr->temppull.height, \
- ptr->temppull.speed, \
- ptr->temppull.direction, \
- ptr->temppull.timeBCD[0], \
- ptr->temppull.timeBCD[1], \
- ptr->temppull.timeBCD[2], \
- ptr->temppull.timeBCD[3], \
- ptr->temppull.timeBCD[4], \
- ptr->temppull.timeBCD[5], \
- ptr->temppull.signalCmd, \
- ptr->temppull.signalCmd_len, \
- ptr->temppull.CSQ, \
- ptr->temppull.atellitesCmd, \
- ptr->temppull.atellitesCmd_len, \
- ptr->temppull.satellitesNum);
- }
- }
- uint16_t timecountSec=0;
- uint16_t timecountMin=0;
- uint16_t timecount=0;
- void PushpullWork(void)
- {
- dblocptr->location.statusFlagL = (0x2<<8)&0xFF00;//定义状态
- #if timingPush==1
- //if(Offline && timecountMin==5)//5min入库一个信息
- if(Offline && timecountMin==1)//1min入库一个信息
- #endif
- {
- timecountMin=0;//5min清0
- Database_Push(0);//0:Loc信息
- }
- else if(!Offline && Online)
- {
- Flash_ReadBytes((uint16_t*)&(dblocptr->temppull.alarmFlagH),LocDbBodyStart,17);//读取出库body信息
- if(lastPull)
- {
- //lastPull=false;
- }
- else if(dblocptr->temppull.alarmFlagH!=0xFFFF)
- {
- printf("库内无有效数据\r\n");
- Database_Pull(0);//读取
- tt808FsFunc((uint8_t*)&(dblocptr->temppull.alarmFlagH), 39, MessageID_Retrans);//上传
- }
- }
- }
|