Пример #1
0
int _stdcall MF_ReadSeriesNo(unsigned char * serial)
{
	unsigned char buftemp[20];
	BOOL bRet = Rf_GetSerial(buftemp);
	if(bRet!=1)
	{
		return -1;
	}
	hex2dec((char*)buftemp, serial, 4);
	for (int i = 0; i < 2; i++)
	{
		unsigned char t = serial[i];
		serial[i] =serial[3-i];
		serial[3-i] = t;
	}
	return 0;
}
Пример #2
0
static uoff_t
dump_size(struct istream *input, const char *name, const char *value)
{
	uoff_t size;

	if (strcmp(value, "0") == 0)
		size = 0;
	else {
		size = hex2dec((const void *)value, strlen(value));
		if (size == 0) {
			i_fatal("Invalid %s at %"PRIuUOFF_T": %s",
				name, input->v_offset, value);
		}
	}
	printf("%s = %"PRIuUOFF_T"\n", name, size);
	return size;
}
Пример #3
0
void commandAction( cUOSocket *socket, const QString &command, QStringList &args ) throw()
{
	Q_UNUSED(command);
	bool ok = false;
	UINT32 action = hex2dec( args.join( " " ) ).toInt( &ok );

	if( ok )
	{
		if( socket->player() )
		{
			socket->player()->action( action );
		}
	}
	else
	{
		socket->sysMessage( tr( "Invalid parameter: '%1'" ).arg( args.join( " " ) ) );
	}
}
Пример #4
0
/*!
	Returns the variant as a Character if the variant has type()
	StringType, DoubleType, IntType; or NULL otherwise.

	\sa toChar()
*/
cBaseChar* cVariant::toChar() const
{
	if ( typ == BaseCharType )
		return ( P_CHAR ) value.ptr;

	if ( typ == StringType )
		return FindCharBySerial( hex2dec( *( ( QString * ) value.ptr ) ).toUInt() );

	if ( typ == IntType )
		return FindCharBySerial( value.i );

	if ( typ == LongType )
		return FindCharBySerial( ( unsigned int ) value.d );

	if ( typ == DoubleType )
		return FindCharBySerial( ( unsigned int ) floor( value.d ) );

	return 0;
}
Пример #5
0
/*!
	Returns the variant as an ItemType if the variant has type()
	StringType, DoubleType, IntType; or NULL otherwise.
*/
cItem* cVariant::toItem() const
{
	if ( typ == ItemType )
		return ( P_ITEM ) value.ptr;

	if ( typ == StringType )
		return FindItemBySerial( hex2dec( *( ( QString * ) value.ptr ) ).toUInt() );

	if ( typ == IntType )
		return FindItemBySerial( value.i );

	if ( typ == LongType )
		return FindItemBySerial( ( unsigned int ) value.d );

	if ( typ == DoubleType )
		return FindItemBySerial( ( unsigned int ) floor( value.d ) );

	return 0;
}
Пример #6
0
static int KSAPI get_key(ks_card_info_t *card,ks_mf_cardkey_t *key,KS_MF_KEYTYPE t,int sect_no)
{
	uint8 keytext[8];
	int len;
	memset(keytext,0,sizeof keytext);
	if(sect_no < 0 || sect_no > 32)
		return KS_BLOCK_OVERFLOW;
	hex2dec((char*)(card->phyid),8,keytext+4,len);
	// MF 使用的物理ID号是反过来的
	keytext[0] = keytext[7];
	keytext[1] = keytext[6];
	keytext[2] = keytext[5];
	keytext[3] = keytext[4];

	if(t == MF_KEYA)
	{
		if(sect_no == 0)
		{
			key->key[0] = 0x01;
			key->key[1] = 0x02;
			key->key[2] = 0x03;
			key->key[3] = 0x04;
			key->key[4] = 0x05;
			key->key[5] = 0x06;
		}
		else
		{
			gen_user_card_keyA(g_mf_mainkey,keytext,key->key);
		}
		key->keytype = MF_KEYA;
	}
	else if(t == MF_KEYB || t==MF_INITKEY)
	{
		gen_user_card_keyB(g_mf_mainkey,keytext,key->key);
		key->keytype = MF_KEYB;
	}
	else if(t==MF_ORGINKEY)
	{
		memset(key->key,0xFF,sizeof(key->key));
		key->keytype = MF_KEYA;
	}
	return 0;
}
Пример #7
0
void konversi_escaped_character(char *str) {
	int max, len, i, j;
	
	len = strlen(str);
	
    j = 0;
    max = len;
    for (i=0; i<max; i++) {
        if (str[i] == '%') {
            str[j] = hex2dec(&str[i+1]);
            i += 2;
            len -= 2;
        }
        else {
            str[j] = str[i];
        }
        j++;
    }
    str[j] = '\0';
}
Пример #8
0
static unsigned int dump_file_hdr(struct istream *input)
{
	const char *line, *const *arg, *version;
	unsigned int msg_hdr_size = 0;

	if ((line = i_stream_read_next_line(input)) == NULL)
		i_fatal("Empty file");
	arg = t_strsplit(line, " ");

	/* check version */
	version = *arg;
	if (version == NULL || !str_is_numeric(version, ' '))
		i_fatal("%s is not a dbox file", i_stream_get_name(input));
	if (strcmp(version, "2") != 0)
		i_fatal("Unsupported dbox file version %s", version);
	arg++;

	for (; *arg != NULL; arg++) {
		switch (**arg) {
		case DBOX_HEADER_MSG_HEADER_SIZE:
			msg_hdr_size = hex2dec((const void *)(*arg + 1),
					       strlen(*arg + 1));
			if (msg_hdr_size == 0) {
				i_fatal("Invalid msg_header_size header: %s",
					*arg + 1);
			}
			printf("file.msg_header_size = %u\n", msg_hdr_size);
			break;
		case DBOX_HEADER_CREATE_STAMP:
			dump_timestamp(input, "file.create_stamp", *arg + 1);
			break;
		default:
			printf("file.unknown-%c = %s\n", **arg, *arg + 1);
			break;
		}
	}
	if (msg_hdr_size == 0)
		i_fatal("Missing msg_header_size in file header");
	return msg_hdr_size;
}
Пример #9
0
BOOL Hex2Binary(TCHAR *szText, BYTE *buf, int *len, BOOL fBigEndian)
{
	TCHAR *ptr = szText;
	
	int i, j;
	BYTE val = 0;
	int count = 0;

	for(i = 0, j = 0; ptr[i] && j < *len; i++)
	{
		if(isxdigit(ptr[i]))
		{
			if(count) val <<= 4;
			else      val = 0;
			val |= hex2dec(ptr[i]);

			 buf[j] = val;

			//TRACEA("%x ", val);
						
			count = !count;
			if(count == 0)
				j++;
		}
		else if(isspace(ptr[i]))
		{
			if(count)
				j++;
			count = 0;
		}
		else
		{
			return FALSE;
		}
	}

	*len = j+count;
	return TRUE;//j+count;
}
Пример #10
0
// function read_block
static int KSAPI read_block(ks_reader_dev_t *dev,ks_card_info_t *card,int block_no,uint8 *block) {
#if 0
    int ret;
    int blk;
    int sector;
    sector = block_no/4;
    blk = block_no - (sector*4);
    // TODO : 根据卡类型判断,只能处理32个扇区之前的
    if(block_no >= 32*4 || block_no < 0)
        return KS_BLOCK_OVERFLOW;
    if(!g_dev_hd)
        return KS_PORT_NOTOPEN;
    ret = MIFS_READ(g_dev_hd, sector, blk, (char*)block, gErrMsg);
    //ret = dc_read(g_dev_hd, );
    if(ret)
        return KS_READCARD;
    return 0;
#else
    int ret;
    int blk;
    int sector;
    char readtemp[40] = {0};
    int templen = 0;
    sector = block_no/4;
    blk = block_no - (sector*4);
    // TODO : 根据卡类型判断,只能处理32个扇区之前的
    if(block_no >= 32*4 || block_no < 0)
        return KS_BLOCK_OVERFLOW;
    if(!g_dev_hd)
        return KS_PORT_NOTOPEN;
    ret = MIFS_READ(g_dev_hd, sector, blk, (char*)readtemp, gErrMsg);
    hex2dec(readtemp, strlen(readtemp), block, templen);
    //ret = dc_read(g_dev_hd, );
    if(ret)
        return KS_READCARD;
    return 0;
#endif
}
Пример #11
0
static int json_parse_string(struct json_parser *parser, bool allow_skip,
			     const char **value_r)
{
	if (*parser->data != '"')
		return -1;
	parser->data++;

	if (parser->skipping && allow_skip) {
		*value_r = NULL;
		return json_skip_string(parser);
	}

	str_truncate(parser->value, 0);
	for (; parser->data != parser->end; parser->data++) {
		if (*parser->data == '"') {
			parser->data++;
			*value_r = str_c(parser->value);
			return 1;
		}
		if (*parser->data != '\\')
			str_append_c(parser->value, *parser->data);
		else {
			if (++parser->data == parser->end)
				return 0;
			switch (*parser->data) {
			case '"':
			case '\\':
			case '/':
				str_append_c(parser->value, *parser->data);
				break;
			case 'b':
				str_append_c(parser->value, '\b');
				break;
			case 'f':
				str_append_c(parser->value, '\f');
				break;
			case 'n':
				str_append_c(parser->value, '\n');
				break;
			case 'r':
				str_append_c(parser->value, '\r');
				break;
			case 't':
				str_append_c(parser->value, '\t');
				break;
			case 'u':
				parser->data++;
				if (parser->end - parser->data < 4) {
					/* wait for more data */
					parser->data = parser->end;
					return 0;
				}
				uni_ucs4_to_utf8_c(hex2dec(parser->data, 4),
						   parser->value);
				parser->data += 3;
				break;
			default:
				return -1;
			}
		}
	}
	return 0;
}
Пример #12
0
QString cElement::value() const
{
	QString Value = text_;

	for ( unsigned int i = 0; i < childCount(); ++i )
	{
		const cElement* childTag = getChild( i );
		// <random />
		if ( childTag->name() == "random" )
		{
			// <random min="" max="" />
			if ( childTag->hasAttribute( "min" ) && childTag->hasAttribute( "max" ) )
			{
				QString min = childTag->getAttribute( "min" );
				QString max = childTag->getAttribute( "max" );

				if ( min.contains( "." ) || max.contains( "." ) )
					Value += QString::number( RandomNum( ( int ) min.toFloat(), ( int ) max.toFloat() ) );
				else
					Value += QString::number( RandomNum( min.toInt(), max.toInt() ) );
			}
			// <random valuelist="value1,value2,value3" />
			else if ( childTag->hasAttribute( "valuelist" ) )
			{
				QStringList RandValues = QStringList::split( ",", childTag->getAttribute( "valuelist" ) );
				Value += RandValues[RandomNum( 0, RandValues.size() - 1 )];
			}
			// <random list="listname" />
			else if ( childTag->hasAttribute( "list" ) )
			{
				Value += Definitions::instance()->getRandomListEntry( childTag->getAttribute( "list" ) );
			}
			// <random randomlist="listname1,listname2,listname3" />
			else if ( childTag->hasAttribute( "randomlist" ) )
			{
				QStringList RandValues = QStringList::split( ",", childTag->getAttribute( "randomlist" ) );
				Value += Definitions::instance()->getRandomListEntry( RandValues[RandomNum( 0, RandValues.size() - 1 )] );
			}
			// <random dice="1d6+2" />
			else if ( childTag->hasAttribute( "dice" ) )
			{
				Value += QString::number( rollDice( childTag->getAttribute( "dice" ) ) );
			}
			// <random value="10-20" />
			else if ( childTag->hasAttribute( "value" ) )
			{
				QStringList parts = QStringList::split( "-", childTag->getAttribute( "value", "0-0" ) );

				if ( parts.count() >= 2 )
				{
					QString min = parts[0];
					QString max = parts[1];

					if ( max.contains( "." ) || min.contains( "." ) )
						Value += QString::number( RandomNum( ( int ) min.toFloat(), ( int ) max.toFloat() ) );
					else
						Value += QString::number( RandomNum( min.toInt(), max.toInt() ) );
				}
			}
			else
				Value += QString( "0" );
		}
	}

	return hex2dec( Value );
}
Пример #13
0
static void huge _pascal CgiCliFunction(rpCgiPtr CgiRequest){
    /* Buffers for building the page */
    extern CgiCli_t *CgiCli;
    extern CO_t *CO;
    CO_SDOclient_t *SDO_C = CO->SDOclient;
    uint32_t bufLen = 0;   /* current length of the buffer */
    uint32_t timeouts = 0;
    const uint32_t maxTimeouts = 5;

    /* Prepare function, which will wake this task after CAN SDO response is */
    /* received (inside CAN receive interrupt). */
    SDO_C->pFunctSignal = CgiCli_signal; /* will wake from RTX_Sleep_Time() */
    SDO_C->functArg = RTX_Get_TaskID();  /* id of this task */

    /*  Construct HTML page */
    if(strlen(CgiRequest->fArgumentBufferPtr)){
        char_t *buf = CgiCli->buf;   /* buffer for CGI message */
        char_t far *name = NULL;
        char_t far *val = NULL;
        while(CGI_GetArgument(&name, &val, CgiRequest) == 0){
            /* decode and verify name */
            char_t rw = name[0];
            uint32_t nodeId, idx, sidx, len;
            char_t err = 0;
            uint8_t *data = CgiCli->SDOBuf; /* data sent or received on CANopen */
            uint32_t dataLen = 0;

            if(!name) err++;
            len = strlen(name);
            if (rw == 'r' || rw == 'R'){
                rw = 'r';
                if(len < 9 || len > 17) err++;
            }
            else if(rw == 'w' || rw == 'W'){
                rw = 'w';
                if(len < 10 || len > 17) err++;
            }
            else{
                err++;
            }
            err += hex2dec(&name[1],  2, &nodeId);
            if(nodeId > 127) err++;
            err += hex2dec(&name[3],  4, &idx);
            err += hex2dec(&name[7],  2, &sidx);
            if(rw == 'w'){
                err += hex2dec(&name[9], len-9, &len);

                /* decode value */
                int32_t i;
                int32_t valLen;
                if(val) valLen = strlen(val);
                else    valLen = 0;
                for(i=0; i<valLen; i=i+2){
                    uint32_t dc;
                    err += hex2dec(&val[i], 2, &dc);
                    data[dataLen] = dc;
                    if(++dataLen >= CgiCli->SDOBufSize) break;
                }

                /* verify value length */
                if(dataLen != len || dataLen == 0) err++;
            }

            /* SDO clinet access */
            uint32_t SDOabortCode = 0;
            if(err){
                buf += sprintf(buf, "Error in argument: %s=%s\n", name, val);
            }
            /* read object dictionary */
            else if(rw == 'r'){
                CO_SDOclient_return_t ret;
                CO_SDOclient_setup(SDO_C, 0, 0, nodeId);
                CO_SDOclientUploadInitiate(SDO_C, idx, sidx, data, CgiCli->SDOBufSize, 1);
                do{
                    uint16_t dt = 50;
                    ret = CO_SDOclientUpload(SDO_C, dt, 500, &dataLen, &SDOabortCode);
                    RTX_Sleep_Time(dt);
                }while(ret > 0);
                CO_SDOclientClose(SDO_C);

                if(ret == CO_SDOcli_endedWithTimeout) {
                    timeouts++;
                }
                else {
                    timeouts = 0;
                }

                if(SDOabortCode){
                    buf += sprintf(buf, "R %02X%04X%02X%X AB: %08X\n",
                                    (unsigned int)nodeId,
                                    (unsigned int)idx,
                                    (unsigned int)sidx,
                                    (unsigned int)dataLen,
                                    (unsigned int)SDOabortCode);
                }
                else{
                    uint32_t i;
                    buf += sprintf(buf, "R %02X%04X%02X%X OK:",
                                    (unsigned int)nodeId,
                                    (unsigned int)idx,
                                    (unsigned int)sidx,
                                    (unsigned int)dataLen);
                    for(i=0; i<dataLen; i++) buf += sprintf(buf, " %02X", data[i]);
                    buf += sprintf(buf, "\n");
                }
            }
            /* write into object dictionary */
            else if(rw == 'w'){
                CO_SDOclient_return_t ret;
                CO_SDOclient_setup(SDO_C, 0, 0, nodeId);
                CO_SDOclientDownloadInitiate(SDO_C, idx, sidx, data, dataLen, 1);
                do{
                    uint16_t dt = 2;
                    ret = CO_SDOclientDownload(SDO_C, dt, 500, &SDOabortCode);
                    if(ret == CO_SDOcli_waitingServerResponse) {
                        dt = 50;
                    }
                    RTX_Sleep_Time(dt);
                }while(ret > 0);
                CO_SDOclientClose(SDO_C);

                if(ret == CO_SDOcli_endedWithTimeout) {
                    timeouts++;
                }
                else {
                    timeouts = 0;
                }

                if(SDOabortCode){
                    buf += sprintf(buf, "W %02X%04X%02X%X AB: %08X\n",
                                    (unsigned int)nodeId,
                                    (unsigned int)idx,
                                    (unsigned int)sidx,
                                    (unsigned int)dataLen,
                                    (unsigned int)SDOabortCode);
                }
                else{
                    uint32_t i;
                    buf += sprintf(buf, "W %02X%04X%02X%X OK:",
                                    (unsigned int)nodeId,
                                    (unsigned int)idx,
                                    (unsigned int)sidx,
                                    (unsigned int)dataLen);
                    for(i=0; i<dataLen; i++) buf += sprintf(buf, " %02X", data[i]);
                    buf += sprintf(buf, "\n");
                }
            }

            /* calculate buffer length, if not enough space for next object, break */
            bufLen = (uint32_t)(buf - CgiCli->buf);
            if((bufLen+1000) > CgiCli->bufSize){
                break;
            }

            /* if no response from remote node for multiple times, break the loop */
            if(timeouts > maxTimeouts){
                break;
            }
        }
    }
    else{
        sprintf(CgiCli->buf,
            "CGI function provides access to object dictionary on any device on the CANopen network.\n\n"
            "Usage with POST method:\n"
            "  odcli?wnniiiissll=xxxx[&rnniiiissll=]\n"
            "  w    - 'w'rite or 'r'ead.\n"
            "  nn   - node ID in hex format.\n"
            "  iiii - Object dictionary index in hex format.\n"
            "  ss   - Object dictionary subindex in hex format.\n"
            "  ll   - length of variable (1 to FFFFFFFF) in hex format. If reading, this value is ignored.\n"
            "  xxxx - Value to be written in hex and little endian format. If reading, this value is ignored.\n");
        bufLen = strlen(CgiCli->buf);
    }

    /* disable SDO client */
    CO_SDOclient_setup(SDO_C, 0, 0, 0);

    /*  Give page to the web server */
    CgiRequest->fHttpResponse = CgiHttpOk;
    CgiRequest->fDataType = CGIDataTypeText;
    CgiRequest->fResponseBufferPtr = CgiCli->buf;
    CgiRequest->fResponseBufferLength = bufLen;
}
Пример #14
0
/***********************************************************************
		module		:	[WIFI]
		function		:	[发送数据]
  		return		:	[无]
		comment	:	[全局普通函数]
		machine		:	[EH-0818]
		language	:	[CHN]
 		keyword		:	[WIFI]
		date			:	[11/07/27]
 		author		:	[chen-zhengkai]
************************************************************************/
void sendRecords()
{
	char retStr[20] = {0};
	char temp[20] = {0};
	int templen = 0;
	//unsigned char data_buffer[1000] = {0};	//要传送的数据
	unsigned char aBuffer[200] = {0};	
	unsigned char rb8583[50] = {0};
	unsigned char send_buf[200] = {0};	//每次上传数据数组
	int send_len = 0;
	//unsigned char* pdBuffer = NULL;		//每次上传数据指针
	USER_INFO* pinfo = NULL;
	char infotemp[10] = {0};
	unsigned long	db_cnt = 0;					//数据库记录数
	unsigned short	send_cnt = 0;				//上传次数
	char* pTemp = NULL;
	char	rec_flag = 0;
	
	strcpy(retStr, "数据上传成功");
	db_cnt = DB_count_records(0);	//返回数据库已记录的条数(包括已删除)
	if (!db_cnt) {
		strcpy(retStr, "数据库无记录");
	}
	else {
		DispStr_CE(0,6,"连接上传中",DISP_CENTER|DISP_CLRSCR);
		DispStr_CE(0,8,"请耐心等待",DISP_CENTER);
		DispStr_CE(0,10,"按F1退出...",DISP_CENTER);

	//	for (send_cnt = 0; send_cnt < db_cnt; send_cnt++) {
			pinfo = (USER_INFO*)DB_jump_to_record(ATTENDANCE_INDEX, send_cnt, &rec_flag);
			if (rec_flag) {	//记录被删除
	//			continue;
			}
			dec2hex(pinfo->phyNo, 4, infotemp);
			memcpy(rb8583, infotemp,  8);		//物理卡号
			memcpy(rb8583+8, pinfo->time, 16);	//考勤时间
			atd_pack(aBuffer, rb8583, 24);
			hex2dec(aBuffer, 58, (unsigned char*)send_buf, &send_len);
			//send_len = 58;
#if 0
			if (NaNo_OK !=  CWiFi_Write(g_pHandle[0], send_buf,  send_len+1) ){	//注:长度必须多一字符
				strcpy(retStr, "数据上传失败");
				break;
			}
#else
			char tempBuf[300] = {0};
			//memcpy(tempBuf, "008A600031000008000038000001C00010000001090931201104084444444444444444444431323334353630303031393930323130333131343030313030303139390072A00000000386980701202020202020203030303030303030303030303030303030303030303030303030303030304646303130303030303130312020202020203030303030303030", sizeof("008A600031000008000038000001C00010000001090931201104084444444444444444444431323334353630303031393930323130333131343030313030303139390072A00000000386980701202020202020203030303030303030303030303030303030303030303030303030303030304646303130303030303130312020202020203030303030303030"));
			memcpy(tempBuf, "ABCDEFGHIJK", 11);
			int m = strlen(tempBuf);
			//hex2dec(tempBuf, strlen(tempBuf), (unsigned char*)send_buf,  &m);
			if (NaNo_OK !=  CWiFi_Write(g_pHandle[0], tempBuf,  11+1) ){	//注:长度必须多一字符
				strcpy(retStr, "数据上传失败");
		//		break;
			}
#endif
			if( KEY_F1 == KEY_Read()) {
				strcpy(retStr, "数据上传中断");
			//	break;
			}
			Sys_Delay_MS(100);	//延时100毫秒
	//	}
	}
	DispStr_CE(0,6,retStr,DISP_CENTER|DISP_CLRSCR);
	DispStr_CE(0,8,"按任意键返回",DISP_CENTER);
	delay_and_wait_key( 3, EXIT_KEY_ALL, 0 );
}
Пример #15
0
/*
	\command account
	\usage - <code>account create username password</code>
	- <code>account remove username</code>
	- <code>account set username key value</code>
	- <code>account show username key</code>
	Use the create subcommand to create a new account with the given username and password.
	To remove an account along with all player characters on that account, use the remove 
	subcommand and pass the username to it.
	To change properties of a given account, use the set subcommand and pass the username, 
	the property key and the new property value to it. See the notes for a list of valid property keys.
	To view properties of an account, use the show subcommand and pass the property key to it.

	\notes The following properties can be set for accounts:
    <i>password</i>
	The account password.

	<i>acl</i>
	The name of the access control list.

	<i>block</i>
	Block status of the account.

	In addition to the writeable properties, the following properties can be shown:

	<i>loginattempts</i>
	How many failed login attempts have been made since the last successful login.

	<i>lastlogin</i>
	When was the last successful login made.
	
	<i>chars</i>
	Prints a list of player characters on this account.

	Valid values for the block property are either on, off or for how long the account should be blocked.
	
	If you have enabled MD5 passwords, you can only view the hashed password when showing the password property.
*/
void commandAccount( cUOSocket *socket, const QString &command, const QStringList &args ) throw()
{
	Q_UNUSED(command);
	// Account Create User Pass
	// Account Remove User
	// Account Set User Pass
	// Account Show User Pass
	if( args.count() == 0 )
	{
		socket->sysMessage( tr( "Usage: account <create|remove|set|show>" ) );
		return;
	}

	QString subCommand = args[0].lower();

	// Create Accounts
	if( subCommand == "create" )
	{
		// Create a new account
		if( args.count() < 3 )
		{
			socket->sysMessage( tr( "Usage: account create <username> <password>" ) );
		}
		else if( Accounts::instance()->getRecord( args[1].left( 30 ) ) )
		{
			socket->sysMessage( tr( "Account '%1' already exists" ).arg( args[1].left( 30 ) ) );
		}
		else
		{
			Accounts::instance()->createAccount( args[1].left( 30 ), args[2].left( 30 ) );
			socket->sysMessage( tr( "Account '%1' with password '%2' has been created" ).arg( args[1].left( 30 ) ).arg( args[2].left( 30 ) ) );
		}
	}

	// Remove an Account and all associated characters
	else if( subCommand == "remove" )
	{
		if( args.count() < 2 )
		{
			socket->sysMessage( tr( "Usage: account remove <username>" ) );
		}
		else if( !Accounts::instance()->getRecord( args[1].left( 30 ) ) )
		{
			socket->sysMessage( tr( "Account '%1' does not exist" ).arg( args[1].left( 30 ) ) );
		}
		else
		{
			cAccount *account = Accounts::instance()->getRecord( args[1].left( 30 ) );
			QValueVector<P_PLAYER> characters = account->caracterList();
			Accounts::instance()->remove( account );
			UINT32 i = 0;
			for(; i < characters.size(); ++i )
				if( characters[i] )
					cCharStuff::DeleteChar( characters[i] );

			socket->sysMessage( tr( "Account '%1' and %2 characters have been removed" ).arg( args[1].left( 30 ) ).arg( i+1 ) );
		}
	}

	// Set properties of accounts
	else if( subCommand == "set" )
	{
		if( args.count() < 4 )
		{
			socket->sysMessage( tr( "Usage: account set <username> <key> <value>" ) );
		}
		else if( !Accounts::instance()->getRecord( args[1].left( 30 ) ) )
		{
				socket->sysMessage( tr( "Account '%1' does not exist" ).arg( args[1].left( 30 ) ) );
		}
		else
		{
			cAccount *account = Accounts::instance()->getRecord( args[1].left( 30 ) );
			QString key = args[2];
			QString value = args[3];

			if( key == "password" )
			{
				account->setPassword( value.left( 30 ) ); // Maximum of 30 Chars allowed
				socket->sysMessage( tr( "The password of account '%1' has been set to '%2'" ).arg( account->login() ).arg( value.left( 30 ) ) );
			}
			else if( key == "block" )
			{
				if( value.lower() == "on" )
				{
					account->setBlocked( true );
					socket->sysMessage( tr( "Account '%1' has been blocked" ).arg( account->login() ) );
				}
				else if( value.lower() == "off" )
				{
					account->setBlocked( false );
					socket->sysMessage( tr( "Account '%1' has been unblocked" ).arg( account->login() ) );
				}
				else
				{
					bool ok = false;
					UINT32 blockTime = hex2dec( value ).toUInt( &ok );

					if( ok )
					{
						account->block( blockTime );
						socket->sysMessage( tr( "Account '%1' will be blocked for %2 seconds" ).arg( account->login() ).arg( blockTime ) );
					}
					else
					{
						socket->sysMessage( tr( "Usage: account set <username> block <on|off>" ) );
					}
				}
			}
			else if( key == "acl" )
			{
				if( !Commands::instance()->getACL( value.latin1() ) )
				{
					socket->sysMessage( tr( "You tried to specify an unknown acl '%1'" ).arg( value ) );
				}
				else
				{
					account->setAcl( value );
					account->refreshAcl();
				}
			}
			else
			{
				socket->sysMessage( tr( "Unknown field '%1' for account '%2'" ).arg( args[2] ).arg( account->login() ) );
			}
		}
	}
	// Show properties of accounts
	else if( subCommand == "show" )
	{
		if( args.count() < 3 )
		{
			socket->sysMessage( tr( "Usage: account show <username> <key>" ) );
		}
		else if( !Accounts::instance()->getRecord( args[1].left( 30 ) ) )
		{
			socket->sysMessage( tr( "Account '%1' does not exist" ).arg( args[1].left( 30 ) ) );
		}
		else
		{
			cAccount *account = Accounts::instance()->getRecord( args[1].left( 30 ) );
			QString key = args[2];

			if( key == "password" )
			{
				socket->sysMessage( tr( "The password of account '%1' is '%2'" ).arg( account->login() ).arg( account->password() ) );
			}
			else if( key == "block" )
			{
				if( account->isBlocked() )
					socket->sysMessage( tr( "Account '%1' is currently blocked" ).arg( account->login() ) );
				else if( account->secsToUnblock() )
					socket->sysMessage( tr( "Account '%1' will be unblocked in %2 seconds" ).arg( account->login() ).arg( account->secsToUnblock() ) );
				else
					socket->sysMessage( tr( "Account '%1' is currently not blocked" ).arg( account->login() ) );
			}
			else if( key == "loginattempts" )
			{
				socket->sysMessage( tr( "There were %1 unsuccesul login attempts for account '%2'" ).arg( account->loginAttempts() ).arg( account->login() ) );
			}
			else if( key == "lastlogin" )
			{
				socket->sysMessage( tr( "The last login of account '%1' was on %2" ).arg( account->login() ).arg( account->lastLogin().toString( Qt::ISODate ) ) );
			}
			else if( key == "acl" )
			{
				socket->sysMessage( tr( "The acl of account '%1' is %2" ).arg( account->login() ).arg( account->acl() ) );
			}
			else if( key == "chars" )
			{
				QStringList sCharList;
				QValueVector< P_PLAYER > pCharList = account->caracterList();

				for( UINT32 i = 0; i < pCharList.size(); ++i )
					if( pCharList[i] )
						sCharList.push_back( QString( "0x%1" ).arg( pCharList[i]->serial(), 8, 16 ) );

				socket->sysMessage( tr( "Account '%1' has the following characters: %2" ).arg( account->login() ).arg( sCharList.join( ", " ) ) );
			}
			else
			{
				socket->sysMessage( tr( "Unknown field '%1' for account '%2'" ).arg( args[2] ).arg( account->login() ) );
			}
		}
	}
}
Пример #16
0
void loadMovie(const char* movieLeft, const char* movieRight)
{
  Serial.println("loadingMovies:");
  Serial.println(movieLeft);
  Serial.println(movieRight);

  // reset movie counters
  gs->iMovieLeftFrameCount = 0;
  gs->iMovieRightFrameCount = 0;
  gs->lMovieLength = 0;
    
  int iMovieLeftLength = strlen(movieLeft);
  int iMovieLeftElements = iMovieLeftLength / 4;
    
    int pos = 0;
    int iLocationLeft = 0;

    for(int i = 0; i < iMovieLeftElements; i++)
    {
        movieframe *temp;

        temp = addMFLeft(movieLeft[pos], movieLeft[pos + 1], movieLeft[pos + 2], iLocationLeft);

        iLocationLeft += hex2dec(movieLeft[pos + 3]);

        pos += 4;
    }

    delay(10);

    int iMovieRightLength = strlen(movieRight);
    int iMovieRightElements = iMovieRightLength / 4;
    
    pos = 0;
    int iLocationRight = 0;

    for(int i = 0; i < iMovieRightElements; i++)
    {
        movieframe *temp;

        temp = addMFRight(movieRight[pos], movieRight[pos + 1], movieRight[pos + 2], iLocationRight);

        iLocationRight += hex2dec(movieRight[pos + 3]);

        pos += 4;
    }

    delay(10);

    // have parsed movie printed to the serial console
    serialPrintMovieParsed();

    delay(10);

    Serial.print("iLocationLeft:");
    Serial.println(iLocationLeft);
    Serial.print("iLocationRight:");
    Serial.println(iLocationRight);

    // calculate length of whole movie, take bigger number
    gs->lMovieLength = iLocationLeft > iLocationRight ? iLocationLeft : iLocationRight;

    Serial.print("Movielength: ");
    Serial.println(gs->lMovieLength);

    // reset movie to start position
    gs->lMoviePosition = 0;
}
Пример #17
0
int Bank_Transfer(INNER_TRANS_REQUEST * pNode,int serial_no)
{

	int ret=0;
	double unique=0;
	int temp_serial_no=0;
	char logicdate[11]="";
	char buffer[16]="";
	int i=0;

	char sMoney[32]="";
	char sSerialno[32]="";

	INNER_TRANS_REQUEST  from_pos;
	BANK_TRANS_REQUEST BankReqPak;
	BANK_TRANS_REQUEST BankAnsPak;

	memset(&from_pos,0,sizeof from_pos);
	memset(&BankReqPak,0,sizeof BankReqPak);
	memset(&BankAnsPak,0,sizeof BankAnsPak);
	
	memcpy(&from_pos,pNode,sizeof from_pos);
	//组织银行包
	memcpy(BankReqPak.TradeCode,TRADE_BANK_TRANS, BANK_TRADE_CODE_LEN);	//写交易代码
	writelog(LOG_DEBUG,"trans code [%s]",TRADE_BANK_TRANS);
	getsysdate(BankReqPak.TradeDate);
	getsystime(BankReqPak.TradeTime);
	//由于银行给的接口中的校园卡账号字段只有10个长度
	//所以这里在校园卡账号字段上填写校园卡卡号
	sprintf(BankReqPak.CustAccountNo,"%-10d",atoi(from_pos.CardNo));
	//sprintf(BankReqPak.BankCardNo,"%-20s","1030399110000001042");	//写银行卡号字段
	sprintf(BankReqPak.BankCardNo,"%-20s",from_pos.BankCardNo);	//写银行卡号字段
	memcpy(BankReqPak.MercAccount,SCHOOL_ACCOUNT_NO,sizeof(BankReqPak.MercAccount));	//写商户号字段
	sprintf(BankReqPak.TransMoney,"%-9s",from_pos.TransMoney);	//写转帐金额字段
	//通过16进制传输,然后解密
	hex2dec(from_pos.BankCardPwd,(unsigned char*)BankReqPak.BankCardPwd, 8);
	//memcpy(BankReqPak.BankCardPwd,from_pos.BankCardPwd,sizeof(BankReqPak.BankCardPwd));	//写银行卡密码字段
	sprintf(sSerialno,"%d",serial_no);
	memcpy(BankReqPak.CustSn,sSerialno,strlen(sSerialno));	//写校园端流水号
	sprintf(BankReqPak.CustNo,"%-16s",SCHOOL_CODE);	//写院校代码
	BankReqPak.AutoFlag='0';	//写自动自助标志
	generate_mac((char*)(&BankReqPak),sizeof(BankReqPak),BankReqPak.MAC);//写校验mac码

	TRACE_BANK_TRANS(&BankReqPak,"send transfer package");

	//发送数据到银行并同时接收银行数据,此处不判断返回的mac校验
	ret=send_to_and_recv_from_bank(BANK_NYYH,(char*)(&BankReqPak),sizeof(BankReqPak),(char*)(&BankAnsPak),sizeof(BankAnsPak),&g_Bank);
	if(ret)
	{
		writelog(LOG_ERR,"send_to_and_recv_from_bank error,errcode=[%d]",ret);
		return ret;
	}

	TRACE_BANK_TRANS(&BankAnsPak,"receive transfer package");

	//校验mac,判断银行接收包是否正确
	//目前银行端没有校验mac,所以屏蔽
	/*
	ret=check_mac((char*)(&BankAnsPak), sizeof(BankAnsPak));
	if(ret)
	{
		writelog(LOG_ERR,"send_to_and_recv_from_bank error,errcode=[%d]",ret);
		return	E_TRANS_BANK_RECVERR;
	}
	*/
	if(0!=strncmp(BankAnsPak.RetCode,RET_BANK_OK,2))
	{
		writelog(LOG_ERR,"Receive data return code error,error code= [%s] ",BankAnsPak.RetCode);
		BankAnsPak.RetCode[2]=0;
		switch(atoi(BankAnsPak.RetCode))
		{
			case 1:		//银行卡挂失
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_LOST);
				return	E_TRANS_BANKCARD_LOST;
			case 2:		//银行卡状态错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_STATERR);
				return	E_TRANS_BANKACC_STATERR;
			case 3:		//银行卡金额不足
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_NOMONEY);
				return	E_TRANS_BANKACC_NOMONEY;
			case 4:		//银行未知错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANK_NODECIDE);
				return	E_TRANS_BANK_NODECIDE;
			case 5:		//银行密码错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
				return	E_TRANS_BANKCARD_PWDERR;
			case 6:		//通讯或密钥错
				//sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
				return	E_TRANS_BANK_NETERR;
			default:		//其他未知错误
				//sprintf(pNode->RetCode,"%d",E_TRANS_UNKNOW_ERROR);
				return	E_TRANS_UNKNOW_ERROR;
		}
	}
	return 0;
}
Пример #18
0
struct creature *
load_player_from_file(const char *path)
{
    struct creature *ch = NULL;
    char *txt;

    if (access(path, W_OK)) {
        errlog("Unable to open xml player file '%s': %s", path,
            strerror(errno));
        return NULL;
    }
    xmlDocPtr doc = xmlParseFile(path);
    if (!doc) {
        errlog("XML parse error while loading %s", path);
        return NULL;
    }

    xmlNodePtr root = xmlDocGetRootElement(doc);
    if (!root) {
        xmlFreeDoc(doc);
        errlog("XML file %s is empty", path);
        return NULL;
    }

    /* to save memory, only PC's -- not MOB's -- have player_specials */
    ch = make_creature(true);

    ch->player.name = (char *)xmlGetProp(root, (xmlChar *) "name");
    ch->char_specials.saved.idnum = xmlGetIntProp(root, "idnum", 0);
    set_title(ch, "");

    ch->player.short_descr = NULL;
    ch->player.long_descr = NULL;

    if (ch->points.max_mana < 100)
        ch->points.max_mana = 100;

    ch->char_specials.carry_weight = 0;
    ch->char_specials.carry_items = 0;
    ch->char_specials.worn_weight = 0;
    ch->points.armor = 100;
    ch->points.hitroll = 0;
    ch->points.damroll = 0;
    ch->player_specials->saved.speed = 0;

    // Read in the subnodes
    for (xmlNodePtr node = root->xmlChildrenNode; node; node = node->next) {
        if (xmlMatches(node->name, "points")) {
            ch->points.mana = xmlGetIntProp(node, "mana", 100);
            ch->points.max_mana = xmlGetIntProp(node, "maxmana", 100);
            ch->points.hit = xmlGetIntProp(node, "hit", 100);
            ch->points.max_hit = xmlGetIntProp(node, "maxhit", 100);
            ch->points.move = xmlGetIntProp(node, "move", 100);
            ch->points.max_move = xmlGetIntProp(node, "maxmove", 100);
        } else if (xmlMatches(node->name, "money")) {
            ch->points.gold = xmlGetIntProp(node, "gold", 0);
            ch->points.cash = xmlGetIntProp(node, "cash", 0);
            ch->points.exp = xmlGetIntProp(node, "xp", 0);
        } else if (xmlMatches(node->name, "stats")) {
            ch->player.level = xmlGetIntProp(node, "level", 0);
            ch->player.height = xmlGetIntProp(node, "height", 0);
            ch->player.weight = xmlGetIntProp(node, "weight", 0);
            GET_ALIGNMENT(ch) = xmlGetIntProp(node, "align", 0);
            /***
                Temp fix for negative weights
             ***/

            if (ch->player.weight < 0) {
                calculate_height_weight(ch);
            }

            GET_SEX(ch) = 0;
            char *sex = (char *)xmlGetProp(node, (xmlChar *) "sex");
            if (sex != NULL)
                GET_SEX(ch) = search_block(sex, genders, false);
            free(sex);

            GET_RACE(ch) = 0;
            char *race_name = (char *)xmlGetProp(node, (xmlChar *) "race");
            if (race_name != NULL) {
                struct race *race = race_by_name(race_name, true);
                if (race != NULL) {
                    GET_RACE(ch) = race->idnum;
                }
            }
            free(race_name);

        } else if (xmlMatches(node->name, "class")) {
            GET_OLD_CLASS(ch) = GET_REMORT_CLASS(ch) = GET_CLASS(ch) = -1;

            char *trade = (char *)xmlGetProp(node, (xmlChar *) "name");
            if (trade != NULL) {
                GET_CLASS(ch) = search_block(trade, class_names, false);
                free(trade);
            }

            trade = (char *)xmlGetProp(node, (xmlChar *) "remort");
            if (trade != NULL) {
                GET_REMORT_CLASS(ch) = search_block(trade, class_names, false);
                free(trade);
            }

            if (IS_CYBORG(ch)) {
                char *subclass =
                    (char *)xmlGetProp(node, (xmlChar *) "subclass");
                if (subclass != NULL) {
                    GET_OLD_CLASS(ch) = search_block(subclass,
                        borg_subchar_class_names, false);
                    free(subclass);
                }
            }

            if (GET_CLASS(ch) == CLASS_MAGE) {
                ch->player_specials->saved.mana_shield_low =
                    xmlGetLongProp(node, "manash_low", 0);
                ch->player_specials->saved.mana_shield_pct =
                    xmlGetLongProp(node, "manash_pct", 0);
            }

            GET_REMORT_GEN(ch) = xmlGetIntProp(node, "gen", 0);
            GET_TOT_DAM(ch) = xmlGetIntProp(node, "total_dam", 0);
            GET_BROKE(ch) = xmlGetIntProp(node, "broken", 0);
        } else if (xmlMatches(node->name, "time")) {
            ch->player.time.birth = xmlGetLongProp(node, "birth", 0);
            ch->player.time.death = xmlGetLongProp(node, "death", 0);
            ch->player.time.played = xmlGetLongProp(node, "played", 0);
            ch->player.time.logon = xmlGetLongProp(node, "last", 0);
        } else if (xmlMatches(node->name, "carnage")) {
            GET_PKILLS(ch) = xmlGetIntProp(node, "pkills", 0);
            GET_ARENAKILLS(ch) = xmlGetIntProp(node, "akills", 0);
            GET_MOBKILLS(ch) = xmlGetIntProp(node, "mkills", 0);
            GET_PC_DEATHS(ch) = xmlGetIntProp(node, "deaths", 0);
            RAW_REPUTATION_OF(ch) = xmlGetIntProp(node, "reputation", 0);
            GET_SEVERITY(ch) = xmlGetIntProp(node, "severity", 0);
        } else if (xmlMatches(node->name, "attr")) {
            ch->aff_abils.str = ch->real_abils.str =
                xmlGetIntProp(node, "str", 0);
            ch->aff_abils.str = ch->real_abils.str +=
                xmlGetIntProp(node, "stradd", 0) / 10;
            ch->aff_abils.intel = ch->real_abils.intel =
                xmlGetIntProp(node, "int", 0);
            ch->aff_abils.wis = ch->real_abils.wis =
                xmlGetIntProp(node, "wis", 0);
            ch->aff_abils.dex = ch->real_abils.dex =
                xmlGetIntProp(node, "dex", 0);
            ch->aff_abils.con = ch->real_abils.con =
                xmlGetIntProp(node, "con", 0);
            ch->aff_abils.cha = ch->real_abils.cha =
                xmlGetIntProp(node, "cha", 0);
        } else if (xmlMatches(node->name, "condition")) {
            GET_COND(ch, THIRST) = xmlGetIntProp(node, "thirst", 0);
            GET_COND(ch, FULL) = xmlGetIntProp(node, "hunger", 0);
            GET_COND(ch, DRUNK) = xmlGetIntProp(node, "drunk", 0);
        } else if (xmlMatches(node->name, "player")) {
            GET_WIMP_LEV(ch) = xmlGetIntProp(node, "wimpy", 0);
            GET_LIFE_POINTS(ch) = xmlGetIntProp(node, "lp", 0);
            GET_CLAN(ch) = xmlGetIntProp(node, "clan", 0);
        } else if (xmlMatches(node->name, "home")) {
            GET_HOME(ch) = xmlGetIntProp(node, "town", 0);
            GET_HOMEROOM(ch) = xmlGetIntProp(node, "homeroom", 0);
            GET_LOADROOM(ch) = xmlGetIntProp(node, "loadroom", 0);
        } else if (xmlMatches(node->name, "quest")) {
            GET_QUEST(ch) = xmlGetIntProp(node, "current", 0);
            GET_IMMORT_QP(ch) = xmlGetIntProp(node, "points", 0);
            GET_QUEST_ALLOWANCE(ch) = xmlGetIntProp(node, "allowance", 0);
        } else if (xmlMatches(node->name, "bits")) {
            char *flag = (char *)xmlGetProp(node, (xmlChar *) "flag1");
            ch->char_specials.saved.act = hex2dec(flag);
            free(flag);

            flag = (char *)xmlGetProp(node, (xmlChar *) "flag2");
            ch->player_specials->saved.plr2_bits = hex2dec(flag);
            free(flag);
        } else if (xmlMatches(node->name, "frozen")) {
            ch->player_specials->thaw_time =
                xmlGetIntProp(node, "thaw_time", 0);
            ch->player_specials->freezer_id =
                xmlGetIntProp(node, "freezer_id", 0);
        } else if (xmlMatches(node->name, "prefs")) {
            char *flag = (char *)xmlGetProp(node, (xmlChar *) "flag1");
            ch->player_specials->saved.pref = hex2dec(flag);
            free(flag);

            flag = (char *)xmlGetProp(node, (xmlChar *) "flag2");
            ch->player_specials->saved.pref2 = hex2dec(flag);
            free(flag);

            flag = (char *)xmlGetProp(node, (xmlChar *) "tongue");
            if (flag)
                GET_TONGUE(ch) = find_tongue_idx_by_name(flag);
            free(flag);
        } else if (xmlMatches(node->name, "weaponspec")) {
            int vnum = xmlGetIntProp(node, "vnum", -1);
            int level = xmlGetIntProp(node, "level", 0);
            if (vnum > 0 && level > 0) {
                for (int i = 0; i < MAX_WEAPON_SPEC; i++) {
                    if (GET_WEAP_SPEC(ch, i).level <= 0) {
                        GET_WEAP_SPEC(ch, i).vnum = vnum;
                        GET_WEAP_SPEC(ch, i).level = level;
                        break;
                    }
                }
            }
        } else if (xmlMatches(node->name, "title")) {
            char *txt;

            txt = (char *)xmlNodeGetContent(node);
            set_title(ch, txt);
            free(txt);
        } else if (xmlMatches(node->name, "affect")) {
            struct affected_type af;
            init_affect(&af);
            af.type = xmlGetIntProp(node, "type", 0);
            af.duration = xmlGetIntProp(node, "duration", 0);
            af.modifier = xmlGetIntProp(node, "modifier", 0);
            af.location = xmlGetIntProp(node, "location", 0);
            af.level = xmlGetIntProp(node, "level", 0);
            af.aff_index = xmlGetIntProp(node, "index", 0);
            af.owner = xmlGetIntProp(node, "owner", 0);
            af.next = NULL;
            char *instant = (char *)xmlGetProp(node, (xmlChar *) "instant");
            if (instant != NULL && strcmp(instant, "yes") == 0) {
                af.is_instant = 1;
            }
            free(instant);

            char *bits = (char *)xmlGetProp(node, (xmlChar *) "affbits");
            af.bitvector = hex2dec(bits);
            free(bits);

            affect_to_char(ch, &af);

        } else if (xmlMatches(node->name, "affects")) {
            // PCs shouldn't have ANY perm affects
            if (IS_NPC(ch)) {
                char *flag = (char *)xmlGetProp(node, (xmlChar *) "flag1");
                AFF_FLAGS(ch) = hex2dec(flag);
                free(flag);

                flag = (char *)xmlGetProp(node, (xmlChar *) "flag2");
                AFF2_FLAGS(ch) = hex2dec(flag);
                free(flag);

                flag = (char *)xmlGetProp(node, (xmlChar *) "flag3");
                AFF3_FLAGS(ch) = hex2dec(flag);
                free(flag);
            } else {
                AFF_FLAGS(ch) = 0;
                AFF2_FLAGS(ch) = 0;
                AFF3_FLAGS(ch) = 0;
            }

        } else if (xmlMatches(node->name, "skill")) {
            char *spellName = (char *)xmlGetProp(node, (xmlChar *) "name");
            int index = str_to_spell(spellName);
            if (index >= 0) {
                SET_SKILL(ch, index, xmlGetIntProp(node, "level", 0));
            }
            free(spellName);
        } else if (xmlMatches(node->name, "tongue")) {
            char *tongue = (char *)xmlGetProp(node, (xmlChar *) "name");
            int index = find_tongue_idx_by_name(tongue);
            if (index >= 0)
                SET_TONGUE(ch, index,
                    MIN(100, xmlGetIntProp(node, "level", 0)));
            free(tongue);
        } else if (xmlMatches(node->name, "alias")) {
            struct alias_data *alias;
            CREATE(alias, struct alias_data, 1);
            alias->type = xmlGetIntProp(node, "type", 0);
            alias->alias = (char *)xmlGetProp(node, (xmlChar *) "alias");
            alias->replacement =
                (char *)xmlGetProp(node, (xmlChar *) "replace");
            if (alias->alias == NULL || alias->replacement == NULL) {
                free(alias);
            } else {
                add_alias(ch, alias);
            }
        } else if (xmlMatches(node->name, "description")) {
            txt = (char *)xmlNodeGetContent(node);
            ch->player.description = strdup(tmp_gsub(txt, "\n", "\r\n"));
            free(txt);
        } else if (xmlMatches(node->name, "poofin")) {
            POOFIN(ch) = (char *)xmlNodeGetContent(node);
        } else if (xmlMatches(node->name, "poofout")) {
            POOFOUT(ch) = (char *)xmlNodeGetContent(node);
        } else if (xmlMatches(node->name, "immort")) {
            txt = (char *)xmlGetProp(node, (xmlChar *) "badge");
            strncpy(BADGE(ch), txt, 7);
            BADGE(ch)[7] = '\0';
            free(txt);

            GET_QLOG_LEVEL(ch) = xmlGetIntProp(node, "qlog", 0);
            GET_INVIS_LVL(ch) = xmlGetIntProp(node, "invis", 0);
        } else if (xmlMatches(node->name, "rent")) {
            char *txt;

            ch->player_specials->rentcode = xmlGetIntProp(node, "code", 0);
            ch->player_specials->rent_per_day =
                xmlGetIntProp(node, "perdiem", 0);
            ch->player_specials->rent_currency =
                xmlGetIntProp(node, "currency", 0);
            txt = (char *)xmlGetProp(node, (xmlChar *) "state");
            if (txt)
                ch->player_specials->desc_mode =
                    (enum cxn_state)search_block(txt, desc_modes, false);
            free(txt);
        } else if (xmlMatches(node->name, "recentkill")) {
            struct kill_record *kill;

            CREATE(kill, struct kill_record, 1);
            kill->vnum = xmlGetIntProp(node, "vnum", 0);
            kill->times = xmlGetIntProp(node, "times", 0);
            GET_RECENT_KILLS(ch) = g_list_prepend(GET_RECENT_KILLS(ch), kill);
        } else if (xmlMatches(node->name, "grievance")) {
Пример #19
0
void Response(uint8_t Error)
{
    int ByteNum = 0;
    uint8_t  CheckSum;
    uint16_t ConverterData;

    uint16_t ID = 0x0000;
    uint8_t	ID_H = 0x00;
    uint8_t	ID_L = 0x00;
    ID = (*(__IO uint32_t*)(ID_ADDRESS));
    delay_ms(3);
    ID_H = (ID & 0xFF00)>>8;
    ID_L = (ID & 0x00FF);

    wd[0] = FrameHead;
    wd[1] = ID_H;
    wd[2] = ID_L;
    wd[3] = Reserved;
    wd[4] = COLOR;
    wd[5] = rd[SN_Order];
    wd[6] = DataLength_in_Response;

//   	if(ADC_Data[5] <0x0010 || ADC_Data[5] ==0x0010)
//   	{
//     	wd[7] = 0x00;
//   	}
//   	else
//   	{
//     	wd[7] = 0x10;
//   	}
    if(Flag_On == false)
    {
        wd[7] = 0x00;
    }
    else
    {
        wd[7] = 0x10;
    }

    wd[8] = Error;//

    wd[9] = (ADC_Data[4] & 0xFF00)>>8;
    wd[10]= (ADC_Data[4] & 0x00FF);

// 	wd[11]= (ADC_Data[5] & 0xFF00)>>8;
// 	wd[12]= (ADC_Data[5] & 0x00FF);
    ConverterData = hex2dec(ADC_Data[5]);
    wd[11]= (ConverterData & 0xFF00)>>8;
    wd[12]= (ConverterData & 0x00FF);

//   wd[13]= (CurrentTuneValue & 0xFF00)>>8;
// 	wd[14]= (CurrentTuneValue & 0x00FF);
    wd[13]= (ADC_Data[2] & 0xFF00)>>8;
    wd[14]= (ADC_Data[2] & 0x00FF);

    wd[15]= (ADC_Data[3] & 0xFF00)>>8;
    wd[16]= (ADC_Data[3] & 0x00FF);

    for(ByteNum=1; ByteNum < DataLength_in_Response + 7; ByteNum++)
    {
        CheckSum = wd[ByteNum]^CheckSum;
    }
    wd[17]= CheckSum;
    wd[18]= FrameTail;

//-Another Way for Transmit Continounsly-
//   for(i=0; i<19; i++)
//   {
//     Dir_Transmit();
//     delay_ms(1);
//     USART_SendData(USART1, wd[i]);
//   }
//---------------------------------------
    Dir_Transmit();
    delay_ms(1);
    UART_Send(wd,19);
    delay_ms(2);
    Dir_Receive();
}
Пример #20
0
void cNewMagic::load()
{
	// Get all spell definitions
	QStringList sList = DefManager->getSections( WPDT_SPELL );

	for( UINT8 i = 0; i < sList.count(); ++i )
	{
		const QDomElement *elem = DefManager->getSection( WPDT_SPELL, sList[i] );

		UINT8 id = elem->attribute( "id", "0" ).toUShort();

		if( !id || id > 64 )
			continue;

        id--;
		QDomElement node = elem->firstChild().toElement();

		while( !node.isNull() )
		{
			if( node.nodeName() == "name" )
				spells[id].name = node.text();
			else if( node.nodeName() == "mantra" )
				spells[id].mantra = node.text();
			else if( node.nodeName() == "target" )
				spells[id].target = node.text();
			else if( node.nodeName() == "booklow" )
				spells[id].booklow = node.text().toInt();
			else if( node.nodeName() == "bookhigh" )
				spells[id].bookhigh = node.text().toInt();
			else if( node.nodeName() == "scrolllow" )
				spells[id].scrolllow = node.text().toInt();
			else if( node.nodeName() == "scrollhigh" )
				spells[id].scrollhigh = node.text().toInt();
			else if( node.nodeName() == "actiondelay" )
				spells[id].actiondelay = node.text().toInt();
			else if( node.nodeName() == "delay" )
				spells[id].delay = node.text().toInt();
			else if( node.nodeName() == "action" )
				spells[id].action = hex2dec( node.text() ).toInt();
			else if( node.nodeName() == "targets" )
			{
				// process subnodes <char />, <item />, <ground />
				if( node.elementsByTagName( "char" ).count() >= 1 )
					spells[id].targets |= TARGET_CHAR;
				if( node.elementsByTagName( "item" ).count() >= 1 )
					spells[id].targets |= TARGET_ITEM;
				if( node.elementsByTagName( "ground" ).count() >= 1 )
					spells[id].targets |= TARGET_GROUND;
			}				
			else if( node.nodeName() == "flags" )
			{
				QDomNodeList nList = node.childNodes();

				for( INT32 i = 0; i < nList.count(); ++i )
				{
					QDomElement sNode = nList.item( i ).toElement();

					if( !sNode.isNull() )
					{
						if( sNode.nodeName() == "agressive" )
							spells[id].flags |= SPELL_AGRESSIVE;
						else if( sNode.nodeName() == "reflectable" )
							spells[id].flags |= SPELL_REFLECTABLE;
					}
				}
			}
			else if( node.nodeName() == "mana" )
				spells[id].mana = node.text().toInt();
			else if( node.nodeName() == "scroll" )
				spells[id].scroll = hex2dec( node.text() ).toLong();
			else if( node.nodeName() == "script" )
				spells[id].script = ScriptManager->find( node.text() );
			else if( node.nodeName() == "reagents" )
			{
				QDomNodeList nList = node.childNodes();

				for( INT32 i = 0; i < nList.count(); ++i )
				{
					QDomElement sNode = nList.item( i ).toElement();

					if( !sNode.isNull() )
					{
						if( sNode.nodeName() == "blackpearl" )
							spells[id].reagents.blackpearl = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "bloodmoss" )
							spells[id].reagents.bloodmoss = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "garlic" )
							spells[id].reagents.garlic = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "ginseng" )
							spells[id].reagents.ginseng = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "mandrake" )
							spells[id].reagents.mandrake = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "nightshade" )
							spells[id].reagents.nightshade = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "spidersilk" )
							spells[id].reagents.spidersilk = hex2dec( sNode.text() ).toInt();
						else if( sNode.nodeName() == "sulfurash" )
							spells[id].reagents.sulfurash = hex2dec( sNode.text() ).toInt();
					}
				}
			}

			QDomNode tmp = node.nextSibling();
			if( !tmp.isNull() )
				node = tmp.toElement();
			else
				break;
		}
	}
}
Пример #21
0
//按照通用接口规范进行封装各自银行的接口
int Bank_QueryBalance(INNER_TRANS_REQUEST * pNode,double *balance)
{

    int ret=0;
    INNER_TRANS_REQUEST  from_pos;
    BANK_TRANS_REQUEST BankReqPak;
    BANK_TRANS_REQUEST BankAnsPak;

    memset(&from_pos,0,sizeof from_pos);
    memset(&BankReqPak,0,sizeof BankReqPak);
    memset(&BankAnsPak,0,sizeof BankAnsPak);
    memcpy(&from_pos,pNode,sizeof(from_pos));

    //组织银行包
    //写交易代码
    memcpy( BankReqPak.TradeCode,TRADE_BANK_QUERY, BANK_TRADE_CODE_LEN);
    //写交易日期和交易时间
    getsysdate(BankReqPak.TradeDate);
    getsystime(BankReqPak.TradeTime);
    //memcpy(BankReqPak.TradeDate,from_pos.TradeDate,sizeof(BankReqPak.TradeDate));
    //memcpy(BankReqPak.TradeTime,from_pos.TradeTime,sizeof(BankReqPak.TradeTime));
    //写银行卡号字段
    //sprintf(BankReqPak.BankCardNo,"%-20s","1030399110000001042");	//写银行卡号字段
    sprintf(BankReqPak.BankCardNo,"%-20s",from_pos.BankCardNo);
    //写银行卡密码字段
    //通过16进制格式传输,再解密
    hex2dec(from_pos.BankCardPwd, (unsigned char*)BankReqPak.BankCardPwd, 8);
    //memcpy(BankReqPak.BankCardPwd,from_pos.BankCardPwd,sizeof(BankReqPak.BankCardPwd));
#ifdef DEBUG
    char buffer[100]="";
    int k=0;
    for(int i=0; i<16; i++)
    {
        k=(unsigned char)BankReqPak.BankCardPwd[i];
        sprintf(&buffer[2*i],"%02X",k);
    }
    writelog(LOG_INFO,"BankCardNo=[%s],BankCardPwd=[%s]",BankReqPak.BankCardNo,buffer);
    writelog(LOG_INFO,"BankCardNo=[%s],fromCardPwd=[%s]",BankReqPak.BankCardNo,from_pos.BankCardPwd);
#endif

    //写校园端流水号
    sprintf(BankReqPak.CustSn,"%-8f",0);
    //写院校代码
    sprintf(BankReqPak.CustNo,"%-16s",SCHOOL_CODE);
    BankReqPak.AutoFlag='0';
    //写校验mac码
    generate_mac((char*)(&BankReqPak),sizeof(BankReqPak),BankReqPak.MAC);

    //memcpy(SockNode.Buf,&BankReqPak,sizeof(BankReqPak));
    TRACE_BANK_TRANS(&BankReqPak,"send query bank package");

    ret=send_to_and_recv_from_bank(BANK_NYYH,(char*)(&BankReqPak),sizeof(BankReqPak),(char*)(&BankAnsPak),sizeof(BankAnsPak),&g_Bank);
    if(ret)
    {
        writelog(LOG_ERR,"send_to_and_recv_from_bank error,errcode=[%d]",ret);
        return E_TRANS_BANK_NOANSWER;
    }


    TRACE_BANK_TRANS(&BankAnsPak,"receivce query bank package");

    //农行暂时未校验该mac,所以暂时屏蔽掉
    /*
    ret=check_mac((char*)(&BankAnsPak), sizeof(BankAnsPak));
    if(ret)
    {
    	writelog(LOG_ERR,"Receive data mac verify error,error code is [%d] ",ret);
    	//sprintf(pNode->RetCode,"%d",E_TRANS_BANK_RECVERR);
    	return	E_TRANS_BANK_RECVERR;
    }
    */
    if(0!=strncmp(BankAnsPak.RetCode,RET_BANK_OK,2))
    {
        writelog(LOG_ERR,"Receive data return code error,error code= [%2.2s] ",BankAnsPak.RetCode);
        BankAnsPak.RetCode[2]=0;
        switch(atoi(BankAnsPak.RetCode))
        {
        case 1:		//银行卡挂失
            //sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_LOST);
            return	E_TRANS_BANKCARD_LOST;
        case 2:		//银行卡状态错误
            //sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_STATERR);
            return	E_TRANS_BANKACC_STATERR;
        case 3:		//银行卡金额不足
            //sprintf(pNode->RetCode,"%d",E_TRANS_BANKACC_NOMONEY);
            return	E_TRANS_BANKACC_NOMONEY;
        case 4:		//银行未知错误
            //sprintf(pNode->RetCode,"%d",E_TRANS_BANK_NODECIDE);
            return	E_TRANS_BANK_NODECIDE;
        case 5:		//银行密码错误
            //sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
            return	E_TRANS_BANKCARD_PWDERR;
        case 6:		//通讯或密钥错
            //sprintf(pNode->RetCode,"%d",E_TRANS_BANKCARD_PWDERR);
            return	E_TRANS_BANK_NETERR;
        default:		//其他未知错误
            //sprintf(pNode->RetCode,"%d",E_TRANS_UNKNOW_ERROR);
            return	E_TRANS_UNKNOW_ERROR;
        }
    }

    //填充应答包
    //sprintf(pNode->RetCode,"%d",SUCCEED);
    memcpy(pNode->Balance,BankAnsPak.Balance,sizeof(pNode->Balance));
    writelog(LOG_INFO,"query bank card balance succeed!bank card money=[%s]",BankAnsPak.Balance);
    return 0;
}
Пример #22
0
void main(void)
{
// Declare your local variables here
bit flag_start_pause1,flag_start_pause2,f_m1,key_enter_press_switch1;
char min_r,min_n;
float time_pause1,time_pause2,adc_value1,adc_value3;
float data_register,k_f,adc_filter,adc_value2;


if      (MCUCSR & 0x01){/* Power-on Reset */MCUCSR&=0xE0;}
else if (MCUCSR & 0x02){/* External Reset */MCUCSR&=0xE0;}
else if (MCUCSR & 0x04){/* Brown-Out Reset*/MCUCSR&=0xE0;}
else if (MCUCSR & 0x08){/* Watchdog Reset */MCUCSR&=0xE0;}
else if (MCUCSR & 0x10){/* JTAG Reset     */MCUCSR&=0xE0;};

PORTA=0b11111111;DDRA=0b11111111;
PORTB=0b00000000;DDRB=0b10110011;
PORTC=0b11111000;DDRC=0b11111011;
PORTD=0b11110000;DDRD=0b00001000;

TCCR0=0x02;TCNT0=TCNT0_reload;OCR0=0x00;

TCCR1A=0x00;TCCR1B=0x05;TCNT1H=0x00;TCNT1L=0x01;
ICR1H=0x00;ICR1L=0x04;OCR1AH=0x00;OCR1AL=0x02;
OCR1BH=0x00;OCR1BL=0x03;

ASSR=0x00;TCCR2=0x03;TCNT2=TCNT2_reload;OCR2=0x00;

MCUCR=0x00;MCUCSR=0x00;TIMSK=0xFF;

UCSRA=0x00;UCSRB=0xD8;UCSRC=0x86;UBRRH=0x00;UBRRL=0x33;
ACSR=0x80;SFIOR=0x00;SPCR=0x52;SPSR=0x00;WDTCR=0x1F;WDTCR=0x0F;

// test:
// for (i=1;i<30;i++)
//         {
//         ee_float=&(reg[i]);
//         *ee_float=FAKTORY[i];//проверка граничных значений
//         }
// 
goto a1;

//Ожидание включения питания 
ee_float=&(reg[18]);
k_f=*ee_float;
if ((k_f>MAX_MIN[18,1])||(k_f<MAX_MIN[18,0])) k_f=FAKTORY[18];//проверка граничных значений
k_f=*ee_float;
k=k_f;i=0;
while (i<k)
        {
        if ((key_1==0)&&(key_4==0)&&(key_2==1)&&(key_3==1)) i++;
        else i=0;
        delay_ms(1000);
        }
power=1;

#asm("sei")
//Показать основные настройки
for (i=7;i<MAX_REGISTER;i++)
        {
        hex2dec(i-6);
        set_digit_on('a','_',des,ed);
        set_digit_off('a','_',des,ed);
        set_led_on(0,0,0,1,0,0,0,0);
        set_led_off(0,0,0,1,0,0,0,0);
        delay_ms(700);
        ee_float=&(reg[i]);
        k_f=*ee_float;
        if ((k_f>MAX_MIN[i,1])||(k_f<MAX_MIN[i,0])) *ee_float=FAKTORY[i];//проверка граничных значений
        k_f=*ee_float;
        if ((i==14)||(i==13)||(i==14)||(i==21)||(i==22))
                {
                k_f=k_f*100;
                set_led_on(0,0,0,1,0,1,0,0);
                set_led_off(0,0,0,1,0,1,0,0);
                }
        else 
                {
                set_led_on(0,0,0,1,0,0,0,0);
                set_led_off(0,0,0,1,0,0,0,0);
                }
        
        hex2dec(k_f);
        set_digit_on(tis,sot,des,ed);
        set_digit_off(tis,sot,des,ed);
        delay_ms(700);
        }
a1:

key_mode_press=0;
key_plus_press=0;
key_mines_press=0;
key_enter_press=0;
key_mode_press_switch=0;
key_plus_press_switch=0;
key_minus_press_switch=0;

#asm("sei")
mode=0;
x=0;
start_time=sys_time;
while (1)
        {
        if (read_reg(6)==0)buzer_buzer_en=0;
        else buzer_buzer_en=1;
        #asm("wdr");
        //измерение
        if (++buf_end>8) buf_end=0;buf[buf_end]=read_adc();min_r=9;
        //модальный фильтр
        for (j=0;j<9;j++)
                {
                rang[j]=0;
                for (i=0;i<9;i++)
                        {
                        if (i!=j)
                                {
                                if (buf[j]<buf[i]) rang[j]--;
                                if (buf[j]>buf[i]) rang[j]++;
                                }
                        }
                if (cabs(rang[j])<min_r) {min_r=cabs(rang[j]);min_n=j;}
                }
        //ФНЧ
        ee_float=&(reg[17]);
        k_f=*ee_float;
        if (k_f==0)
                {adc_filter=buf[min_n];}
        else
                {
                k_f=0.002/k_f;
                adc_filter=k_f*buf[min_n]+(1-k_f)*adc_filter;
                }
        
        //первичное преобразование
//         ee_float=&kal[0];
//         adc_value1=adc_filter+*ee_float;
//         ee_float=&kal[1];
//         adc_value1=adc_value1*(*ee_float);

        adc_value1=adc_filter*1.006/100;

        //вторичное преобразование//???????????????????????????????
        k_f=(read_reg(22)-read_reg(21))/(read_reg(14)-read_reg(13));
        adc_value2=read_reg(21)-k_f*read_reg(13)+adc_value1*k_f;
//        adc_value2=adc_value1adc_filter/100;
                
        //авария
        if (adc_value2<(read_reg(13)*(1-read_reg(15)/100))) {avaria=1;}
        else if (adc_value2>(read_reg(14)*(1+read_reg(16)/100))) {avaria=1;}
        else avaria=0;





        //уставка 1,2
        ee_float=&(reg[7]);k_f=*ee_float;//гистерезис
        ee_float=&(reg[1]);
        if (adc_value2>((*ee_float)*(1+k_f/100))) {alarm1=1;}//set_led_alarm1_on(1);//}
        else {alarm1=0;alarm_alarm1=0;flag_start_pause1=0;}//set_led_alarm1_on(0);//}
        ee_float=&(reg[2]);
        if (adc_value2>((*ee_float)*(1+k_f/100))) {alarm2=1;}//set_led_alarm2_on(1);//}
        else {alarm2=0;flag_start_pause2=0;}//set_led_alarm2_on(0);//}





        //пауза 1,2
        if (alarm_alarm1==1){relay_alarm1=1;}
        else relay_alarm1=0;
        if (alarm_alarm2==1){relay_alarm2=1;}
        else relay_alarm2=0;

        
        if ((flag_start_pause1==1))//&&(alarm_alarm1==0))
                {
                if ((sys_time-time_pause1)>(read_reg(3)*2000)){alarm_alarm1=1;}
                }
        else if (alarm1==1)
                {
                time_pause1=sys_time;
                flag_start_pause1=1;
                }
        if ((flag_start_pause2==1))//&&(alarm_alarm2==0))
                {
                if ((sys_time-time_pause2)>(read_reg(4)*2000))alarm_alarm2=1;
                }
        else if (alarm2==1)
                {
                time_pause2=sys_time;
                flag_start_pause2=1;
                }












        //возврат из меню
        if (((sys_time-start_time_mode)>read_reg(20)*2000)){mode=0;f_m1=0;}

        if ((key_enter_press_switch==1)&&(mode==0)){key_enter_press_switch=0;key_enter_press_switch1=1;}
        if ((key_enter_press_switch1==1)&&(key_enter==1))
                {
                if ((sys_time-whait_time)>3000)
                        {
                        mode=10;start_time_mode=sys_time;key_enter_press_switch1=0;
                        }
                }

        //МЕНЮ
        if (mode==0)
                {
                if (alarm_alarm2==0)
                        {

                        if (read_reg(12)==0)adc_value3=adc_value1;
                        else adc_value3=adc_value2;
                        }
                else
                        {
                        if (read_reg(12)==0)adc_value3=adc_value1;
                        else adc_value3=adc_value2;
                        }

                
                hex2dec(adc_value3*100);
                }
                
        if (mode==1)//уставка №1
                {
                set_led_on(0,0,1,1,0,0,0,0);//светодиод предупр.,норма 
                set_led_off(0,0,0,1,0,0,0,0);//светодиод норма

                if ((((sys_time-start_time_mode)<read_reg(19)*2000))&&(f_m1==0))//пока время индикации наименования
                        {
                        tis='У';sot='_';des=1;ed=' ';
                        set_digit_off(' ',' ',' ',' ');
                        }
                else
                        {
                        set_led_on(0,0,1,1,0,1,0,0);//светодиод предупр.,норма, запятая 2
                        count_register=1;
                        hex2dec(data_register*100);
                        f_m1=1;
                        }
                }
        if (mode==2)//уставка №2
                {
                set_led_on(0,1,0,1,0,0,0,0);//светодиод аварийн.,норма
                set_led_off(0,0,0,1,0,0,0,0);//светодиод норма

                if ((((sys_time-start_time_mode)<read_reg(19)*2000))&&(f_m1==0))//пока время индикации наименования
                        {
                        tis='У';sot='_';des=2;ed=' ';
                        set_digit_off(' ',' ',' ',' ');
                        }
                else
                        {
                        set_led_on(0,1,0,1,0,1,0,0);//светодиод аварийн.,норма, запятая 2
                        count_register=2;
                        hex2dec(data_register*100);
                        f_m1=1;
                        }
                }
        if (mode==3)//время до уставки 1
                {
                set_led_on(0,0,1,1,0,0,0,0);//светодиод предупр.,норма, запятая 2
                set_led_off(0,0,0,1,0,0,0,0);//светодиод норма
                if ((((sys_time-start_time_mode)<read_reg(19)*2000))&&(f_m1==0))//пока время индикации наименования
                        {
                        tis=3;sot='_';des=1;ed=' ';
                        set_digit_off(' ',' ',' ',' ');
                        }
                else
                        {
                        count_register=3;
                        hex2dec(data_register);
                        f_m1=1;
                        }
                }
        if (mode==4)//время до уставки 2
                {
                set_led_on(0,1,0,1,0,0,0,0);//светодиод аварийн.,норма, запятая 2
                set_led_off(0,0,0,1,0,0,0,0);//светодиод норма
                if ((((sys_time-start_time_mode)<read_reg(19)*2000))&&(f_m1==0))//пока время индикации наименования
                        {
                        tis=3;sot='_';des=2;ed=' ';
                        set_digit_off(' ',' ',' ',' ');
                        }
                else
                        {
                        count_register=4;
                        hex2dec(data_register);
                        f_m1=1;
                        }
                }
        if (mode==5)//режим маскирование
                {
                set_led_on(0,1,1,1,0,0,0,0);//светодиод аварийн.,предупр.,норма
                set_led_off(0,0,0,1,0,0,0,0);//светодиод норма
                if ((((sys_time-start_time_mode)<read_reg(19)*2000))&&(f_m1==0))//пока время индикации наименования
                        {
                        tis=6;sot='_';des='_';ed=' ';
                        set_digit_off(' ',' ',' ',' ');
                        }
                else
                        {
                        count_register=5;
                        hex2dec(data_register);
                        f_m1=1;
                        }
                }

        if (mode==6)//режим маскирование
                {
                set_led_on(0,1,1,1,0,0,0,0);//светодиод аварийн.,предупр.,норма
                set_led_off(0,0,0,1,0,0,0,0);//светодиод норма
                if ((((sys_time-start_time_mode)<read_reg(19)*2000))&&(f_m1==0))//пока время индикации наименования
                        {
                        tis='c';sot='_';des='_';ed=' ';
                        set_digit_off(' ',' ',' ',' ');
                        }
                else
                        {
                        count_register=6;
                        hex2dec(data_register);
                        f_m1=1;
                        }
                }
//----------------------------------------------------------
        if (mode==10)
                {
                if (count_register<7) count_register=7;
                hex2dec(count_register-6);
                if (des==0) des='_';
                tis='a';sot='_';
                set_digit_off(' ',' ',' ',' ');
                set_led_on(0,0,1,1,0,0,0,0);
                set_led_off(0,0,0,1,0,0,0,0);
                }

        if (mode==11)
                {
                if ((count_register==14)||(count_register==13)||(count_register==14)||(count_register==21)||(count_register==22))
                        {
                        hex2dec(data_register*100);
                        set_led_on(0,0,1,1,0,1,0,0);
                        set_led_off(0,0,0,1,0,1,0,0);
                        }
                else 
                        {
                        hex2dec(data_register);
                        set_led_on(0,0,1,1,0,0,0,0);
                        set_led_off(0,0,0,1,0,0,0,0);
                        }
                }
        
        
        if (key_plus_press==1)
                {
                start_time_mode=sys_time;
                if (count_key==0){if (mode==10)if (++count_register>MAX_REGISTER)count_register=MAX_REGISTER;}
                if ((count_key==0)||(count_key==21)||(count_key1==102))
                        {
                        if ((mode==11)||(mode==3)||(mode==4)||(mode==5)||(mode==6))
                                {
                                if ((count_register==13)||(count_register==14)||(count_register==21)||(count_register==22))data_register=data_register+0.01;
                                else data_register=data_register+1;
                                if (data_register>MAX_MIN[count_register,1])data_register=MAX_MIN[count_register,1];
                                }
                        if ((mode==1)||(mode==2))
                                {
                                data_register=data_register+0.01;
                                if (data_register>MAX_MIN[count_register,1])data_register=MAX_MIN[count_register,1];
                                }
                        if (count_key==0)count_key=60;if (count_key==21)count_key=20;
                        }
                rekey();
                }
        else if ((mode!=100)&&(key_enter_press==0)&&(key_mines_press==0)){count_key=0;count_key1=0;count_key2=0;}

        if (key_mines_press==1)
                {
                start_time_mode=sys_time;
                if (count_key==0){if (mode==10)if (--count_register<7)count_register=7;}
                if ((count_key==0)||(count_key==21)||(count_key1==102))
                        {
                        if ((mode==11)||(mode==3)||(mode==4)||(mode==5)||(mode==6))
                             {
                             if ((count_register==13)||(count_register==14)||(count_register==21)||(count_register==22))data_register=data_register-0.01;
                             else data_register=data_register-1;
                             if (data_register<MAX_MIN[count_register,0])data_register=MAX_MIN[count_register,0];
                             }
                        if ((mode==1)||(mode==2))
                                {
                                data_register=data_register-0.01;
                                if (data_register<MAX_MIN[count_register,0])data_register=MAX_MIN[count_register,0];
                                }
                        if (count_key==0)count_key=60;if (count_key==21)count_key=20;
                        }
                rekey();
                }
        else if ((mode!=100)&&(key_enter_press==0)&&(key_plus_press==0)){count_key=0;count_key1=0;count_key2=0;}

        if ((key_enter_press_switch==1)&&(key_plus_press==0)&&(key_mines_press==0)&&(key_mode_press==0)&&(mode!=0)&&(mode!=10))
                {
                ee_float=&reg[count_register];
                *ee_float=data_register;
                start_time_mode=sys_time;
                if (count_register==21)
                        {
                        ee_float=&kal[0];
                        *ee_float=adc_filter;
                        }
                if (count_register==22)
                        {
                        ee_float=&kal[0];
                        k_f=*ee_float;
                        ee_float=&kal[1];
                        *ee_float=20/(adc_filter-k_f);
                        }
                if (count_register==30)
                        {
                        for (i=0;i<30;i++)
                                {
                                ee_float=&reg[i];
                                *ee_float=FAKTORY[i];
                                }
                        }
                set_digit_on(' ',3,'a','п');
                set_digit_off(' ',3,'a','п');
                set_led_on(0,0,0,1,0,0,0,0);
                set_led_off(0,0,0,1,0,0,0,0);
                delay_ms(3000);key_enter_press_switch=0;
                set_digit_off(' ',' ',' ',' ');
                start_time_mode=sys_time;start_time=sys_time;
                f_m1=0;
                }
        if ((key_mode_press_switch==1)&&(key_4==1))
                {
                key_mode_press_switch=0;f_m1=0;
                start_time_mode=sys_time;
                switch (mode)
                        {
                        case 0: mode=1;data_register=read_reg(1);break;
                        case 1: mode=2;data_register=read_reg(2);break;
                        case 2: mode=3;data_register=read_reg(3);break;
                        case 3: mode=4;data_register=read_reg(4);break;
                        case 4: mode=5;data_register=read_reg(5);break;
                        case 5: mode=6;data_register=read_reg(6);break;
                        case 6: mode=0;break;
                        case 10:mode=11;data_register=read_reg(count_register);break;
                        case 11:mode=10;break;
                        case 100:mode=100;break;
                        }
                }

        if (((sys_time-start_time)>250)) 
                {
                set_digit_on(tis,sot,des,ed);
                if (((mode>0)&&(mode<7))||(mode==11))
                        {
                        if((key_plus_press==1)||(key_mines_press==1)) set_digit_off(tis,sot,des,ed);
                        else set_digit_off(' ',' ',' ',' ');
                        }
                if (mode==0)
                        {
                        set_digit_off(tis,sot,des,ed);
                        set_led_on(0,0,0,1,0,1,0,0);
                        set_led_off(0,0,0,1,0,1,0,0);
                        }
                start_time=sys_time;
                }
        };
}
Пример #23
0
void cUObject::processNode( const cElement* Tag, uint /*hash*/ )
{
	QString TagName( Tag->name() );
	QString Value( Tag->value() );

	if ( TagName == "name" )
	{
		name_ = Value;
	}

	// <tag type="string"> also type="value"
	//		<key>multisection</key>
	//		<value>smallboat</value>
	// </tag>
	else if ( TagName == "tag" )
	{
		QString name = Tag->getAttribute( "name" );
		QString value = Tag->getAttribute( "value" );

		if ( !name.isNull() )
		{
			// If there is no value attribute, use the
			// tag content instead.
			if ( value.isNull() )
			{
				value = Tag->text();

				if ( value.isNull() )
				{
					value = "";
				}
			}

			QString type = Tag->getAttribute( "type", "string" );

			if ( type == "int" )
			{
				// If the value is separated by a ,
				// we assume it's a random gradient.
				// If it's separated by ; we assume it's a list of values
				// we should choose from randomly.
				int sep = value.indexOf( ',' );

				if ( sep != -1 )
				{
					int min = hex2dec( value.left( sep ) ).toInt();
					int max = hex2dec( value.mid( sep + 1 ) ).toInt();

					int value = RandomNum( min, max );
					tags_.set( name, cVariant( ( int ) value ) );
				}
				else
				{
					// Choose a random value from the list.
					if ( value.contains( ';' ) )
					{
						QStringList values = value.split( ';' );
						if ( values.size() > 0 )
						{
							value = values[RandomNum( 0, values.size() - 1 )];
						}
					}

					tags_.set( name, cVariant( hex2dec( value ).toInt() ) );
				}
			}
			else if ( type == "float" )
			{
				tags_.set( name, cVariant( value.toFloat() ) );
			}
			else
			{
				tags_.set( name, cVariant( value ) );
			}
		}
	}
	// <scripts>a,b,c</scripts>
	else if ( TagName == "scripts" )
	{
		setScriptList( Value.toLatin1() );
	}
	else
	{
		if ( Value.isEmpty() )
		{
			Value = "1";
		}
		cVariant variant( Value );
		setProperty( TagName, variant );
	}
}
Пример #24
0
// function cpucard_cmd 
static int KSAPI cpucard_cmd(ks_reader_dev_t *dev,ks_cpu_cmd_t *cmd,KS_CARD_TYPE t)
{
	int ret;
	uint8 sw1,sw2;
	int rlen;
	char szCmd[256];
	ks_cpu_cmd_t innerCmd;
	cmd->cmd_retcode=0;
	assert(dev != NULL);
	if(!g_dev_hd)
	{
		strcpy(gErrMsg,"¶Á¿¨Æ÷¶Ë¿Úδ´ò¿ª");
		strcpy(cmd->cmd_retmsg,gErrMsg);
		return KS_PORT_NOTOPEN;
	}
	
	if(t == KS_SIMCARD)
	{
		// ·Ç½Ó´¥Ê½
		if(dev->cpuport == CARDSLOT_RF)
		{
			if(cmd->cmd_type == 0)
			{
				ret = do_send_recv_rfuim_cmd(cmd->send_buf,cmd->send_len,cmd->recv_buf,rlen,g_default_timeout);
				cmd->recv_len = rlen;
			}
			else
			{
				unsigned char ucCmd[512];
				int  iCmdLen=0;
				hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd,iCmdLen);
				ret = do_send_recv_rfuim_cmd(ucCmd,iCmdLen,cmd->recv_buf,rlen,g_default_timeout);
				cmd->recv_len = rlen;
			}
		}
		else
		{
			return KS_NOTSUPPORT;
		}
	}
	else if(t == KS_CPUCARD || t == KS_FIXCARD)
	{
		// ·Ç½Ó´¥Ê½
		if(dev->cpuport == CARDSLOT_RF)
		{
			if(cmd->cmd_type == 0)
			{
				ret = do_send_recv_cpucard_cmd(cmd->send_buf,cmd->send_len,cmd->recv_buf,rlen,g_default_timeout);
				cmd->recv_len = rlen;
			}
			else
			{
				unsigned char ucCmd[512];
				int  iCmdLen=0;
				hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd,iCmdLen);
				ret = do_send_recv_cpucard_cmd(ucCmd,iCmdLen,cmd->recv_buf,rlen,g_default_timeout);
				cmd->recv_len = rlen;
			}
		}
		else
		{
			return KS_NOTSUPPORT;
		}
	}
	else if(t == KS_MFCARD)
	{
		// ·Ç½Ó´¥Ê½
		if(dev->cpuport == CARDSLOT_RF)
		{
			if(cmd->cmd_type == 0)
			{
				ret = do_send_recv_pos_cmd(cmd->send_buf,cmd->send_len,cmd->recv_buf,rlen,g_default_timeout);
				cmd->recv_len = rlen;
			}
			else
			{
				unsigned char ucCmd[512];
				int  iCmdLen=0;
				hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd,iCmdLen);
				ret = do_send_recv_pos_cmd(ucCmd,iCmdLen,cmd->recv_buf,rlen,g_default_timeout);
				cmd->recv_len = rlen;
			}
		}
		else
		{
			return KS_NOTSUPPORT;
		}
	}
	else
	{
		// ½Ó´¥Ê½
		return KS_NOTSUPPORT;
	}
	if(ret<0 && ret > -3)
	{
		cmd->cmd_retcode = 0;
		GetErrMsgByErrCode(ret,gErrMsg);
		strcpy(cmd->cmd_retmsg,gErrMsg);
		return KS_CMDERROR;
	}

	sw1 = cmd->recv_buf[cmd->recv_len-2];
	sw2 = cmd->recv_buf[cmd->recv_len-1];
	if(sw1 != 0x90 && sw1 != 0x61)
	{
		ret = sw1;
		ret = ret*256 + sw2;
		cmd->cmd_retcode = ret;
		return cmd->cmd_retcode;
	}
	if(sw1 == 0x61 && sw2 != 0x00)
	{
		TRACE_ERR("×Ô¶¯·¢ÆðÈ¡ºóÐøÊý¾ÝÇëÇó");
		// 61XX ,µ÷Óà 00C0 È¡ºóÐøÊý¾Ý
		memset(&innerCmd,0,sizeof innerCmd);
		innerCmd.send_len = sprintf(szCmd,"00C00000%02X",sw2);
		innerCmd.send_buf = (unsigned char*)szCmd;
		innerCmd.recv_buf = cmd->recv_buf;
		innerCmd.cmd_type = 1; // 16 hex
		ret = cpucard_cmd(dev,&innerCmd,t);
		if(ret==0)
		{
			cmd->recv_len = innerCmd.recv_len;
		}
		cmd->cmd_retcode = innerCmd.cmd_retcode;
		return ret;
	}
	return 0;
}
Пример #25
0
void command7()
{
	pos = hex2dec(inst[pos+1]) * 16 + hex2dec(inst[pos+2]);
	if (pos >= 0xf0)
		pos -= 0xf0;
}
Пример #26
0
void cNPC::processNode( const cElement *Tag )
{
	changed_ = true;
	QString TagName = Tag->name();
	QString Value = Tag->value();

	//<attack min=".." max= "" />
	//<attack>10</attack>
	if( TagName == "attack" )
	{
		if( Tag->hasAttribute("min") && Tag->hasAttribute("max") )
		{
			minDamage_ = hex2dec( Tag->getAttribute("min") ).toInt();
			maxDamage_ = hex2dec( Tag->getAttribute("max") ).toInt();
		}
		else
		{
			minDamage_ = Value.toInt();
			maxDamage_ = minDamage_;
		}
	}

	//<npcwander type="rectangle" x1="-10" x2="12" y1="5" y2="7" />
	//<......... type="rect" ... />
	//<......... type="3" ... />
	//<......... type="circle" radius="10" />
	//<......... type="2" ... />
	//<......... type="free" (or "1") />
	//<......... type="none" (or "0") />
	else if( TagName == "npcwander" )
	{
		if( Tag->hasAttribute("type") )
		{
			QString wanderType = Tag->getAttribute("type");
			if( wanderType == "rectangle" || wanderType == "rect" || wanderType == "3" )
				if( Tag->hasAttribute("x1") &&
					Tag->hasAttribute("x2") &&
					Tag->hasAttribute("y1") &&
					Tag->hasAttribute("y2") )
				{
					wanderType_ = stWanderType( pos().x + Tag->getAttribute("x1").toInt(),
						pos().x + Tag->getAttribute("x2").toInt(),
						pos().y + Tag->getAttribute("y1").toInt(),
						pos().y + Tag->getAttribute("y2").toInt() );
				}
			else if( wanderType == "circle" || wanderType == "4" )
			{
				wanderType_ = stWanderType( pos().x, pos().y, 5 );
				if( Tag->hasAttribute("radius") )
					setWanderRadius( Tag->getAttribute("radius").toInt() );
			}
			else if( wanderType == "free" || wanderType == "2" )
				wanderType_ = stWanderType( enFreely );
			else
				wanderType_ = stWanderType();
		}
	}

	//<shopkeeper>
	//	<sellable>...handled like item-<contains>-section...</sellable>
	//	<buyable>...see above...</buyable>
	//	<restockable>...see above...</restockable>
	//</shopkeeper>
	else if( TagName == "shopkeeper" )
	{
		makeShop();

		for( unsigned int i = 0; i < Tag->childCount(); ++i )
		{
			const cElement *currNode = Tag->getChild( i );

			if( !currNode->childCount() )
				continue;

			unsigned char contlayer = 0;
			if( currNode->name() == "restockable" )
				contlayer = BuyRestockContainer;
			else if( currNode->name() == "buyable" )
				contlayer = BuyNoRestockContainer;
			else if( currNode->name() == "sellable" )
				contlayer = SellContainer;
			else
				continue;

			P_ITEM contItem = this->GetItemOnLayer( contlayer );
			if( contItem != NULL )
				contItem->processContainerNode( currNode );
		}
	}

	else if( TagName == "inherit" )
	{
		QString inheritID;
		if( Tag->hasAttribute( "id" ) )
			inheritID = Tag->getAttribute( "id" );
		else
			inheritID = Value;

		const cElement *element = DefManager->getDefinition( WPDT_NPC, inheritID );
		if( element )
			applyDefinition( element );
	}

	else
		cBaseChar::processNode( Tag );

}
Пример #27
0
void cUObject::processNode( const cElement *Tag )
{
	QString TagName = Tag->name();
	QString Value = Tag->value();

	if( TagName == "name" )
	{
		name_ = Value;
	}
	//<direction>SE</direction>
	else if( TagName == "direction" )
	{
		if( Value == "NE" )
			this->dir_ = 1;
		else if( Value == "E" )
			this->dir_ = 2;
		else if( Value == "SE" )
			this->dir_ = 3;
		else if( Value == "S" )
			this->dir_ = 4;
		else if( Value == "SW" )
			this->dir_ = 5;
		else if( Value == "W" )
			this->dir_ = 6;
		else if( Value == "NW" )
			this->dir_ = 7;
		else if( Value == "N" )
			this->dir_ = 0;
		else
			this->dir_ = Value.toUShort();
	}

	// <tag type="string"> also type="value"
	//	    <key>multisection</key>
	//		<value>smallboat</value>
	// </tag>
	else if( TagName == "tag" )
	{
		QString name = Tag->getAttribute("name");
		QString value = Tag->getAttribute("value");

		if (!name.isNull()) {
			// If there is no value attribute, use the
			// tag content instead.
			if (value.isNull()) {
				value = Tag->text();

				if (value.isNull()) {
					value = "";
				}
			}

            QString type = Tag->getAttribute("type", "string");

			if (type == "int") {
				// If the value is separated by a ,
				// we assume it's a random gradient.
				// If it's separated by ; we assume it's a list of values
				// we should choose from randomly.
				int sep = value.find(',');

				if (sep != -1) {
					int min = hex2dec(value.left(sep)).toInt();
					int max = hex2dec(value.mid(sep + 1)).toInt();

					int value = RandomNum(min, max);
					tags_.set(name, cVariant((int)value));
				} else {
					// Choose a random value from the list.
					if (value.contains(';')) {
						QStringList values = QStringList::split(';', value);
						if (values.size() > 0) {
							value = values[RandomNum(0, values.size() - 1)];
						}
					}

					tags_.set( name, cVariant(hex2dec(value).toInt()));
				}
			} else if (type == "float") {
				tags_.set(name, cVariant(value.toFloat()));
			} else {
				tags_.set(name, cVariant(value));
			}
		}
	}
	// <events>a,b,c</events>
	else if( TagName == "events" )
	{
		if( Value.isEmpty() && eventList_.isEmpty() )
			eventList_ = QString::null;
		else
			eventList_ = eventList_.isEmpty() ? Value : eventList_ + "," + Value;

		recreateEvents();
	}
	else
	{
		if (Value.isEmpty()) {
			Value = "1";
		}

		cVariant variant( Value );
		setProperty( TagName, variant );
	}
}
Пример #28
0
static ssize_t ak4671_control_store(
		struct device *dev, struct device_attribute *attr,
		const char *buf, size_t size)
{
	u8 reg, value = 0;
	int ret = 0;
	struct snd_soc_device *socdev = dev_get_drvdata(dev);
	struct snd_soc_codec *codec = socdev->codec;

	printk("echo [REGISTER NUMBER(HEX)][VALUE(HEX)] > ak4671_control\n");
	printk("ex) echo 030f > ak4671_control\n");

	P("buf = %s", buf);
	P("buf size = %d", sizeof(buf));
	P("buf size = %d", strlen(buf));

	if(sizeof(buf) != 4) {
		printk("input error\n");
		printk("store ex) echo 030f\n");
		return -1;
	}

	ret = hex2dec(buf[0]);
	if (ret == -1) {
		printk("store error.\n");
		return -1;
	}
	reg = ret << 4;

	ret = hex2dec(buf[1]);
	if (ret == -1) {
		printk("store error.\n");
		return -1;
	}
	reg |= (ret & 0xf);

	ret = hex2dec(buf[2]);
	if (ret == -1) {
		printk("store error.\n");
		return -1;
	}
	value = ret << 4;

	ret = hex2dec(buf[3]);
	if (ret == -1) {
		printk("store error.\n");
		return -1;
	}
	value |= (ret & 0xf);

	if (reg == 0xf1) { // path control
		set_registers(codec, value);
	} else if (reg >= 0xe0 && reg <= 0xe5)
		amp_set_register(reg - 0xe0, value);
	else
		ak4671_write(codec, reg, value);
	printk("Set  : reg = 0x%02x, value = 0x%02x\n", reg, value);
	printk("Read : reg = 0x%02x, value = 0x%02x\n", reg, ak4671_read(codec, reg));

	return size;
}
Пример #29
0
int main(int argc, char **argv)
{
	if(argc < 2)
	{
		printf("Please input a hexadecimal number: \n");
		printf("Example: hex2dd 0x8002c2f2 \n");
		printf("This application will convert this hexadecimal number to a dotted-decimal notation\n");
		return 1;
	}
	else
	{
		char *inputNum = argv[1];
		char *hexPrefix = "0x";
		if(0 != strncmp(inputNum, hexPrefix, 2))
		{
			printf("The input number is not hexadecimal !\n");
			return 2;
		}
		else
		{
			printf("Input right !\n");
			// get the real hexadecimal number string
			char hexNum[8];
			int i;
			for(i = 0; i < 8; i++)
			{
				hexNum[i] = 48;  // ASCII: 0
			}

			int j;
			j = (int)strlen(inputNum) - 2;
			if(j > 8)
			{
				for(i = 0; i < 8; i++)
				{
					hexNum[i] = inputNum[i + 2];
				}
			}
			else
			{
				for(i = 0; i < j ; i++)
				{
					hexNum[i] = inputNum[i + 2];
				}
			}

			for(i = 0; i < 8; i++)
			{
				int temp = tolower(hexNum[i]);
				hexNum[i] = temp;
			}

			for(i = 0; i < 8; i++)
			{
				if(!((hexNum[i] >= 48 && hexNum[i] <= 57) || (hexNum[i] >= 97 && hexNum[i] <= 102)))
				{
					printf("%c is not a valid hexadecimal number!\n", hexNum[i]);
					return 3;
				}
			}
				
			// get the ip
			//int ip1 = hex2dec(hexNum[0]) * 16 + hexNum[1];
			int ip[4];
			for (i = 0; i < 4; i++)
			{
				ip[i] = hex2dec(hexNum[2 * i]) * 16 + hex2dec(hexNum[2 * i + 1]);
			}

			// print the IP
			for (i = 0; i < 4; i++)
			{
				printf("%d", ip[i]);
				if(i < 3)
				{
					printf(".");
				}
				else
				{
					printf("\n");
				}
			}
		}
		return 0;
	}
}
Пример #30
0
// function cpucard_cmd
static int KSAPI cpucard_cmd(ks_reader_dev_t *dev,ks_cpu_cmd_t *cmd,KS_CARD_TYPE t) {
    int ret = -1;
    uint8 sw1,sw2;
    char szCmd[256];
    char ats[200] = {0};
    ks_cpu_cmd_t innerCmd;
    cmd->cmd_retcode=0;
    assert(dev != NULL);
    if(!g_dev_hd) {
        strcpy(gErrMsg,"读卡器端口未打开");
        strcpy(cmd->cmd_retmsg,gErrMsg);
        return KS_PORT_NOTOPEN;
    }

    int recvlen;
    if(t == KS_CPUCARD || t == KS_FIXCARD) {
        // 非接触式
        if(dev->cpuport == CARDSLOT_RF) {
            if(cmd->cmd_type == 0) {
                //1
                //char sendBuf[512] = {0};
                unsigned char cmpBuf[100] = {0};
                int cmpLen = 0;
                char recvBuf[512] = {0};
                int recvLen = 0;
                unsigned char* RevTemp = NULL;
                hex2dec("0084000004", 10, cmpBuf, cmpLen);
                if ( !memcmp(cmpBuf, cmd->send_buf, cmpLen) ) {
                    ret = CPUCARD_APDU(g_dev_hd,"0084000004", recvBuf, gErrMsg);
                } else {
                    //dec2hex(cmd->send_buf, cmd->send_len, sendBuf);
                    ret = CPUCARD_APDU(g_dev_hd, (char*)cmd->send_buf, recvBuf, gErrMsg);
                }
                recvLen = strlen(recvBuf);
                RevTemp = cmd->recv_buf;
                hex2dec((char*)recvBuf, recvLen, cmd->recv_buf, (int&)cmd->recv_len);
                cmd->recv_buf = RevTemp;
            } else {
                //2
                unsigned char ucCmd[512];
                int  iCmdLen=0;
                unsigned char* RevTemp = NULL;
                //hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd,iCmdLen);
                if ( !strncmp("00B09500", (char*)cmd->send_buf, 8) ) {
                    strcat((char*)cmd->send_buf, "14");
                }
                ret = CPUCARD_APDU(g_dev_hd,(char*)cmd->send_buf , (char*)ucCmd, gErrMsg);
                iCmdLen = strlen((char*)ucCmd);
                memcpy(cmd->recv_buf,ucCmd,cmd->recv_len);
                RevTemp = cmd->recv_buf;
                hex2dec((char*)ucCmd, iCmdLen, cmd->recv_buf, (int&)cmd->recv_len);
                cmd->recv_buf = RevTemp;
            }
        } else {
            //GET_DECARD_SLOT(dev,dev->cpuport);
            if(cmd->cmd_type == 0) {
                //3
                char recvBuf[512] = {0};
                int recvLen = 0;
                unsigned char* RevTemp = NULL;
                ret = SAMCAR1_APDU(g_dev_hd, (char*)cmd->send_buf, (char*)recvBuf, gErrMsg);
                recvLen = strlen(recvBuf);
                RevTemp = cmd->recv_buf;
                hex2dec((char*)recvBuf, recvLen, cmd->recv_buf, (int&)cmd->recv_len);
                cmd->recv_buf = RevTemp;
            } else {
                //4
                //unsigned char ucCmd[512];
                //int  iCmdLen=0;
                char recvBuf[512] = {0};
                int recvLen = 0;
                unsigned char* RevTemp = NULL;
                //hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd,iCmdLen);
                ret = SAMCAR1_APDU(g_dev_hd, (char*)cmd->send_buf, (char*)recvBuf, gErrMsg);
                recvLen = strlen(recvBuf);
                RevTemp = cmd->recv_buf;
                hex2dec((char*)recvBuf, recvLen, cmd->recv_buf, (int&)cmd->recv_len);
                cmd->recv_buf = RevTemp;
            }
        }
    } else if(t == KS_SIMCARD) {
#if 0
        unsigned char ucCmd[512];
        int  iCmdLen=0;
        ucCmd[0] = 0xA2;
        ucCmd[1] = 0x33;
        if(cmd->cmd_type == 0) {
            memcpy(ucCmd+2,cmd->send_buf,cmd->send_len);
            iCmdLen = cmd->send_len + 2;
            ret = send_rfsim_cmd(ucCmd,iCmdLen,cmd->recv_buf,(unsigned char*)&recvlen);
            cmd->recv_len=recvlen;
        } else {
            hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd+2,iCmdLen);
            iCmdLen += 2;
            ret = send_rfsim_cmd(ucCmd,iCmdLen,cmd->recv_buf,(unsigned char*)&recvlen);
            cmd->recv_len=recvlen;
        }
#else
        char ucCmd[512] = {0};
        char reCmd[512] = {0};
        int  iCmdLen=0;
        int revLen = 0;
        if ( !strncmp( (char*)cmd->send_buf, "805E000207", 10) ) {
            strcat((char*)cmd->send_buf, "08");
            cmd->send_len+=2;
        }

        if ( !strncmp( (char*)cmd->send_buf, "807400021A", 10) ) {
            strcat((char*)cmd->send_buf, "14");
            cmd->send_len+=2;
        }

        if ( !strncmp( (char*)cmd->send_buf, "807C010212", 10) ) {
            strcat((char*)cmd->send_buf, "2B");
            cmd->send_len+=2;
        }


        if ( !strncmp( (char*)cmd->send_buf, "8476000012", 10) ) {
            strcat((char*)cmd->send_buf, "04");
            cmd->send_len+=2;
        }
        if (cmd->cmd_type == 0) {
            unsigned char* RevTemp = NULL;
            RevTemp = cmd->recv_buf;
            dec2hex(cmd->send_buf, cmd->send_len, ucCmd);
            ret = RFSIMCARD_APDU(g_dev_hd, ucCmd,reCmd, gErrMsg);
            hex2dec(reCmd, strlen(reCmd), cmd->recv_buf, (int&)cmd->recv_len);
            cmd->recv_buf = RevTemp;
        } else {
            unsigned char* RevTemp = NULL;
            RevTemp = cmd->recv_buf;
            if ( !strncmp("00B09500", (char*)cmd->send_buf, 8) ) {
                strcat((char*)cmd->send_buf, "14");
            }
            ret = RFSIMCARD_APDU(g_dev_hd, (char*)cmd->send_buf,reCmd, gErrMsg);
            hex2dec(reCmd, strlen(reCmd), cmd->recv_buf, (int&)cmd->recv_len);
            cmd->recv_buf = RevTemp;
        }
#endif
    } else {
        // 接触式
#if 0	//end del by chen 2012-01-16
        if(dev->cpuport == CARDSLOT_RF) {
            return KS_CMDERROR;
        } else {
#endif	//end del by chen 2012-01-16
            //GET_DECARD_SLOT(dev,dev->cpuport);

            if(cmd->cmd_type == 0) {
                //5
                unsigned char cmpBuf1[100] = {0};
                unsigned char cmpBuf2[100] = {0};
                unsigned char cmpBuf3[100] = {0};
                int cmpLen1 = 0;
                int cmpLen2 = 0;
                int cmpLen3 = 0;
                char recvBuf[512] = {0};
                int recvLen = 0;
                char sendBuf[200] = {0};
                char sendLen = 0;
                unsigned char* RevTemp = NULL;
#if 1
                hex2dec("80FA020020", 10, cmpBuf1, cmpLen1);
                if ( !(memcmp(cmpBuf1, cmd->send_buf, cmpLen1)) ) {

                    dec2hex(cmd->send_buf, 37, sendBuf);
                }
                ret = SAMCAR1_APDU(g_dev_hd,sendBuf , recvBuf, gErrMsg);
                //g_flag = 1;
#else
                hex2dec("80FA0200205F3131313131313131000000000000000000000000001EE6B790201508141000", strlen("80FA0200205F3131313131313131000000000000000000000000001EE6B790201508141000"), cmpBuf1, cmpLen1);
                hex2dec("80FA02002020110814000020001111110007D00013880A12D6870000000000000000000000", strlen("80FA02002020110814000020001111110007D00013880A12D6870000000000000000000000"), cmpBuf2, cmpLen2);
                hex2dec("80FA02002000D5C5C8FD350000000000000000000000000000000000000000000000000000", strlen("80FA02002000D5C5C8FD350000000000000000000000000000000000000000000000000000"), cmpBuf3, cmpLen3);
                if ( !memcmp(cmpBuf1, cmd->send_buf, cmpLen1) ) {
                    ret = CPUCARD_APDU(g_dev_hd, "80FA0200205F3131313131313131000000000000000000000000001EE6B790201508141000", recvBuf, gErrMsg);
                } else if ( !memcmp(cmpBuf2, cmd->send_buf, cmpLen2) ) {
                    ret = CPUCARD_APDU(g_dev_hd, "80FA02002020110814000020001111110007D00013880A12D6870000000000000000000000", recvBuf, gErrMsg);
                } else if ( !memcmp(cmpBuf3, cmd->send_buf, cmpLen3) ) {
                    ret = CPUCARD_APDU(g_dev_hd, recvBuf, "80FA02002000D5C5C8FD350000000000000000000000000000000000000000000000000000", gErrMsg);
                } else {
                    //dec2hex(cmd->send_buf, cmd->send_len, sendBuf);
                    ret = CPUCARD_APDU(g_dev_hd, recvBuf, (char*)cmd->send_buf, gErrMsg);
                }
#endif
                recvLen = strlen(recvBuf);
                RevTemp = cmd->recv_buf;
                hex2dec((char*)recvBuf, recvLen, cmd->recv_buf, (int&)cmd->recv_len);
                cmd->recv_buf = RevTemp;
            } else {
                //6
                //unsigned char ucCmd[512];
                //int  iCmdLen=0;
                char recvBuf[512] = {0};
                int recvLen = 0;
                unsigned char* RevTemp = NULL;
                //hex2dec((char*)cmd->send_buf,cmd->send_len,ucCmd,iCmdLen);
                if ( !strncmp((char*)cmd->send_buf, "801A040110", 10) ) {
                    strncpy((char*)cmd->send_buf , "801A440110", 10);
                }
                ret = SAMCAR1_APDU(g_dev_hd, (char*)cmd->send_buf, (char*)recvBuf, gErrMsg);
                recvLen = strlen(recvBuf);
                RevTemp = cmd->recv_buf;
                hex2dec((char*)recvBuf, recvLen, cmd->recv_buf, (int&)cmd->recv_len);
                cmd->recv_buf = RevTemp;
            }
            //}//del by chen 2012-01-16
        }
        if(ret) {
            cmd->cmd_retcode = 0;
            TRACE_ERR("执行指令错误,type["<<t<<"]");
            GetErrMsgByErrCode(ret,gErrMsg);
            strcpy(cmd->cmd_retmsg,gErrMsg);
            return KS_CMDERROR;
        }
        //if(cmd->recv_len < 2)
        //{
        //	cmd->cmd_retcode = 0;
        //	strcpy(cmd->cmd_retmsg,"读卡器读返回数据错误");
        //	cmd->cmd_retcode = 2;
        //	return KS_CMDERROR;
        //}
        sw1 = cmd->recv_buf[cmd->recv_len-2];
        sw2 = cmd->recv_buf[cmd->recv_len-1];
        if(sw1 != 0x90 && sw1 != 0x61) {
            ret = sw1;
            ret = ret*256 + sw2;
            cmd->cmd_retcode = ret;
            TRACE_ERR("执行指令返回状态错误,sw["<<std::hex<<(int)sw1<<" "<<(int)sw2<<"]");
            return cmd->cmd_retcode;
        }
        if(sw1 == 0x61 && sw2 != 0x00) {
            // 61XX ,调用 00C0 取后续数据
            TRACE_ERR("自动获取后续数据");
            memset(&innerCmd,0,sizeof innerCmd);
            innerCmd.send_len = sprintf(szCmd,"00C00000%02X",sw2);
            innerCmd.send_buf = (unsigned char*)szCmd;
            innerCmd.recv_buf = cmd->recv_buf;
            innerCmd.cmd_type = 1; // 16 hex
            ret = cpucard_cmd(dev,&innerCmd,t);
            if(ret==0) {
                cmd->recv_len = innerCmd.recv_len;
            }
            cmd->cmd_retcode = innerCmd.cmd_retcode;
            return ret;
        }
        return 0;
    }

    int KSAPI config_card(ks_reader_dev_t *dev,KS_CPUCARD_TYPE t) {
        return -1;
#if 0
        if(!g_dev_hd)
            return KS_PORT_NOTOPEN;
        if(t == CPUCARD_A)
            return dc_config_card(g_dev_hd,'A');
        else
            return dc_config_card(g_dev_hd,'B');
#endif
    }
    int KSAPI card_type() {
        return g_lastCardType;
    }
    void KSAPI set_logger(void *para) {
        KS_Log_Tracer::instance((KS_Log_Tracer*)para);
    }