藍盾接口調試

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace blueshieldtest
{
    public partial class MainFrm : Form
    {
        public MainFrm()
        {
            InitializeComponent();
            strBuilder = new StringBuilder();
        }

        bool isOpen = false;
        bool isPowerOn = false;
        SerialPort sport = null;
        StringBuilder strBuilder = null;

        private void btnBS_Click(object sender, EventArgs e)
        {
            if (!isOpen)
            {
                if (openSerialPort())
                {
                    isOpen = true;
                    btnBS.Text = "斷開連接";
                    lbtip.Text = "已經連接到藍盾。";
                }
            }
            else
            {
                if (closeSerialPort())
                {
                    isOpen = false;
                    btnBS.Text = "連接藍盾";
                    lbtip.Text = "已經斷開連接。";
                }
            }
        }

        private delegate void SafeWinFormsThreadDelegate(string msg);

        private void WriteMsg(string msg)
        {
            SafeWinFormsThreadDelegate d = new SafeWinFormsThreadDelegate(UpdateUI);
            Invoke(d, new object[] { msg });
        }
        private void UpdateUI(string msg)
        {
            this.tboxRec.Text = msg;
        }

        public bool closeSerialPort()
        {
            sport.DataReceived -= new SerialDataReceivedEventHandler(sport_DataReceived);
            try
            {
                sport.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }  
        }

        public bool openSerialPort()
        {
            sport = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
            sport.ReadTimeout = 2000;
            sport.WriteTimeout = 2000;
            sport.DataReceived += new SerialDataReceivedEventHandler(sport_DataReceived);
            try
            {
                sport.Open();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }            
        }

        void sport_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            int rsLength = 0;
            bool loop = true;
            strBuilder.Remove(0, strBuilder.Length);
            while (loop)
            {
                if (sport.BytesToRead == rsLength)
                {
                    loop = false;
                }
                else
                {
                    rsLength = sport.BytesToRead;
                }
                //Thread.Sleep(100);   
            }            
            byte[] buf = new byte[rsLength];
            sport.Read(buf, 0, rsLength);
            foreach (byte b in buf)
            {
                string hex = b.ToString("x").ToUpper();
                hex = (hex.Length == 1) ? "0" + hex : hex;
                strBuilder.Append(hex + " ");
            }
            string result = strBuilder.ToString();
            WriteMsg(result);
        }

        private void btnSCPower_Click(object sender, EventArgs e)
        {
            if (!isPowerOn)
            {
                try
                {
                    sendAPDU("02000011FFFFFFFF");
                    isPowerOn = true;
                    btnSCPower.Text = "智能卡下電";
                    lbtip.Text = "智能卡已上電。";
                }
                catch (Exception ex)
                {
                    lbtip.Text = "智能卡上電出現異常。";
                }
            }
            else
            {
                try
                {
                    sendAPDU("02000012FFFFFFFF");
                    isPowerOn = false;
                    btnSCPower.Text = "智能卡上電";
                    lbtip.Text = "智能卡已下電。";
                }
                catch (Exception ex)
                {
                    lbtip.Text = "智能卡下電出現異常。";
                }
            }
        }

        public void sendAPDU(string apdu)
        {
            int len = apdu.Length / 2;
            char[] chars = apdu.ToCharArray();
            string[] hexes = new string[len];
            byte[] bytes = new byte[len];
            for (int i = 0, j = 0; j < len; i = i + 2, j++)
            {
                hexes[j] = "" + chars[i] + chars[i + 1];
                bytes[j] = (byte)(Convert.ToInt16(hexes[j], 16));
            }
            sport.Write(bytes, 0, len);
            this.tboxSend.Text = apdu;
        }

        private void btnSelect_Click(object sender, EventArgs e)
        {
            try
            {
                sendAPDU("02001580FFFFFFFF00A4040010D15600010180038000000001000000003503");
                lbtip.Text = "已經選擇陽光卡應用。";
            }
            catch (Exception ex)
            {
                lbtip.Text = "選擇陽光卡應用出現異常。";
            }
        }

        private void btnQuery_Click(object sender, EventArgs e)
        {
            try
            {
                sendAPDU("02000580FFFFFFFF805c000204DA03");
                lbtip.Text = "正在查詢陽光卡餘額。";
            }
            catch (Exception ex)
            {
                lbtip.Text = "查詢陽光卡餘額出現異常。";
            }
        }

        private void itemExit_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void itemBSPowerDown_Click(object sender, EventArgs e)
        {
            try
            {
                sendAPDU("02000022FFFFFFFF");
                lbtip.Text = "藍盾已經下電。";
            }
            catch (Exception ex)
            {
                lbtip.Text = "藍盾下電出現異常。";
            }
        }
    }
}

 

發佈了36 篇原創文章 · 獲贊 0 · 訪問量 4514
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章