예제 #1
0
static uint8 bill_setup(BILL_SETUP *setup)
{
	uint8 res,i;
	res = bill_send(MDB_BILL_SETUP,NULL,0x00);
	if(res != 1)
		return res;
	 //level = 1 does not support option bits  level = 2 supports option bits
	setup->level = recvbuf[0];
	setup->codel = INTEG16(recvbuf[1],recvbuf[2]);
	setup->scale = INTEG16(recvbuf[3],recvbuf[4]);
	setup->decimal = recvbuf[5];
	
	setup->rato = setup->scale * 100;//以分为单位
	for(i = 0;i < setup->decimal;i++){
		setup->rato /= 10;
	}
	setup->stkCapacity = INTEG16(recvbuf[6],recvbuf[7]);
	setup->security = INTEG16(recvbuf[8],recvbuf[9]);
	setup->escrowFun = (recvbuf[10] == 0) ?  0 : 1;

	for(i=0;i<16;i++){
		if(recvbuf[11+i] == 0xFF) 
			setup->ch[i] = 0;
		else
			setup->ch[i] = (uint32)recvbuf[11+i] * setup->rato;			
	}
	
	print_bill("bill-setup:level = %d\r\n",setup->level);
	return 1;
}
예제 #2
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;
	} */
}
예제 #3
0
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;
	
}
/*********************************************************************************************************
** 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;
}
예제 #5
0
/*********************************************************************************************************
** 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;

}
예제 #6
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;
}
예제 #7
0
/*********************************************************************************************************
** Function name:     	HP_check
** Descriptions:	    hopper设备操作控制函数
** input parameters:    addr:设备的硬件物理地址				
** output parameters:   无
** Returned value:      1:收到应答;0:应答超时  2 忙
*********************************************************************************************************/
uint8 HP_send_check(ST_HOPPER *hopper)
{
	uint8 res,s;
	res = HP_send(hopper->addr,HP_QUERY,0x00);
	if(res == 1){
		if(recvbuf[1] == 0x08 && hopper->addr == recvbuf[4]) {
			s = recvbuf[3];
			print_hopper("HP[%d]=%x\r\n",hopper->addr + 1,s);
			
			if(s & (0x01U << 1)){ //hopper忙
				return 3;
			}
			
			if((s & (0x01U << 2)) || (s & (0x01U << 7))){ //指令错误
				return 3;
			}
			
			if(s == 0){ //hopper 正常
				hopper->state = HP_STATE_NORMAL;
			}
			else{
				if((s & (0x01U << 3)) || (s & (0x01U << 5))){ //hopper 缺币
					hopper->state = HP_STATE_QUEBI;
				}
				
				if((s & (0x01U << 4)) || (s & (0x01U << 6))){ //hopper 故障
					hopper->state = HP_STATE_FAULT;
				}
				
				if(hopper->state != HP_STATE_QUEBI){
					hopper->state = HP_STATE_FAULT;
				}
			}
			
			
			hopper->lastCount = INTEG16(recvbuf[6], recvbuf[5]);
			return 1;
		}
		return 99;			
	}
	
	return 0;	
}
예제 #8
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;
}
예제 #9
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;
		} 
	}
	*/
}
예제 #10
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;

}
예제 #11
0
static void DB_hp_payout_rpt(void)
{
	uint8 in = MT + 1,out = MT + 2;
	uint8 addr;
	uint16 nums,changed = 0;
	
	addr = recvbuf[out++];
	nums = INTEG16(recvbuf[out+0],recvbuf[out+1]);
	
	if(MDB_getCoinDispenser() == COIN_DISPENSER_HOPPER){
		changed = HP_payout_by_no(addr,nums);
	}
	else{
		changed = 0;
	}
	
	sendbuf[in++] = MDB_HP_PAYOUT_RPT;
	sendbuf[in++] = addr;
	sendbuf[in++] =	HUINT16(changed);
	sendbuf[in++] =	LUINT16(changed);
	DB_package(DB_MT_ACTION_RPT,in);
	DB_uart1Send();
	
}
예제 #12
0
/*********************************************************************************************************
** Function name:     	HopperAccepter_Handle
** Descriptions:	    EVB设备操作控制函数
** input parameters:    DeviceCmdType:需要操作控制的设备类型
						Address:设备的硬件物理地址
						nbuf:操作内容,如Hopper出币操作的出币数量
** output parameters:   无
** Returned value:      1:收到应答;0:未收到应答即通讯失败
*********************************************************************************************************/
unsigned char HopperAccepter_Handle(unsigned char DeviceCmdType,unsigned char Address,unsigned char *nbuf)
{
	uint8_t EvbAckMsg[36],i,j;
	uint8_t MsgHead,MsgType,MsgAdd;
	uint16_t MsgDate;
	uint8_t res,DevNum=0;
	static uint8_t sn=0;
	
	//Hopper查询操作指令	
	if(DeviceCmdType == EVBHANDLE_HPQUERY)
	{
		TraceChange("HpAdd=%d\r\n",Address);
		MsgHead = 0xED;
		MsgType = EVBHANDLE_HPQUERY;
		MsgAdd = Address;
		MsgDate = 0;	
	}
	else
	//Hopper出币操作指令
	if(DeviceCmdType == EVBHANDLE_HPOUTPUT)
	{
		sn++;
		MsgHead = 0xED;
		MsgType = EVBHANDLE_HPOUTPUT;
		MsgAdd = Address;
		MsgDate = (nbuf[0]<<8)|(nbuf[1]&0x00ff);	
	}
	for(j=0;j<5;j++)
	{
		//发送操作包,并判断应答包
		res = EvbConversation(1,MsgHead,sn,MsgType,MsgAdd,MsgDate,EvbAckMsg);
		if(res == 1)
		{
			if(DeviceCmdType == EVBHANDLE_HPOUTPUT && EvbAckMsg[1] == 0x06)//出币命令且返回ACK  6字节
			{
				//if(EvbAckMsg[3] & 0x01)//重包
				//{
				//	sn++;
				//	continue;
				//}
				return 1;
			}
			else if(DeviceCmdType == EVBHANDLE_HPQUERY && EvbAckMsg[1] == 0x08)//查询命令并返回 状态结果 8字节
			{
				for(i=0;i<3;i++) 
				{
					if(stEvbHp[i].Add == EvbAckMsg[4])
					{
						DevNum = i;
						break;
					}
				}
				if(i>=3)
					return 0;
				TraceChange("1_EvbAckMsg=%x state=%d\r\n",EvbAckMsg[3],stEvbHp[DevNum].State);
				if((EvbAckMsg[3]==0x00)||(EvbAckMsg[3]==0x01))
					stEvbHp[DevNum].State = 0x00;
				else
				if((EvbAckMsg[3]==0x20)||(EvbAckMsg[3]==0x29))
					stEvbHp[DevNum].State = 0x02;
				else
				if((EvbAckMsg[3]==0x11)||(EvbAckMsg[3]==0x39)||(EvbAckMsg[3]==0x28)||(EvbAckMsg[3]==0x41))
					stEvbHp[DevNum].State = 0x03;	
				stEvbHp[DevNum].OutPutCount = INTEG16(EvbAckMsg[6],EvbAckMsg[5]);
				TraceChange("2_EvbAckMsg=%x state=%d\r\n",EvbAckMsg[3],stEvbHp[DevNum].State);	
				stEvbHp[DevNum].StateChk=EvbAckMsg[3];
				return 1;
	
			}
	
		}
		else
		{
			for(i=0;i<3;i++)
			{
				if(stEvbHp[i].Add == MsgAdd)
				{
					stEvbHp[i].State = 0x03;
					stEvbHp[i].StateChk=0x80;
					break;
				}
			}		
		}
	}
	return 0;
}
/*
 * Class:     com_easivend_evprotocol_VboxProtocol
 * Method:    EV_portRegister
 * Signature: (Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_easivend_evprotocol_VboxProtocol_VboxReadMsg
  (JNIEnv *env, jclass cls, jint fd, jint timeout)
{
    jstring msg;
    char *text = NULL;
    cJSON *root,*entry,*jsonarr,*jsonobj;
    VBOX_MSG *vmsg;
    unsigned char *buf,in,temp8,temp81,textbuf[32],i;

    vmsg = VBOX_readMsg(fd,(uint32)timeout);
    root=cJSON_CreateObject();
    entry = cJSON_CreateObject();
    cJSON_AddItemToObject(root, JSON_HEAD,entry);
    cJSON_AddNumberToObject(entry,JSON_TYPE,VBOX_TYPE);

    if(vmsg == NULL){
        cJSON_AddNumberToObject(entry,"mt",VBOX_TIMEOUT);
    }
    else{
        cJSON_AddNumberToObject(entry,"port",vmsg->port);
        if(vmsg->res == 0){
            cJSON_AddNumberToObject(entry,"mt",VBOX_TIMEOUT);
        }
        else if(vmsg->res == 1){

            cJSON_AddNumberToObject(entry,"mt",vmsg->mt);
            cJSON_AddNumberToObject(entry,"sn",vmsg->sn);
            cJSON_AddNumberToObject(entry,"ver",vmsg->ver);
            cJSON_AddNumberToObject(entry,"F7",vmsg->F7);
            buf = (unsigned char *)vmsg->recvbuf;in = 5;
            switch(vmsg->mt){
                case VBOX_POLL:case VBOX_ACK_RPT:case VBOX_NAK_RPT:
                    in = 5;
                    break;
                case VBOX_VMC_SETUP:
                    cJSON_AddNumberToObject(entry,"hd_num",buf[in++]);
                    cJSON_AddNumberToObject(entry,"pos_num",buf[in++]);
                    cJSON_AddNumberToObject(entry,"magic1",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"scale_factor",buf[in++]);
                    cJSON_AddNumberToObject(entry,"decimal_places",buf[in++]);
                    cJSON_AddNumberToObject(entry,"feature",INTEG32(buf[in + 0],buf[in + 1],buf[in + 2],buf[in + 3])); in += 4;
                    break;
                case VBOX_PAYIN_RPT:
                    cJSON_AddNumberToObject(entry,"dt",buf[in++]);
                    cJSON_AddNumberToObject(entry,"value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    break;
                case VBOX_PAYOUT_RPT:
                    cJSON_AddNumberToObject(entry,"device",buf[in++]);
                    cJSON_AddNumberToObject(entry,"value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"type",buf[in++]);
                    break;
                case VBOX_VENDOUT_RPT:
                    cJSON_AddNumberToObject(entry,"device",buf[in++]);
                    cJSON_AddNumberToObject(entry,"status",buf[in++]);
                    cJSON_AddNumberToObject(entry,"hd_id",buf[in++]);
                    cJSON_AddNumberToObject(entry,"type",buf[in++]);
                    cJSON_AddNumberToObject(entry,"cost",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"huodao",buf[in++]);
                    break;
                case VBOX_REQUEST:
                    temp8 = buf[in++];
                    cJSON_AddNumberToObject(entry,"type",temp8);
                    break;
                case VBOX_ADMIN_RPT:
                    temp8 = buf[in++];
                    cJSON_AddNumberToObject(entry,"type",temp8);
                    if(temp8 == 2){
                        cJSON_AddNumberToObject(entry,"data1",buf[in++]);
                        cJSON_AddNumberToObject(entry,"data2",buf[in++]);
                    }
                    break;
                case VBOX_ACTION_RPT:
                    temp8 = buf[in++];
                    cJSON_AddNumberToObject(entry,"action",temp8);
                    if(temp8 == 1){
                        cJSON_AddNumberToObject(entry,"seconds",buf[in++]);
                        cJSON_AddNumberToObject(entry,"hd_id",buf[in++]);
                        cJSON_AddNumberToObject(entry,"type",buf[in++]);
                        cJSON_AddNumberToObject(entry,"cost",INTEG16(buf[in+0],buf[in+1]));in+=2;
                        cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    }
                    else if(temp8 == 2){
                        cJSON_AddNumberToObject(entry,"seconds",buf[in++]);
                        cJSON_AddNumberToObject(entry,"value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                        cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                        cJSON_AddNumberToObject(entry,"type",buf[in++]);
                    }
                    else if(temp8 == 5){
                       cJSON_AddNumberToObject(entry,"value",buf[in++]);
                    }
                    break;
                 case VBOX_BUTTON_RPT:
                    temp8 = buf[in++];
                    cJSON_AddNumberToObject(entry,"type",temp8);
                    if(temp8 == 0 || temp8 == 4){
                        cJSON_AddNumberToObject(entry,"value",buf[in++]);
                    }
                    else if(temp8 == 1 || temp8 == 2){
                        cJSON_AddNumberToObject(entry,"device",buf[in++]);
                        cJSON_AddNumberToObject(entry,"value",buf[in++]);
                    }
                    break;
                  case VBOX_STATUS_RPT:
                    temp8 = buf[in++];
                    cJSON_AddNumberToObject(entry,"check_st",(temp8 >> 6) & 0x03);
                    cJSON_AddNumberToObject(entry,"bv_st",(temp8 >> 4) & 0x03);
                    cJSON_AddNumberToObject(entry,"cc_st",(temp8 >> 2) & 0x03);
                    cJSON_AddNumberToObject(entry,"vmc_st",(temp8 >> 0) & 0x03);
                    cJSON_AddNumberToObject(entry,"post_st",buf[in++]);
                    cJSON_AddNumberToObject(entry,"change",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"tem1",buf[in++]);
                    cJSON_AddNumberToObject(entry,"tem2",buf[in++]);
                    cJSON_AddNumberToObject(entry,"tem3",buf[in++]);
                    cJSON_AddNumberToObject(entry,"tem4",buf[in++]);
                    cJSON_AddNumberToObject(entry,"tem_st",buf[in++]);
                    cJSON_AddNumberToObject(entry,"auto_payout",buf[in++]);
                    break;
                case VBOX_HUODAO_RPT:
                    cJSON_AddNumberToObject(entry,"device",buf[in++]);
                    temp8 = 5 + 1 + 2;
                    temp8 = vmsg->recvlen > temp8 ?vmsg->recvlen - temp8: 0;

                    cJSON_AddItemToObject(entry,"huodao",jsonarr = cJSON_CreateArray());
                    for(i = 0;i < temp8;i++){
                        cJSON_AddItemToArray(jsonarr,jsonobj = cJSON_CreateObject());
                        cJSON_AddNumberToObject(jsonobj,"no",i + 1);
                        temp81 = buf[in++];
                        cJSON_AddNumberToObject(jsonobj,"state",(temp81 & (0x01 << 6)) ? 1 : 0);
                        cJSON_AddNumberToObject(jsonobj,"remain",(temp81 & 0x3F));
                    }
                    break;
                case VBOX_COST_RPT:
                    cJSON_AddNumberToObject(entry,"device",buf[in++]);
                    cJSON_AddNumberToObject(entry,"value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    cJSON_AddNumberToObject(entry,"type",buf[in++]);
                    break;
                case VBOX_INFO_RPT:
                    temp8 = buf[in++];
                    cJSON_AddNumberToObject(entry,"type",temp8);
                    if(temp8 == 3){
                        cJSON_AddNumberToObject(entry,"total_value",INTEG16(buf[in+0],buf[in+1]));in+=2;
                    }
                    else if(temp8 == 4){
                        temp8 = 0;
                    }
                    else if(temp8 == 5){
                        cJSON_AddNumberToObject(entry,"year",INTEG16(buf[in+0],buf[in+1]));in+=2;
                        cJSON_AddNumberToObject(entry,"month",buf[in++]);
                        cJSON_AddNumberToObject(entry,"day",buf[in++]);
                        cJSON_AddNumberToObject(entry,"hour",buf[in++]);
                        cJSON_AddNumberToObject(entry,"min",buf[in++]);
                        cJSON_AddNumberToObject(entry,"sec",buf[in++]);
                        cJSON_AddNumberToObject(entry,"xq",buf[in++]);
                    }
                    else if(temp8 == 6){
                        temp8 = 0;
                    }
                    else if(temp8 == 10){
                        temp8 = 0;
                        cJSON_AddNumberToObject(entry,"device",buf[in++]);
                        temp8 = 5 + 1 + 1 + 2;
                        temp8 = vmsg->recvlen > temp8 ?vmsg->recvlen - temp8: 0;
                        cJSON_AddItemToObject(entry,"sp_id",jsonarr = cJSON_CreateArray());
                        for(i = 0;i < temp8;i++){
                            cJSON_AddItemToArray(jsonarr,jsonobj = cJSON_CreateObject());
                            //cJSON_AddNumberToObject(jsonobj,"no",i + 1);
                            //cJSON_AddNumberToObject(jsonobj,"sp_id",buf[in++]);
                            cJSON_AddNumberToObject(jsonobj,"id",buf[in++]);
                        }
                    }
                    else if(temp8 == 12){
                        temp8 = 0;
                        cJSON_AddNumberToObject(entry,"device",buf[in++]);
                        temp8 = 5 + 1 + 1 + 2;
                        temp8 = vmsg->recvlen > temp8 ?vmsg->recvlen - temp8: 0;
                        cJSON_AddItemToObject(entry,"sp_price",jsonarr = cJSON_CreateArray());
                        for(i = 0;i < (temp8 / 2);i++){
                            cJSON_AddItemToArray(jsonarr,jsonobj = cJSON_CreateObject());
                            //cJSON_AddNumberToObject(jsonobj,"no",i + 1);
                            //cJSON_AddNumberToObject(jsonobj,"sp_price",INTEG16(buf[in + 0],buf[in + 1]));in += 2;
                            cJSON_AddNumberToObject(jsonobj,"id",INTEG16(buf[in + 0],buf[in + 1]));in += 2;
                        }
                    }
                    else{
                        temp8 = 0;
                    }
                    break;
                default:break;
            }
        }
        else{
예제 #14
0
static unsigned char FS_readStatusRpt(FS_MSG *recv)
{
	uint8 *data;
	uint8 i,temp;
	uint16 in = 0;
	FS_BOX *box;

	
	if(recv->data[0] != 0xE0 || 
		recv->data[1] != 0x01 ||
		recv->data[2] != 0x24){
		print_fs("\r\nFS_REQ_STATUS:-----------bad recv---------------\r\n");
		return 0;
	}

	data = recv->data; in = 3;
	fsBill.errCode = INTEG16(data[in + 0],data[in + 1]); in += 2;
	fsBill.errAddr= INTEG16(data[in + 0],data[in + 1]); in += 2;
	fsBill.fw = INTEG16(data[in + 0],data[in + 1]); in += 2;
	for(i = 0;i < 3;i++){
		fsBill.errRegister[i] = data[in++];
	}

	for(i = 0;i < 6;i++){
		fsBill.sensorRegister[i] = data[in++];
	}

	for(i = 0;i < 4;i++){
		temp = data[in++];
		box = &fsBill.box[i];
		//box->status = 0;
		if(temp & (0x01 << 4)){
			box->status |= FS_BOX_FALSE_PLACE;
		}
		else{
			box->status &= ~FS_BOX_FALSE_PLACE;
		}
		if(temp & (0x01 << 5)){
			box->status |= FS_BOX_REMOVE;
		}
		else{
			box->status &= ~FS_BOX_REMOVE;
		}
		
		if(temp & (0x01 << 7)){
			box->status |= FS_BOX_BILL_LOW;
		}
		else{
			box->status &= ~FS_BOX_BILL_LOW;
		}
	}

	fsBill.hexSensor = data[in++];
	for(i = 0;i < 4;i++){
		box = &fsBill.box[i];
		box->l = data[in++];
		box->w = data[in++];
	}

	for(i = 0;i < 4;i++){
		box = &fsBill.box[i];
		box->h = data[in++];
	}
	for(i = 0;i < 4;i++){
		box = &fsBill.box[i];
		box->changed = data[in++];
	}
	
	print_fs("errCode=%x errAddr=%x fw =%x\r\n",fsBill.errCode,fsBill.errAddr,fsBill.fw);
	print_fs("errRegister =%x %x %x\r\n",fsBill.errRegister[0],fsBill.errRegister[1],fsBill.errRegister[2]);
	for(i = 0;i < 4;i++){
		box = &fsBill.box[i];
		print_fs("\r\nBox[%d]---------------\r\n",i);
		print_fs("w=%x l=%x h=%x status=%x",box->w,box->l,box->h,box->status);
		print_fs("\r\n----------------------\r\n");
	}

	fsBill.status &= ~FS_COM_ERR;
	fsBill.status |= fsBill.errCode & 0xFFFF;

	return 1;

	
}