/********************************************************************************************************* ** Function name: ReadLogAPI ** Descriptions: 从flash读区域交易记录,总交易记录 ** input parameters: ** output parameters: 无 ** Returned value: 1读取成功,0读取失败 *********************************************************************************************************/ uint8_t ReadLogAPI(void) { uint8_t *tp2,buf[512]; uint16_t crc,len; tp2 = (uint8_t *) &LogPara;//交易数据记录 AT45DBReadPage(4040,buf); len = sizeof(LogPara); if(len > 500) return 0; crc = CrcCheck(buf,len); //Trace("LogPara:\r\n crc =%d,buf[crc]=%d type = %d\r\n",crc,INTEG16(buf[len],buf[len + 1]),buf[len + 2]); if((crc == INTEG16(buf[len],buf[len + 1])) && (buf[len + 2] == 0xE0)) { Trace("\r\nLogPara read from flash suc....\r\n"); memcpy(tp2,buf,len); return 1; } //Trace("LogPara read from flash fail....\r\n"); return 0; /* crc = CrcCheck(tp2,sizeof(LogPara)-2); //Trace("\r\n logcrc=%d,%x,%x",sizeof(LogPara)-2,crc/256,crc%256); if( (crc/256 == LogPara.CrcCheck[0])&&(crc%256 == LogPara.CrcCheck[1]) ) { return 1; } else { return 0; } */ }
/********************************************************************************************************* ** Function name: WriteLogDetailAPI ** Descriptions: 将明细日志写到flash中 ** input parameters: ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void WriteLogDetailAPI(uint16_t LogDetailPage) { uint8_t *tp1,i,buf[512]; uint16_t crc,len; tp1 = (uint8_t *) &LogParaDetail;//交易数据记录 if(sizeof(LogParaDetail) > 500) { Trace("sizeof(LogPara) is %d > 500\r\n",sizeof(LogPara)); return ; } len = sizeof(LogParaDetail); memcpy(buf,tp1,len); crc = CrcCheck(buf,len); buf[len] = HUINT16(crc); buf[len + 1] = LUINT16(crc); buf[len + 2] = 0xE1;//总交易记录写入flash 标志 AT45DBWritePage(LogDetailPage,buf); Trace("TradeNum=%d\r\n",LogParaDetail.TradeNum); for(i = 0;i < 24 ; ) { Trace("ColumnNo=%c%c%c\r\n ",LogParaDetail.ColumnNo[i],LogParaDetail.ColumnNo[i+1],LogParaDetail.ColumnNo[i+2]); i+=3; OSTimeDly(20); } //PrintLogDetailAPI(); OSTimeDly(OS_TICKS_PER_SEC/100); memset(&LogParaDetail,0,sizeof(LogParaDetail)); }
/********************************************************************************************************* ** Function name: saveDetailTradeInfo ** Descriptions: 保存详细交易记录 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void saveDetailTradeInfo(void) { unsigned short addr = 0; unsigned short len,crc; unsigned char buf[ADD_TRADE_PAGE_LEN] = {0}; //确定交易页号 if(stTotalTrade.tradePageNo < TRADE_MAX_PAGE) stTotalTrade.tradePageNo++; else stTotalTrade.tradePageNo = 1; RTCReadTime(&stDetailTradeInfo.tradeTime); addr = ADD_TRADE_INFO + stTotalTrade.tradePageNo * ADD_TRADE_PAGE_LEN; len = sizeof(stDetailTradeInfo); memcpy(buf,(void *)&stDetailTradeInfo,len); crc = CrcCheck(buf,len); buf[len + 0] = HUINT16(crc); buf[len + 1] = LUINT16(crc); saveFlash(addr,buf,ADD_TRADE_PAGE_LEN); //清本次交易数据信息 memset((void *)&stDetailTradeInfo,0,sizeof(stDetailTradeInfo)); }
/********************************************************************************************************* ** Function name: WriteLogAPI ** Descriptions: 将区域交易记录,总交易记录写到flash中 ** input parameters: ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void WriteLogAPI(void) { uint8_t *tp2,buf[512]; uint16_t crc,len; tp2 = (uint8_t *) &LogPara;//交易数据记录 /* crc = CrcCheck(tp2,sizeof(LogPara)-2); LogPara.CrcCheck[0] = crc/256; LogPara.CrcCheck[1] = crc%256; */ //Trace("\r\n logcrc=%d,%x,%x",sizeof(LogPara)-2,LogPara.CrcCheck[0],LogPara.CrcCheck[1]); //changed by yoc 2013.9.11 if(sizeof(LogPara) > 500) { Trace("sizeof(LogPara) is %d > 500\r\n",sizeof(LogPara)); return ; } len = sizeof(LogPara); memcpy(buf,tp2,len); crc = CrcCheck(buf,len); buf[len] = HUINT16(crc); buf[len + 1] = LUINT16(crc); buf[len + 2] = 0xE0;//区域交易记录写入flash标志 AT45DBWritePage(4040,buf); //Trace("LogPara write ...\r\n"); }
uint8 BT_recv(uint8 *rdata,uint8 *rlen,uint32 ms) { uint8 index = 0,len = 0,ch; uint16 crc; *rlen = 0; Timer.bentoTimeout = (ms > 200) ? ms / 10 : 20; while(Timer.bentoTimeout){ if(uartIsNotEmpty()){ ch = uartGetCh(); rdata[index++] = ch; if(index == 1){ if(ch != (BT_HEAD + 1)){ index = 0; } } else if(index == 2){ len = ch; } else if(index >= (len + 2)){ crc = CrcCheck(rdata,len); if(crc == INTEG16(rdata[len],rdata[len + 1])){ *rlen = len + 2; return 1; } else return 0; } } msleep(10); } return 0; }
void LOG_writeId(ST_MAC_SN *macSn) { uint8_t buf[512] = {0},len; uint16_t crc; unsigned char i; len = sizeof(macSn->id); for(i = 0;i < len;i++){ buf[i] = macSn->id[i]; } crc = CrcCheck(buf,len); buf[len] = HUINT16(crc); buf[len + 1] = LUINT16(crc); buf[len + 2] = 0xEA;//区域交易记录写入flash标志 AT45DBWritePage(PAGE_MAC_SN,buf); }
/********************************************************************************************************* ** Function name: read_data ** Descriptions: 读取信息 ** input parameters: ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ static unsigned char read_data(void *ptr,unsigned short len,unsigned short addr) { unsigned short crc; unsigned char buf[256] = {0}; if(!ptr || !len || (len > 240)) return 0; readFlash(addr,buf,256); crc = CrcCheck(buf,len); if(crc == INTEG16(buf[len],buf[len + 1])) { memcpy(ptr,buf,len); return 1; } return 0; }
/********************************************************************************************************* ** Function name: save_data ** Descriptions: 保存信息 ** input parameters: ptr:写入flash的数据指针, len 写入长度 最大长度不超过240字节 addr写入的起始地址 ** output parameters: 无 ** Returned value: 0 失败 1成功 *********************************************************************************************************/ static unsigned char save_data(void *ptr,unsigned short len,unsigned short addr) { unsigned short crc; unsigned char buf[256] = {0};//256字节 分8次存储 if(!ptr || !len || (len > 240)) return 0; memcpy(buf,ptr,len); crc = CrcCheck(buf,len); buf[len + 0] = HUINT16(crc); buf[len + 1] = LUINT16(crc); len += 2; saveFlash(addr,buf,256); return 1; }
/********************************************************************************************************* ** Function name: readDetailTradeInfo ** Descriptions: 读取交易记录 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ unsigned char readDetailTradeInfo(DETAIL_TRADE_INFO *stDetail,unsigned short pageNo) { unsigned char buf[ADD_TRADE_PAGE_LEN] = {0}; unsigned short flashPage,crc,len; if(!stDetail || (pageNo > TRADE_MAX_PAGE)) return 0; flashPage = ADD_TRADE_INFO + pageNo * ADD_TRADE_PAGE_LEN; len = sizeof(DETAIL_TRADE_INFO); readFlash(flashPage, buf,ADD_TRADE_PAGE_LEN); crc = CrcCheck(buf,len); if(crc == INTEG16(buf[len],buf[len + 1])) { memcpy((void *)stDetail,buf,len); return 1; } return 0; }
/********************************************************************************************************* ** Function name: ReadDetailTraceAPI ** Descriptions: 从flash读每条明细日志 不用全局变量 ** input parameters: ** output parameters: 无 ** Returned value: 1读取成功,0读取失败 *********************************************************************************************************/ uint8_t ReadDetailTraceAPI(char * detailBuff,uint16_t LogDetailPage) { uint8_t buf[512]; uint16_t crc,len; AT45DBReadPage(LogDetailPage,buf); len = sizeof(LogParaDetail); if(len > 500) return 0; crc = CrcCheck(buf,len); if((buf[len + 2] == 0xE1) && (crc == INTEG16(buf[len],buf[len + 1]))) { //Trace("LogDetailPage read from flash suc....\r\n"); if(detailBuff != NULL) memcpy(detailBuff,buf,len); return 1; } return 0; }
/********************************************************************************************************* ** Function name: saveSystemParaFromFlash ** Descriptions: 将系统参数保存到flash中 4个字节存 ** input parameters: ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ unsigned char saveSystemParaFromFlash() { unsigned char buf[256] = {0}; unsigned short len = 0,crc; memcpy(&buf[len],stDevValue.BillValue,8 * 4);//纸币器通道面值 len += 8 * 4; memcpy(&buf[len],stDevValue.CoinValue,8 * 4);//硬币器通道面值 len += 8 * 4; memcpy(&buf[len],stDevValue.HpValue,HOPPER_NUMS * 4);//hopper通道面值 len += HOPPER_NUMS * 4; memcpy(&buf[len],(unsigned char *)&SYSPara,sizeof(SYSPara)); len += sizeof(SYSPara); crc = CrcCheck(buf,len); buf[len + 0] = HUINT16(crc); buf[len + 1] = LUINT16(crc); return saveFlash(ADD_SYSTEM_PARA,buf,len + 2); }
unsigned char LOG_readId(ST_MAC_SN *macSn) { uint8_t buf[512],i; uint16_t crc,len; AT45DBReadPage(PAGE_MAC_SN,buf); len = sizeof(macSn->id); crc = CrcCheck(buf,len); if((crc == INTEG16(buf[len],buf[len + 1])) && (buf[len + 2] == 0xEA)) { for(i = 0;i < len;i++){ macSn->id[i] = buf[i]; } return 1; } //Trace("LogPara read from flash fail....\r\n"); return 0; }
/********************************************************************************************************* ** Function name: WriteLogDetailAPI ** Descriptions: 从flash读每条明细日志 ** input parameters: ** output parameters: 无 ** Returned value: 1读取成功,0读取失败 *********************************************************************************************************/ uint8_t ReadLogDetailAPI(uint16_t LogDetailPage) { uint8_t *tp1,buf[512]; uint16_t crc,len; tp1 = (uint8_t *) &LogParaDetail;//交易数据记录 AT45DBReadPage(LogDetailPage,buf); len = sizeof(LogParaDetail); if(len > 500) return 0; crc = CrcCheck(buf,len); //Trace("LogDetailPage:\r\n crc =%d,buf[crc]=%d,typr = %d\r\n",crc,INTEG16(buf[len],buf[len + 1]),buf[len + 2]); if((buf[len + 2] == 0xE1) && (crc == INTEG16(buf[len],buf[len + 1]))) { //Trace("LogDetailPage read from flash suc....\r\n"); memcpy(tp1,buf,len); return 1; } //Trace("LogDetailPage read from flash fail...\r\n"); return 0; /* crc = CrcCheck(tp1,sizeof(LogParaDetail)-2); //Trace("\r\n detaillogcrc=%d,%x,%x",sizeof(LogParaDetail)-2,crc/256,crc%256); if( (LogParaDetail.CrcCheck[0]==0)&&(LogParaDetail.CrcCheck[1]==0) ) { return 0; } else { if( (crc/256 == LogParaDetail.CrcCheck[0])&&(crc%256 == LogParaDetail.CrcCheck[1]) ) { return 1; } else { return 0; } } */ }
/********************************************************************************************************* ** Function name: readSystemParaFromFlash ** Descriptions: 从flash中读取系统参数 4个字节读取 ** input parameters: ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ unsigned char readSystemParaFromFlash() { unsigned char buf[256] = {0}; unsigned short len = 0,crc; len = (8 + 8 + HOPPER_NUMS) * 4 + sizeof(SYSPara); readFlash(ADD_SYSTEM_PARA, buf,len + 2); crc = CrcCheck(buf,len); if(crc == INTEG16(buf[len],buf[len + 1])) { len = 0; memcpy(stDevValue.BillValue,&buf[len],8 * 4);//纸币器通道面值 len += 8 * 4; memcpy(stDevValue.CoinValue,&buf[len],8 * 4);//硬币器通道面值 len += 8 * 4; memcpy(stDevValue.HpValue,&buf[len],HOPPER_NUMS * 4);//hopper通道面值 len += HOPPER_NUMS * 4; memcpy((unsigned char *)&SYSPara,&buf[len],sizeof(SYSPara)); len += sizeof(SYSPara); return 1; } return 0; }
uint8 BT_send(uint8 cmd,uint8 cabinet,uint8 arg,uint8 *rdata) { uint8 buf[24] = {0},len = 0,ret,rbuf[64] = {0}; uint16 crc; uint32 ms; #ifdef BENTO_DEBUG uint8 i; #endif buf[len++] = BT_HEAD; buf[len++] = 0x07; buf[len++] = cabinet - 1; buf[len++] = cmd; buf[len++] = cabinet - 1; buf[len++] = cabinet - 1;//0x08; buf[len++] = arg;//0x00; crc = CrcCheck(buf,len); buf[len++] = HUINT16(crc); buf[len++] = LUINT16(crc); #ifdef BENTO_DEBUG print_bento("BT-Send[%d]:",len); for(i = 0;i < len;i++){ print_bento("%02x ",buf[i]); } print_bento("\r\n"); #endif uartClear(); uartPutStr(buf,len); ms = (cmd == BT_TYPE_CHECK) ? 1000: 2000; ret = BT_recv(rbuf,&len,ms); #ifdef BENTO_DEBUG print_bento("BT-Recv[%d]:",len); for(i = 0;i < len;i++){ print_bento("%02x ",rbuf[i]); } print_bento("\r\n"); #endif if(ret == 1){ if(cmd == BT_TYPE_OPEN){ if(rbuf[3] == BT_TYPE_OPEN_ACK){ return 1; } } else if(cmd == BT_TYPE_CHECK){ if(rbuf[3] == BT_TYPE_CHECK_ACK){ if(rdata != NULL){ memcpy(rdata,rbuf,rbuf[1]); } return 1; } } else if(cmd == BT_TYPE_LIGHT){ if(rbuf[3] == BT_TYPE_LIGHT_ACK) return 1; else return 0; } else if(cmd == BT_TYPE_HOT){ if(rbuf[3] == BT_TYPE_HOT_ACK) return 1; else return 0; } else if(cmd == BT_TYPE_COOL){ if(rbuf[3] == BT_TYPE_COOL_ACK) return 1; else return 0; } } return 0; }