inline short CodeHalf(char c) const { const static char m = 8; #ifdef DEBUG cout << "Half coded word: "; Print(c, 8); #endif if(c & m) { c &= ~m; return FillChar(nhm[c]); } else { return FillChar(hm[c]); } }
void GenerateTransactionNum(char *sTransNumber){//Create and Save TransactionNumber to EEPROM char i,PTransNum[7],cNum,xNum=0,xAdd=0,Length=0; FillChar(PTransNum,sizeof(PTransNum),0);//"999999"->"000000" eeprom_read_block((void*) &PTransNum, (const void*) &DefTransactionNumber,sizeof(DefTransactionNumber)); xAdd=1; xNum=0; Length=strlen(PTransNum); for(i=0;i<Length;i++){//[000009] 999999 123456 xNum=PTransNum[Length-i-1]-'0'; cNum='0'+((xNum+xAdd)%10); xAdd=((xNum+xAdd)/10); PTransNum[Length-i-1]=cNum; sTransNumber[Length-i-1]=cNum; } sTransNumber[Length]=0; PTransNum[Length]=0; eeprom_write_block((const void*)&PTransNum,(void*)&DefTransactionNumber,sizeof(DefTransactionNumber)); }
// STX MSGID PumpID 6 8 8 void StoreStandaloneTransData(char *strRawTransData){// [0x50,0x05] 01 01 1 004500 00000200 00000012 [0x06,0x60] = 24 char iPumpID=0,strPumpID[3]; char PNozzle,PGrade,strPPU[7],strPVolume[10],strPMoney[10]; char TransactionStatus=TS_NONE; char strTransDate[9],strTransTime[9]; char strSend[30]; char TransDigit; char FIPAddr; StrPosCopy(strRawTransData,strPumpID,2,2); RemZeroLead(strPumpID); iPumpID=atoi(strPumpID); FIPAddr=GetFIPAddr(iPumpID); if (FIPAddr>0){ FIPAddr=FIPAddr-1; //01 01 1 1 004500 0000055 0002475 PNozzle=CharPosCopy(strRawTransData,4)-'0'; PGrade=CharPosCopy(strRawTransData,5)-'0'; FillChar(strPPU,sizeof(strPPU),0); FillChar(strPVolume,sizeof(strPVolume),0); FillChar(strPMoney,sizeof(strPMoney),0); StrPosCopy(strRawTransData,strPPU,6,6); StrPosCopy(strRawTransData,strPVolume,12,8); StrPosCopy(strRawTransData,strPMoney,20,8); TransDigit=Ord(CharPosCopy(strRawTransData,28)); //Normalize7Digit //sprintf_P(strSend,PSTR("Digit: %d"),TransDigit); //_uart_print(1,1,strSend); if (TransDigit==8){ StrPosCopy(strPMoney,strPMoney,0,strlen(strPMoney)-1); } RemZeroLead(strPPU); RemZeroLead(strPVolume); RemZeroLead(strPMoney); //sprintf_P(strSend,PSTR("Money: %s"),strPMoney); //_uart_print(1,1,strSend); //Void Detection if (atoi(strPMoney)==0)TransactionStatus=TS_VOID; else TransactionStatus=TS_NEW; if (TransactionStatus==TS_VOID){//RejectData UpdateStandaloneStatus((iPumpID&0x0F),PS_VOID); } else if (TransactionStatus=TS_NEW){ //Update ReprintReady ReprintReady[FIPAddr]=True;//Ready for Printing FormatPrice(strPPU); FormatMoney(strPMoney); FormatVolume(strPVolume); //_uart_print(1,1,strPVolume); GenerateTransactionNum(strTranNo); sprintf_P(strTransDate,PSTR("%s"),strSystemDate); sprintf_P(strTransTime,PSTR("%s"),strSystemTime); sprintf_P(strShift,PSTR("%d"),eeprom_read_byte(&DefShift)); //TransNum,Date,Time StrPosCopy(strTranNo,RecPumpData[FIPAddr].strTransNum,0,strlen(strTranNo)); StrPosCopy(strTransDate,RecPumpData[FIPAddr].strTransDate,0,strlen(strTransDate)); StrPosCopy(strTransTime,RecPumpData[FIPAddr].strTransTime,0,strlen(strTransTime)); //Grade Nozzle Shift RecPumpData[FIPAddr].Grade=PGrade; RecPumpData[FIPAddr].Nozzle=PNozzle; RecPumpData[FIPAddr].Shift=atoi(strShift); //Price Volume Money StrPosCopy(strPPU,RecPumpData[FIPAddr].Price,0,strlen(strPPU)); StrPosCopy(strPVolume,RecPumpData[FIPAddr].Volume,0,strlen(strPVolume)); StrPosCopy(strPMoney,RecPumpData[FIPAddr].Money,0,strlen(strPMoney)); UpdateStandaloneStatus((iPumpID&0x0F),PS_PRINT_READY); SetIncomingTransStatus(iPumpID,TS_NEW); SendSlaveCommand(SC_TRANSACTION_ACK,iPumpID); } } //_uart_print(0,1,strRawTransData); }