Example #1
0
/*******************************************************************
 作	 者: 麦浩卿
 版	 权: 深圳新国都股份有限公司
 函数功能:bcd金额转成字符串金额
 入口参数:
 返 回 值:
 备	 注:
 ********************************************************************/
s32 BcdAmount2AscAmount(u8 *heBcdAmount, u8 *asAmount) {
	s32 i = 0;
	u8 asTmp[14] = { 0 };
	u8 asPoint[4] = ".";
	memset(asAmount, 0x00, 14);
	while (i < 5) {
		if (heBcdAmount[i] != 0x00)
			break;
		i++;
	}
	//Trace("Mai","1、金额: %s \r\n", asAmount);
	if (i != 5) {
		sdkBcdToAsc(asTmp, &heBcdAmount[i], 5 - i);
		if (asTmp[0] == '0')
			strcpy(asAmount, &asTmp[1]);
		else
			strcpy(asAmount, asTmp);
	} else {
		asAmount[0] = '0';
	}
	//Trace("Mai","2、金额: %s \r\n", asTmp);
	//Trace("Mai","2、金额: %s \r\n", asAmount);
	//if(heBcdAmount[5] != 0x00)
	//{
	sdkBcdToAsc(&asPoint[1], &heBcdAmount[5], 1);
	strcat(asAmount, asPoint);
	//}
	//Trace("Mai","3、金额: %s \r\n", asAmount);
	return SDK_OK;

}
Example #2
0
/*****************************************************************************
 ** Descriptions:
 ** Parameters:    	u8 *asTag
 u8 *pbuf
 u16 len
 ** Returned value:
 ** Created By:		huacong  2016.03.11
 ** Remarks:
 *****************************************************************************/
void DebugPrint(u8 *asTag, u8 *pbuf, u16 len) {
	u16 i = 0;
	u8 temp[512];

	if (sdkIsVisibleStr(pbuf, len)) {
		Log(asTag, "[%s]", pbuf);

	} else {
		memset(temp, 0, sizeof(temp));
		sdkBcdToAsc(temp, pbuf, len);
		Log(asTag, "[%s]", temp);
	}
}
Example #3
0
/*****************************************************************************
 ** Descriptions:	回写发送包
 ** Parameters:    	SDK_8583_ST8583 *pst8583Bag
 ** Returned value:
 ** Created By:		huacong  2016.03.04
 ** Remarks:
 *****************************************************************************/
s32 WriteSendBag(char *strTag, SDK_8583_ST8583 *pstBag8583) {
	u8 outdata[2048] = { 0 };
	u8 aucTempData[8] = { 0 };
	if (pstBag8583 == NULL) {
		return false;
	}

	Log("zbq", "pstBag8583->nBagLen = %d", pstBag8583->nBagLen);

//    sdkU16ToBcd(&outdata, pstBag8583->nBagLen, 2);
	sdkU16ToHex(outdata, pstBag8583->nBagLen, 2);
	memcpy(&outdata[0] + 2, pstBag8583->ucBagData, pstBag8583->nBagLen);

	memset(aucTempData, 0, 8);
	sdkBcdToAsc(aucTempData, outdata, 2);
	Log("zbq", "BcdToAsc len = %s", aucTempData);

//    ProviderSetTagValue(TAG_8583_SENDBAG,outdata,pstBag8583->nBagLen+2);
	if (ProviderSetTagValue(strTag, outdata, pstBag8583->nBagLen + 2) != 1) {
		return SDK_ERR;
	}

	return SDK_OK;
}
Example #4
0
/*****************************************************************************
 函 数 名  : Trace8583Bag
 功能描述  : 显示8583报文域信息
 输入参数  : u8 *asTitle
 SDK_8583_ST8583 *pstBag8583
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
 1.日    期   : 2012年12月25日
 作    者   : zj
 修改内容   : 新生成函数

 *****************************************************************************/
void Trace8583Bag(u8 *asTitle, SDK_8583_ST8583 *pstBag8583) {
#ifndef XGD_SDK_DEBUG
	return;
#else
	u32 i;
	u8 asBuf[STOREBAGLEN];
	u8 asBuf1[STOREBAGLEN * 2];
	s32 siLen = 0;

	for (i = 0; i <= 64; i++)
	{
		if (sdk8583IsDomainExist(pstBag8583, i))
		{
			memset(asBuf, 0, sizeof(asBuf));
			siLen = 0;

			siLen = GetFieldData(pstBag8583, i, asBuf, sizeof(asBuf));
			if (siLen > 0)
			{
				if (sdkIsVisibleStr(asBuf, siLen))
				{
//                    Trace(asTitle, "[%03u][%03d][%s]\r\n", i, siLen, asBuf);
				}
				else
				{
					//可能是不是ASCII内容,转换为HEX显示,最后标注*号区分
					memset(asBuf1, 0, sizeof(asBuf1));
					sdkBcdToAsc(asBuf1, asBuf, siLen);
//                    Trace(asTitle, "[%03u][%03d][%s]*\r\n", i, siLen, asBuf1);
				}
			}

		}
	}
#endif
}
Example #5
0
/*****************************************************************************
** Descriptions:	组定位报文
** Parameters:          struct _TradeData *pstSaleData
                               u8 *pheSendData
** Returned value:
** Created By:		lilin2012.08.01
** Remarks:
*****************************************************************************/
s32 FormLocationBag(SDK_8583_ST8583 *pstSendBag8583)
{
	u8 ucTradeId;//消息ID
	u8 buf[64] = {0};
	int nRet;
	s32 len = 0,i=0;
	u16 length = 0;

	s32 tmplen = 0;
	u8 temp[256] = {0};
	u8 str[256] = {0};
	u8 aucTempData[256] = { 0 };	// 暂存数据

	struct _KeySystemParam *pst_KeySystemParam = &gstAppSetting.stKeySystemParam;
	struct _SYS *pst_SYS = &gstSys;
	struct _TradeData *pstTradeData = &gstTradeData;

	ucTradeId = pstTradeData->ucTradeId;

    if (pstSendBag8583 == NULL || pstTradeData == NULL)
    {
        return false;
    }
     nRet = FormPublicSend(pstSendBag8583,pstTradeData, "0020000000C00052");
     if(nRet <= 0)
        return nRet;
     SetFieldData(pstSendBag8583, SDK_8583_FIELD_MSG, "0800", 4);

    //58域 定位
	memset(str, 0, sizeof(str));
	length = 0;
	memset(temp, 0, sizeof(temp));
	if ((len = ProviderGetTagValue(TAG_JINGDU, temp)) > 0) {
	memcpy(str, "GA", 2);
	Log("zbq","11111");
	length = length + 2;
	sprintf(str+length,"%03d", len);
	Log("zbq","22222");
	length = length + 3;
	memcpy(str+length, temp, len);
	Log("zbq","33333");
	length = length + len;
	} else {
	return SDK_ERR;
	}
	memset(temp, 0, sizeof(temp));
	if ((len = ProviderGetTagValue(TAG_WEIDU, temp)) > 0) {
	memcpy(str+length, "GB", 2);
	Log("zbq","44444");
	length = length + 2;
	sprintf(str+length,"%03d", len);
	Log("zbq","55555");
	length = length + 3;
	memcpy(str+length, temp, len);
	Log("zbq","666666");
	length = length + len;
	} else {
	return SDK_ERR;
	}
	memset(temp,0,256);
	sdkBcdToAsc(temp,str,length);
	Log("zbq","58域 =  %s ", temp);
	SetFieldData(pstSendBag8583, 58, str, length);

     //60域
    {
//        Log("wangb","pstTradeData->stSysParam.asBatchNo is %s ",pstTradeData->stSysParam.asBatchNo);
        memset(temp, 0, sizeof(temp));
        strcat(temp, "00");  //60.1
        strcat(temp,gstSys.asBatchNo);   //60.2批次号

        //60.3网络管理信息码
        strcat(temp, "998");
        SetFieldData(pstSendBag8583, 60, temp, strlen(temp));
    }

    //63域
	memset(temp, 0, sizeof(temp));
	sprintf(temp, "%03d", gstTradeData.usManNo);
	i = strlen(temp);
//	if (i < 3)
//	{
//		temp[2] = 0x20;
//	}

	/*=======BEGIN: huangxin 2015.01.25  13:7 modify===========
            在密钥下载交易中,上送终端型号(厂商名|型号)。
            该域由两个子域构成,具体描述如下:
            63.2.1   保留域   固定值"  "
            63.2.2   终端型号信息  ANS20
            命名规范
            厂商缩写+"|"+产品型号,总长度不超过20位,其中字符要求为英文
            和数字,不予许其他字符,以竖线分割。
            例如:00LANDI |EPT5630
	============================== END======================== */
	memcpy(temp+i, " XGD|", 5);
	i += 5;
//        rlt = sdkSysGetMachineCode(NULL);
//        ConverMachineCode(rlt, &temp[i]);
	memcpy(temp+i, "G870 ", 5);
	Log("zbq","63 Filed = %s",temp);
	SetFieldData(pstSendBag8583, 63, temp, strlen(temp));

	//重新改写报文头
	ReConfigBag8583(pstSendBag8583);

#ifdef EncriptBagControl
	nRet = WriteSendBag(TAG_8583_SENDBAG,pstSendBag8583);
	//全报文加密
	EncryptAllMsgByHX(1, pstSendBag8583->ucBagData, &pstSendBag8583->nBagLen);
#endif

	return pstSendBag8583->nBagLen;
}
Example #6
0
/****************************************************************************
*Descriptions:just like main face,Standby interface.show welcome infomation
*Input:void
*Output:void
*Return:void
*Date:20140423
*Author:song
*Remark:none
****************************************************************************/
void DemoABFCardModule(void)
{
    s32 siRet = 0;
    u8 ucInCardType = 0x01|0x02|0x04;//01:A/B 02:M 04:C
    u8 szcardtype[4] = {0};
    u8 szserialnum[32] = {0};
    u8 szcid[12] = {0};
    u8 szother[32] = {0};
    u8 szbuf[32] = {0};
    s32 timerid = 0;
	s32 TimerOver = AUTORET_TIME;
    s32 key = 0;
    u32 len = 0;

    sdkRfSetType(1);//set internal RF device status
    siRet = sdkRfPowerOn();//power on
    if(SDK_OK != siRet)
    {
        DemoDisplayInfo(SDK_LCD_LINE3, (u8 *)"RF POWER ON ERROR", M_UCTR);
    }
    siRet = sdkRfReset();//reset
    if(SDK_OK != siRet)
    {
        DemoDisplayInfo(SDK_LCD_LINE3, (u8 *)"RF RESET ERROR", M_UCTR);
    }
    timerid = sdkSysGetTimerCount();
    while(1)
    {
        DemoDisplayInfo(SDK_LCD_LINE3, (u8 *)"PLS WAVE CARD:", L_UCTR);
        if(sdkRfSearchCard(ucInCardType, szcardtype, szserialnum, szcid, szother)== SDK_OK)
        {
            sdkLcdClear();
            sprintf((s8 *)szbuf,"CARD TYPE:%s",szcardtype);
            sdkLcdFillRow(SDK_LCD_LINE2, 0, szbuf, L_UCTR);
            memset(szbuf,0,sizeof(szbuf));
            sdkBcdToAsc(&szserialnum[1], szserialnum[0], szbuf);
            sdkLcdFillRow(SDK_LCD_LINE3, 0, (u8 *)"SERIAL NUMBER:", L_UCTR);
            sdkLcdFillRow(SDK_LCD_LINE4, 0, szbuf, R_UCTR);
            sdkLcdFillRow(SDK_LCD_LINE5, 0, (u8 *)"[ENTER]->NEXT", M_UCTR);
            sdkLcdBrushScreen();
            key = sdkKbWaitKey(SDK_KEY_MASK_ENTER | SDK_KEY_MASK_CANCEL, AUTORET_TIME);
            if(key != SDK_KEY_ENTER)
            {
                return DemoEnterCardModule();
            }
            else
            {
                break;
            }
        }
        if (sdkSysGetTimerEnd(timerid, TimerOver))
		{
			DemoShowMainMenu();
			return;
		}
    }
    memset(szbuf,0,sizeof(szbuf));
    siRet = sdkRfSendData((u8 *)"\x06\x00\xFF\xFF\x01\x00", 6, szbuf, &len);
    if(SDK_OK == siRet)
    {
        sdkLcdClear();
        sdkLcdFillRow(SDK_LCD_LINE3, 0, (u8 *)"SEND DATA OK!", M_UCTR);
        sdkLcdFillRow(SDK_LCD_LINE4, 0, (u8 *)"PLS MOVE YOUR CARD!", M_UCTR);
        sdkLcdFillRow(SDK_LCD_LINE5, 0, (u8 *)"[ENTER]->NEXT", M_UCTR);
        sdkLcdBrushScreen();
    }
    else
    {
        sdkLcdClear();
        sdkLcdFillRow(SDK_LCD_LINE3, 0, (u8 *)"SEND DATA ERROR!", M_UCTR);
        sdkLcdFillRow(SDK_LCD_LINE4, 0, (u8 *)"PLS MOVE YOUR CARD!", M_UCTR);
        sdkLcdFillRow(SDK_LCD_LINE5, 0, (u8 *)"[ENTER]->NEXT", M_UCTR);
        sdkLcdBrushScreen();
    }
    key = sdkKbWaitKey(SDK_KEY_MASK_ENTER | SDK_KEY_MASK_CANCEL, AUTORET_TIME);
    if(key != SDK_KEY_ENTER)
    {
        return DemoEnterCardModule();
    }
    else
    {
        siRet = sdkRfPowerDown();
        if(SDK_OK == siRet)
        {
            sdkLcdClear();
            sdkLcdFillRow(SDK_LCD_LINE5, 0, (u8 *)"POWER DOWN OK!", M_UCTR);
            sdkLcdBrushScreen();
        }
        else
        {
            sdkLcdClear();
            sdkLcdFillRow(SDK_LCD_LINE5, 0, (u8 *)"POWER DOWN ERROR!", M_UCTR);
            sdkLcdBrushScreen();
        }
    }
    return DemoWaitKeyToBack(DemoEnterCardModule);
}
Example #7
0
/*****************************************************************************
 函 数 名  : EncryptMagData
 功能描述  : 磁道数据加密
 输入参数  : u8 *pheDataBuf
 s32 *iDataLen
 输出参数  : 无
 返 回 值  :
 调用函数  :
 被调函数  :

 修改历史      :
 1.日    期   : 2012年12月26日
 作    者   : wuzhonglin
 修改内容   : 新生成函数

 *****************************************************************************/
s32 EncryptMagData(struct _TradeData *pstTradeData, SDK_8583_ST8583 *pstSendBag) {
	u8 tmp[256], buf[128], outbuf[128] = { 0 };
	s32 iLen, pOutLen;
	s32 slt = SDK_OK;
	u8 *pBuf;
	bool bIsEncryp = false;
// && pstTradeData->stKeySystemParam.bIsMk3Des
//    iLen = GetFieldData(pstSendBag, 35, tmp, sizeof(tmp));
//    && pstTradeData->stKeySystemParam.bIsMk3Des
	if (gstAppSetting.stKeySystemParam.bIsSupportTdk
			&& (sdk8583IsDomainExist(pstSendBag, 35)
					|| sdk8583IsDomainExist(pstSendBag, 36))) {
		memset(tmp, 0, sizeof(tmp));
		iLen = GetFieldData(pstSendBag, 35, tmp, sizeof(tmp));
		Log("wangb", "Field35_1=%s", tmp);
		if (iLen > 16) {
//            sdkAscToBcd(buf, tmp, iLen);
//            pBuf = &buf[(iLen + 1) / 2 - 9];
			//加密

			//   slt = sdkPEDWkDes(pstTradeData->stKeySystemParam.uiTdkIndex, SDK_PED_DES_TRIPLE, SDK_PED_ENCRYPT, pBuf, pBuf);
			slt = ProviderTrackDataEncrypt(tmp, outbuf, &pOutLen);   //Fixme
			if (slt != SDK_OK) {
				return SDK_ERR;
			}
//          sdkBcdToAsc(tmp, outbuf, (pOutLen + 1) / 2);
			sdkBcdToAsc(tmp, outbuf, pOutLen);
			Log("wangb", "Field35_2 %s", tmp);
			sdk8583ClrField(pstSendBag, 35);
			SetFieldData(pstSendBag, 35, tmp, iLen);

			bIsEncryp = true;
		}
		memset(tmp, 0, sizeof(tmp));
		memset(outbuf, 0, sizeof(outbuf));
		iLen = GetFieldData(pstSendBag, 36, tmp, sizeof(tmp));
		if (iLen > 16) {
//
//            sdkAscToBcd(buf, tmp, iLen);
//            pBuf = &buf[(iLen + 1) / 2 - 9];
			//加密
//            slt = sdkPEDWkDes(pstTradeData->stKeySystemParam.uiTdkIndex, SDK_PED_DES_TRIPLE, SDK_PED_ENCRYPT, pBuf, pBuf);
			slt = ProviderTrackDataEncrypt(tmp, outbuf, &pOutLen);
			if (slt != SDK_OK) {
				return SDK_ERR;
			}
//          sdkBcdToAsc(tmp, buf, (iLen + 1) / 2);
			sdkBcdToAsc(tmp, outbuf, pOutLen);
			sdk8583ClrField(pstSendBag, 36);
			SetFieldData(pstSendBag, 36, tmp, iLen);
			bIsEncryp = true;
		}
	}
	if (bIsEncryp) {
		//重新设置53域TRACK-ENCRYPTION-USED
		iLen = 0;
		memset(tmp, 0, sizeof(tmp));
		iLen = GetFieldData(pstSendBag, 53, tmp, sizeof(tmp));
		if (iLen >= 3) {
			tmp[2] = '1';
			sdk8583ClrField(pstSendBag, 53);
			SetFieldData(pstSendBag, 53, tmp, iLen);
		} else {
			strcpy(tmp, "001");
			if (gstAppSetting.stKeySystemParam.bIsMk3Des)        // 3des
			{
				tmp[1] = '6';
			}
			SetFieldData(pstSendBag, 53, tmp, strlen(tmp));
		}
	}
	Log("wangb", "pucMacBuf3 is %s", tmp);
	return SDK_OK;
}