public void Write(MainWindow mainForm, byte[] fragment_update_array, uint data_fragment_number)
        {
            byte[] byte_array = new byte[256]; // verificar este tamanho
            int    i          = 0;
            uint   j          = 0;
            uint   address    = 0x600000 + (data_fragment_number * 235);

            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((address >> 16) & 0xFF);
            byte_array[i++] = (byte)((address >> 8) & 0xFF);
            byte_array[i++] = (byte)(address & 0xFF);

            byte_array[i++] = (byte)fragment_update_array.Length;
            int temp = i;

            //TODO: Create a function for this for


            //Options
            for (i = temp, j = 0; i < (temp + fragment_update_array.Length); i++, j++)
            {
                byte_array[i] = fragment_update_array[j];
            }

            byte_array[4] = (byte)fragment_update_array.Length;
            General protocol = new General();

            protocol.send_msg((uint)(i), byte_array, mainForm.cp_id, mainForm); // TODO: Check if cp_id is needed
        }
        public void Read(MainWindow mainForm, uint request_fragment)
        {
            byte[] byte_array = new byte[63];

            uint i = 0;
            int  keypad_address = 0x600000 + ((int)request_fragment * 240);
            byte size           = 240;

            if (request_fragment == 4368)
            {
                size = 16;
            }

            // Create first 5 bytes of the request
            byte_array[i++] = 0x20;
            byte_array[i++] = (byte)((keypad_address >> 16) & 0xff);
            byte_array[i++] = (byte)((keypad_address >> 8) & 0xff);
            byte_array[i++] = (byte)((keypad_address) & 0xff);
            byte_array[i++] = size;

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainForm.cp_id, mainForm);     // TODO: Check if cp_id is neededs
            System.Threading.Thread.Sleep(20);
        }
        public void WriteUpdateDone(MainWindow mainForm)
        {
            byte[] trama_a_enviar = new byte[1];
            uint   i = 0;

            trama_a_enviar[i++] = Constants.UPDATE_DONE_CODE;
            General protocol = new General();

            protocol.send_msg((uint)trama_a_enviar.Length, trama_a_enviar, mainForm.cp_id, mainForm);
        }
Exemple #4
0
        public void read(MainWindow mainForm)
        {
            byte[] byte_array = new byte[63];
            uint   i          = 0;

            byte_array[i++] = 0xD0;


            General protocol = new General();

            protocol.send_msg(i, byte_array, mainForm.cp_id, mainForm); // TODO: Check if cp_id is neededs
        }
Exemple #5
0
        public void read(MainWindow mainForm, uint keypad_number)
        {
            byte[] byte_array     = new byte[63];
            uint   i              = 0;
            uint   keypad_address = 0x1000 + (512 * (keypad_number - 1));
            byte   size           = 240;

            // Create first 5 bytes of the request
            byte_array[i++] = 0x20;
            byte_array[i++] = (byte)((keypad_address >> 16) & 0xff);
            byte_array[i++] = (byte)((keypad_address >> 8) & 0xff);
            byte_array[i++] = (byte)((keypad_address) & 0xff);
            byte_array[i++] = size;

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainForm.cp_id, mainForm); // TODO: Check if cp_id is neededs
        }
Exemple #6
0
        internal void send_action(byte id, byte action, byte[] code, MainWindow mainForm, byte MessageType)
        {
            byte[] byte_array = new byte[63];
            uint   i          = 0;

            byte_array[i++] = MessageType;
            byte_array[i++] = id;
            byte_array[i++] = action;

            foreach (byte a in code)
            {
                byte_array[i++] = a;
            }

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainForm.cp_id, mainForm); // TODO: Check if cp_id is neededs
        }
        internal void read(MainWindow mainWindow, uint user_number)
        {
            byte[] byte_array     = new byte[63];
            uint   i              = 0;
            uint   zone_1_address = 0x45000 + (256 * (user_number - 1));
            byte   size           = 240;

            // Create first 5 bytes of the request
            byte_array[i++] = 0x20;
            byte_array[i++] = (byte)((zone_1_address >> 16) & 0xff);
            byte_array[i++] = (byte)((zone_1_address >> 8) & 0xff);
            byte_array[i++] = (byte)((zone_1_address) & 0xff);
            byte_array[i++] = size;

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainWindow.cp_id, mainWindow); // TODO: Check if cp_id is neededs
        }
        internal void read(MainWindow mainWindow, uint dialer_number)
        {
            byte[] byte_array     = new byte[63];
            uint   i              = 0;
            uint   zone_1_address = 0x69000 + (4096 * (dialer_number - 1));
            byte   size           = 240;

            // Create first 5 bytes of the request
            byte_array[i++] = 0x20;
            byte_array[i++] = (byte)((zone_1_address >> 16) & 0xff);
            byte_array[i++] = (byte)((zone_1_address >> 8) & 0xff);
            byte_array[i++] = (byte)((zone_1_address) & 0xff);
            byte_array[i++] = size;

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainWindow.cp_id, mainWindow);
        }
Exemple #9
0
        public void read(MainWindow mainForm, uint area_number)
        {
            byte[] byte_array        = new byte[63];
            uint   i                 = 0;
            uint   partition_mem_pos = Constants.KP_AREAS_INIC_ADDR + (Constants.KP_FLASH_TAMANHO_DADOS_PARTICOES_FLASH * (area_number - 1));
            byte   size              = 240;

            // Create first 5 bytes of the request
            byte_array[i++] = Constants.READ_CODE;
            byte_array[i++] = (byte)((partition_mem_pos >> 16) & 0xff);
            byte_array[i++] = (byte)((partition_mem_pos >> 8) & 0xff);
            byte_array[i++] = (byte)((partition_mem_pos) & 0xff);
            byte_array[i++] = size;

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainForm.cp_id, mainForm); // TODO: Check if cp_id is neededs
        }
        public void read(MainWindow mainWindow, uint output_number)
        {
            byte[] byte_array     = new byte[63];
            uint   i              = 0;
            uint   keypad_address = 0x72000 + (256 * (output_number - 1));
            byte   size           = 240;

            // Create first 5 bytes of the request
            byte_array[i++] = 0x20;
            byte_array[i++] = (byte)((keypad_address >> 16) & 0xff);
            byte_array[i++] = (byte)((keypad_address >> 8) & 0xff);
            byte_array[i++] = (byte)((keypad_address) & 0xff);
            byte_array[i++] = size;

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainWindow.cp_id, mainWindow);
        }
Exemple #11
0
        internal void write(MainWindow mainWindow, byte[] fragment_data_bytes, uint fragment_message_id)
        {
            //int KP_FLASH_NUM_MAX_AUDIO_SAMPLES = 1024;
            //byte[] KP_FLASH_TAMANHO_AUDIO_SISTEMA = new byte[byte.Parse("4") * 2 * 100];
            //byte[] KP_FLASH_INICIO_ESTRUTURA_AUDIO = new byte[2 * 1024 + 1024 + BitConverter.ToInt32(KP_FLASH_TAMANHO_AUDIO_SISTEMA,0)];

            //var _KP_FLASH_INICIO_ESTRUTURA_AUDIO = BitConverter.ToInt32(KP_FLASH_INICIO_ESTRUTURA_AUDIO, 0);
            //var _KP_FLASH_TAMANHO_AUDIO_SISTEMA = BitConverter.ToInt32(KP_FLASH_TAMANHO_AUDIO_SISTEMA, 0);
            //var sum = _KP_FLASH_INICIO_ESTRUTURA_AUDIO + _KP_FLASH_TAMANHO_AUDIO_SISTEMA * KP_FLASH_NUM_MAX_AUDIO_SAMPLES;
            //byte[] KP_FLASH_INICIO_AUDIO = BitConverter.GetBytes(sum);

            //byte[] KP_FLASH_FIM_FAIXAS_AUDIO = new byte[6 * 1024 * 1024 - 1];
            //byte[] KP_FLASH_INICIO_AUDIO_SISTEMA = new byte[2 * 1024 * 1024];


            byte[] byte_array = new byte[256]; // verificar este tamanho
            int    i          = 0;
            uint   j          = 0;
            uint   address    = 0x200320 + (fragment_message_id * 235);

            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((address >> 16) & 0xFF);
            byte_array[i++] = (byte)((address >> 8) & 0xFF);
            byte_array[i++] = (byte)(address & 0xFF);

            byte_array[i++] = (byte)fragment_data_bytes.Length;
            int temp = i;

            //TODO: Create a function for this for

            //Options
            for (i = temp, j = 0; i < (temp + fragment_data_bytes.Length); i++, j++)
            {
                byte_array[i] = fragment_data_bytes[j];
            }

            //byte_array[4] = (byte)fragment_data_bytes.Length;
            byte_array[4] = (byte)(i - temp);
            General protocol = new General();

            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow); // TODO: Check if cp_id is needed
        }
Exemple #12
0
        internal void read(MainWindow mainWindow, uint event_number)
        {
            byte[] byte_array     = new byte[63];
            uint   i              = 0;
            uint   events_address = Constants.KP_EVENTS_INIC_ADDR + (Constants.KP_FLASH_TAMANHO_DADOS_EVENTOS_FLASH * (event_number - 1));
            byte   size           = 240;

            // Create first 5 bytes of the request
            byte_array[i++] = 0x20;
            byte_array[i++] = (byte)((events_address >> 16) & 0xff);
            byte_array[i++] = (byte)((events_address >> 8) & 0xff);
            byte_array[i++] = (byte)((events_address) & 0xff);
            byte_array[i++] = size;


            string StringByte = BitConverter.ToString(byte_array);

            General protocol = new General();

            protocol.send_msg(i, byte_array, mainWindow.cp_id, mainWindow); //TODO: Check if cp_id is neededs
        }
        internal void write(MainWindow mainform, uint audio_system_configuration_id)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            audio_system_configuration_id = audio_system_configuration_id - 1;

            int  i = 0;
            uint j = 0;
            uint audio_system_configuration_address = 0x200000 + (8 * (audio_system_configuration_id));

            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((audio_system_configuration_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((audio_system_configuration_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(audio_system_configuration_address & 0xFF);
            byte_array[i++] = 240;
            int temp = i;

            #region AUDIO TRACKS
            byte[] audio_tracks = new byte[8];
            audio_tracks[0] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO1"].ToString())) & 0xFF);
            audio_tracks[1] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO1"].ToString()) - 1) >> 8);
            audio_tracks[2] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO2"].ToString())) & 0xFF);
            audio_tracks[3] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO2"].ToString()) - 1) >> 8);
            audio_tracks[4] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO3"].ToString())) & 0xFF);
            audio_tracks[5] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO3"].ToString()) - 1) >> 8);
            audio_tracks[6] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO4"].ToString())) & 0xFF);
            audio_tracks[7] = (byte)((int.Parse(mainform.databaseDataSet.AudioSystemConfiguration.Rows[(int)audio_system_configuration_id]["AUDIO4"].ToString()) - 1) >> 8);
            #endregion

            for (i = temp, j = 0; i < temp + audio_tracks.Length; i++, j++)
            {
                byte_array[i] = audio_tracks[j];
            }

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)i, byte_array, mainform.cp_id, mainform); // TODO: Check if cp_id is needed
        }
        public void Write(MainWindow mainWindow, uint dialer_index)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho

            #region Dialer options read from dataset
            uint dialer_options = 0;

            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Active"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_ENABLE"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Fax defeat"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_FAX_DEFEAT"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Monitor line"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LINE_MONITOR"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Make test call"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_MAKE_TEST_CALL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Reserved 2"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_reservado2"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Reserved 3"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_reservado3"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Reserved 4"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_reservado4"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Long DTMF"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_SEND_LONG_DTMF"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Step number each call"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_STEP_NUMB_EACH_CALL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Reserved 5"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_reservado5"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Reserved 6"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_reservado6"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Test call only armed"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_TEST_CALL_ONLY_ARMED"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Hold domestic for DTMF"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_HOLD_DOMESTIC_FOR_DTMF"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["First open last close"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_FIRST_OPEN_LAST_CLOSE"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["List in output disarm dial"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LIST_IN_OUTPUT_DISARM_DIAL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["List in output arm dial"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LIST_IN_OUTPUT_ARM_DIAL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["List in output stay dial"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LIST_IN_OUTPUT_STAY_DIAL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["List in output disarm call"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LIST_IN_OUTPUT_DISARM_CALL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["List in output arm call"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LIST_IN_OUTPUT_ARM_CALL"])[0]));
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["List in output stay call"].Equals(true))
            {
                dialer_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_COMUNIC_OPCOES_LIST_IN_OUTPUT_STAY_CALL"])[0]));
            }

            #endregion

            string description = ((string)mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Description"]).ToUpper();

            #region UNUSED
            //active communicator
            byte[] active_communicator_bytes = (byte[])mainWindow.databaseDataSet.Dialer.Rows[(int)(dialer_index)]["Active communicator"];


            //WEEK DAYS
            byte week_days_for_test_call = 0;
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Monday"].Equals(true))
            {
                week_days_for_test_call += 0x01;
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Tuesday"].Equals(true))
            {
                week_days_for_test_call += 0x02;
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Wednesday"].Equals(true))
            {
                week_days_for_test_call += 0x04;
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Thursday"].Equals(true))
            {
                week_days_for_test_call += 0x08;
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Friday"].Equals(true))
            {
                week_days_for_test_call += 0x10;
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Saturday"].Equals(true))
            {
                week_days_for_test_call += 0x20;
            }
            if (mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["Sunday"].Equals(true))
            {
                week_days_for_test_call += 0x40;
            }

            //hour_for_test_call
            byte[] hour_for_test_call_bytes = (byte[])mainWindow.databaseDataSet.Dialer.Rows[(int)(dialer_index)]["Test call hour"];

            //keypad_listening_options
            byte[] keypad_listening_options_bytes = (byte[])mainWindow.databaseDataSet.Dialer.Rows[(int)(dialer_index)]["Keypad listening options"];

            //output1_listening_options
            byte[] output1_listening_options_bytes = (byte[])mainWindow.databaseDataSet.Dialer.Rows[(int)(dialer_index)]["Output 1 listening options"];

            //area_dial_delay
            byte[] area_dial_delay_bytes = (byte[])mainWindow.databaseDataSet.Dialer.Rows[(int)(dialer_index)]["Area dial delay"];

            //area_cancel_window
            byte[] area_cancel_window_bytes = (byte[])mainWindow.databaseDataSet.Dialer.Rows[(int)(dialer_index)]["Area cancel window"];
            #endregion


            byte[] dialer_options_bytes = BitConverter.GetBytes(dialer_options);

            byte[] description_bytes = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);

            string ring_counter     = ((string)mainWindow.databaseDataSet.Dialer.Rows[(int)dialer_index]["RingCounter"]).ToUpper();
            byte   ring_counter_max = byte.Parse(ring_counter);

            int  i = 0;
            uint j = 0;
            uint dialer_address = 0x69000;
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((dialer_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((dialer_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(dialer_address & 0xFF);
            byte_array[i++] = 240;
            int temp = i;

            //options
            for (i = (temp + (int)this.attributes["options"]["address"]), j = 0; i < (temp + (int)this.attributes["options"]["address"] + dialer_options_bytes.Length); i++, j++)
            {
                byte_array[i] = dialer_options_bytes[j];
            }

            //Description
            for (i = (int)attributes["description"]["address"] + temp, j = 0; i < ((int)attributes["description"]["address"] + temp + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
            }

            #region unused
            //Active communicator - unused
            for (i = (temp + (int)this.attributes["active"]["address"]), j = 0; i < (temp + (int)this.attributes["active"]["address"] + active_communicator_bytes.Length); i++, j++)
            {
                byte_array[i] = active_communicator_bytes[j];
            }

            //week days for test call
            i             = (temp + (int)this.attributes["week_days_for_test_call"]["address"]);
            byte_array[i] = week_days_for_test_call;
            i++;


            //hour_for_test_call
            for (i = (temp + (int)this.attributes["hour_for_test_call"]["address"]), j = 0; i < (temp + (int)this.attributes["hour_for_test_call"]["address"] + hour_for_test_call_bytes.Length); i++, j++)
            {
                byte_array[i] = hour_for_test_call_bytes[j];
            }

            //keypad_listening_options
            for (i = (temp + (int)this.attributes["keypad_listening_options"]["address"]), j = 0; i < (temp + (int)this.attributes["keypad_listening_options"]["address"] + keypad_listening_options_bytes.Length); i++, j++)
            {
                byte_array[i] = keypad_listening_options_bytes[j];
            }

            //output1_listening_options
            for (i = (temp + (int)this.attributes["output1_listening_options"]["address"]), j = 0; i < (temp + (int)this.attributes["output1_listening_options"]["address"] + output1_listening_options_bytes.Length); i++, j++)
            {
                byte_array[i] = output1_listening_options_bytes[j];
            }

            //area_dial_delay
            for (i = (temp + (int)this.attributes["area_dial_delay"]["address"]), j = 0; i < (temp + (int)this.attributes["area_dial_delay"]["address"] + area_dial_delay_bytes.Length); i++, j++)
            {
                byte_array[i] = area_dial_delay_bytes[j];
            }

            //area_cancel_window
            for (i = (temp + (int)this.attributes["area_cancel_window"]["address"]), j = 0; i < (temp + (int)this.attributes["area_cancel_window"]["address"] + area_cancel_window_bytes.Length); i++, j++)
            {
                byte_array[i] = area_cancel_window_bytes[j];
            }
            #endregion

            //Ring counter max
            for (i = (int)attributes["ring_counter_max"]["address"] + temp, j = 0; i < ((int)attributes["ring_counter_max"]["address"] + temp + 1); i++, j++)
            {
                byte_array[i] = ring_counter_max;
            }

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow);
        }
Exemple #15
0
        public void Write(MainWindow mainForm, uint user_number)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            user_number = user_number - 1;
            string description = "";

            try
            {
                description = ((string)mainForm.databaseDataSet.User.Rows[(int)(user_number)]["Description"]).ToUpper();
            }
            catch
            {
            }

            #region User options read from dataset
            ////USER OPTIONS
            Int32 user_options = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can arm away"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_arm_away"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can arm stay"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_arm_stay"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can disarm away"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_disarm_away"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can disarm stay"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_disarm_stay"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Security guard code"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["security_guard_code"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can divert"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_divert"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can view event memory"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_view_events"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["User active"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["user_active"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can change own code"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_change_own_code"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can change all codes"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_change_all_codes"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Allow installer mode"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["allow_installer_mode"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can change phone numbers"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_change_phone_numbers"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Can change clock"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["can_change_clock"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Allow DTMF codes"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["allow_dtmf_codes"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Check timezones"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["check_timezones"])[0]));
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Check date"].Equals(true))
            {
                user_options += (int)(0xFFFFFFFF & (((int[])this.attributes["options"]["check_date"])[0]));
            }
            #endregion

            ulong user_code = ulong.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["UserCode"].ToString());

            short user_type    = (short)((int)mainForm.databaseDataSet.User.Rows[(int)(user_number)]["User type"]);
            short group_id     = (short)((int)mainForm.databaseDataSet.User.Rows[(int)(user_number)]["Group Id"]);
            short partition_id = 0;
            #region USER PARTITIONS FLAGS
            //User partitions
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 1"].Equals(true))
            {
                partition_id += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 2"].Equals(true))
            {
                partition_id += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 3"].Equals(true))
            {
                partition_id += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 4"].Equals(true))
            {
                partition_id += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 5"].Equals(true))
            {
                partition_id += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 6"].Equals(true))
            {
                partition_id += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 7"].Equals(true))
            {
                partition_id += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Area 8"].Equals(true))
            {
                partition_id += 0x80;
            }
            #endregion
            short reserved = (short)((int)mainForm.databaseDataSet.User.Rows[(int)(user_number)]["Reserved"]);

            #region USER TIMEZONES FLAGS
            short timezones_while_active = 0;
            ///TIMEZONE while active
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 1 while active"].Equals(true))
            {
                timezones_while_active += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 2 while active"].Equals(true))
            {
                timezones_while_active += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 3 while active"].Equals(true))
            {
                timezones_while_active += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 4 while active"].Equals(true))
            {
                timezones_while_active += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 5 while active"].Equals(true))
            {
                timezones_while_active += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 6 while active"].Equals(true))
            {
                timezones_while_active += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 7 while active"].Equals(true))
            {
                timezones_while_active += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 8 while active"].Equals(true))
            {
                timezones_while_active += 0x80;
            }
            ///TIMEZONE while inactive
            short timezones_while_inactive = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 1 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 2 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 3 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 4 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 5 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 6 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 7 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Timezone 8 while inactive"].Equals(true))
            {
                timezones_while_inactive += 0x80;
            }
            #endregion
            DateTime initial_date = (DateTime)(mainForm.databaseDataSet.User.Rows[(int)(user_number)]["Initial date"]);
            DateTime final_date   = (DateTime)(mainForm.databaseDataSet.User.Rows[(int)(user_number)]["Final date"]);

            #region USER BUTTONS CONFIGURATION
            #region PARTITIONS AWAY
            //BUTTON A
            byte user_button_a_part_away = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 1"].Equals(true))
            {
                user_button_a_part_away += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 2"].Equals(true))
            {
                user_button_a_part_away += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 3"].Equals(true))
            {
                user_button_a_part_away += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 4"].Equals(true))
            {
                user_button_a_part_away += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 5"].Equals(true))
            {
                user_button_a_part_away += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 6"].Equals(true))
            {
                user_button_a_part_away += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 7"].Equals(true))
            {
                user_button_a_part_away += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part away 8"].Equals(true))
            {
                user_button_a_part_away += 0x80;
            }

            //BUTTON B
            byte user_button_b_part_away = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 1"].Equals(true))
            {
                user_button_b_part_away += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 2"].Equals(true))
            {
                user_button_b_part_away += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 3"].Equals(true))
            {
                user_button_b_part_away += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 4"].Equals(true))
            {
                user_button_b_part_away += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 5"].Equals(true))
            {
                user_button_b_part_away += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 6"].Equals(true))
            {
                user_button_b_part_away += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 7"].Equals(true))
            {
                user_button_b_part_away += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part away 8"].Equals(true))
            {
                user_button_b_part_away += 0x80;
            }

            //BUTTON C
            byte user_button_c_part_away = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 1"].Equals(true))
            {
                user_button_c_part_away += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 2"].Equals(true))
            {
                user_button_c_part_away += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 3"].Equals(true))
            {
                user_button_c_part_away += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 4"].Equals(true))
            {
                user_button_c_part_away += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 5"].Equals(true))
            {
                user_button_c_part_away += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 6"].Equals(true))
            {
                user_button_c_part_away += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 7"].Equals(true))
            {
                user_button_c_part_away += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part away 8"].Equals(true))
            {
                user_button_c_part_away += 0x80;
            }

            //BUTTON D
            byte user_button_d_part_away = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 1"].Equals(true))
            {
                user_button_d_part_away += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 2"].Equals(true))
            {
                user_button_d_part_away += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 3"].Equals(true))
            {
                user_button_d_part_away += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 4"].Equals(true))
            {
                user_button_d_part_away += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 5"].Equals(true))
            {
                user_button_d_part_away += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 6"].Equals(true))
            {
                user_button_d_part_away += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 7"].Equals(true))
            {
                user_button_d_part_away += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part away 8"].Equals(true))
            {
                user_button_d_part_away += 0x80;
            }
            #endregion
            #region PARTITIONS STAY
            //BUTTON A
            byte user_button_a_part_stay = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 1"].Equals(true))
            {
                user_button_a_part_stay += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 2"].Equals(true))
            {
                user_button_a_part_stay += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 3"].Equals(true))
            {
                user_button_a_part_stay += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 4"].Equals(true))
            {
                user_button_a_part_stay += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 5"].Equals(true))
            {
                user_button_a_part_stay += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 6"].Equals(true))
            {
                user_button_a_part_stay += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 7"].Equals(true))
            {
                user_button_a_part_stay += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button A part stay 8"].Equals(true))
            {
                user_button_a_part_stay += 0x80;
            }

            //BUTTON B
            byte user_button_b_part_stay = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 1"].Equals(true))
            {
                user_button_b_part_stay += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 2"].Equals(true))
            {
                user_button_b_part_stay += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 3"].Equals(true))
            {
                user_button_b_part_stay += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 4"].Equals(true))
            {
                user_button_b_part_stay += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 5"].Equals(true))
            {
                user_button_b_part_stay += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 6"].Equals(true))
            {
                user_button_b_part_stay += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 7"].Equals(true))
            {
                user_button_b_part_stay += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button B part stay 8"].Equals(true))
            {
                user_button_b_part_stay += 0x80;
            }

            //BUTTON C
            byte user_button_c_part_stay = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 1"].Equals(true))
            {
                user_button_c_part_stay += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 2"].Equals(true))
            {
                user_button_c_part_stay += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 3"].Equals(true))
            {
                user_button_c_part_stay += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 4"].Equals(true))
            {
                user_button_c_part_stay += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 5"].Equals(true))
            {
                user_button_c_part_stay += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 6"].Equals(true))
            {
                user_button_c_part_stay += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 7"].Equals(true))
            {
                user_button_c_part_stay += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button C part stay 8"].Equals(true))
            {
                user_button_c_part_stay += 0x80;
            }

            //BUTTON D
            byte user_button_d_part_stay = 0;
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 1"].Equals(true))
            {
                user_button_d_part_stay += 0x01;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 2"].Equals(true))
            {
                user_button_d_part_stay += 0x02;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 3"].Equals(true))
            {
                user_button_d_part_stay += 0x04;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 4"].Equals(true))
            {
                user_button_d_part_stay += 0x08;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 5"].Equals(true))
            {
                user_button_d_part_stay += 0x10;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 6"].Equals(true))
            {
                user_button_d_part_stay += 0x20;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 7"].Equals(true))
            {
                user_button_d_part_stay += 0x40;
            }
            if (mainForm.databaseDataSet.User.Rows[(int)user_number]["Button D part stay 8"].Equals(true))
            {
                user_button_d_part_stay += 0x80;
            }
            #endregion
            #endregion
            byte[] buttons_part_away_bytes = new byte[5];
            buttons_part_away_bytes[0] = user_button_a_part_away;
            buttons_part_away_bytes[1] = user_button_b_part_away;
            buttons_part_away_bytes[2] = user_button_c_part_away;
            buttons_part_away_bytes[3] = user_button_d_part_away;
            byte[] buttons_part_stay_bytes = new byte[5];
            buttons_part_stay_bytes[0] = user_button_a_part_stay;
            buttons_part_stay_bytes[1] = user_button_b_part_stay;
            buttons_part_stay_bytes[2] = user_button_c_part_stay;
            buttons_part_stay_bytes[3] = user_button_d_part_stay;


            #region AUDIO TRACKS
            byte[] audio_tracks = new byte[8];
            if (user_number < 32)
            {
                audio_tracks[0] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 1"].ToString()) - 1) & 0xFF);
                audio_tracks[1] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 1"].ToString()) - 1) >> 8);
                audio_tracks[2] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 2"].ToString()) - 1) & 0xFF);
                audio_tracks[3] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 2"].ToString()) - 1) >> 8);
                audio_tracks[4] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 3"].ToString()) - 1) & 0xFF);
                audio_tracks[5] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 3"].ToString()) - 1) >> 8);
                audio_tracks[6] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 4"].ToString()) - 1) & 0xFF);
                audio_tracks[7] = (byte)((int.Parse(mainForm.databaseDataSet.User.Rows[(int)user_number]["Audio track 4"].ToString()) - 1) >> 8);
            }
            #endregion

            #region Output permissions
            long outputs_permissions = 0;
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output1Permissions"]).Equals(true))
            {
                outputs_permissions += 0x01;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output2Permissions"]).Equals(true))
            {
                outputs_permissions += 0x02;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output3Permissions"]).Equals(true))
            {
                outputs_permissions += 0x04;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output4Permissions"]).Equals(true))
            {
                outputs_permissions += 0x08;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output5Permissions"]).Equals(true))
            {
                outputs_permissions += 0x10;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output6Permissions"]).Equals(true))
            {
                outputs_permissions += 0x20;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output7Permissions"]).Equals(true))
            {
                outputs_permissions += 0x40;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output8Permissions"]).Equals(true))
            {
                outputs_permissions += 0x80;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output9Permissions"]).Equals(true))
            {
                outputs_permissions += 0x100;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output10Permissions"]).Equals(true))
            {
                outputs_permissions += 0x200;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output11Permissions"]).Equals(true))
            {
                outputs_permissions += 0x400;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output12Permissions"]).Equals(true))
            {
                outputs_permissions += 0x800;
            }
            if (Convert.ToBoolean(mainForm.databaseDataSet.User.Rows[(int)user_number]["Output13Permissions"]).Equals(true))
            {
                outputs_permissions += 0x1000;
            }
            #endregion

            byte[] user_code_bytes = GetIntArray(user_code);

            byte[] description_bytes = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);
            byte[] user_options_bytes                  = BitConverter.GetBytes(user_options);
            byte[] user_type_bytes                     = BitConverter.GetBytes(user_type);
            byte[] user_group_id_bytes                 = BitConverter.GetBytes(group_id);
            byte[] user_partitions_bytes               = BitConverter.GetBytes(partition_id);
            byte[] user_reserved_bytes                 = BitConverter.GetBytes(reserved);
            byte[] user_timezones_while_active_bytes   = BitConverter.GetBytes(timezones_while_active);
            byte[] user_timezones_while_inactive_bytes = BitConverter.GetBytes(timezones_while_inactive);
            byte[] initial_date_bytes                  = new byte[4];
            initial_date_bytes[0] = (byte)(initial_date.Day);
            initial_date_bytes[1] = (byte)(initial_date.Month);
            initial_date_bytes[2] = (BitConverter.GetBytes(initial_date.Year))[0];
            initial_date_bytes[3] = (BitConverter.GetBytes(initial_date.Year))[1];
            byte[] final_date_bytes = new byte[4];
            final_date_bytes[0] = (byte)(final_date.Day);
            final_date_bytes[1] = (byte)(final_date.Month);
            final_date_bytes[2] = (BitConverter.GetBytes(final_date.Year))[0];
            final_date_bytes[3] = (BitConverter.GetBytes(final_date.Year))[1];

            byte[] outputs_permissions_bytes = BitConverter.GetBytes(outputs_permissions);

            int  i            = 0;
            uint j            = 0;
            uint user_address = 0x45000 + (256 * (user_number));
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((user_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((user_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(user_address & 0xFF);

            byte_array[i++] = 240;
            int temp = i;
            //TODO: Create a function for this for

            //Description
            for (i = temp, j = 0; i < (temp + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
                if ((description_bytes.Length - 1) == (j))
                {
                    for (i = i + 1; i < (64 + temp); i++)
                    {
                        byte_array[i] = 0;
                    }
                }
            }
            //Options
            for (i = (temp + (int)this.attributes["options"]["address"]), j = 0; i < (temp + (int)this.attributes["options"]["address"] + user_options_bytes.Length); i++, j++)
            {
                byte_array[i] = user_options_bytes[j];
            }

            //user code
            for (i = (int)this.attributes["user_code"]["address"] + temp, j = 0; i < ((int)this.attributes["user_code"]["address"] + temp + user_code_bytes.Length); i++, j++)
            {
                byte_array[i] = 0xFF;
                byte_array[i] = (byte)(user_code_bytes[j]);

                //Add 0xFF if code doesn't have maximum length
                if (i.Equals(((int)this.attributes["user_code"]["address"] + temp + (user_code_bytes.Length - 1))) && user_code_bytes.Length < 8)
                {
                    int counter = 8 - user_code_bytes.Length;
                    for (int k = counter; k > 0; k--)
                    {
                        byte_array[i + k] = 0xFF;
                    }
                }
            }

            //user type
            for (i = (temp + (int)this.attributes["user_type"]["address"]), j = 0; i < (temp + (int)this.attributes["user_type"]["address"] + user_type_bytes.Length); i++, j++)
            {
                byte_array[i] = user_type_bytes[j];
            }
            //group_id
            for (i = (temp + (int)this.attributes["group_id"]["address"]), j = 0; i < (temp + (int)this.attributes["group_id"]["address"] + user_group_id_bytes.Length); i++, j++)
            {
                byte_array[i] = user_group_id_bytes[j];
            }
            //partition_id
            for (i = (temp + (int)this.attributes["partition_id"]["address"]), j = 0; i < (temp + (int)this.attributes["partition_id"]["address"] + user_partitions_bytes.Length); i++, j++)
            {
                byte_array[i] = user_partitions_bytes[j];
            }
            //reserved
            for (i = (temp + (int)this.attributes["reserved"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved"]["address"] + user_reserved_bytes.Length); i++, j++)
            {
                byte_array[i] = user_reserved_bytes[j];
            }
            ////initial_date
            for (i = (temp + (int)this.attributes["initial_date"]["address"]), j = 0; i < (temp + (int)this.attributes["initial_date"]["address"] + initial_date_bytes.Length); i++, j++)
            {
                byte_array[i] = initial_date_bytes[j];
            }
            //final date
            for (i = (temp + (int)this.attributes["final_date"]["address"]), j = 0; i < (temp + (int)this.attributes["final_date"]["address"] + final_date_bytes.Length); i++, j++)
            {
                byte_array[i] = final_date_bytes[j];
            }
            //timezones while active
            for (i = (temp + (int)this.attributes["timezones_while_active"]["address"]), j = 0; i < (temp + (int)this.attributes["timezones_while_active"]["address"] + user_timezones_while_active_bytes.Length); i++, j++)
            {
                byte_array[i] = user_timezones_while_active_bytes[j];
            }
            //timezones while inactive
            for (i = (temp + (int)this.attributes["timezones_while_inactive"]["address"]), j = 0; i < (temp + (int)this.attributes["timezones_while_inactive"]["address"] + user_timezones_while_inactive_bytes.Length); i++, j++)
            {
                byte_array[i] = user_timezones_while_inactive_bytes[j];
            }

            #region Button config
            //AWAY
            for (i = (temp + (int)this.attributes["particoes_bot_away"]["address"]), j = 0; i < (temp + (int)this.attributes["particoes_bot_away"]["address"] + buttons_part_away_bytes.Length); i++, j++)
            {
                byte_array[i] = buttons_part_away_bytes[j];
            }
            //STAY
            for (i = (temp + (int)this.attributes["particoes_bot_stay"]["address"]), j = 0; i < (temp + (int)this.attributes["particoes_bot_stay"]["address"] + buttons_part_stay_bytes.Length); i++, j++)
            {
                byte_array[i] = buttons_part_stay_bytes[j];
            }
            #endregion

            #region Audio tracks
            for (i = ((int)attributes["audio_tracks"]["address"] + temp), j = 0; i < ((int)attributes["audio_tracks"]["address"] + temp + (audio_tracks.Length)); i++, j++)
            {
                byte_array[i] = audio_tracks[j];
            }
            #endregion

            #region Outputs permissions
            for (i = ((int)attributes["outputs_permissions"]["address"] + temp), j = 0; i < ((int)attributes["outputs_permissions"]["address"] + temp + (outputs_permissions_bytes.Length)); i++, j++)
            {
                byte_array[i] = outputs_permissions_bytes[j];
            }
            #endregion

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainForm.cp_id, mainForm);
        }
        public void Write(MainWindow mainWindow, uint global_system_index)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho

            //Output call code
            ulong output_call_code = ulong.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Outputs code"].ToString());

            #region Global system options read from dataset
            uint global_system_options = 0;

            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Arm if Battery low or 230V fail"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_ARM_IF_BATT_LOW_OR_AC_FAILS"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Revision date is active"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_REVISION_DATE_ACTIVE"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_RECEIVER_FAIL_RF_JAMMED_LOCKOUT"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_RECEIVER_FAIL_RF_JAMMED_LOCKOUT"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_INSTALLER_INFO"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_INSTALLER_INFO"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_PANEL_TAMPER_EOL"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_PANEL_TAMPER_EOL"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_DIRECT_INSTALLER_ACCESS"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_DIRECT_INSTALLER_ACCESS"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_MAINS_FAIL_TEST"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_MAINS_FAIL_TEST"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_EXTENDED_OUTPUT"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_EXTENDED_OUTPUT"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Time in minutes"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_TEMPO_EM_MINUTOS"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_INSTALLER_MODE_RESET_CONFIRM_ALARM"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_INSTALLER_MODE_RESET_CONFIRM_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_INSTALLER_MODE_RESET_TAMPER_ALARM"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_INSTALLER_MODE_RESET_TAMPER_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_INSTALLER_MODE_RESET_LOW_BAT_ALARM"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_INSTALLER_MODE_RESET_LOW_BAT_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_INSTALLER_MODE_RESET_SUPERVISORY_ALARM"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_INSTALLER_MODE_RESET_SUPERVISORY_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Not arm if keypad is faulty"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_CANNOT_ARM_IF_THERE_IS_KEYPAD_FAULT"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Not arm if line is faulty"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_CANNOT_ARM_IF_THERE_IS_LINE_FAULT"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Not arm if communications have problems"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_CANNOT_ARM_IF_THERE_IS_COMMS_FAULT"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_LOCK_KEYPAD_FOR90SEC_ATFER_10_CODE_ERRORS"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_LOCK_KEYPAD_FOR90SEC_ATFER_10_CODE_ERRORS"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_HIDE_USER_CODES_FROM_INSTALLER"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_HIDE_USER_CODES_FROM_INSTALLER"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_CODE_REQUIRED_TO_VIEW_MEMORY"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_CODE_REQUIRED_TO_VIEW_MEMORY"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_CANCEL_HANDOVER_ZONE_FUNCTION_IN_STAY_MODE"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_CANCEL_HANDOVER_ZONE_FUNCTION_IN_STAY_MODE"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output control is disabled when armed"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_OUTPUT_CONTROL_FROM_KEYPAD_IS_DISABLED_WHEN_ARMED"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_DATE_LOSS"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_DATE_LOSS"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_REVISION_DATE_REACHED"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_REVISION_DATE_REACHED"])[0]));
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["KP_GLOB_DEFAULT_CONFIGURATION"].Equals(true))
            {
                global_system_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_GLOB_DEFAULT_CONFIGURATION"])[0]));
            }

            #endregion

            #region Output permissions
            long outputs_permissions = 0;
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output1Permissions"]).Equals(true))
            {
                outputs_permissions += 0x01;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output2Permissions"]).Equals(true))
            {
                outputs_permissions += 0x02;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output3Permissions"]).Equals(true))
            {
                outputs_permissions += 0x04;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output4Permissions"]).Equals(true))
            {
                outputs_permissions += 0x08;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output5Permissions"]).Equals(true))
            {
                outputs_permissions += 0x10;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output6Permissions"]).Equals(true))
            {
                outputs_permissions += 0x20;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output7Permissions"]).Equals(true))
            {
                outputs_permissions += 0x40;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output8Permissions"]).Equals(true))
            {
                outputs_permissions += 0x80;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output9Permissions"]).Equals(true))
            {
                outputs_permissions += 0x100;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output10Permissions"]).Equals(true))
            {
                outputs_permissions += 0x200;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output11Permissions"]).Equals(true))
            {
                outputs_permissions += 0x400;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output12Permissions"]).Equals(true))
            {
                outputs_permissions += 0x800;
            }
            if (Convert.ToBoolean(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Output13Permissions"]).Equals(true))
            {
                outputs_permissions += 0x1000;
            }
            #endregion

            //Installer code
            ulong installer_code = ulong.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Installer code"].ToString());

            //Coation digit
            byte coation_digit = byte.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Coation digit"].ToString());

            //prefix
            ulong phone_prefix = ulong.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Phone prefix"].ToString());

            #region RESERVED
            byte[] reserved_1_bytes = (byte[])mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Reserved 1"];
            byte[] reserved_2_bytes = (byte[])mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Reserved 2"];
            #endregion

            //Dial report delay
            uint dial_report_delay = uint.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Dial report delay"].ToString());

            //mains_fail_report_delay
            uint mains_fail_report_delay = uint.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["230V fail report delay"].ToString());

            //receiver_fail_delay
            uint receiver_fail_delay = uint.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Receiver fail report delay"].ToString());

            //radio_detector_supervised_timer
            uint radio_detector_supervised_timer = uint.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Radio detector supervised timer"].ToString());

            //receiver_fail_delay
            uint CRA_client_number = uint.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["CRA client number"].ToString());

            //receiver_fail_delay
            uint event_code_session = uint.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Event code session"].ToString());

            #region Siren Tamper outputs
            byte[] siren_tamper_outputs = (byte[])attributes["siren_tamper"]["value"];
            siren_tamper_outputs[0] = (byte)((int)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Siren tamper output - 1"]);
            siren_tamper_outputs[1] = (byte)((int)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Siren tamper output - 2"]);
            siren_tamper_outputs[2] = (byte)((int)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Siren tamper output - 3"]);
            #endregion

            //Siren tamper config
            byte[] siren_tamper_config_bytes = (byte[])attributes["siren_tamper_config"]["value"];
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Siren tamper active"].Equals(true))
            {
                siren_tamper_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["siren_tamper_config"]["KP_TAMPER_CONFIG_ATIVO"])[0]);
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Siren tamper type"].Equals(0x02))
            {
                siren_tamper_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["siren_tamper_config"]["KP_TAMPER_CONFIG_NORMAL_CLOSE"])[0]);
            }

            #region Panel Tamper outputs
            byte[] panel_tamper_outputs = (byte[])attributes["panel_tamper"]["value"];
            panel_tamper_outputs[0] = (byte)((int)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Panel tamper output - 1"]);
            panel_tamper_outputs[1] = (byte)((int)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Panel tamper output - 2"]);
            panel_tamper_outputs[2] = (byte)((int)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Panel tamper output - 3"]);
            #endregion

            //Panel tamper config
            byte[] panel_tamper_config_bytes = (byte[])attributes["panel_tamper_config"]["value"];
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Panel tamper active"].Equals(true))
            {
                panel_tamper_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["panel_tamper_config"]["KP_TAMPER_CONFIG_ATIVO"])[0]);
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Panel tamper type"].Equals(0x02))
            {
                panel_tamper_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["panel_tamper_config"]["KP_TAMPER_CONFIG_NORMAL_CLOSE"])[0]);
            }

            //keyswitch_config
            byte[] keyswitch_config_bytes = (byte[])attributes["keyswitch_config"]["value"];
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Keyswitch active"].Equals(true))
            {
                keyswitch_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["keyswitch_config"]["KP_KEYSWITCH_CONFIG_ATIVO"])[0]);
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Keyswitch type"].Equals(0x02))
            {
                keyswitch_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["keyswitch_config"]["KP_KEYSWITCH_CONFIG_NORMAL_CLOSE"])[0]);
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Keyswitch toggle"].Equals(true))
            {
                keyswitch_config_bytes[0] += (byte)(0xFF & (byte)((uint[])this.attributes["keyswitch_config"]["KP_KEYSWITCH_CONFIG_TOGGLE"])[0]);
            }

            #region Keyswitch area away
            byte keyswitch_area_away = 0;
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 1 away"].Equals(true))
            {
                keyswitch_area_away += 0x01;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 2 away"].Equals(true))
            {
                keyswitch_area_away += 0x02;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 3 away"].Equals(true))
            {
                keyswitch_area_away += 0x04;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 4 away"].Equals(true))
            {
                keyswitch_area_away += 0x08;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 5 away"].Equals(true))
            {
                keyswitch_area_away += 0x10;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 6 away"].Equals(true))
            {
                keyswitch_area_away += 0x20;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 7 away"].Equals(true))
            {
                keyswitch_area_away += 0x40;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 8 away"].Equals(true))
            {
                keyswitch_area_away += 0x80;
            }
            #endregion

            #region Keyswitch area stay
            byte keyswitch_area_stay = 0;
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 1 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x01;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 2 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x02;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 3 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x04;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 4 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x08;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 5 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x10;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 6 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x20;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 7 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x40;
            }
            if (mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Keyswitch - area 8 stay"].Equals(true))
            {
                keyswitch_area_stay += 0x80;
            }
            #endregion

            #region AUDIO TRACKS
            byte[] audio_tracks = new byte[8];
            audio_tracks[0] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 1"].ToString()) - 1) & 0xFF);
            audio_tracks[1] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 1"].ToString()) - 1) >> 8);
            audio_tracks[2] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 2"].ToString()) - 1) & 0xFF);
            audio_tracks[3] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 2"].ToString()) - 1) >> 8);
            audio_tracks[4] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 3"].ToString()) - 1) & 0xFF);
            audio_tracks[5] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 3"].ToString()) - 1) >> 8);
            audio_tracks[6] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 4"].ToString()) - 1) & 0xFF);
            audio_tracks[7] = (byte)((int.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Audio track 4"].ToString()) - 1) >> 8);
            #endregion

            string maintenance_description = ((string)mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Maintenance description"]).ToUpper();

            ulong maintenance_phone_number = ulong.Parse(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Maintenance phone number"].ToString());

            DateTime maintenance_date = (DateTime)(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)(global_system_index)]["Maintenance date"]);


            byte[] output_call_code_bytes                = Encoding.ASCII.GetBytes(mainWindow.databaseDataSet.GlobalSystem.Rows[(int)global_system_index]["Outputs code"].ToString());
            byte[] installer_code_bytes                  = GetIntArray(installer_code);
            byte[] phone_prefix_bytes                    = GetIntArray(phone_prefix);
            byte[] global_system_options_bytes           = BitConverter.GetBytes(global_system_options);
            byte[] dial_report_delay_bytes               = BitConverter.GetBytes(dial_report_delay);
            byte[] mains_fail_report_delay_bytes         = BitConverter.GetBytes(mains_fail_report_delay);
            byte[] receiver_fail_delay_bytes             = BitConverter.GetBytes(receiver_fail_delay);
            byte[] radio_detector_supervised_timer_bytes = BitConverter.GetBytes(radio_detector_supervised_timer);
            byte[] CRA_client_number_bytes               = BitConverter.GetBytes(CRA_client_number);
            byte[] event_code_session_bytes              = BitConverter.GetBytes(event_code_session);
            byte[] maintenance_description_bytes         = new byte[64];
            maintenance_description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(maintenance_description);
            byte[] maintenance_phone_number_bytes = GetIntArray(maintenance_phone_number);
            byte[] maintenance_date_bytes         = new byte[4];
            maintenance_date_bytes[0] = (byte)(maintenance_date.Day);
            maintenance_date_bytes[1] = (byte)(maintenance_date.Month);
            maintenance_date_bytes[2] = (BitConverter.GetBytes(maintenance_date.Year))[0];
            maintenance_date_bytes[3] = (BitConverter.GetBytes(maintenance_date.Year))[1];
            byte[] outputs_permissions_bytes = BitConverter.GetBytes(outputs_permissions);


            int  i            = 0;
            uint j            = 0;
            uint user_address = 0x00;
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((user_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((user_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(user_address & 0xFF);
            byte_array[i++] = 240;
            int temp = i;

            //Output call code
            for (i = (int)attributes["output_call_code"]["address"] + temp, j = 0; i < ((int)attributes["output_call_code"]["address"] + temp + output_call_code_bytes.Length); i++, j++)
            {
                byte_array[i] = (byte)(output_call_code_bytes[j] - 0x30);

                //Add 0xFF if code don't have maximum length
                if (i.Equals(((int)attributes["output_call_code"]["address"] + temp + (output_call_code_bytes.Length - 1))) && output_call_code_bytes.Length != 8)
                {
                    int counter = 8 - output_call_code_bytes.Length;

                    for (int k = counter; k > 0; k--)
                    {
                        byte_array[i + k] = 0xFF;
                    }
                }
            }

            //options
            for (i = (temp + (int)this.attributes["options"]["address"]), j = 0; i < (temp + (int)this.attributes["options"]["address"] + global_system_options_bytes.Length); i++, j++)
            {
                byte_array[i] = global_system_options_bytes[j];
            }

            //installer code
            for (i = (int)attributes["installer_code"]["address"] + temp, j = 0; i < ((int)attributes["installer_code"]["address"] + temp + installer_code_bytes.Length); i++, j++)
            {
                byte_array[i] = (byte)installer_code_bytes[j];
                if (installer_code_bytes.Length < 8 && i == ((int)attributes["installer_code"]["address"] + temp + installer_code_bytes.Length - 1))
                {
                    for (i = ((int)attributes["installer_code"]["address"] + temp + installer_code_bytes.Length); i < (int)attributes["installer_code"]["address"] + sizeof(ulong) + temp; i++)
                    {
                        byte_array[i] = 0xFF;
                    }
                }
            }

            //Coation digit
            i             = (temp + (int)this.attributes["coation_digit"]["address"]);
            byte_array[i] = coation_digit;
            i++;

            //phone prefix
            if (phone_prefix_bytes.Length == 0)
            {
                phone_prefix_bytes = new byte[] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
                for (i = (int)attributes["phone_prefix"]["address"] + temp, j = 0; i < ((int)attributes["phone_prefix"]["address"] + temp + phone_prefix_bytes.Length); i++, j++)
                {
                    byte_array[i] = (byte)phone_prefix_bytes[j];
                }
            }
            else
            {
                for (i = (int)attributes["phone_prefix"]["address"] + temp, j = 0; i < ((int)attributes["phone_prefix"]["address"] + temp + phone_prefix_bytes.Length); i++, j++)
                {
                    byte_array[i] = (byte)phone_prefix_bytes[j];
                    if (phone_prefix_bytes.Length < 6 && i == ((int)attributes["phone_prefix"]["address"] + temp + phone_prefix_bytes.Length - 1))
                    {
                        for (i = ((int)attributes["phone_prefix"]["address"] + temp + phone_prefix_bytes.Length); i < (int)attributes["phone_prefix"]["address"] + 6 + temp; i++)
                        {
                            byte_array[i] = 0xFF;
                        }
                    }
                }
            }


            //Reserved 1
            for (i = (temp + (int)this.attributes["reserved_1"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_1"]["address"] + reserved_1_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_1_bytes[j];
            }

            //dial_report_delay 2
            for (i = (temp + (int)this.attributes["dial_report_delay"]["address"]), j = 0; i < (temp + (int)this.attributes["dial_report_delay"]["address"] + dial_report_delay_bytes.Length); i++, j++)
            {
                byte_array[i] = dial_report_delay_bytes[j];
            }

            //mains_fail_report_delay
            for (i = (temp + (int)this.attributes["mains_fail_report_delay"]["address"]), j = 0; i < (temp + (int)this.attributes["mains_fail_report_delay"]["address"] + mains_fail_report_delay_bytes.Length); i++, j++)
            {
                byte_array[i] = mains_fail_report_delay_bytes[j];
            }

            //receiver_fail_delay
            for (i = (temp + (int)this.attributes["receiver_fail_delay"]["address"]), j = 0; i < (temp + (int)this.attributes["receiver_fail_delay"]["address"] + receiver_fail_delay_bytes.Length); i++, j++)
            {
                byte_array[i] = receiver_fail_delay_bytes[j];
            }

            //radio_detector_supervised_timer
            for (i = (temp + (int)this.attributes["radio_detector_supervised_timer"]["address"]), j = 0; i < (temp + (int)this.attributes["radio_detector_supervised_timer"]["address"] + radio_detector_supervised_timer_bytes.Length); i++, j++)
            {
                byte_array[i] = radio_detector_supervised_timer_bytes[j];
            }

            //CRA_client_number
            for (i = (temp + (int)this.attributes["CRA_client_number"]["address"]), j = 0; i < (temp + (int)this.attributes["CRA_client_number"]["address"] + CRA_client_number_bytes.Length); i++, j++)
            {
                byte_array[i] = CRA_client_number_bytes[j];
            }

            //event_code_session
            for (i = (temp + (int)this.attributes["event_code_session"]["address"]), j = 0; i < (temp + (int)this.attributes["event_code_session"]["address"] + event_code_session_bytes.Length); i++, j++)
            {
                byte_array[i] = event_code_session_bytes[j];
            }

            //siren tamper outputs
            for (i = ((int)attributes["siren_tamper"]["address"] + temp), j = 0; i < ((int)attributes["siren_tamper"]["address"] + temp + (siren_tamper_outputs.Length)); i++, j++)
            {
                byte_array[i] = siren_tamper_outputs[j];
            }

            //siren_tamper_config
            i             = (temp + (int)this.attributes["siren_tamper_config"]["address"]);
            byte_array[i] = siren_tamper_config_bytes[0];
            i++;

            //panel tamper outputs
            for (i = ((int)attributes["panel_tamper"]["address"] + temp), j = 0; i < ((int)attributes["panel_tamper"]["address"] + temp + (panel_tamper_outputs.Length)); i++, j++)
            {
                byte_array[i] = panel_tamper_outputs[j];
            }

            //panel_tamper_config
            i             = (temp + (int)this.attributes["panel_tamper_config"]["address"]);
            byte_array[i] = panel_tamper_config_bytes[0];
            i++;

            //keyswitch_config
            i             = (temp + (int)this.attributes["keyswitch_config"]["address"]);
            byte_array[i] = keyswitch_config_bytes[0];
            i++;

            //keyswitch_area_away
            i             = (temp + (int)this.attributes["keyswitch_area_away"]["address"]);
            byte_array[i] = keyswitch_area_away;
            i++;

            //keyswitch_area_stay
            i             = (temp + (int)this.attributes["keyswitch_area_stay"]["address"]);
            byte_array[i] = keyswitch_area_stay;
            i++;

            //Reserved 2
            for (i = (temp + (int)this.attributes["reserved_2"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_2"]["address"] + reserved_2_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_2_bytes[j];
            }

            //Audio tracks
            for (i = ((int)attributes["audio_tracks"]["address"] + temp), j = 0; i < ((int)attributes["audio_tracks"]["address"] + temp + (audio_tracks.Length)); i++, j++)
            {
                byte_array[i] = audio_tracks[j];
            }

            //Maintenance description
            for (i = (int)attributes["maintenance_description"]["address"] + temp, j = 0; i < ((int)attributes["maintenance_description"]["address"] + temp + maintenance_description_bytes.Length); i++, j++)
            {
                byte_array[i] = maintenance_description_bytes[j];
            }

            //maintenance_phone_number
            for (i = (int)attributes["maintenance_phone_number"]["address"] + temp, j = 0; i < ((int)attributes["maintenance_phone_number"]["address"] + temp + maintenance_phone_number_bytes.Length); i++, j++)
            {
                byte_array[i] = (byte)maintenance_phone_number_bytes[j];
                if (maintenance_phone_number_bytes.Length < 16 && i == ((int)attributes["maintenance_phone_number"]["address"] + temp + maintenance_phone_number_bytes.Length - 1))
                {
                    byte_array[i + 1] = 0xFF;
                }
            }
            //maintenance_date
            for (i = (temp + (int)this.attributes["maintenance_date"]["address"]), j = 0; i < (temp + (int)this.attributes["maintenance_date"]["address"] + maintenance_date_bytes.Length); i++, j++)
            {
                byte_array[i] = maintenance_date_bytes[j];
            }

            #region Outputs permissions
            for (i = ((int)attributes["outputs_permissions"]["address"] + temp), j = 0; i < ((int)attributes["outputs_permissions"]["address"] + temp + (outputs_permissions_bytes.Length)); i++, j++)
            {
                byte_array[i] = outputs_permissions_bytes[j];
            }
            #endregion

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow);
        }
Exemple #17
0
        public void Write(MainWindow mainWindow, uint phone_number)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            phone_number = phone_number - 1;
            string description = ((string)mainWindow.databaseDataSet.Phone.Rows[(int)(phone_number)]["Description"]).ToUpper();

            byte[] description_bytes = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);

            //phone number
            ulong phone_dial_number = ulong.Parse(mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Phone number"].ToString());

            //prefix
            ulong phone_prefix = ulong.Parse(mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Prefix"].ToString());

            //Max Communication attempts
            byte com_attempts = byte.Parse(mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Communication attempts"].ToString());

            //communication protocol
            byte[] com_protocol = (byte[])mainWindow.databaseDataSet.Phone.Rows[(int)(phone_number)]["Communication protocol"];

            #region PARTITIONS
            short partition_id = 0;
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 1"].Equals(true))
            {
                partition_id += 0x01;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 2"].Equals(true))
            {
                partition_id += 0x02;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 3"].Equals(true))
            {
                partition_id += 0x04;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 4"].Equals(true))
            {
                partition_id += 0x08;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 5"].Equals(true))
            {
                partition_id += 0x10;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 6"].Equals(true))
            {
                partition_id += 0x20;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 7"].Equals(true))
            {
                partition_id += 0x40;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Area 8"].Equals(true))
            {
                partition_id += 0x80;
            }
            #endregion

            #region RESERVED
            byte[] reserved_1_bytes = (byte[])mainWindow.databaseDataSet.Phone.Rows[(int)(phone_number)]["Reserved 1"];
            byte[] reserved_2_bytes = (byte[])mainWindow.databaseDataSet.Phone.Rows[(int)(phone_number)]["Reserved 2"];
            #endregion

            #region Phone options read from dataset
            ////Phone OPTIONS
            ulong phone_options = 0;
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Stop dialling if kissed off voice"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_STOP_DIALLING_IF_KISSED_OFF_VOICE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Stop dialling if kissed off CID"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_STOP_DIALLING_IF_KISSED_OFF_CID"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Always report"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ALLWAYS_REPORT"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Monitor call progress"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_MONITOR_CALL_PROGRESS"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Blind dial"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_BLIND_DIAL"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Stay on line after report 2 way voice"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_STAY_ON_LINE_ATFER_REPORT_2WAY_VOICE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Use prefix"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_USE_DIALLING_PREFIX"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Call back number"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_CALL_BACK_NUMBER"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report 230V fail"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_MAINS_FUSE_FAILURE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report battery low"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_BATTERY_LOW"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report radio battery low"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_RADIO_BATTERY_LOW"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report line fail"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_LINE_FAIL"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report system tamper"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_SYSTEM_TAMPER"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report keypad tamper"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_KEYPAD_TAMPER"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report zone tamper"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ZONE_TAMPER"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report radio zone tamper"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_RADIO_ZONE_TAMPER"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report duress alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_DURESS_ALARM"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report supervised radio alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_SUPERVISED_RADIO_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report sensor watch alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_SENSOR_WATCH_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report manual panic alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_MANUAL_PANIC_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report manual fire alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_MANUAL_FIRE_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report manual medical alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_MANUAL_MEDICAL_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report manual pedant panic alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_MANUAL_PEDANT_PANIC_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report zone bypass"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ZONE_BYPASS"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report arm/disarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ARM_DISARM"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report stay mode arm/disarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_STAY_MODE_ARM_DISARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report disarm only after activation"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_DISARM_ONLY_AFTER_ACTIVATION"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report stay mode disarm only after activation"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_STAY_MODE_DISARM_ONLY_AFTER_ACTIVATION"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report stay mode zone alarm"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_STAY_MODE_ZONE_ALARM"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report access to program mode"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ACCESS_TO_PROGRAM_MODE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report access to installer mode"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ACCESS_TO_INSTALLER_MODE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report 24h alarms when set domestic voice"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_24HOUR_ALARMS_WHEN_SET_DOMESCTIC_VOICE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report Zones restore"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_ZONES_RESTORES"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report latch keys"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_LATCH_KEYS"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report delinquent"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_DELINQUENT"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report tests"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_TESTS"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report fuse failure"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_FUSE_FAILURE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report outputs failure"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_OUTPUTS_FAIL"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report date/hour change"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_RTC_TIME_CHANGE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report keypad communication problems"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_KEYPAD_BUS_TROUBLE"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report RF problems detected"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_RF_INTERFERENCE_DETECTED"])[0]));
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report system problems"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_SYSTEM_PROBLEMS"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Test call"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELF_REP_TEST_CALL"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Voice call"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELT_REP_CHAMADA_VOZ"])[0]));
            }

            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Report on"].Equals(true))
            {
                phone_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_TELT_REP_ATIVO"])[0]));
            }
            #endregion

            //Hour test
            DateTime test_hour = Convert.ToDateTime(mainWindow.databaseDataSet.Phone.Rows[(int)(phone_number)]["Test hour"].ToString());
            byte     hour_test = (byte)test_hour.Hour;
            //minute test
            byte minute_test = (byte)test_hour.Minute;


            //WEEK DAYS
            byte week_days = 0;
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Monday"].Equals(true))
            {
                week_days += 0x01;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Tuesday"].Equals(true))
            {
                week_days += 0x02;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Wednesday"].Equals(true))
            {
                week_days += 0x04;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Thursday"].Equals(true))
            {
                week_days += 0x08;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Friday"].Equals(true))
            {
                week_days += 0x10;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Saturday"].Equals(true))
            {
                week_days += 0x20;
            }
            if (mainWindow.databaseDataSet.Phone.Rows[(int)phone_number]["Sunday"].Equals(true))
            {
                week_days += 0x40;
            }


            byte[] phone_number_bytes     = GetIntArray(phone_dial_number);
            byte[] phone_prefix_bytes     = GetIntArray(phone_prefix);
            byte[] phone_partitions_bytes = BitConverter.GetBytes(partition_id);
            byte[] phone_options_bytes    = BitConverter.GetBytes(phone_options);

            int  i            = 0;
            uint j            = 0;
            uint user_address = 0x6A000 + (256 * (phone_number));
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((user_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((user_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(user_address & 0xFF);
            byte_array[i++] = 240;
            int temp = i;

            //Description
            for (i = temp, j = 0; i < (temp + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
                if ((description_bytes.Length - 1) == (j))
                {
                    for (i = i + 1; i < (64 + temp); i++)
                    {
                        byte_array[i] = 0;
                    }
                }
            }

            //phone number
            for (i = (int)attributes["phone_number"]["address"] + temp, j = 0; i < ((int)attributes["phone_number"]["address"] + temp + phone_number_bytes.Length); i++, j++)
            {
                byte_array[i] = (byte)phone_number_bytes[j];
                if (phone_number_bytes.Length < 16 && i == ((int)attributes["phone_number"]["address"] + temp + phone_number_bytes.Length - 1))
                {
                    byte_array[i + 1] = 0xFF;
                }
            }

            //phone prefix
            if (phone_prefix_bytes.Length == 0)
            {
                phone_prefix_bytes = new byte [] { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
                for (i = (int)attributes["prefix"]["address"] + temp, j = 0; i < ((int)attributes["prefix"]["address"] + temp + phone_prefix_bytes.Length); i++, j++)
                {
                    byte_array[i] = (byte)phone_prefix_bytes[j];
                }
            }
            else
            {
                for (i = (int)attributes["prefix"]["address"] + temp, j = 0; i < ((int)attributes["prefix"]["address"] + temp + phone_prefix_bytes.Length); i++, j++)
                {
                    byte_array[i] = (byte)phone_prefix_bytes[j];
                    if (phone_prefix_bytes.Length < 6 && i == ((int)attributes["prefix"]["address"] + temp + phone_prefix_bytes.Length - 1))
                    {
                        byte_array[i + 1] = 0xFF;
                    }
                }
            }



            // max com attempts
            i             = (temp + (int)this.attributes["max_com_attempts"]["address"]);
            byte_array[i] = com_attempts;
            i++;

            //Com protocol
            for (i = (temp + (int)this.attributes["com_protocol"]["address"]), j = 0; i < (temp + (int)this.attributes["com_protocol"]["address"] + com_protocol.Length); i++, j++)
            {
                byte_array[i] = com_protocol[j];
            }

            //partitions
            for (i = (temp + (int)this.attributes["partition_id"]["address"]), j = 0; i < (temp + (int)this.attributes["partition_id"]["address"] + phone_partitions_bytes.Length); i++, j++)
            {
                byte_array[i] = phone_partitions_bytes[j];
            }

            //Reserved 1
            for (i = (temp + (int)this.attributes["reserved_1"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_1"]["address"] + reserved_1_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_1_bytes[j];
            }

            //Reserved 2
            for (i = (temp + (int)this.attributes["reserved_2"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_2"]["address"] + reserved_2_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_2_bytes[j];
            }

            //options
            for (i = (temp + (int)this.attributes["options"]["address"]), j = 0; i < (temp + (int)this.attributes["options"]["address"] + phone_options_bytes.Length); i++, j++)
            {
                byte_array[i] = phone_options_bytes[j];
            }

            //hour test
            i             = (temp + (int)this.attributes["hour_test"]["address"]);
            byte_array[i] = hour_test;
            i++;

            //minute test
            i             = (temp + (int)this.attributes["minute_test"]["address"]);
            byte_array[i] = minute_test;
            i++;

            //Week days
            i             = (temp + (int)this.attributes["week_days"]["address"]);
            byte_array[i] = week_days;
            i++;

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow);
        }
Exemple #18
0
        public void Write(MainWindow mainWindow, uint keypad_number)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            keypad_number = keypad_number - 1;

            string description = ((string)mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Description"]).ToUpper();

            #region Partition id
            short partition_id = 0;
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 1"].Equals(true))
            {
                partition_id += 0x01;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 2"].Equals(true))
            {
                partition_id += 0x02;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 3"].Equals(true))
            {
                partition_id += 0x04;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 4"].Equals(true))
            {
                partition_id += 0x08;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 5"].Equals(true))
            {
                partition_id += 0x10;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 6"].Equals(true))
            {
                partition_id += 0x20;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 7"].Equals(true))
            {
                partition_id += 0x40;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Area 8"].Equals(true))
            {
                partition_id += 0x80;
            }
            #endregion

            #region Report Partition id
            short report_partition_id = 0;
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 1"].Equals(true))
            {
                report_partition_id += 0x01;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 2"].Equals(true))
            {
                report_partition_id += 0x02;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 3"].Equals(true))
            {
                report_partition_id += 0x04;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 4"].Equals(true))
            {
                report_partition_id += 0x08;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 5"].Equals(true))
            {
                report_partition_id += 0x10;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 6"].Equals(true))
            {
                report_partition_id += 0x20;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 7"].Equals(true))
            {
                report_partition_id += 0x40;
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Report area 8"].Equals(true))
            {
                report_partition_id += 0x80;
            }
            #endregion

            //Lcd backlight timeout
            byte[] lcd_backlight_timeout = new byte[1];
            lcd_backlight_timeout[0] = (byte)mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Backlight time"];


            #region Keypad options read from dataset
            ////KEYPAD OPTIONS
            ulong keypad_options = 0;
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Language option"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_IDIOMA"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Hour format"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_TIPO_HORA"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Date format"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_TIPO_DATA"])[0]));
            }

            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Backlight off when armed"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BACKLIGHT_OFF_WHEN_ARMED"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Backlight off on 230V fail"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BACKLIGHT_OFF_MAIN_POWER_FAIL"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on alarm"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_ALARM"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on medical alarm"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_MEDICAL"])[0]));
            }

            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on fire alarm"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_FIRE"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on panic alarm"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_PANIC"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on 230V fail"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_MAIN_POWER_FAIL"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on output fuse fail"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_OUTPUT_FUSE_FAIL"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on battery low"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_BATTERY_LOW"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on PSTN fail"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_LINE_FAIL"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on system tamper alarm"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_SYSTEM_TAMPER"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on receiver fail"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_RECEIVER_FAILS"])[0]));
            }

            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Can arm away"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_CAN_ARM_AWAY"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Can arm stay"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_CAN_ARM_STAY"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Can disarm away"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_DISARM_AWAY_ALL_TIMES"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Can disarm stay"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_DISARM_STAY_ALL_TIMES"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Can disarm away during exit time"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_DISARM_AWAY_DURING_EXIT_TIME"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Can disarm stay during exit time"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_DISARM_STAY_DURING_EXIT_TIME"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Silent during entry time"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_SILENT_DURING_ENTRY_TIME"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Silent during exit time"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_SILENT_DURING_EXIT_TIME"])[0]));
            }

            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Reset alarms"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_RESET_ALARMS"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Show area name"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_SHOW_AREA_NAME"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Enable keypad tamper"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_ENABLE_KEYPAD_TAMPER"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["No indications while armed"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_NO_KEYPAD_INDICATIONS_WHILE_ARMED"])[0]));
            }

            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on functions"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_FUNCOES"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on exit time"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_EXIT_TIME"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on entry time"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_ENTRY_TIME"])[0]));
            }
            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Beeps on sensor watch"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_BEEPS_SENSOR_WATCH"])[0]));
            }

            if (mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Active"].Equals(true))
            {
                keypad_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_KPAD_RS485_ATIVO"])[0]));
            }
            #endregion

            byte[] description_bytes = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);

            byte[] reserved_0_bytes               = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 0"];
            byte[] reserved_1_bytes               = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 1"];
            byte[] reserved_2_bytes               = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 2"];
            byte[] reserved_3_bytes               = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 3"];
            byte[] reserved_4_bytes               = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 4"];
            byte[] keypad_partitions_bytes        = BitConverter.GetBytes(partition_id);
            byte[] keypad_report_partitions_bytes = BitConverter.GetBytes(report_partition_id);

            byte[] reserved_6_bytes  = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 6"];
            byte[] reserved_7_bytes  = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 7"];
            byte[] reserved_8_bytes  = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 8"];
            byte[] reserved_9_bytes  = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 9"];
            byte[] reserved_10_bytes = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Reserved 10"];

            byte[] keypad_options_bytes = BitConverter.GetBytes(keypad_options);
            byte[] language_bytes       = (byte[])mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["Language"];

            byte[] lcd_config_options_bytes = (byte[])attributes["lcd_config_options"]["value"];


            // Function buttons configuration
            short  f1_button_value      = (short)mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["F1 button"];
            byte[] f1_button_value_byte = new byte[2];
            f1_button_value_byte[0] = (byte)(f1_button_value >> 8);
            f1_button_value_byte[1] = (byte)(f1_button_value & 0x00FF);

            short  f2_button_value      = (short)mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["F2 button"];
            byte[] f2_button_value_byte = new byte[2];
            f2_button_value_byte[0] = (byte)(f2_button_value >> 8);
            f2_button_value_byte[1] = (byte)(f2_button_value & 0x00FF);

            short  f3_button_value      = (short)mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["F3 button"];
            byte[] f3_button_value_byte = new byte[2];
            f3_button_value_byte[0] = (byte)(f3_button_value >> 8);
            f3_button_value_byte[1] = (byte)(f3_button_value & 0x00FF);

            short  f4_button_value      = (short)mainWindow.databaseDataSet.Keypad.Rows[(int)(keypad_number)]["F4 button"];
            byte[] f4_button_value_byte = new byte[2];
            f4_button_value_byte[0] = (byte)(f4_button_value >> 8);
            f4_button_value_byte[1] = (byte)(f4_button_value & 0x00FF);

            lcd_config_options_bytes[0] = f1_button_value_byte[1];
            lcd_config_options_bytes[1] = f1_button_value_byte[0];
            lcd_config_options_bytes[2] = f2_button_value_byte[1];
            lcd_config_options_bytes[3] = f2_button_value_byte[0];
            lcd_config_options_bytes[4] = f3_button_value_byte[1];
            lcd_config_options_bytes[5] = f3_button_value_byte[0];
            lcd_config_options_bytes[6] = f4_button_value_byte[1];
            lcd_config_options_bytes[7] = f4_button_value_byte[0];


            #region AUDIO TRACKS
            byte[] audio_tracks = new byte[8];
            audio_tracks[0] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 1"].ToString()) - 1) & 0xFF);
            audio_tracks[1] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 1"].ToString()) - 1) >> 8);
            audio_tracks[2] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 2"].ToString()) - 1) & 0xFF);
            audio_tracks[3] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 2"].ToString()) - 1) >> 8);
            audio_tracks[4] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 3"].ToString()) - 1) & 0xFF);
            audio_tracks[5] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 3"].ToString()) - 1) >> 8);
            audio_tracks[6] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 4"].ToString()) - 1) & 0xFF);
            audio_tracks[7] = (byte)((int.Parse(mainWindow.databaseDataSet.Keypad.Rows[(int)keypad_number]["Audio track 4"].ToString()) - 1) >> 8);
            #endregion

            int  i            = 0;
            uint j            = 0;
            uint user_address = 0x1000 + (512 * (keypad_number));
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((user_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((user_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(user_address & 0xFF);

            byte_array[i++] = 240;
            int temp = i;
            //TODO: Create a function for this for

            //Description
            for (i = temp, j = 0; i < (temp + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
                if ((description_bytes.Length - 1) == (j))
                {
                    for (i = i + 1; i < (64 + temp); i++)
                    {
                        byte_array[i] = 0;
                    }
                }
            }

            //Reserved 0
            for (i = (temp + (int)this.attributes["reserved_0"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_0"]["address"] + reserved_0_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_0_bytes[j];
            }
            //Reserved 1
            for (i = (temp + (int)this.attributes["reserved_1"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_1"]["address"] + reserved_1_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_1_bytes[j];
            }

            //Reserved 2
            for (i = (temp + (int)this.attributes["reserved_2"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_2"]["address"] + reserved_2_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_2_bytes[j];
            }
            //Reserved 3
            for (i = (temp + (int)this.attributes["reserved_3"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_3"]["address"] + reserved_3_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_3_bytes[j];
            }
            //Reserved 4
            for (i = (temp + (int)this.attributes["reserved_4"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_4"]["address"] + reserved_4_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_4_bytes[j];
            }

            //partition_id
            for (i = (temp + (int)this.attributes["partition_id"]["address"]), j = 0; i < (temp + (int)this.attributes["partition_id"]["address"] + keypad_partitions_bytes.Length); i++, j++)
            {
                byte_array[i] = keypad_partitions_bytes[j];
            }

            //report_partition_id
            for (i = (temp + (int)this.attributes["report_partition_id"]["address"]), j = 0; i < (temp + (int)this.attributes["report_partition_id"]["address"] + keypad_report_partitions_bytes.Length); i++, j++)
            {
                byte_array[i] = keypad_report_partitions_bytes[j];
            }

            //lcd_backlight_timeout
            for (i = (temp + (int)this.attributes["lcd_backlight_timeout"]["address"]), j = 0; i < (temp + (int)this.attributes["lcd_backlight_timeout"]["address"] + lcd_backlight_timeout.Length); i++, j++)
            {
                byte_array[i] = lcd_backlight_timeout[j];
            }

            //Reserved 6
            for (i = (temp + (int)this.attributes["reserved_6"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_6"]["address"] + reserved_6_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_6_bytes[j];
            }
            //Reserved 7
            for (i = (temp + (int)this.attributes["reserved_7"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_7"]["address"] + reserved_7_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_7_bytes[j];
            }

            //Reserved 8
            for (i = (temp + (int)this.attributes["reserved_8"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_8"]["address"] + reserved_8_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_8_bytes[j];
            }
            //Reserved 9
            for (i = (temp + (int)this.attributes["reserved_9"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_9"]["address"] + reserved_9_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_9_bytes[j];
            }
            //Reserved 10
            for (i = (temp + (int)this.attributes["reserved_10"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_10"]["address"] + reserved_10_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_10_bytes[j];
            }

            //Options
            for (i = (temp + (int)this.attributes["options"]["address"]), j = 0; i < (temp + (int)this.attributes["options"]["address"] + keypad_options_bytes.Length); i++, j++)
            {
                byte_array[i] = keypad_options_bytes[j];
            }

            //Language
            for (i = (temp + (int)this.attributes["language"]["address"]), j = 0; i < (temp + (int)this.attributes["language"]["address"] + language_bytes.Length); i++, j++)
            {
                byte_array[i] = language_bytes[j];
            }

            //Lcd config options
            for (i = (temp + (int)this.attributes["lcd_config_options"]["address"]), j = 0; i < (temp + (int)this.attributes["lcd_config_options"]["address"] + lcd_config_options_bytes.Length); i++, j++)
            {
                byte_array[i] = lcd_config_options_bytes[j];
            }

            //Audio tracks
            for (i = ((int)attributes["audio_tracks"]["address"] + temp), j = 0; i < ((int)attributes["audio_tracks"]["address"] + temp + (audio_tracks.Length)); i++, j++)
            {
                byte_array[i] = audio_tracks[j];
            }

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow); // TODO: Check if cp_id is needed
        }
Exemple #19
0
        public void Write(MainWindow mainWindow, uint timezone_number)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            timezone_number = timezone_number - 1;
            string description = ((string)mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Description"]).ToUpper();

            byte[] description_bytes = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);

            //Initial hour
            DateTime initial_hour_date_time = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Initial hour"].ToString());
            byte     initial_hour           = (byte)initial_hour_date_time.Hour;
            //Initial minute
            byte initial_minute = (byte)initial_hour_date_time.Minute;
            //Final hour
            DateTime final_hour_date_time = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Final hour"].ToString());
            byte     final_hour           = (byte)final_hour_date_time.Hour;
            //Final minute
            byte final_minute = (byte)final_hour_date_time.Minute;

            //WEEK DAYS
            byte week_days = 0;

            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Monday"].Equals(true))
            {
                week_days += 0x01;
            }
            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Tuesday"].Equals(true))
            {
                week_days += 0x02;
            }
            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Wednesday"].Equals(true))
            {
                week_days += 0x04;
            }
            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Thursday"].Equals(true))
            {
                week_days += 0x08;
            }
            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Friday"].Equals(true))
            {
                week_days += 0x10;
            }
            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Saturday"].Equals(true))
            {
                week_days += 0x20;
            }
            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Sunday"].Equals(true))
            {
                week_days += 0x40;
            }

            //excluded_days
            byte excluded_days = 0;

            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Exception 1"].Equals(true))
            {
                excluded_days += 0x01;
            }

            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Exception 2"].Equals(true))
            {
                excluded_days += 0x02;
            }

            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Exception 3"].Equals(true))
            {
                excluded_days += 0x04;
            }

            if (mainWindow.databaseDataSet.Timezone.Rows[(int)timezone_number]["Exception 4"].Equals(true))
            {
                excluded_days += 0x08;
            }

            //reserved
            byte[] timezone_reserved = (byte[])mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Reserved"];

            //Excluded initial date
            //1
            DateTime excluded_initial_date_1 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 1 initial date"].ToString());
            //2
            DateTime excluded_initial_date_2 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 2 initial date"].ToString());
            //3
            DateTime excluded_initial_date_3 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 3 initial date"].ToString());
            //4
            DateTime excluded_initial_date_4 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 4 initial date"].ToString());

            byte[] excluded_initial_month = (byte[])attributes["excluded_initial_month"]["value"];
            excluded_initial_month[0] = (byte)excluded_initial_date_1.Month;
            excluded_initial_month[1] = (byte)excluded_initial_date_2.Month;
            excluded_initial_month[2] = (byte)excluded_initial_date_3.Month;
            excluded_initial_month[3] = (byte)excluded_initial_date_4.Month;

            byte[] excluded_initial_day = (byte[])attributes["excluded_initial_day"]["value"];
            excluded_initial_day[0] = (byte)excluded_initial_date_1.Day;
            excluded_initial_day[1] = (byte)excluded_initial_date_2.Day;
            excluded_initial_day[2] = (byte)excluded_initial_date_3.Day;
            excluded_initial_day[3] = (byte)excluded_initial_date_4.Day;

            //Excluded final date
            //1
            DateTime excluded_final_date_1 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 1 final date"].ToString());
            //2
            DateTime excluded_final_date_2 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 2 final date"].ToString());
            //3
            DateTime excluded_final_date_3 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 3 final date"].ToString());
            //4
            DateTime excluded_final_date_4 = Convert.ToDateTime(mainWindow.databaseDataSet.Timezone.Rows[(int)(timezone_number)]["Exception 4 final date"].ToString());

            byte[] excluded_final_month = (byte[])attributes["excluded_final_month"]["value"];
            excluded_final_month[0] = (byte)excluded_final_date_1.Month;
            excluded_final_month[1] = (byte)excluded_final_date_2.Month;
            excluded_final_month[2] = (byte)excluded_final_date_3.Month;
            excluded_final_month[3] = (byte)excluded_final_date_4.Month;

            byte[] excluded_final_day = (byte[])attributes["excluded_final_day"]["value"];
            excluded_final_day[0] = (byte)excluded_final_date_1.Day;
            excluded_final_day[1] = (byte)excluded_final_date_2.Day;
            excluded_final_day[2] = (byte)excluded_final_date_3.Day;
            excluded_final_day[3] = (byte)excluded_final_date_4.Day;



            int  i            = 0;
            uint j            = 0;
            uint user_address = 0x65000 + (512 * (timezone_number));

            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((user_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((user_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(user_address & 0xFF);
            byte_array[i++] = 240;
            int temp = i;

            //Description
            for (i = temp, j = 0; i < (temp + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
                if ((description_bytes.Length - 1) == (j))
                {
                    for (i = i + 1; i < (64 + temp); i++)
                    {
                        byte_array[i] = 0;
                    }
                }
            }

            //initial hour
            i             = (temp + (int)this.attributes["inicial_hour"]["address"]);
            byte_array[i] = initial_hour;
            i++;

            //initial minute
            i             = (temp + (int)this.attributes["inicial_minute"]["address"]);
            byte_array[i] = initial_minute;
            i++;

            //final hour
            i             = (temp + (int)this.attributes["final_hour"]["address"]);
            byte_array[i] = final_hour;
            i++;

            //final minute
            i             = (temp + (int)this.attributes["final_minute"]["address"]);
            byte_array[i] = final_minute;
            i++;

            //Week days
            i             = (temp + (int)this.attributes["week_days"]["address"]);
            byte_array[i] = week_days;
            i++;

            //Excluded days
            i             = (temp + (int)this.attributes["excluded_days"]["address"]);
            byte_array[i] = excluded_days;
            i++;

            //Reserved
            for (i = (temp + (int)this.attributes["reserved"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved"]["address"] + timezone_reserved.Length); i++, j++)
            {
                byte_array[i] = timezone_reserved[j];
            }

            //Excluded initial month
            for (i = (temp + (int)this.attributes["excluded_initial_month"]["address"]), j = 0; i < (temp + (int)this.attributes["excluded_initial_month"]["address"] + excluded_initial_month.Length); i++, j++)
            {
                byte_array[i] = excluded_initial_month[j];
            }
            //Excluded initial day
            for (i = (temp + (int)this.attributes["excluded_initial_day"]["address"]), j = 0; i < (temp + (int)this.attributes["excluded_initial_day"]["address"] + excluded_initial_day.Length); i++, j++)
            {
                byte_array[i] = excluded_initial_day[j];
            }
            //Excluded final month
            for (i = (temp + (int)this.attributes["excluded_final_month"]["address"]), j = 0; i < (temp + (int)this.attributes["excluded_final_month"]["address"] + excluded_final_month.Length); i++, j++)
            {
                byte_array[i] = excluded_final_month[j];
            }
            //Excluded final day
            for (i = (temp + (int)this.attributes["excluded_final_day"]["address"]), j = 0; i < (temp + (int)this.attributes["excluded_final_day"]["address"] + excluded_final_day.Length); i++, j++)
            {
                byte_array[i] = excluded_final_day[j];
            }

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();

            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow);
        }
        public void Write(MainWindow mainWindow, uint output_number)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            output_number = output_number - 1;

            string description = "";

            try
            {
                description = ((string)mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Description"]).ToUpper();
            }
            catch
            { }

            #region Timezones
            byte timezones = 0;
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone1"].Equals(true))
            {
                timezones += 0x01;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone2"].Equals(true))
            {
                timezones += 0x02;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone3"].Equals(true))
            {
                timezones += 0x04;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone4"].Equals(true))
            {
                timezones += 0x08;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone5"].Equals(true))
            {
                timezones += 0x10;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone6"].Equals(true))
            {
                timezones += 0x20;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone7"].Equals(true))
            {
                timezones += 0x40;
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Timezone8"].Equals(true))
            {
                timezones += 0x80;
            }
            #endregion

            byte[] output_device_id      = (byte[])mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Device Id"];
            byte[] output_index          = (byte[])mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Output index"];
            short  output_delay_ON       = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Output delay - ON"];
            short  output_time_ON        = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Time - ON"];
            short  output_reset_time     = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Reset time"];
            short  output_chime_time     = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Chime time"];
            short  output_chime_delay    = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Chime delay"];
            byte   output_pulses_number  = (byte)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Pulses number"];
            byte   output_disarm_beeps   = (byte)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Beeps number - Disarm"];
            byte   output_arm_beeps      = (byte)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Beeps number - Arm"];
            short  output_pulse_time_on  = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Pulse time on"];
            short  output_pulse_time_off = (short)mainWindow.databaseDataSet.Output.Rows[(int)(output_number)]["Pulse time off"];
            byte[] timezones_bytes       = BitConverter.GetBytes(timezones);
            byte[] description_bytes     = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);

            ////Output options
            ulong output_options = 0;
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Inverted"].Equals(true))
            {
                output_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_OUTPUTS_OPCOES_SAIDA_INVERTIDA"])[0]));
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Pulsed"].Equals(true))
            {
                output_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_OUTPUTS_OPCOES_SAIDA_COM_IMPULSO"])[0]));
            }
            if (mainWindow.databaseDataSet.Output.Rows[(int)output_number]["Source"].Equals(true))
            {
                output_options += (ulong)(0xFFFFFFFFFFFFFFFF & (((ulong[])this.attributes["options"]["KP_OUTPUTS_OPCOES_SAIDA_SOURCE"])[0]));
            }

            byte[] output_delay_ON_bytes       = BitConverter.GetBytes(output_delay_ON);
            byte[] output_time_ON_bytes        = BitConverter.GetBytes(output_time_ON);
            byte[] output_reset_time_bytes     = BitConverter.GetBytes(output_reset_time);
            byte[] output_chime_time_bytes     = BitConverter.GetBytes(output_chime_time);
            byte[] output_chime_delay_bytes    = BitConverter.GetBytes(output_chime_delay);
            byte[] output_pulse_time_on_bytes  = BitConverter.GetBytes(output_pulse_time_on);
            byte[] output_pulse_time_off_bytes = BitConverter.GetBytes(output_pulse_time_off);
            byte[] output_options_bytes        = BitConverter.GetBytes(output_options);


            int  i            = 0;
            uint j            = 0;
            uint user_address = 0x72000 + (256 * (output_number));
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((user_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((user_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(user_address & 0xFF);

            byte_array[i++] = 240;
            int temp = i;

            //Device ID
            for (i = (temp + (int)this.attributes["device_id"]["address"]), j = 0; i < (temp + (int)this.attributes["device_id"]["address"] + output_device_id.Length); i++, j++)
            {
                byte_array[i] = output_device_id[j];
            }

            //Output index
            for (i = (temp + (int)this.attributes["index"]["address"]), j = 0; i < (temp + (int)this.attributes["index"]["address"] + output_index.Length); i++, j++)
            {
                byte_array[i] = output_index[j];
            }

            //Output delay ON
            for (i = (temp + (int)this.attributes["output_on_delay"]["address"]), j = 0; i < (temp + (int)this.attributes["output_on_delay"]["address"] + output_delay_ON_bytes.Length); i++, j++)
            {
                byte_array[i] = output_delay_ON_bytes[j];
            }

            //Output Time ON
            for (i = (temp + (int)this.attributes["output_on_time"]["address"]), j = 0; i < (temp + (int)this.attributes["output_on_time"]["address"] + output_time_ON_bytes.Length); i++, j++)
            {
                byte_array[i] = output_time_ON_bytes[j];
            }

            //Output reset Time
            for (i = (temp + (int)this.attributes["reset_state_time"]["address"]), j = 0; i < (temp + (int)this.attributes["reset_state_time"]["address"] + output_reset_time_bytes.Length); i++, j++)
            {
                byte_array[i] = output_reset_time_bytes[j];
            }

            //Output Chime time
            for (i = (temp + (int)this.attributes["chime_time"]["address"]), j = 0; i < (temp + (int)this.attributes["chime_time"]["address"] + output_chime_time_bytes.Length); i++, j++)
            {
                byte_array[i] = output_chime_time_bytes[j];
            }

            //Output Chime delay
            for (i = (temp + (int)this.attributes["chime_delay"]["address"]), j = 0; i < (temp + (int)this.attributes["chime_delay"]["address"] + output_chime_delay_bytes.Length); i++, j++)
            {
                byte_array[i] = output_chime_delay_bytes[j];
            }

            //Output pulses number
            i             = (temp + (int)this.attributes["pulses_number"]["address"]);
            byte_array[i] = output_pulses_number;
            i++;

            //Output arm beeps
            i             = (temp + (int)this.attributes["arm_beeps"]["address"]);
            byte_array[i] = output_arm_beeps;
            i++;

            //Output disarm beeps
            i             = (temp + (int)this.attributes["disarm_beeps"]["address"]);
            byte_array[i] = output_disarm_beeps;
            i++;

            //Reserved
            for (i = (temp + (int)this.attributes["timezones"]["address"]), j = 0; i < (temp + (int)this.attributes["timezones"]["address"] + timezones_bytes.Length); i++, j++)
            {
                byte_array[i] = timezones_bytes[j];
            }

            //Output pulse time on
            for (i = (temp + (int)this.attributes["Time_on"]["address"]), j = 0; i < (temp + (int)this.attributes["Time_on"]["address"] + output_pulse_time_on_bytes.Length); i++, j++)
            {
                byte_array[i] = output_pulse_time_on_bytes[j];
            }

            //Output pulse time off
            for (i = (temp + (int)this.attributes["Time_off"]["address"]), j = 0; i < (temp + (int)this.attributes["Time_off"]["address"] + output_pulse_time_off_bytes.Length); i++, j++)
            {
                byte_array[i] = output_pulse_time_off_bytes[j];
            }

            //Options
            for (i = (temp + (int)this.attributes["options"]["address"]), j = 0; i < (temp + (int)this.attributes["options"]["address"] + output_options_bytes.Length); i++, j++)
            {
                byte_array[i] = output_options_bytes[j];
            }

            //Description
            for (i = temp + (int)attributes["description"]["address"], j = 0; i < (temp + (int)attributes["description"]["address"] + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
                if ((description_bytes.Length - 1) == (j))
                {
                    for (i = i + 1; i < ((int)attributes["description"]["address"] + temp); i++)
                    {
                        byte_array[i] = 0;
                    }
                }
            }

            byte_array[4] = (byte)(i - temp);
            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainWindow.cp_id, mainWindow);
        }
Exemple #21
0
        public void Write(MainWindow mainForm, uint area_number)
        {
            byte[] byte_array = new byte[240]; // verificar este tamanho
            area_number = area_number - 1;
            string description = ((string)mainForm.databaseDataSet.Area.Rows[(int)area_number]["Description"]).ToUpper();

            #region Area options read from dataset
            ////Area OPTIONS
            uint area_options = 0;
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Code required to arm away"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_PART_ARM_BOT_REQUIRED_BEFORE_CODE_TO_SET_AWAY"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Code required to arm stay"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["KP_PART_ARM_BOT_REQUIRED_BEFORE_CODE_TO_SET_STAY"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Code required to disarm"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_code_required_to_unset"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Tag required to arm"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_tag_required_to_set"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Tag or code required"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_code_or_tag"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Code to bypass"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_code_required_to_bypass_zones"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Send alarm atend exit time"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_send_alarm_atend_exit_delay"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Can arm away only if all zones sealed"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_can_arm_away_only_if_all_zones_sealed"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Can arm stay only if all zones sealed"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_can_arm_stay_only_if_all_zones_sealed"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Use near and verified alarm reporting for all zones"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_use_near_and_verified_alarm_reporting_for_all_zones"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Assign chirps access tags"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_assign_chirps_access_tags"])[0]));
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Not arm if zones open after exit delay"].Equals(true))
            {
                area_options += (uint)(0xFFFFFFFF & (((uint[])this.attributes["options"]["area_can_not_arm_if_zone_unsealed_at_end_of_exit_delay"])[0]));
            }

            #endregion

            #region Area arm disarm outputs
            byte[] area_arm_disarm_outputs = (byte[])attributes["area_arm_disarm_outputs"]["value"];
            //away_arm_outputs
            area_arm_disarm_outputs[(int)((int[])this.attributes["area_arm_disarm_outputs"]["away_arm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm away output - 1"]);
            area_arm_disarm_outputs[(int)((int[])this.attributes["area_arm_disarm_outputs"]["away_arm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm away output - 2"]);
            area_arm_disarm_outputs[(int)((int[])this.attributes["area_arm_disarm_outputs"]["away_arm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm away output - 3"]);

            //stay_arm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_arm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm stay output - 1"]);;
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_arm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm stay output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_arm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm stay output - 3"]);

            //away_disarm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["away_disarm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm away output - 1"]);;
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["away_disarm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm away output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["away_disarm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm away output - 3"]);
            //stay_disarm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_disarm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm stay output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_disarm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm stay output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_disarm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm stay output - 3"]);
            //pulse_away_arm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_arm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm away pulsed output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_arm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm away pulsed output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_arm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm away pulsed output - 3"]);
            //pulse_stay_arm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_arm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm stay pulsed output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_arm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm stay pulsed output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_arm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arm stay pulsed output - 3"]);
            //pulse_stay_disarm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_disarm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm pulsed stay output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_disarm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm pulsed stay output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_disarm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm pulsed stay output - 3"]);
            //pulse_away_disarm_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_disarm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm pulsed away output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_disarm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm pulsed away output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_disarm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Disarm pulsed away output - 3"]);
            //away_arming_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["away_arming_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming away output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["away_arming_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming away output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["away_arming_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming away output - 3"]);
            //pulse_away_arming_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_arming_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming away pulsed output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_arming_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming away pulsed output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_away_arming_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming away pulsed output - 3"]);
            //stay_arming_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_arming_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming stay output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_arming_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming stay output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["stay_arming_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming stay output - 3"]);
            //pulse_stay_arming_outputs
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_arming_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming stay pulsed output - 1"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_arming_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming stay pulsed output - 2"]);
            area_arm_disarm_outputs[((int[])this.attributes["area_arm_disarm_outputs"]["pulse_stay_arming_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Arming stay pulsed output - 3"]);
            #endregion

            #region Area beeps arm disarm outputs
            byte[] area_beeps_arm_disarm_outputs = (byte[])attributes["area_beeps_arm_disarm_outputs"]["value"];
            //beeps_away_arm_outputs
            area_beeps_arm_disarm_outputs[(int)((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_away_arm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Away arm beeps output - 1"]);
            area_beeps_arm_disarm_outputs[(int)((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_away_arm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Away arm beeps output - 2"]);
            area_beeps_arm_disarm_outputs[(int)((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_away_arm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Away arm beeps output - 3"]);

            //beeps_away_disarm_outputs
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_away_disarm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Away disarm beeps output - 1"]);;
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_away_disarm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Away disarm beeps output - 2"]);
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_away_disarm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Away disarm beeps output - 3"]);

            //beeps_stay_arm_outputs
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_stay_arm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Stay arm beeps output - 1"]);;
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_stay_arm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Stay arm beeps output - 2"]);
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_stay_arm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Stay arm beeps output - 3"]);

            //beeps_stay_disarm_outputs
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_stay_disarm_outputs"])[0]]     = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Stay disarm beeps output - 1"]);
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_stay_disarm_outputs"])[0] + 1] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Stay disarm beeps output - 2"]);
            area_beeps_arm_disarm_outputs[((int[])this.attributes["area_beeps_arm_disarm_outputs"]["beeps_stay_disarm_outputs"])[0] + 2] = (byte)((int)mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Stay disarm beeps output - 3"]);

            #endregion

            #region Timezones Start arm.
            byte timezones_start_arm = 0;
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T1"].Equals(true))
            {
                timezones_start_arm += 0x01;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T2"].Equals(true))
            {
                timezones_start_arm += 0x02;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T3"].Equals(true))
            {
                timezones_start_arm += 0x04;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T4"].Equals(true))
            {
                timezones_start_arm += 0x08;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T5"].Equals(true))
            {
                timezones_start_arm += 0x10;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T6"].Equals(true))
            {
                timezones_start_arm += 0x20;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T7"].Equals(true))
            {
                timezones_start_arm += 0x40;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start arm - T8"].Equals(true))
            {
                timezones_start_arm += 0x80;
            }
            #endregion

            #region Timezones End arm
            byte timezones_end_arm = 0;
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T1"].Equals(true))
            {
                timezones_end_arm += 0x01;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T2"].Equals(true))
            {
                timezones_end_arm += 0x02;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T3"].Equals(true))
            {
                timezones_end_arm += 0x04;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T4"].Equals(true))
            {
                timezones_end_arm += 0x08;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T5"].Equals(true))
            {
                timezones_end_arm += 0x10;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T6"].Equals(true))
            {
                timezones_end_arm += 0x20;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T7"].Equals(true))
            {
                timezones_end_arm += 0x40;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End arm - T8"].Equals(true))
            {
                timezones_end_arm += 0x80;
            }
            #endregion

            #region Timezones Start disarm
            byte timezones_start_disarm = 0;
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T1"].Equals(true))
            {
                timezones_start_disarm += 0x01;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T2"].Equals(true))
            {
                timezones_start_disarm += 0x02;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T3"].Equals(true))
            {
                timezones_start_disarm += 0x04;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T4"].Equals(true))
            {
                timezones_start_disarm += 0x08;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T5"].Equals(true))
            {
                timezones_start_disarm += 0x10;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T6"].Equals(true))
            {
                timezones_start_disarm += 0x20;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T7"].Equals(true))
            {
                timezones_start_disarm += 0x40;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["Start disarm - T8"].Equals(true))
            {
                timezones_start_disarm += 0x80;
            }
            #endregion

            #region Timezones End disarm
            byte timezones_end_disarm = 0;
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T1"].Equals(true))
            {
                timezones_end_disarm += 0x01;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T2"].Equals(true))
            {
                timezones_end_disarm += 0x02;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T3"].Equals(true))
            {
                timezones_end_disarm += 0x04;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T4"].Equals(true))
            {
                timezones_end_disarm += 0x08;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T5"].Equals(true))
            {
                timezones_end_disarm += 0x10;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T6"].Equals(true))
            {
                timezones_end_disarm += 0x20;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T7"].Equals(true))
            {
                timezones_end_disarm += 0x40;
            }
            if (mainForm.databaseDataSet.Area.Rows[(int)area_number]["End disarm - T8"].Equals(true))
            {
                timezones_end_disarm += 0x80;
            }
            #endregion


            ulong area_call_code      = ulong.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Voice call code"].ToString());
            uint  exit_timer_away     = uint.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Exit timer away"].ToString());
            uint  exit_timer_stay     = uint.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Exit timer stay"].ToString());
            short area_account_number = short.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["DRCV account number"].ToString());


            byte[] description_bytes = new byte[64];
            description_bytes = Encoding.GetEncoding("UTF-8").GetBytes(description);
            byte[]  area_options_bytes           = BitConverter.GetBytes(area_options);
            ulong[] area_call_code_bytes         = GetIntArray(area_call_code);
            byte[]  exit_timer_away_bytes        = BitConverter.GetBytes(exit_timer_away);
            byte[]  exit_timer_stay_bytes        = BitConverter.GetBytes(exit_timer_stay);
            byte[]  area_account_number_bytes    = BitConverter.GetBytes(area_account_number);
            byte[]  timezones_start_arm_bytes    = BitConverter.GetBytes(timezones_start_arm);
            byte[]  timezones_end_arm_bytes      = BitConverter.GetBytes(timezones_end_arm);
            byte[]  timezones_start_disarm_bytes = BitConverter.GetBytes(timezones_start_disarm);
            byte[]  timezones_end_disarm_bytes   = BitConverter.GetBytes(timezones_end_disarm);

            byte[] reserved_1_bytes = (byte[])mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Reserved 1"];
            byte[] reserved_2_bytes = (byte[])mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Reserved 2"];
            byte[] reserved_3_bytes = (byte[])mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Reserved 3"];
            byte[] start_message_command_control_bytes = (byte[])mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Start message command control"];

            #region AUDIO TRACKS
            byte[] audio_tracks = new byte[8];
            if ((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 1"].ToString()).Equals(0xFFFF)))
            {
                audio_tracks[0] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 1"].ToString()) & 0xFF);
                audio_tracks[1] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 1"].ToString()) >> 8);
            }
            else
            {
                audio_tracks[0] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 1"].ToString()) - 1) & 0xFF);
                audio_tracks[1] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 1"].ToString()) - 1) >> 8);
            }

            if ((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 2"].ToString()).Equals(0xFFFF)))
            {
                audio_tracks[2] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 2"].ToString()) & 0xFF);
                audio_tracks[3] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 2"].ToString()) >> 8);
            }
            else
            {
                audio_tracks[2] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 2"].ToString()) - 1) & 0xFF);
                audio_tracks[3] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 2"].ToString()) - 1) >> 8);
            }

            if ((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 3"].ToString()).Equals(0xFFFF)))
            {
                audio_tracks[4] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 3"].ToString()) - 1) & 0xFF);
                audio_tracks[5] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 3"].ToString()) - 1) >> 8);
            }
            else
            {
                audio_tracks[4] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 3"].ToString()) & 0xFF);
                audio_tracks[5] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 3"].ToString()) >> 8);
            }

            if ((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 4"].ToString()).Equals(0xFFFF)))
            {
                audio_tracks[6] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 4"].ToString()) & 0xFF);
                audio_tracks[7] = (byte)(int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 4"].ToString()) >> 8);
            }
            else
            {
                audio_tracks[6] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 4"].ToString()) - 1) & 0xFF);
                audio_tracks[7] = (byte)((int.Parse(mainForm.databaseDataSet.Area.Rows[(int)area_number]["Audio track 4"].ToString()) - 1) >> 8);
            }
            #endregion

            byte[] area_code_length = (byte[])mainForm.databaseDataSet.Area.Rows[(int)(area_number)]["Code length"];

            int  i            = 0;
            uint j            = 0;
            uint area_address = 0x003000 + (512 * (area_number));
            byte_array[i++] = 0x40;
            byte_array[i++] = (byte)((area_address >> 16) & 0xFF);
            byte_array[i++] = (byte)((area_address >> 8) & 0xFF);
            byte_array[i++] = (byte)(area_address & 0xFF);

            byte_array[i++] = 240;
            int temp = i;
            //TODO: Create a function for this for

            //Description
            for (i = temp + (int)attributes["description"]["address"], j = 0; i < (temp + (int)attributes["description"]["address"] + description_bytes.Length); i++, j++)
            {
                byte_array[i] = description_bytes[j];
                if ((description_bytes.Length - 1) == (j))
                {
                    for (i = i + 1; i < ((int)attributes["description"]["address"] + temp); i++)
                    {
                        byte_array[i] = 0;
                    }
                }
            }

            //call code
            for (i = (int)attributes["call_code"]["address"] + temp, j = 0; i < ((int)attributes["call_code"]["address"] + temp + area_call_code_bytes.Length); i++, j++)
            {
                byte_array[i] = (byte)area_call_code_bytes[j];

                //Add 0xFF if code don't have maximum length
                if (i.Equals(((int)attributes["call_code"]["address"] + temp + (area_call_code_bytes.Length - 1))) && area_call_code_bytes.Length != 8)
                {
                    int counter = 8 - area_call_code_bytes.Length;

                    for (int k = counter; k > 0; k--)
                    {
                        byte_array[i + k] = 0xFF;
                    }
                }
            }

            //Options
            for (i = ((int)attributes["options"]["address"] + temp), j = 0; i < ((int)attributes["options"]["address"] + temp + area_options_bytes.Length); i++, j++)
            {
                byte_array[i] = area_options_bytes[j];
            }

            //code length
            for (i = ((int)attributes["code_length"]["address"] + temp), j = 0; i < ((int)attributes["code_length"]["address"] + temp + (area_code_length.Length - 1)); i++, j++)
            {
                byte_array[i] = area_code_length[j];
            }

            // exit timer away
            for (i = ((int)attributes["away_entry_delay_time"]["address"] + temp), j = 0; i < ((int)attributes["away_entry_delay_time"]["address"] + temp + (exit_timer_away_bytes.Length)); i++, j++)
            {
                byte_array[i] = exit_timer_away_bytes[j];
            }

            //exit timer stay
            for (i = ((int)attributes["stay_entry_delay_time"]["address"] + temp), j = 0; i < ((int)attributes["stay_entry_delay_time"]["address"] + temp + (exit_timer_stay_bytes.Length)); i++, j++)
            {
                byte_array[i] = exit_timer_stay_bytes[j];
            }

            //area_arm_disarm_outputs
            for (i = ((int)attributes["area_arm_disarm_outputs"]["address"] + temp), j = 0; i < ((int)attributes["area_arm_disarm_outputs"]["address"] + temp + (area_arm_disarm_outputs.Length)); i++, j++)
            {
                byte_array[i] = area_arm_disarm_outputs[j];
            }



            //DRCV_client_code
            for (i = ((int)attributes["DRCV_client_code"]["address"] + temp), j = 0; i < ((int)attributes["DRCV_client_code"]["address"] + temp + (area_account_number_bytes.Length)); i++, j++)
            {
                byte_array[i] = area_account_number_bytes[j];
            }


            #region MEMORY NOT USED - should be written always

            //Reserved 1
            for (i = (temp + (int)this.attributes["reserved_1"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_1"]["address"] + reserved_1_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_1_bytes[j];
            }

            //Reserved 2
            for (i = (temp + (int)this.attributes["reserved_2"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_2"]["address"] + reserved_2_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_2_bytes[j];
            }
            //Reserved 3
            for (i = (temp + (int)this.attributes["reserved_3"]["address"]), j = 0; i < (temp + (int)this.attributes["reserved_3"]["address"] + reserved_3_bytes.Length); i++, j++)
            {
                byte_array[i] = reserved_3_bytes[j];
            }
            //Start message command control
            for (i = (temp + (int)this.attributes["start_message_command_control"]["address"]), j = 0; i < (temp + (int)this.attributes["start_message_command_control"]["address"] + start_message_command_control_bytes.Length); i++, j++)
            {
                byte_array[i] = start_message_command_control_bytes[j];
            }

            #endregion


            #region Timezones
            for (i = ((int)attributes["Timezone_start_arm"]["address"] + temp), j = 0; i < ((int)attributes["Timezone_start_arm"]["address"] + temp + timezones_start_arm_bytes.Length); i++, j++)
            {
                byte_array[i] = timezones_start_arm_bytes[j];
            }
            for (i = ((int)attributes["Timezone_start_disarm"]["address"] + temp), j = 0; i < ((int)attributes["Timezone_start_disarm"]["address"] + temp + timezones_start_disarm_bytes.Length); i++, j++)
            {
                byte_array[i] = timezones_start_disarm_bytes[j];
            }
            for (i = ((int)attributes["Timezone_end_arm"]["address"] + temp), j = 0; i < ((int)attributes["Timezone_end_arm"]["address"] + temp + timezones_end_arm_bytes.Length); i++, j++)
            {
                byte_array[i] = timezones_end_arm_bytes[j];
            }
            for (i = ((int)attributes["Timezone_end_disarm"]["address"] + temp), j = 0; i < ((int)attributes["Timezone_end_disarm"]["address"] + temp + timezones_end_disarm_bytes.Length); i++, j++)
            {
                byte_array[i] = timezones_end_disarm_bytes[j];
            }
            #endregion

            #region Audio tracks
            for (i = ((int)attributes["audio_tracks"]["address"] + temp), j = 0; i < ((int)attributes["audio_tracks"]["address"] + temp + (audio_tracks.Length)); i++, j++)
            {
                byte_array[i] = audio_tracks[j];
            }
            #endregion

            #region area_beeps_arm_disarm_outputs
            //area_beeps_arm_disarm_outputs
            for (i = ((int)attributes["area_beeps_arm_disarm_outputs"]["address"] + temp), j = 0; i < ((int)attributes["area_beeps_arm_disarm_outputs"]["address"] + temp + (area_beeps_arm_disarm_outputs.Length)); i++, j++)
            {
                byte_array[i] = area_beeps_arm_disarm_outputs[j];
            }
            #endregion

            byte_array[4] = (byte)(i - temp);

            General protocol = new General();
            protocol.send_msg((uint)(i), byte_array, mainForm.cp_id, mainForm); // TODO: Check if cp_id is needed
        }