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