/// <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); }
/// <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); }