예제 #1
0
        /// <summary>
        /// 对标签内的某一值块进行加、减或备份,支持自动传送,
        /// 传送的目的块与该值块必须在同一个扇区。
        /// </summary>
        /// <param name="oper">为0xC0进行减操作,为0xC1进行加操作,为0xC2进行备份操作</param>
        /// <param name="sourceBlockNum">执行值操作的源值块的绝对块号,取值范围0-63;</param>
        /// <param name="value">当进行加、减操作时,为加数或减数;当进行恢复操作时该值为空值</param>
        /// <param name="destBlockNum">执行操作后保存操作结果的目的值块的绝对块号,取值范围0-63</param>
        /// <returns></returns>
        protected byte[] CreateValueFrame(OperCode oper, byte sourceBlockNum,
                                          byte[] value, byte destBlockNum)
        {
            Frame frame = new Frame(0x0C, Com_adr);

            byte[] db = frame.DataBlock;
            db[2] = I14443Cmd.Value;
            db[4] = (byte)oper;
            db[5] = sourceBlockNum;
            value.CopyTo(db, 6);
            db[10] = destBlockNum;
            frame.PushCRC();
            return(db);
        }
예제 #2
0
        /// <summary>
        /// 对标签内的某一值块进行加、减或备份,支持自动传送,传送的目的
        /// 块与该值块必须在同一个扇区。
        /// </summary>
        /// <param name="oper">为0xC0进行减操作,为0xC1进行加操作,为0xC2进行备份操作</param>
        /// <param name="sourceBlockNum">执行值操作的源值块的绝对块号,取值范围0-63;</param>
        /// <param name="value">当进行加、减操作时,为加数或减数;当进行恢复操作时该值为空值</param>
        /// <param name="destBlockNum">执行操作后保存操作结果的目的值块的绝对块号,取值范围0-63</param>
        /// <returns></returns>
        public async Task <InfoBase> ValueAsync(OperCode oper, byte sourceBlockNum,
                                                byte[] value, byte destBlockNum)
        {
            byte[] frame = CreateValueFrame(oper, sourceBlockNum,
                                            value, destBlockNum);
            CommunicationReturnInfo cri = await com.SendAsync(frame);

            if (cri.ReturnValue != ReturnMessage.Success)
            {
                InfoBase ib = new InfoBase();
                ib.SendByte         = frame;
                ib.ReturnValue      = cri.ReturnValue;
                ib.ExceptionMessage = cri.ExceptionMessage;
                return(ib);
            }

            InfoBase info = HandleBaseFrame(cri.RecvByte);

            info.SendByte = frame;
            return(info);
        }