14:36 2011/10/13		V1.5R9
1. 更新MF5AX ActiveX(更新CJComm的Busy Flag會因為多執行緒的關係，造成錯誤，導致無法執行Query的指令)

16:36 2011/09/16		V1.5R9
1. 更新MF5AX ActiveX(portopen會因元件為多執行緒處理的關係，造成portopen不穩定之問題)

11:59 2011/08/31		V1.5R9
1. 修改程式剛執行時，若Baudrate無資料造成combo box出現空白的狀態，已將此問題改成若Baudrate或commport無資料，則改以auto的方式進行

16:41 2011/08/23		V1.5R9
1. 修正程式剛執行，若.reg內所儲存的(包含沒有資料)comm port name不存在，則以COM1做為預設port name值
2. 修正scan時，若port設為auto scan，baud rate設定為錯誤，則會造成的溢位問題

13:35 2011/08/09		V1.5R9
1. 更新MF5Ax ActiveX(於win7 x64 OS下無法正常執行之問題修正)

13:28 2011/07/29		V1.5R9
1. 變更主頁面的"COM Port" & "Baudrate" 此兩label的back color為&H00FFFFFF(白色)

09:51 2011/07/27		V1.5R9
1. 更新MF5Ax ActiveX (改善processing中，若意外拔除USB，會造成無限迴圈發生的情況)

15:07 2011/07/21		V1.5R9
1. 新增功能可分別固定PortNo.或Boudrate，也可分別Auto來sacn來達到加快搜尋的效果

18:53 2011/07/06		V1.5R8
1. 更新MF5Ax ActiveX

15:07 2011/07/06		V1.5R8
1. 更新MF5Ax ActiveX

11:57 2011/07/05		V1.5R8
1. 更新MF5Ax ActiveX

18:25 2011/06/23		V1.5R8
1. 新增Device MF20(PGM-T1235)
2. 刪除的lCurBaudrate變數，不以sPortSettingBuffer(0)判別，以m_szLastPortSettings判別

10:40 2011/06/21		V1.5R8
1. 更新MF5Ax ActiveX(card type的顯示變更，如:MF_CL2_DESFIRE ->MF_DESFIRE_CL2)

15:25 2011/06/20		V1.5R8
1. 更新MF5Ax ActiveX(擷取card id的字元數修正為前3後4)
2. 刪除bIsUseSaveKey變數
3. 更改及新增frmMain的傳值顯示方式(如新增Card Type的顯示，在select card動作後)

13:18 2011/06/17		V1.5R8
1. 新增支援MF700-36的機種(PGM-T1142)
2. 修改auto scan的寫法
3. 刪除lCurBaudrate變數，改以sPortSettingBuffer(0)判別
4. 將SetMaxBlock函式的引入函數MaxBlock型態改成Long
5. 修改Authenticate()的驗證方式(若szKey=NullString帶入失敗，則用szKey = "FFFFFFFFFFFF")
6. 使用LoadSettings()及SaveSettings()來儲存確定的設定值

18:49 2011/06/16		V1.5R8
1. 增加m_lSaveKeyMaxCount變數，以判別device的key數，取代m_bIsSupportTransfer此變數功用
2. 修改PCR320 機種韌體版本1.2以上支援可save40個key的save key功能
3. 修改auto scan的寫法，並可記憶上次polling成功的settings
4. 更新MF5Ax ActiveX(將mfAnticollision、mfSelectCard以mfAnticollisionHex、mfSelectCardHex取代，及新增mfIsNextAnticollision變數判斷是否需要進行兩次的Anticollision取得7bytes的card Id)

18:23 2011/06/15		V1.5R8
1. 更新MF5Ax ActiveX(save key功能依機種可支援到40個key)
2. 修改frmSaveKey.frm在form load event時，可save的最大key總數以SaveKeyMaxCount此frmMain的函數來判斷
3. 修改Save Key失敗時，則會結束Save Key動作

15:43 2011/06/14		V1.5R8
1. 修改DF20機種韌體版本1.2以上支援可save40個key的save key功能

09:56 2011/06/07		V1.5R8
1. 將MF5x1.mfCurrentClass改成MF5x1.mfCurrentClassEx
2. 將變數Id改為m_sCardId

15:51 2010/08/17		V1.5R8
1. 修改按鈕防止重覆進入
2. 修改PCR310機種在V1.3R6(含)以後, 支援Restore/Transfer的指令

13:58 2010-08-03		V1.5R7
1. 新增支援DF20的機種
2. 修改Authenticate Key的方式, 改成使用預設的Key做Authenticate, 若失敗且機器不支援SaveKey, 或者在Sector 16(含)以上, 會跳出視窗詢問Key

21:52 2010/06/23		V1.5R6
1. 因為更新MF5Ax, 所以重新包裝

19:57 2010/1/5			V1.5R6
1. 修正frmMain.ToHexFixLen, 在卡號長度小於固定的長度時, 把字串szResult當成szResult的長度, 因為單位不同, 造成錯誤
frmMain.ToHexFixLen錯誤的程式碼
szResult = String$(lLen - szResult, "0") & szResult

19:57 2010/1/5			V1.5R5
1. 修正Transfer在未執行加減值或Restore指令前執行或可以連續執行兩次，造成Transfer發生錯誤

17:14 2009/08/04		V1.5R5
1. 新增PCR320(PGM-T1100)

19:29 2009/07/07		V1.5R5
1. 修正AddRecord不正確
2. 更換MF5Ax

02:49 2009/2/18			V1.5R4
1. 新增新MF700-10(PGM-T0724, PGM-T1023, PGM-T1000), MF12-01, MF6, DF700, DF750

20:00 2009/1/15			V1.5R3
1. 更換新的MF5Ax

上午 11:40 2008/10/16		V1.5R2
1. 修改MF6的ROM編號PGM-T0748->PGM-T0985
2. 新增RF30(PGM-T0995)
3. 更新MF5Ax ActiveX(兩個執行緒使用同一個Queue造成錯誤)

下午 07:59 2008/9/25		V1.5R2
1. 修正DesFire卡片無法取得第二組卡號2
2. 修改DesFire沒有Sector/Blcok的操作

下午 01:15 2008/9/19		V1.5R2
1. 修正使用UltraLight不應該顯示Value的功能
2. 增加MF700-STF機種

下午 04:17 2008/9/11		V1.5R2
1. 增加Baudrate 57600bps
2. 軟體改名為MifareDemo, 找到機器顯示為MifareReader

下午 05:13 2008/8/6		V1.5R1
1. 變更FM6為DF5

下午 03:51 2008/6/4		V1.5R1
1. 修正無法改變EventMode

下午 02:57 2008/6/3		V1.5R1
1. 修正frmValue因更新MF5Ax.ocx後, 指令不同, 造成無去使用

上午 11:05 2008/6/3		V1.5R1
1. 新增MF6("PGM-T0748")機種

下午 04:36 2008/5/23	V1.5R0
1. 新增加Restore/Transfer, Increment without Transfer, Decrement without Transfer指令

2007/03/28 MF5 Demo V1.4R12
	1.新增加PGM-T0843為MF700-DK
2007/03/25 MF5 Demo V1.4R11
	1.PGM-T0829辨識之名稱改為MF700-AB
2007/03/14 MF5 Demo V1.4R10
	1.PGM-T0829辨識之名稱改為MF700-RWD
2006/12/19 MF5 Demo V1.4R10
	1.新增加PGM-T0829的辨識
	2.新增加PGM-T0830的辨識	
	3.取消MF5 with baudrate 57600 bps(PGM-T0811)
	4.新增Event的Ascii顯示
2006/10/30 Balance Check Utility V1.1R1
	1. 新增語言化功能

2006/10/30 CardIssue V1.2R5
	1. 新增語言化功能

2006/10/30 AC906 Properties V1.2R6
	1. 新增語言化功能

2006/10/27 CardIssue
	1. 修正發卡的視窗檢查"No TRANSACTION"有問題，誤判OK按鈕的狀態
                  2. 修正發卡的視窗在加減值時OK按鈕的狀態可以因為改變其他值改變成可按下狀態
2006/10/23 AC906 Properties
	1. "AC906 Advance"的語言化與Erase按鈕拼錯字修改
	2. 修改"AC906 Advance"操作介面，按下Button會Disable全部的Button直到完成，"Save To AC906"有進度表
2006/10/05 MF5 Demo V1.4R9
	1. 新增加MF5 with baudrate 57600 bps(PGM-T0811)

2006/03/16 AC906 Properties V1.2R5
	1. 取消AC906-ABB對PeriodTime的Disable

2006/05/17 MF5 Demo V1.4R8
	1. AutoScan的PGM0487/PGM-T0487的ModuleName由PCR310/PRW106改成PCR310/PRW106/MFR350
2006/03/16
	AC906 Properties V1.2R4
		1. 新增加AC906-ABB的辨識
2005/08/19
	AC906 Properties V1.2R3
		1. 新增加AC906-UL的辨識
2005/08/08
	MF5 Demo V1.4R7
		1. AutoScan新增加MF700-10機種
2005/08/04
	MF5 Demo V1.4R6
		1. AutoScan新增加MF700-30機種
		2. 修正MF700-00/MF700-30在執行Halt後會回到AutoMode模式, 造成無法操作
2005/06/06
	MF5 Demo V1.4R5
		1. 於2005/06/09 AutoScan新增加MF5-01(ODM)/MF5-02(ODM)機種
2005/06/22
	CardIssue V1.2R4
		1. 發Manager Card時點MID/FID/SYS Code三個項目，把最後一個FID移除會有殘留資料
	AC906 Properties V1.2R1
		1. 修正COM1連續Auto-Scan兩次會找不到
2005/05/16
	CardIssue V1.2R3
		1. 修正發Manager Card時如果把FID全部移除後無法寫卡
		2. 修正發Manager Card時如果把FID全部移除後再新增加FID後，會發生List與右邊的FID不一致，右邊的FID會變0
		3. 修正移除後無法立即寫卡，OK會反白
2005/05/16
	CardIssue V1.2R2
		1. 修正Format未顯示最後失敗原因
2005/05/05
	CardIssue V1.2R1
		1. 更改Admin Password存放位置, 新增"GIGATMS"可進入Admin的萬用密碼
		2. 調整Admin權限只限定Password/Advance功能
	AC906 Properties V1.2R1
		1. 更改Admin Password存放位置, 新增"GIGATMS"可進入Admin的萬用密碼
		2. 修正Password可以在User下使修改

2005/05/04
	CardIssue V1.2R0
		1. 修正TextFile存檔格式, 數字會去除","
		2. 新增加存檔後清除記錄的功能
2005/05/02
	CardIssue V1.2R0
		1. 發卡時增加卡的記錄滿後是否再交易的功能
		2. 可以指定可以進入的MID
		3. 增加發Manager Card的功能
	AC906 Properties V1.2R0
		1. Delay Time 大於3600秒時, 取3600秒的餘數設到機器裡去, 因為沒有小時的選項, 所以如果機器上Delay有於小時, 則無法改變小時的設定
		2. 設定FID時以為10進制，但是存入記憶體時卻以16進制，導致下次讀回來時與設定不符
		3. 新增加Administrator與User的Password功能	
	MF5 Demo V1.4R4
		1. 更新MF5x.OCX
		   更改USB232的Unplus改用WaitCommEvent的GetLastError()=ERROR_ACCESS_DENIED[5]檢查，
		   修正PostData/WriteToQueue在Unplus時有可能造成無窮迴圈
	Balance Check Utility V1.1R0
		1. 更新MF5x.OCX(同MF5 Demo)
		2. 新增加Login/Password的功能
2005/02/04 CardIssue V1.2R0
	新增加High Security選項，使客戶可以使用兩個Key去保護Value Block(Key_A只能扣款/Key_B可讀寫)
	新增加Administrator與User的Password功能
	修正Issue Card的Value如果設到最大時，不能加值也不能減值的問題	
2005/02/04 MF5 Demo V1.4R4
	新增加MF5-01 (OEM)
2004/12/16
	修正MF5 ActiveX因多執行緒，造成Busy讓PCR216在正偉電腦(Dell)不能AutoScan
2004/10/22
	MF5 Demo修正Event視窗顯示超過5210時，因為找不到vbCrLf而產生錯誤"Run-time error '5': Invalid procedure call or argument"
	MF5 Demo進階為V1.4R3
2004/09/07
	修正MF5 ActvieX資料長度超過0x86時，會有無窮迴圈
	MF5 Demo新增在Sector 0且Block 0不能Write或Value
	MF5 Demo新增加MF700-00的辨識
	MF5 Demo新增加RWD145-00的辨識
	MF5 Demo進階為V1.4R2
	Card Issue進階為V1.1R1
	AC906 Properties進階為V1.1R1
2004/08/03
	PCR216 V1.0R0 初版
	MF5x ActiveX 增加支援 PCR216
	MF5 Demo新增加PCR216的辨識
	MF5 Demo新增在最後一個Block時不可以使用Write或Value
	AC906 Properties/Card Issue重新編譯進階為V1.1R1
	Card Issue存放Key的地方與AC906 Properties同步
	取消[View Comm Data]功能
2003/11/25
	MF5x ActiveX 增加不屬於GNetPlus封包會產生OnComm事件
	MF5 Demo新增加AC906-UT的辨識及新功能[View Comm Data]
2003/11/17
	Payment System REV.B進階為REV.C
	AC906 Properties/Card Issue新增密碼保護
	Card Issue新增Format可以輸入舊的KEY
	MF5x ActiveX改用GNet Plus通訊封包

---------------------------------
2005/05/04 Card ISSUE Remove Code
Public Function FormatCard(ByVal nSysCode As Long, ByVal strFmtKey As String, ByVal strKey As String, Optional ByVal nKeyType As MF5xlib.KEYTYPE = KEY_A) As Boolean
    Dim nSector As Integer, nBlock As Integer
    Dim bData(0 To 15) As Byte
    Dim tData As tSysInfo
    Dim blnResult As Boolean
    Dim nDateTime As Long
    blnResult = False
    
    tData.SysInfoSysCode = nSysCode
    blnResult = MF5x.mfSelectCardEx(nSelectID)
    If blnResult Then blnResult = MF5x.mfAuthenticate(0, KEY_A, strFmtKey)
    If MF5x.PortOpen And Len(strFmtKey) = 12 And Len(strKey) = 12 And blnResult Then
        With pbStatus
            .Max = 16 * 4
            .Min = 3
            .Value = 3
            .Visible = True
        End With
        For nSector = 0 To 15
            If blnResult Then
                If nSector = 0 Then
                    blnResult = MF5x.mfWriteEx(nKeyType, strFmtKey, 0, 1, VarPtr(tData), Len(tData))
                    If blnResult Then blnResult = MF5x.mfWriteEx(nKeyType, strFmtKey, 0, 2, VarPtr(bData(0)), 16)
                Else
                    For nBlock = 0 To 2
                        With pbStatus
                            If .Value < .Max Then .Value = .Value + 1
                        End With
                        If nSector = 1 And nBlock = 0 Then
                            'Value Block
                            If MF5x.mfAuthenticate(1, nKeyType, strFmtKey) Then
                                MF5x.mfValue(0) = 0
                                If MF5x.mfValue(0) <> 0 Then blnResult = False
                            Else
                                blnResult = False
                            End If
                        Else
                            blnResult = MF5x.mfWriteEx(nKeyType, strFmtKey, nSector, nBlock, VarPtr(bData(0)), 16)
                        End If
                        If blnResult = False Then Exit For
                    Next nBlock
                End If
                If blnResult And strFmtKey <> strKey Then
                    'Change Key
                    If MF5x.mfAuthenticate(nSector, KEY_A, strFmtKey) Then
                        blnResult = MF5x.mfAccessCondition(strKey, MF5KeyB, MF5BlockAccess, MF5BlockAccess, MF5BlockAccess, MF5CondAccess)
                    Else
                        blnResult = False
                    End If
                End If
                'Change or no change Key always Value=Vale+1
                With pbStatus
                    If .Value <= .Max Then .Value = .Value + 1
                End With
                ShowMsg "Sector " & nSector & " Formating is " & IIf(blnResult, "OK", "NG(" & MF5x.mfLastErrorStr & ")")
            End If
            If blnResult = False Then Exit For
            DoEvents
        Next nSector
    End If
    pbStatus.Visible = False
    FormatCard = blnResult
End Function
