public bool Block1Info()
 {
     byte[] output;
     if (UID != 0)
     {
         if (MernokRFID_interface.Mifair_Read_Block(Mifare_key.A, 0, cardDetails.Block1_Addr, out output))
         {
             if (output[2] == 0)
             {
                 return(false);
             }
             AccessLevel_read(output[0]);                           //sets the licencetype string
             Warn_Date_read(output[1], output[2], output[3]);       //sets the warning date
             if (!formatted)
             {
                 return(false);
             }
             Exp_Date_read(output[4], output[5], output[6]);         //sets the expiry date
             Client_Group_read(output[7], output[8]);
             Client_Site_read(output[9], output[10]);
             OperationalArea_Code(output[11], output[12]);
             ByPassByte_read(output[13]);
             OptionsByte_read(output[14]);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block31Info()
 {
     byte[] output1;
     if (UID != 0)
     {
         if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block18_Addr, out output1))
         {
             OperatorSurname_read(output1);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block10Info()
 {
     byte[] output1;
     if (UID != 0)
     {
         if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block10_Addr, out output1))
         {
             VehicleGroup_read(output1);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block4_5Info()
 {
     byte[] output1, output2;
     if (UID != 0)
     {
         if ((MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block4_Addr, out output1)) && (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block5_Addr, out output2)))
         {
             VIDs_read(output1, output2);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block2_3Info()
 {
     byte[] output1, output2;
     if (UID != 0)
     {
         if ((MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block2_Addr, out output1)) && (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block3_Addr, out output2)))
         {
             Vehicle_Type_names(output1, output2);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block32Info()
 {
     byte[] output1;
     if (UID != 0)
     {
         if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block19_Addr, out output1))
         {
             DoverDate_read(output1);
             DoverWarningDate_read(output1);
             DoverExpiryDate_read(output1);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block11_5Info()
 {
     byte[] output1;
     if (UID != 0)
     {
         if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block11_Addr, out output1))
         {
             ReadProductCode(output1);
             MedicalDate_read(output1);
             MedicalWarnDate_read(output1);
             MedicalExpDate_read(output1);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
 public bool Block9Info()
 {
     byte[] output1;
     if (UID != 0)
     {
         if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block9_Addr, out output1))
         {
             HotFlagedDate_read(output1);
             HotFlagVID_read(output1);
             HotFlagger(output1[5]);
             TrainingWarningDate_read(output1);
             TrainingExpiryDate_read(output1);
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
        public bool Block7Info() //reads EngineerUID and other important info for desision making
        {
            byte[] output1;
            if (UID != 0)
            {
                if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block7_Addr, out output1))
                {
                    IssuerUID_read(output1);
                    Training_Date_read(output1);
                    Issue_Date_read(output1);
                    EngineerUID_read(output1);

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
        public override void Update(ViewModelReturnData VMReturnData)
        {
            //Only update this view if visible

            if (VMReturnData.AdvancedMenu_Active)
            {
                VMReturnData.OptionsPressed = true;
                this.View.Visibility        = Visibility.Visible;


                if (_HotflagBtnPressed)
                {
                    CardDetails WriteCardDetails = new CardDetails()
                    {
                        Hotflaged_status = true, HotFlagedDate = DateTime.Now, HotFlagedVID = 123
                    };
                    RFIDCardInfoWrite rFIDCardInfoWrite = new RFIDCardInfoWrite();
                    _HotflagBtnPressed = false;
                    byte[] temp = rFIDCardInfoWrite.Block9(WriteCardDetails);
                    if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, WriteCardDetails.Block9_Addr, temp))
                    {
                    }

                    VMReturnData.CardProramed_done = true;
                    VMReturnData.App_datareset();
                }

                if (_mernokcardBtnPressed)
                {
                    _mernokcardBtnPressed = false;
                    VMReturnData.MernokCardPresent_active = true;
                    VMReturnData.NewMernokCard            = true;
                }

                if (_FormatbtnPressed)
                {
                    _FormatbtnPressed = false;
                    RFIDCardInfoWrite rFIDCardInfoWrite = new RFIDCardInfoWrite();
                    CardDetails       WriteCardDetails  = new CardDetails()
                    {
                        cardUID          = 0,
                        AccessLevel      = 0,
                        ByPassBits       = 0,
                        Client_Group     = 0,
                        Client_Site      = 0,
                        EngineerName     = "",
                        EngineerUID      = 0,
                        Expiry_Date      = DateTime.MinValue,
                        HotFlagedDate    = DateTime.MinValue,
                        HotFlagedVID     = 0,
                        Hotflaged_status = false,
                        IssuerUID        = 0,
                        Issue_Date       = DateTime.MinValue,
                        OperationalArea  = 0,
                        OperatorName     = "",
                        Options          = 0,
                        ProductCode      = 0,
                        Training_Date    = DateTime.MinValue,
                        VehicleGroup     = Enumerable.Repeat((byte)0, 16).ToArray(),
                        VID                = Enumerable.Repeat((UInt16)0, 16).ToArray(),
                        VehicleNames       = Enumerable.Repeat("", 16).ToArray(),
                        VehicleLicenceType = Enumerable.Repeat((uint)0, 32).ToArray(),
                        Warning_Date       = DateTime.MinValue
                    };
                    rFIDCardInfoWrite.WriteInfoToCard(WriteCardDetails, VMReturnData.CardType);

                    VMReturnData.CardProramed_done = true;
                    VMReturnData.App_datareset();
                }


                #region Exit button
                else if (_buttonExitPressed)
                {
                    _buttonExitPressed = false;
                    VMReturnData.AdvancedMenu_Active = false;
                }
                #endregion
            }
            else
            {
                VMReturnData.OptionsPressed = false;
                this.View.Visibility        = Visibility.Collapsed;
            }
        }
        public int WriteInfoToCard(CardDetails WriteCardDetails, int CardType)
        {
            // byte[] key = { (byte)'S', 0, 2, 1, 3, 7, 255, 07, 128, 105, 255, 255, 255, 255, 255, 255};
            // if (MernokRFID_interface.MiFair_Store_Access_Key(0x0A, key)){

            // }

            byte[] temp = new byte[16];
            temp = Block1(WriteCardDetails);
            if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block1_Addr, temp))
            {
                temp = Block2(WriteCardDetails);
                if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block2_Addr, temp))
                {
                    temp = Block3(WriteCardDetails);
                    if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block3_Addr, temp))
                    {
                        temp = Block4(WriteCardDetails);
                        if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block4_Addr, temp))
                        {
                            temp = Block5(WriteCardDetails);
                            if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block5_Addr, temp))
                            {
                                temp = Block6(WriteCardDetails);
                                if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block6_Addr, temp))
                                {
                                    temp = Block7(WriteCardDetails);
                                    if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block7_Addr, temp))
                                    {
                                        temp = Block8(WriteCardDetails);
                                        if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block8_Addr, temp))
                                        {
                                            temp = Block9(WriteCardDetails);
                                            if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block9_Addr, temp))
                                            {
                                                temp = Block10(WriteCardDetails);
                                                if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block10_Addr, temp))
                                                {
                                                    temp = Block11(WriteCardDetails);
                                                    if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block11_Addr, temp))
                                                    {
                                                        temp = Block12(WriteCardDetails);
                                                        if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block12_Addr, temp))
                                                        {
                                                            if (CardType == 1 || CardType == 4)
                                                            {
                                                                for (int i = 0; i < 3; i++)
                                                                {
                                                                    temp = Block17_31_VehicleNames(WriteCardDetails, i);
                                                                    if (temp != null)
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_1_Addr + i, temp);
                                                                    }
                                                                    else
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_1_Addr + i, Encoding.ASCII.GetBytes(""));
                                                                    }
                                                                }

                                                                for (int i = 0; i < 3; i++)
                                                                {
                                                                    temp = Block17_31_VehicleNames(WriteCardDetails, i + 3);
                                                                    if (temp != null)
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_2_Addr + i, temp);
                                                                    }
                                                                    else
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_2_Addr + i, Encoding.ASCII.GetBytes(""));
                                                                    }
                                                                }
                                                            }

                                                            if (CardType == 4)
                                                            {
                                                                for (int i = 0; i < 3; i++)
                                                                {
                                                                    temp = Block17_31_VehicleNames(WriteCardDetails, i + 9);
                                                                    if (temp != null)
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_3_Addr + i, temp);
                                                                    }
                                                                    else
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_3_Addr + i, Encoding.ASCII.GetBytes(""));
                                                                    }
                                                                }

                                                                for (int i = 0; i < 3; i++)
                                                                {
                                                                    temp = Block17_31_VehicleNames(WriteCardDetails, i + 12);
                                                                    if (temp != null)
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_4_Addr + i, temp);
                                                                    }
                                                                    else
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_4_Addr + i, Encoding.ASCII.GetBytes(""));
                                                                    }
                                                                }

                                                                for (int i = 0; i < 3; i++)
                                                                {
                                                                    temp = Block17_31_VehicleNames(WriteCardDetails, i + 15);
                                                                    if (temp != null)
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_5_Addr + i, temp);
                                                                    }
                                                                    else
                                                                    {
                                                                        MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block17_5_Addr + i, Encoding.ASCII.GetBytes(""));
                                                                    }
                                                                }
                                                            }

                                                            temp = Block31_OperatorSurname(WriteCardDetails);
                                                            if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block18_Addr, temp))
                                                            {
                                                                temp = Block32_Dover(WriteCardDetails);
                                                                if (MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, cardDetailsW.Block19_Addr, temp))
                                                                {
                                                                    temp = Blank_Block_Temp_1(WriteCardDetails);
                                                                    MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, 60, temp);
                                                                    temp = Blank_Block_Temp_2(WriteCardDetails);
                                                                    MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, 61, temp);
                                                                    temp = Blank_Block_Temp_3(WriteCardDetails);
                                                                    MernokRFID_interface.Mifare_Write_Block(Mifare_key.A, 0, 62, temp);
                                                                    return(100);
                                                                }
                                                                else
                                                                {
                                                                    return(14);
                                                                }
                                                            }
                                                            else
                                                            {
                                                                return(13);
                                                            }
                                                        }
                                                        else
                                                        {
                                                            return(12);
                                                        }
                                                    }
                                                    else
                                                    {
                                                        return(11);
                                                    }
                                                    //MessageBox.Show("Card Successfullly Programed");
                                                }
                                                else
                                                {
                                                    return(10);
                                                }
                                                //MessageBox.Show("Card Programeing failed at block 10");
                                            }
                                            else
                                            {
                                                return(9);
                                            }
                                            //MessageBox.Show("Card Programeing failed at block 9");
                                        }
                                        else
                                        {
                                            return(8);
                                        }
                                        //MessageBox.Show("Card Programeing failed at block 8");
                                    }
                                    else
                                    {
                                        return(7);
                                    }
                                    //MessageBox.Show("Card Programeing failed at block 7");
                                }
                                else
                                {
                                    return(6);
                                }
                                // MessageBox.Show("Card Programeing failed at block 6");
                            }
                            else
                            {
                                return(5);
                            }
                            // MessageBox.Show("Card Programeing failed at block 5");
                        }
                        else
                        {
                            return(4);
                        }
                        //MessageBox.Show("Card Programeing failed at block 4");
                    }
                    else
                    {
                        return(2);
                    }
                    //MessageBox.Show("Card Programeing failed at block 2");
                }
                else
                {
                    return(1);
                }
                //MessageBox.Show("Card Programeing failed at block 1");
            }
            return(0);
        }
        public bool Block11Info()
        {
            byte[] output1;
            if (UID != 0)
            {
                for (int i = 0; i < 3; i++) //block1
                {
                    if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block17_1_Addr + i, out output1))
                    {
                        VehicleName_read(output1, i);
                        //return true;
                    }
                    else
                    {
                        return(false);
                    }
                }

                for (int i = 0; i < 3; i++)//block2
                {
                    if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block17_2_Addr + i, out output1))
                    {
                        VehicleName_read(output1, i + 3);
                        //return true;
                    }
                    else
                    {
                        return(false);
                    }
                }

                for (int i = 0; i < 3; i++)//block3
                {
                    if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block17_3_Addr + i, out output1))
                    {
                        VehicleName_read(output1, i + 6);
                        //return true;
                    }
                    else
                    {
                        return(false);
                    }
                }

                for (int i = 0; i < 3; i++)//block4
                {
                    if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block17_4_Addr + i, out output1))
                    {
                        VehicleName_read(output1, i + 9);
                        //return true;
                    }
                    else
                    {
                        return(false);
                    }
                }

                for (int i = 0; i < 3; i++)//block5
                {
                    if (MernokRFID_interface.Mifair_Read_Block(0, 0, cardDetails.Block17_5_Addr + i, out output1))
                    {
                        VehicleName_read(output1, i + 12);
                        //return true;
                    }
                    else
                    {
                        return(false);
                    }
                }

                return(true);
            }
            else
            {
                return(false);
            }
        }