Index: libyc_msr.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: libyc_msr_single.a
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: yc_msr.h
===================================================================
--- /YC3121_SDK/fw/sdk/yc_msr/yc_msr.h	(revision 784)
+++ /YC3121_SDK/fw/sdk/yc_msr/yc_msr.h	(working copy)
@@ -35,7 +35,7 @@
 #define INVALID_ADDR		1		//track1 or track2 or track3 address invalid
 #define	PARITY_ERR			2		//parity  error
 #define	LENGTH_ERR			3		//track data length error
-#define	TRACK_NO_DATA		4		//track have no data that to readed.
+#define	TRACK_NO_DATA		4		//track have no data that to decode.
 #define	HAVE_NO_ZERO		5
 
 
@@ -196,6 +196,14 @@
 
 
 /**
+ * @brief	MSR track select(call after MSR_Init)
+ * @param track :TRACK_SELECT_1, TRACK_SELECT_2 or TRACK_SELECT_3 
+ * @return none
+**/
+void MSR_track_select(int track);
+
+
+/**
  * @brief  get MSR lib version
  * @param  none
  * @return lib version:
Index: yc_msr.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_msr/yc_msr.c	(revision 784)
+++ /YC3121_SDK/fw/sdk/yc_msr/yc_msr.c	(working copy)
@@ -26,7 +26,7 @@
 uint8_t MSR_Decode(uint8_t * InputBuf,int InPutLen,uint8_t head,uint8_t end,int track,int CodingBits,uint8_t* OutputBuf,int* OutLen);
 
 //raw data buffer near full size
-#define RBUF_NEARFULL_SIZE (((MAX_TRACK_RAW_DATA_SZIE)<256)?(MAX_TRACK_RAW_DATA_SZIE-1):255)
+#define RBUF_NEARFULL_SIZE (((MAX_TRACK_RAW_DATA_SZIE)<256)?(MAX_TRACK_RAW_DATA_SZIE-55):200)
 
 unsigned char T1data_buf[MAX_TRACK_RAW_DATA_SZIE] ={0};
 unsigned char T2data_buf[MAX_TRACK_RAW_DATA_SZIE] ={0};
@@ -310,6 +310,7 @@
 
 	if(0 == InPutLen)
 	{
+		*OutLen=0;
 		return TRACK_NO_DATA;          
 	}
 	#ifdef MSR_PRINT_RAW_DATA
@@ -358,7 +359,7 @@
 		if( HeadIndex == -1)
 		{
 			*OutLen =0;
-			rtnvalue = PARITY_ERR;
+			rtnvalue = TRACK_NO_DATA;
 		}
 		while(bufindex < InPutLen)//binary to char
 		{
@@ -475,7 +476,7 @@
 	if(HeadIndex == -1)
 	{
 		*OutLen = 0;
-		return PARITY_ERR;
+		return TRACK_NO_DATA;
 	}
 		
 	bufindex = HeadIndex>>8;
@@ -580,6 +581,7 @@
 			}
 		}			
 	}
+	*OutLen=0;
 	rtnvalue = PARITY_ERR;
 	return rtnvalue;
 }
@@ -590,7 +592,7 @@
 	int i; 
 	*tflag = 0;
 	*cfmt =0;
-	 memset((char*)ptrack,0,sizeof(ptrack));
+	 memset((char*)ptrack,0,sizeof(track_data));
 
  	if(options&TRACK_SELECT_1||options&TRACK_SELECT_ALL)   //选择磁道一或全部磁道
  	{
@@ -871,13 +873,13 @@
 void MCR_ADCEnable(void)
 {
 	SYSCTRL_HWCTRL(9) |= (1<<DA_MCR_PGA_LDO_EN_BIT);
-	delay_us(1);
+	delay_us(10);
 	SYSCTRL_HWCTRL(7) |= (1<<DA_MCR_PGA_VCM_GEN_EN_BIT);
-	delay_us(1);
+	delay_us(10);
 	SYSCTRL_HWCTRL(5) |= (1<<DA_MCR_PGA0_EN_BIT);
 	SYSCTRL_HWCTRL(6) |= (1<<DA_MCR_PGA1_EN_BIT)|(1<<DA_MCR_PGA2_EN_BIT);
 	SYSCTRL_HWCTRL(1) |= ((1<<DA_MCR_ADC_EN_BIASGEN_BIT)|(1<<DA_MCR_ADC_EN_CONSTGM_BIT)|(1<<DA_MCR_ADC_EN_REG_BIT));
-	delay_us(15);
+	delay_us(150);
 	SYSCTRL_HWCTRL(1) |= (1<<DA_MCR_ADC_EN_BIT);
 }
 void ISO7811_Init(void)
@@ -933,6 +935,39 @@
 	}
 }
 
+void MSR_track_select(int track)
+{
+    MSR_ENABLE(DISABLE);
+    if((track&TRACK_SELECT_1)||(track&TRACK_SELECT_ALL))
+    {
+        SYSCTRL_HWCTRL(5) |= (1<<DA_MCR_PGA0_EN_BIT);
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(5) &= ~(1<<DA_MCR_PGA0_EN_BIT);
+    }
+    if((track&TRACK_SELECT_2)||(track&TRACK_SELECT_ALL))
+    {
+        SYSCTRL_HWCTRL(6) |= (1<<DA_MCR_PGA1_EN_BIT);
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(6) &= ~(1<<DA_MCR_PGA1_EN_BIT);
+    }
+    if((track&TRACK_SELECT_3)||(track&TRACK_SELECT_ALL))
+    {
+        SYSCTRL_HWCTRL(6) |= (1<<DA_MCR_PGA2_EN_BIT);
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(6) &= ~(1<<DA_MCR_PGA2_EN_BIT);
+    }
+    delay_ms(1);
+    MSR_ENABLE(ENABLE);
+    MSR_ENABLE(DISABLE);
+    MSR_ENABLE(ENABLE);
+}
+
 
 void ISO7811_PeakWidth_CONFIG(int track, uint32_t thld_init )
 {
@@ -1097,7 +1132,7 @@
 	ISO7811_CTRL = (ISO7811_CTRL&CLEAR_CHANNEL_SEL) |temp;
 }
 
-#define MSR_LIB_VERSION 0x00010003
+#define MSR_LIB_VERSION 0x00010008
 uint32_t MSR_GetVersion(void)
 {
     return MSR_LIB_VERSION;
Index: yc_msr.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: yc_msr_single.c
===================================================================
--- /YC3121_SDK/fw/sdk/yc_msr/yc_msr_single.c	(revision 784)
+++ /YC3121_SDK/fw/sdk/yc_msr/yc_msr_single.c	(working copy)
@@ -26,7 +26,7 @@
 uint8_t MSR_Decode(uint8_t * InputBuf,int InPutLen,uint8_t head,uint8_t end,int track,int CodingBits,uint8_t* OutputBuf,int* OutLen);
 
 //raw data buffer near full size
-#define RBUF_NEARFULL_SIZE (((MAX_TRACK_RAW_DATA_SZIE)<256)?(MAX_TRACK_RAW_DATA_SZIE-1):255)
+#define RBUF_NEARFULL_SIZE (((MAX_TRACK_RAW_DATA_SZIE)<256)?(MAX_TRACK_RAW_DATA_SZIE-55):200)
 
 unsigned char T1data_buf[MAX_TRACK_RAW_DATA_SZIE] ={0};
 unsigned char T2data_buf[MAX_TRACK_RAW_DATA_SZIE] ={0};
@@ -310,6 +310,7 @@
 
 	if(0 == InPutLen)
 	{
+		*OutLen=0;
 		return TRACK_NO_DATA;          
 	}
 	#ifdef MSR_PRINT_RAW_DATA
@@ -358,7 +359,7 @@
 		if( HeadIndex == -1)
 		{
 			*OutLen =0;
-			rtnvalue = PARITY_ERR;
+			rtnvalue = TRACK_NO_DATA;
 		}
 		while(bufindex < InPutLen)//binary to char
 		{
@@ -475,7 +476,7 @@
 	if(HeadIndex == -1)
 	{
 		*OutLen = 0;
-		return PARITY_ERR;
+		return TRACK_NO_DATA;
 	}
 		
 	bufindex = HeadIndex>>8;
@@ -580,6 +581,7 @@
 			}
 		}			
 	}
+	*OutLen=0;
 	rtnvalue = PARITY_ERR;
 	return rtnvalue;
 }
@@ -590,7 +592,7 @@
 	int i; 
 	*tflag = 0;
 	*cfmt =0;
-	 memset((char*)ptrack,0,sizeof(ptrack));
+	 memset((char*)ptrack,0,sizeof(track_data));
 
  	if(options&TRACK_SELECT_1||options&TRACK_SELECT_ALL)   //选择磁道一或全部磁道
  	{
@@ -871,13 +873,13 @@
 void MCR_ADCEnable(void)
 {
 	SYSCTRL_HWCTRL(9) |= (1<<DA_MCR_PGA_LDO_EN_BIT);
-	delay_us(1);
+	delay_us(10);
 	SYSCTRL_HWCTRL(7) |= (1<<DA_MCR_PGA_VCM_GEN_EN_BIT);
-	delay_us(1);
+	delay_us(10);
 	SYSCTRL_HWCTRL(5) |= (1<<DA_MCR_PGA0_EN_BIT);
 	SYSCTRL_HWCTRL(6) |= (1<<DA_MCR_PGA1_EN_BIT)|(1<<DA_MCR_PGA2_EN_BIT);
 	SYSCTRL_HWCTRL(1) |= ((1<<DA_MCR_ADC_EN_BIASGEN_BIT)|(1<<DA_MCR_ADC_EN_CONSTGM_BIT)|(1<<DA_MCR_ADC_EN_REG_BIT));
-	delay_us(15);
+	delay_us(150);
 	SYSCTRL_HWCTRL(1) |= (1<<DA_MCR_ADC_EN_BIT);
 }
 void ISO7811_Init(void)
@@ -948,6 +950,39 @@
 	}
 }
 
+void MSR_track_select(int track)
+{
+    MSR_ENABLE(DISABLE);
+    if((track&TRACK_SELECT_1)||(track&TRACK_SELECT_ALL))
+    {
+        SYSCTRL_HWCTRL(5) |= (1<<DA_MCR_PGA0_EN_BIT);
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(5) &= ~(1<<DA_MCR_PGA0_EN_BIT);
+    }
+    if((track&TRACK_SELECT_2)||(track&TRACK_SELECT_ALL))
+    {
+        SYSCTRL_HWCTRL(6) |= (1<<DA_MCR_PGA1_EN_BIT);
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(6) &= ~(1<<DA_MCR_PGA1_EN_BIT);
+    }
+    if((track&TRACK_SELECT_3)||(track&TRACK_SELECT_ALL))
+    {
+        SYSCTRL_HWCTRL(6) |= (1<<DA_MCR_PGA2_EN_BIT);
+    }
+    else
+    {
+        SYSCTRL_HWCTRL(6) &= ~(1<<DA_MCR_PGA2_EN_BIT);
+    }
+    delay_ms(1);
+    MSR_ENABLE(ENABLE);
+    MSR_ENABLE(DISABLE);
+    MSR_ENABLE(ENABLE);
+}
+
 
 void ISO7811_PeakWidth_CONFIG(int track, uint32_t thld_init )
 {
@@ -1113,7 +1148,7 @@
 }
 
 
-#define MSR_SINGLE_LIB_VERSION 0x00010003
+#define MSR_SINGLE_LIB_VERSION 0x00010008
 uint32_t MSR_GetVersion(void)
 {
     return MSR_SINGLE_LIB_VERSION;
Index: yc_msr_single.lib
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
