Пример #1
0
        public ApduMsg CreateDFFile(ushort fileID, int fileLenght, string FileAccess = "F0F0")
        {
            //        执行指令: 80E0 3F01 0D 38 0520 F0F0 95 FFFF 4444463031
            //说明: 80E0 :指令类别和指令码; 3F01 :文件标识; 0D:长度; 38 :文件类型
            //0520 :文件的空间大小; F0: 读权限; F0: 写权限;
            //            4444463031 :文件名 DDF01 也就是ASCII码了
            //80-E0-00-01-09-38-00-64-F0-F0-95-FF-FF-31
            //80,E0,3F,01,0D,38,05,20,F0,F0,95,FF,FF,44,44,46,30,31,
            //EF01 文件标识
            //07 LC data 长度(07)
            //28 文件类型(二进制)
            //002A 文件长度
            //F00E 读写权限
            //FF 保留
            //80 不支持线路保护

            ApduCommand cmd = new ApduCommand();

            cmd.CLA = 0x80;
            cmd.INS = 0xE0;
            cmd.SetP1P2(fileID);

            //构造一个data  ,长度,权限,
            List <byte> data = new List <byte>();

            //文件类型
            data.Add((byte)CPUFileType.MFDF);
            //文件长度
            data.AddRange(CPUCardHelper.IntConvertTo2Byte(fileLenght));
            //data.Add(0x05);
            //data.Add(0x20);
            //添加读写权限
            //data.AddRange(CPUCardHelper.ConverToBytes(FileAccess));
            data.Add(0xF0);
            data.Add(0xF0);
            //应用文件ID
            data.Add(0x95);
            //保留字
            data.Add(0xFF);
            data.Add(0xFF);

            //使用文件ID当文件夹名称
            //data.AddRange(CPUCardHelper.IntConvertTo2Byte(fileID));
            data.AddRange(GetDFNameByID(fileID));

            //不支持线路保护
            //data.Add(0x80);

            cmd.Data = data.ToArray();

            ApduMsg msg = ApduMsg.GetApduByData(SendStrCommand(cmd));

            if (msg.Code == "6A-86")
            {
                msg.Msg += "(文件已存在)";
            }

            return(msg);
        }
Пример #2
0
        /// <summary>
        /// 创建文件
        /// </summary>
        /// <param name="fileIDHex">文件标识符2字节</param>
        /// <param name="fileType">枚举文件类型</param>
        /// <param name="fileLenght">文件长度</param>
        /// <param name="fileNameHex">文件名称,十六进制</param>
        /// <param name="FileAccess"></param>
        /// <returns></returns>
        public ApduMsg CreateFile(ushort fileID, CPUFileType fileType, int fileLenght, string FileAccess = "0000")
        {
            //Demo
            //80E0-EF01-07-28-002A-F00E-FF-80
            //EF01 文件标识
            //07 LC data 长度(07)
            //28 文件类型(二进制)
            //002A 文件长度
            //F00E 读写权限
            //FF 保留
            //80 不支持线路保护

            ApduCommand cmd = new ApduCommand();

            cmd.CLA = 0x80;
            cmd.INS = 0xE0;
            cmd.SetP1P2(fileID);

            //构造一个data  ,长度,权限,
            List <byte> data = new List <byte>();

            //文件类型
            data.Add((byte)fileType);
            //文件长度
            data.AddRange(CPUCardHelper.IntConvertTo2Byte(fileLenght));
            //添加读写权限
            data.AddRange(CPUCardHelper.ConverToBytes(FileAccess));
            //添加文件名
            data.AddRange(CPUCardHelper.ConverToBytes("FFFF"));

            //不支持线路保护
            data.Add(0x80);

            cmd.Data = data.ToArray();

            ApduMsg msg = ApduMsg.GetApduByData(SendStrCommand(cmd));

            if (msg.Code == "6A-86")
            {
                msg.Msg += "(文件已存在)";
            }

            return(msg);
        }
Пример #3
0
 /// <summary>
 /// 设置P1P2(int类型,比如设置文件偏移量)
 /// </summary>
 public void SetP1P2(ushort value)
 {
     byte[] data = CPUCardHelper.IntConvertTo2Byte(value);
     P1 = data[0];
     P2 = data[1];
 }