Exemple #1
0
/*********************************************************************************************************
** 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;
	} */
}
Exemple #2
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));
	
	
	
}
Exemple #4
0
/*********************************************************************************************************
** 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;
	
}
Exemple #6
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;

}
Exemple #10
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);
	
}
Exemple #12
0
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;
}
Exemple #13
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;
}