Ejemplo n.º 1
0
        private void Tag18K6CRead(int radioHandle)
        {
            Rfiddler program = new Rfiddler(options);

            ReadParms readParms = new ReadParms();

            logger.Information($"Starting basic read test, limiting of {options.PacketCount} MAC packets");

            readParms.common.tagStopCount = 0;
            readParms.common.callback     = program.PacketCallback;
            readParms.common.context      = IntPtr.Zero;
            readParms.common.callbackCode = IntPtr.Zero;

            readParms.readCmdParms.bank   = MemoryBank.EPC;
            readParms.readCmdParms.offset = 2;
            readParms.readCmdParms.count  = 6;

            readParms.accessPassword = 0x0;

            var result = link.Tag18K6CRead(radioHandle, readParms, 0);

            logger.Information("link.Tag18K6CRead => {Result}", result);
        }
Ejemplo n.º 2
0
        private void btnGetKey_Click(object sender, EventArgs e)
        {
            int    i;
            int    dataEPCStart = 28, dataEPCEnd = 39; //Reference the "MTI RFID Module Command Reference Manual-Table 3.9 - ISO 18000-6C Inventory-Response Packet Fields"
            int    dataKeyStart = 26, dataKeyEnd = 41; //Reference the "MTI RFID Module Command Reference Manual-Table 3.10 - ISO 18000-6C Tag-Access Packet Fields"
            string tempKeyEPC = "", tempKey0 = "", tempKey1 = "";
            bool   getKey0Flag = false, getKey1Flag = false;
            byte   selectOpsFlag = 0, postMatchFlag = 0;

            textBoxEPC.Text        = "";
            textBoxInserKey0.Text  = "";
            textBoxInserKey1.Text  = "";
            btnInsertKey.Enabled   = false;
            btnActivateKey.Enabled = false;
            selectOpsFlag          = (chkPerformSelectOps.Checked == true) ? (byte)1 : (byte)0;
            postMatchFlag          = (chkPerformPostMatch.Checked == true) ? (byte)1 : (byte)0;

            //Read key0 value
            ReadParms parameters = new ReadParms();

            parameters.readCmdParms.bank                = MemoryBank.USER;
            parameters.readCmdParms.offset              = 192; //C0
            parameters.readCmdParms.count               = 8;
            parameters.common.strcTagFlag.RetryCount    = retryCount;
            parameters.common.strcTagFlag.SelectOpsFlag = selectOpsFlag;
            parameters.common.strcTagFlag.PostMatchFlag = postMatchFlag;
            parameters.accessPassword  = Convert.ToUInt32(TEXTBOX_TagAccessAccessPassword.Text, 16);
            parameters.common.callback = new rfid.CallbackDelegate(this.m_reader.MyCallback);
            parameters.common.OpMode   = RadioOperationMode.NONCONTINUOUS;

            parameters.common.tagFlag = false;
            Array.Clear(parameters.common.bufMTII, 0, parameters.common.bufMTII.Length);
            Array.Clear(parameters.common.bufMTIA, 0, parameters.common.bufMTIA.Length);

            if (Result.OK != LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagRead(parameters, 0))
            {
                MessageDisplay("Read key data command failed", "Key0 Information", MessageBoxIcon.Error);
            }
            else if (parameters.common.tagFlag != true)
            {
                MessageDisplay("No Tag", "Key0 Information", MessageBoxIcon.Warning);
            }
            else
            {
                if (parameters.common.bufMTIA[tagErrorCode] != 0x00)
                {
                    MessageDisplay("Tag Error Code : 0x" + parameters.common.bufMTIA[19].ToString("X2"),
                                   "Key0 Information", MessageBoxIcon.Error);
                }
                else if (parameters.common.bufMTIA[moduleErrorCode1] != 0x00 || parameters.common.bufMTIA[moduleErrorCode2] != 0x00)
                {
                    MessageDisplay("Module Error Code : 0x" + parameters.common.bufMTIA[moduleErrorCode1].ToString("X2") + parameters.common.bufMTIA[moduleErrorCode2].ToString("X2"),
                                   "Key0 Information", MessageBoxIcon.Error);
                }
                else
                {
                    getKey0Flag = true;
                    tempKeyEPC  = parameters.common.bufMTII[dataEPCStart].ToString("X2");
                    for (i = dataEPCStart + 1; i < dataEPCEnd + 1; i++)
                    {
                        tempKeyEPC += "-" + parameters.common.bufMTII[i].ToString("X2");
                    }

                    for (i = dataKeyStart; i < dataKeyEnd + 1; i++)
                    {
                        tempKey0 += parameters.common.bufMTIA[i].ToString("X2");
                    }
                }
            }


            //Read key1 value
            parameters.readCmdParms.bank   = MemoryBank.USER;
            parameters.readCmdParms.offset = 208; //D0
            parameters.readCmdParms.count  = 8;

            parameters.common.tagFlag = false;
            Array.Clear(parameters.common.bufMTII, 0, parameters.common.bufMTII.Length);
            Array.Clear(parameters.common.bufMTIA, 0, parameters.common.bufMTIA.Length);

            if (Result.OK != LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagRead(parameters, 0))
            {
                MessageDisplay("Read key data command failed", "Key1 Information", MessageBoxIcon.Error);
            }
            else if (parameters.common.tagFlag != true)
            {
                MessageDisplay("No Tag", "Key1 Information", MessageBoxIcon.Warning);
            }
            else
            {
                if (parameters.common.bufMTIA[tagErrorCode] != 0x00)
                {
                    MessageDisplay("Tag Error Code : 0x" + parameters.common.bufMTIA[19].ToString("X2"),
                                   "Key1 Information", MessageBoxIcon.Error);
                }
                else if (parameters.common.bufMTIA[moduleErrorCode1] != 0x00 || parameters.common.bufMTIA[moduleErrorCode2] != 0x00)
                {
                    MessageDisplay("Module Error Code : 0x" + parameters.common.bufMTIA[moduleErrorCode1].ToString("X2") + parameters.common.bufMTIA[moduleErrorCode2].ToString("X2"),
                                   "Key1 Information", MessageBoxIcon.Error);
                }
                else
                {
                    getKey1Flag = true;
                    for (i = dataKeyStart; i < dataKeyEnd + 1; i++)
                    {
                        tempKey1 += parameters.common.bufMTIA[i].ToString("X2");
                    }
                }
            }

            if (getKey0Flag != true || getKey1Flag != true)
            {
                MessageDisplay("Get Keys Fail", "Keys Information", MessageBoxIcon.Error);
            }
            else
            {
                textBoxEPC.Text        = tempKeyEPC;
                textBoxInserKey0.Text  = tempKey0;
                textBoxInserKey1.Text  = tempKey1;
                btnInsertKey.Enabled   = true;
                btnActivateKey.Enabled = true;

                MessageDisplay("Get Keys Success", "Keys Information", MessageBoxIcon.Information);
            }
        }
Ejemplo n.º 3
0
        private void btnTAM1Authenticate_Click(object sender, EventArgs e)
        {
            byte   flag = 0, performOptionFlag = 0;
            int    dataEPCStart = 28, dataEPCEnd = 39;                                                     //Reference the "MTI RFID Module Command Reference Manual-Table 3.9 - ISO 18000-6C Inventory-Response Packet Fields"
            int    dataMessageStart = 26, dataMessageStop = 35, dataCipherStart = 36, dataCipherStop = 51; //Reference the "MTI RFID Module Command Reference Manual-Table 3.10 - ISO 18000-6C Tag-Access Packet Fields"
            int    i;
            string message = "", key = "", ciphertext = "", randomChallenge = "";

            labelTagMemoryData.Text = "";

            if ((textBoxVerificationKey0.Text.Length / 2) < 16)
            {
                MessageDisplay("Please enter 16 bytes hexadecimal value for verification Key0",
                               "TAM1 Authentication", MessageBoxIcon.Error);
            }
            else if (CheckKeyType(textBoxVerificationKey0.Text) != true)
            {
                MessageDisplay("Verification Key0 is invalid hexadecimal value", "TAM1 Authentication", MessageBoxIcon.Error);
            }
            else
            {
                if (chkPerformSelectOps.Checked == false && chkPerformPostMatch.Checked == false)
                {
                    performOptionFlag = 0;
                }
                else if (chkPerformSelectOps.Checked == true && chkPerformPostMatch.Checked == false)
                {
                    performOptionFlag = 1;
                }
                else if (chkPerformSelectOps.Checked == false && chkPerformPostMatch.Checked == true)
                {
                    performOptionFlag = 2;
                }
                else
                {
                    performOptionFlag = 3;
                }

                NXPChangeConfig     NXPConfigParms = new NXPChangeConfig();
                NXPTAM1Authenticate NXPTAM1Parms   = new NXPTAM1Authenticate();
                NXPTAM2Authenticate NXPTAM2Parms   = new NXPTAM2Authenticate();
                ReadParms           parameters     = new ReadParms();

                NXPTAM1Parms.replySetting  = (byte)1;
                NXPTAM1Parms.keyID         = (byte)0;
                NXPTAM1Parms.retryCount    = retryCount;
                NXPTAM1Parms.performOption = performOptionFlag;

                parameters.accessPassword = Convert.ToUInt32(TEXTBOX_TagAccessAccessPassword.Text, 16);
                parameters.common.tagFlag = false;
                Array.Clear(parameters.common.bufMTII, 0, parameters.common.bufMTII.Length);
                Array.Clear(parameters.common.bufMTIA, 0, parameters.common.bufMTIA.Length);

                if (Result.OK != LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagNXPSpecific(NXPSpecificFunID.TAM1Authenticate, NXPConfigParms, NXPTAM1Parms, NXPTAM2Parms, parameters, flag))
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = "";
                    MessageDisplay("TAM1 authenticate command failed", "TAM1 Authentication", MessageBoxIcon.Error);
                }
                else if (parameters.common.tagFlag != true)
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = "";
                    MessageDisplay("No Tag", "TAM1 Authentication", MessageBoxIcon.Warning);
                }
                else if (parameters.common.bufMTIA[tagErrorCode] != 0x00)
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = "";
                    MessageDisplay("Tag Error Code : 0x" + parameters.common.bufMTIA[19].ToString("X2"),
                                   "TAM1 Authentication", MessageBoxIcon.Error);
                }
                else if (parameters.common.bufMTIA[moduleErrorCode1] != 0x00 || parameters.common.bufMTIA[moduleErrorCode2] != 0x00)
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = "";
                    MessageDisplay("Module Error Code : 0x" + parameters.common.bufMTIA[moduleErrorCode1].ToString("X2") + parameters.common.bufMTIA[moduleErrorCode2].ToString("X2"),
                                   "TAM1 Authentication", MessageBoxIcon.Error);
                }
                else
                {
                    textBoxEPC.Text = parameters.common.bufMTII[dataEPCStart].ToString("X2");
                    for (i = dataEPCStart + 1; i < dataEPCEnd + 1; i++)
                    {
                        textBoxEPC.Text += "-" + parameters.common.bufMTII[i].ToString("X2");
                    }

                    message = parameters.common.bufMTIA[dataMessageStart].ToString("X2");
                    labelRandomChallenge.Text = parameters.common.bufMTIA[dataMessageStart].ToString("X2");
                    for (i = dataMessageStart + 1; i < dataMessageStop + 1; i++)
                    {
                        message += parameters.common.bufMTIA[i].ToString("X2");
                        labelRandomChallenge.Text += " " + parameters.common.bufMTIA[i].ToString("X2");
                    }

                    for (i = dataCipherStart; i < dataCipherStop + 1; i++)
                    {
                        ciphertext += parameters.common.bufMTIA[i].ToString("X2");
                    }

                    key = textBoxVerificationKey0.Text;

                    randomChallenge = AESECBDecrypt(ciphertext, key);

                    labelDecryptedChallenge.Text = randomChallenge.Substring(0, 2);
                    for (i = 2; i < randomChallenge.Length; i += 2)
                    {
                        labelDecryptedChallenge.Text += " " + randomChallenge.Substring(i, 2);
                    }

                    if (String.Compare(randomChallenge, message) == 0)
                    {
                        MessageDisplay("Authenticate Tag Success", "TAM1 Authentication", MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageDisplay("Authenticate Tag Fail; Confirm Verification Key0 is Correct.", "TAM1 Authentication", MessageBoxIcon.Error);
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void btnTAM2Authenticate_Click(object sender, EventArgs e)
        {
            byte   flag = 0, performOptionFlag = 0;
            ushort offsetValue;
            bool   result;
            int    dataEPCStart = 28, dataEPCEnd = 39;                                                     //Reference the "MTI RFID Module Command Reference Manual-Table 3.9 - ISO 18000-6C Inventory-Response Packet Fields"
            int    dataMessageStart = 26, dataMessageEnd = 35;                                             //Reference the "MTI RFID Module Command Reference Manual-Table 3.10 - ISO 18000-6C Tag-Access Packet Fields"
            int    dataCipher1Start = 36, dataCipher1End = 51, dataCipher2Start = 52, dataCipher2End = 61; //Reference the "MTI RFID Module Command Reference Manual-Table 3.10 - ISO 18000-6C Tag-Access Packet Fields"
            int    i;
            string message = "", key = "", ciphertext1 = "", ciphertext2 = "", randomChallenge = "", returnedData = "";

            if ((textBoxVerificationKey1.Text.Length / 2) < 16)
            {
                MessageDisplay("Please enter 16 bytes hexadecimal value for verification Key1",
                               "TAM2 Authentication", MessageBoxIcon.Error);
            }
            else if (CheckKeyType(textBoxVerificationKey1.Text) != true)
            {
                MessageDisplay("Verification Key1 is invalid hexadecimal value", "TAM2 Authentication", MessageBoxIcon.Error);
            }
            else if (Int16.Parse(textBoxOffset.Text) > 4095)
            {
                MessageDisplay("The offset value must be littler than 4095",
                               "TAM2 Authentication", MessageBoxIcon.Error);
            }
            else
            {
                result = ushort.TryParse(textBoxOffset.Text, out offsetValue);

                if (chkPerformSelectOps.Checked == false && chkPerformPostMatch.Checked == false)
                {
                    performOptionFlag = 0;
                }
                else if (chkPerformSelectOps.Checked == true && chkPerformPostMatch.Checked == false)
                {
                    performOptionFlag = 1;
                }
                else if (chkPerformSelectOps.Checked == false && chkPerformPostMatch.Checked == true)
                {
                    performOptionFlag = 2;
                }
                else
                {
                    performOptionFlag = 3;
                }

                NXPChangeConfig     NXPConfigParms = new NXPChangeConfig();
                NXPTAM1Authenticate NXPTAM1Parms   = new NXPTAM1Authenticate();
                NXPTAM2Authenticate NXPTAM2Parms   = new NXPTAM2Authenticate();
                ReadParms           parameters     = new ReadParms();

                NXPTAM2Parms.replySetting  = (byte)1;
                NXPTAM2Parms.memoryProfile = (byte)comboBoxMemBank.SelectedIndex;
                NXPTAM2Parms.offset        = offsetValue;
                NXPTAM2Parms.blockCount    = (byte)comboBoxBlockCount.SelectedIndex;
                NXPTAM2Parms.retryCount    = retryCount;
                NXPTAM2Parms.performOption = performOptionFlag;

                parameters.accessPassword = Convert.ToUInt32(TEXTBOX_TagAccessAccessPassword.Text, 16);
                parameters.common.tagFlag = false;
                Array.Clear(parameters.common.bufMTII, 0, parameters.common.bufMTII.Length);
                Array.Clear(parameters.common.bufMTIA, 0, parameters.common.bufMTIA.Length);
                Array.Clear(parameters.common.bufSecondeMTIA, 0, parameters.common.bufSecondeMTIA.Length);

                if (Result.OK != LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagNXPSpecific(NXPSpecificFunID.TAM2Authenticate, NXPConfigParms, NXPTAM1Parms, NXPTAM2Parms, parameters, flag))
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = labelTagMemoryData.Text = "";
                    MessageDisplay("TAM2 authenticate command failed", "TAM2 Authentication", MessageBoxIcon.Error);
                }
                else if (parameters.common.tagFlag != true)
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = labelTagMemoryData.Text = "";
                    MessageDisplay("No Tag", "TAM2 Authentication", MessageBoxIcon.Warning);
                }
                else if (parameters.common.bufMTIA[tagErrorCode] != 0x00)
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = labelTagMemoryData.Text = "";
                    MessageDisplay("Tag Error Code : 0x" + parameters.common.bufMTIA[19].ToString("X2"),
                                   "TAM2 Authentication", MessageBoxIcon.Error);
                }
                else if (parameters.common.bufMTIA[moduleErrorCode1] != 0x00 || parameters.common.bufMTIA[moduleErrorCode2] != 0x00)
                {
                    labelRandomChallenge.Text = labelDecryptedChallenge.Text = labelTagMemoryData.Text = "";
                    MessageDisplay("Module Error Code : 0x" + parameters.common.bufMTIA[moduleErrorCode1].ToString("X2") + parameters.common.bufMTIA[moduleErrorCode2].ToString("X2"),
                                   "TAM2 Authentication", MessageBoxIcon.Error);
                }
                else
                {
                    textBoxEPC.Text = parameters.common.bufMTII[dataEPCStart].ToString("X2");
                    for (i = dataEPCStart + 1; i < dataEPCEnd + 1; i++)
                    {
                        textBoxEPC.Text += "-" + parameters.common.bufMTII[i].ToString("X2");
                    }

                    message = parameters.common.bufMTIA[dataMessageStart].ToString("X2");
                    labelRandomChallenge.Text = parameters.common.bufMTIA[dataMessageStart].ToString("X2");
                    for (i = dataMessageStart + 1; i < dataMessageEnd + 1; i++)
                    {
                        message += parameters.common.bufMTIA[i].ToString("X2");
                        labelRandomChallenge.Text += " " + parameters.common.bufMTIA[i].ToString("X2");
                    }

                    for (i = dataCipher1Start; i < dataCipher1End + 1; i++)
                    {
                        ciphertext1 += parameters.common.bufMTIA[i].ToString("X2");
                    }

                    for (i = dataCipher2Start; i < dataCipher2End + 1; i++)
                    {
                        ciphertext2 += parameters.common.bufMTIA[i].ToString("X2");
                    }

                    dataCipher2Start = 14; //The second part of ciphertext2 start address
                    dataCipher2End   = 19; //The second part of ciphertext2 end address

                    for (i = dataCipher2Start; i < dataCipher2End + 1; i++)
                    {
                        ciphertext2 += parameters.common.bufSecondeMTIA[i].ToString("X2");
                    }

                    key = textBoxVerificationKey1.Text;

                    randomChallenge = AESECBDecrypt(ciphertext1, key);

                    returnedData = AESCBCDecrypt(ciphertext2, ciphertext1, key);

                    labelDecryptedChallenge.Text = randomChallenge.Substring(0, 2);
                    for (i = 2; i < randomChallenge.Length; i += 2)
                    {
                        labelDecryptedChallenge.Text += " " + randomChallenge.Substring(i, 2);
                    }

                    labelTagMemoryData.Text = returnedData.Substring(0, 2);
                    for (i = 2; i < returnedData.Length; i += 2)
                    {
                        labelTagMemoryData.Text += " " + returnedData.Substring(i, 2);
                    }

                    if (String.Compare(randomChallenge, message) == 0)
                    {
                        MessageDisplay("Authenticate Tag Success", "TAM2 Authentication", MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageDisplay("Authenticate Tag Fail; Confirm Verification Key1 is Correct.", "TAM2 Authentication", MessageBoxIcon.Error);
                    }
                }
            }
        }
Ejemplo n.º 5
0
            public void AccessThreadProc()
            {
                rfid.Constants.Result result = rfid.Constants.Result.NOT_INITIALIZED;

                byte flags = 0;

                StartEvent.WaitOne();

                switch (_tagAccessData.type)
                {
                    case TagAccessType.Read:
                        {
                            ReadParms parameters = new ReadParms();
                            BuildParams_ReadCmd(ref parameters.readCmdParms, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;
                           
                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagRead(parameters, flags);
                        }
                        break;
                    //Add LargeRead
                    case TagAccessType.LargeRead:
                        {
                            ReadParms parameters = new ReadParms();
                            BuildParams_ReadCmd(ref parameters.readCmdParms, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode = RadioOperationMode.NONCONTINUOUS;
                            parameters.readCmdParms.count = (byte)(_tagAccessReadSet.ReadWords);//籠筁count
                            //parameters.readCmdParms.offset = 0;
                            //□add loop
                            for (int ccnt = 0; ccnt < (_tagAccessReadSet.TotalReadWords /_tagAccessReadSet.ReadWords); ccnt++) // TotalReadWords/ReadWords
                            {
                                UInt16 choff = (UInt16)(_tagAccessReadSet.ReadWords);// readwords
                                result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagRead(parameters, flags);
                                parameters.readCmdParms.offset = (UInt16)(parameters.readCmdParms.offset + choff);
                                if (Stop) break;
                            }
                            //◆add loop  
                            //result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagRead(parameters, flags);
                        }
                        break;
                    case TagAccessType.Write:
                        {
                            WriteParms parameters = new WriteParms();
                            WriteSequentialParms writeParameters = new WriteSequentialParms();
                            BuildParams_WriteCmd(ref writeParameters, ref parameters.accessPassword);
                            parameters.writeParms = writeParameters;
                            parameters.writeType = WriteType.SEQUENTIAL;
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;

                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagWrite(parameters, flags);
                        }
                        break;
                    case TagAccessType.BlockWrite:
                        {
                            BlockWriteParms parameters = new BlockWriteParms();
                            BuildParams_BlockWriteCmd(ref parameters.blockWriteCmdParms, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;
                            
                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagBlockWrite(parameters, flags);
                        }
                        break;
                    case TagAccessType.BlockErase:
                        {
                            BlockEraseParms parameters = new BlockEraseParms();
                            BuildParams_BlockEraseCmd(ref parameters.blockEraseCmdParms, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;
                            
                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagBlockErase(parameters, flags);
                        }
                        break;
                    case TagAccessType.Lock:
                        {
                            LockParms parameters = new LockParms();
                            BuildParams_LockCmd(ref parameters.lockCmdParms, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;
                            
                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagLock(parameters, flags);
                        }
                        break;
                    case TagAccessType.Kill:
                        {
                            KillParms parameters = new KillParms();
                            BuildParams_KillCmd(ref parameters.killCmdParms, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;
                           
                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagKill(parameters, flags);
                        }
                        break;
                    case TagAccessType.QT_None:
                    case TagAccessType.QT_Read:
                    case TagAccessType.QT_Write:
                        {
                            QTParms parameters = new QTParms();
                            BuildParams_QT(ref parameters, ref parameters.accessPassword);
                            parameters.common.callback = new rfid.CallbackDelegate(this._reader.MyCallback);

                            //clark 2011.4.25 Set tag access flag to inventory structure
                            parameters.common.strcTagFlag.RetryCount    = _tagAccessData.strcTagFlag.RetryCount;
                            parameters.common.strcTagFlag.PostMatchFlag = _tagAccessData.strcTagFlag.PostMatchFlag;
                            parameters.common.strcTagFlag.SelectOpsFlag = _tagAccessData.strcTagFlag.SelectOpsFlag;
                            parameters.common.OpMode                    = RadioOperationMode.NONCONTINUOUS;

                            result = LakeChabotReader.MANAGED_ACCESS.API_l8K6CTagQT(parameters, flags);
                        }
                        break;
                    default:
                        System.Diagnostics.Debug.Assert(false, "Tag Acces Type");
                        break;
                }
            }