添加读取市民卡号和卡有效期
diff --git a/g401302/project/g401302.uvopt b/g401302/project/g401302.uvopt
index 156579a..dd76748 100644
--- a/g401302/project/g401302.uvopt
+++ b/g401302/project/g401302.uvopt
@@ -173,7 +173,7 @@
<Type>0</Type>
<LineNumber>296</LineNumber>
<EnabledFlag>0</EnabledFlag>
- <Address>134296172</Address>
+ <Address>134296380</Address>
<ByteObject>0</ByteObject>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
@@ -186,24 +186,9 @@
<Bp>
<Number>1</Number>
<Type>0</Type>
- <LineNumber>623</LineNumber>
- <EnabledFlag>0</EnabledFlag>
- <Address>134295132</Address>
- <ByteObject>0</ByteObject>
- <ManyObjects>0</ManyObjects>
- <SizeOfObject>0</SizeOfObject>
- <BreakByAccess>0</BreakByAccess>
- <BreakIfRCount>1</BreakIfRCount>
- <Filename></Filename>
- <ExecCommand></ExecCommand>
- <Expression>\\G401302_flow\../../supwisdom/sp_consume.c\623</Expression>
- </Bp>
- <Bp>
- <Number>2</Number>
- <Type>0</Type>
<LineNumber>206</LineNumber>
<EnabledFlag>1</EnabledFlag>
- <Address>134291598</Address>
+ <Address>134291662</Address>
<ByteObject>0</ByteObject>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
@@ -731,10 +716,10 @@
<FileType>1</FileType>
<tvExp>0</tvExp>
<Focus>0</Focus>
- <ColumnNumber>0</ColumnNumber>
+ <ColumnNumber>1</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>25</TopLine>
- <CurrentLine>25</CurrentLine>
+ <TopLine>116</TopLine>
+ <CurrentLine>132</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\..\supwisdom\sp_card.c</PathWithFileName>
<FilenameWithoutPath>sp_card.c</FilenameWithoutPath>
@@ -747,7 +732,7 @@
<Focus>0</Focus>
<ColumnNumber>0</ColumnNumber>
<tvExpOptDlg>0</tvExpOptDlg>
- <TopLine>196</TopLine>
+ <TopLine>186</TopLine>
<CurrentLine>208</CurrentLine>
<bDave2>0</bDave2>
<PathWithFileName>..\..\supwisdom\sp_communicate.c</PathWithFileName>
diff --git a/g401302/project/g401302.uvproj b/g401302/project/g401302.uvproj
index eb083a6..181c81c 100644
--- a/g401302/project/g401302.uvproj
+++ b/g401302/project/g401302.uvproj
@@ -63,7 +63,7 @@
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
</BeforeCompile>
<BeforeMake>
- <RunUserProg1>1</RunUserProg1>
+ <RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name>cmd /c gitver.bat</UserProg1Name>
<UserProg2Name></UserProg2Name>
diff --git a/supwisdom/sp_card.c b/supwisdom/sp_card.c
index 5c6796a..c88bfa9 100644
--- a/supwisdom/sp_card.c
+++ b/supwisdom/sp_card.c
@@ -52,7 +52,7 @@
if(!card_cpu_mode())
{
Delay_ms(200);
- if(sp_select_sfi("\x3f\x00") == 0)
+ if(sp_select_sfi("\x3f\x00") == 0)
{
sp_select_adf();
cardpcd->cardphyid[0] = snr[3];
@@ -67,7 +67,7 @@
else
{
cardpcd->cardtype = TAG_TYPE_UNKONWN;
- return 1;
+ return 1;
}
}
return 1;
@@ -78,11 +78,57 @@
return card_cpu_exist();
}
+static uint16 sp_select_adf15()
+{
+ uint16 ret = 0;
+ uint8* temp_buff = NULL;
+ uint8 buff_len = 0;
+ uint8 cmd_buff[] = {"\x00\xA4\x00\x00\x02\x3F\x00"};
+ ret = card_cpu_exchange(cmd_buff, sizeof(cmd_buff)-1, 0, &temp_buff, &buff_len);
+ if(ret != RETCODE_OK)
+ {
+ return ret;
+ }
+ return 0;
+}
+
+static uint16 sp_read_binary_file(uint8 out[])
+{
+ uint16 ret = 0;
+ uint8* temp_buff = NULL;
+ uint8 buff_len = 0;
+ uint8 cmd_buff[5] = {"\x00\xB0\x95\x00\x47"};
+ ret = card_cpu_exchange(cmd_buff, sizeof(cmd_buff), 0, &temp_buff, &buff_len);
+ if(ret != RETCODE_OK)
+ {
+ return ret;
+ }
+ MEMCPY(out, temp_buff, buff_len);
+ return 0;
+}
static uint16 sp_cpu_read(sp_card_t* card)
{
uint16 ret = 0;
+ uint8 buff[72];
+ uint8 offset = 0;
+ MEMCLEAR(buff, sizeof(buff));
+ ret = sp_select_adf15();
+ if(ret)
+ {
+ return ret;
+
+ }
+ ret = sp_read_binary_file(buff);
+ if(ret)
+ {
+ return ret;
+ }
MEMCLEAR(card->citizen_cardno, sizeof(card->citizen_cardno));
- MEMCPY(card->expiredate, "\x20\x22\x08\x02", 4);
+ offset += 31;
+ MEMCPY(card->citizen_cardno, buff+offset, sizeof(card->citizen_cardno));
+ offset += 12;
+ offset += 18;
+ MEMCPY(card->expiredate, buff+offset, 4);
return ret;
}
diff --git a/supwisdom/sp_communicate.c b/supwisdom/sp_communicate.c
index baf378c..a86f503 100644
--- a/supwisdom/sp_communicate.c
+++ b/supwisdom/sp_communicate.c
@@ -121,7 +121,7 @@
cw_pack_map_size(&pack,4);
sp_pack_put_bin(&pack, PK_BIN_CARDPHYID, card->cardphyid, 4);
- sp_pack_put_bin(&pack, PK_BIN_CITIZEN_CARDNO, card->citizen_cardno, 12);
+ sp_pack_put_bin(&pack, PK_BIN_CITIZEN_CARDNO, card->citizen_cardno+8, 4);
sp_pack_put_bin(&pack, PK_BIN_DEVPHYID, pos->devphyid, 4);
sp_pack_put_bin(&pack, PK_BIN_DEVTIME, ctime, 6);
diff --git a/supwisdom/sp_consume.c b/supwisdom/sp_consume.c
index 587e2a4..703c00c 100644
--- a/supwisdom/sp_consume.c
+++ b/supwisdom/sp_consume.c
@@ -240,12 +240,6 @@
ret = RC_CARD_INVALID;
return ret;
}
- ret = sp_card_authentication(pos, card);
- if(ret)
- {
- ret = RC_CARD_AUTHENTICATION;
- return ret;
- }
if(pos->load_para_status)
{
return pos->load_para_status;
@@ -266,6 +260,12 @@
{
return ret;
}
+ ret = sp_card_authentication(pos, card);
+ if(ret)
+ {
+ ret = RC_CARD_AUTHENTICATION;
+ return ret;
+ }
ret = sp_prepare_behalf_transdtl(pos, card, &record);
if(ret)
{
@@ -590,30 +590,31 @@
uint8 keycode = SP_KEY_NONE;
keycode = sp_get_key();
//ÔÚ¿¨Ïû·ÑÔÝÍ£Çé¿öϰ´ÈÎÒâ¼üΪ½áÊøµ±Ç°Ïû·Ñ״̬
- if(keycode >= SP_KEY_0 && keycode <= SP_KEY_ENTER && pos->cardState.cur_state == STATE_NONE
+ if(keycode >= SP_KEY_0 && keycode <= SP_KEY_ENTER
+ && pos->cardState.cur_state == STATE_NONE
&& cardWorkState->current_state == CARDWORKSTATUS_PAUSE && pos->paymode == PAYMODE_CARD)
{
- cardWorkState->current_state = CARDWORKSTATUS_STOPPING;
- return;
+ cardWorkState->current_state = CARDWORKSTATUS_STOPPING;
+ return;
}
//Ïû·Ñģʽ³õʼ»¯×´Ì¬Ï°´È·ÈϼüÑ¡Ôñ¶þάÂëÏû·Ñ
if((keycode == SP_KEY_ENTER) && (pos->paymode == PAYMODE_INIT))
{
cardWorkState->current_state = CARDWORKSTATUS_NONE;
pos->paymode = PAYMODE_QRCODE;
- return;
+ return;
}
//¶þάÂëģʽϰ´È¡Ïû¼üΪֹͣ¹¤×÷
if((pos->paymode == PAYMODE_QRCODE) && (keycode == SP_KEY_CLEAR))
{
cardWorkState->current_state = CARDWORKSTATUS_STOPPING;
- return;
+ return;
}
//°´0¼ü½øÈëÉ豸²Ù×÷½çÃæ
if(keycode == SP_KEY_0 && (pos->paymode == PAYMODE_INIT))
{
cardWorkState->current_state = CARDWORKSTATUS_SET_DEV;
- return;
+ return;
}
}