466 lines
19 KiB
C#
466 lines
19 KiB
C#
using AgroBase.Comum;
|
|
using AgroBase.Models.Modules;
|
|
using AgroBase.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
using static AgroBase.Models.Enums;
|
|
using AgroBase.Services;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace AgroBase.Forms
|
|
{
|
|
public partial class frmPinout : Form
|
|
{
|
|
public T_Code TipoDisp;
|
|
List<string> Pinos = new List<string>()
|
|
{
|
|
Enum.GetName(typeof(FuncoesPinout), FuncoesPinout.NaoConectado),
|
|
};
|
|
List<FuncoesPinout> Funcoes = new List<FuncoesPinout>();
|
|
PinoutDataModel Pinout = new PinoutDataModel();
|
|
List<DispositivoDataModel> Dispositivos = new List<DispositivoDataModel>();
|
|
|
|
public frmPinout(T_Code tipo)
|
|
{
|
|
InitializeComponent();
|
|
|
|
TipoDisp = tipo;
|
|
}
|
|
|
|
private void frmPinout_Load(object sender, EventArgs e)
|
|
{
|
|
cbTipo.Items.Clear();
|
|
cbTipo.Items.AddRange(Enum.GetNames(typeof(TiposControladores)));
|
|
|
|
Pinos = new List<string>()
|
|
{
|
|
Enum.GetName(typeof(FuncoesPinout), FuncoesPinout.NaoConectado),
|
|
};
|
|
Funcoes = new List<FuncoesPinout>();
|
|
Pinout = new PinoutDataModel()
|
|
{
|
|
ExpansorGPIO = false,
|
|
EnderecoGPIO = "0x20",
|
|
ExpansorADS = false,
|
|
EnderecoADS = "0x48",
|
|
Pinos = new List<PinoutModel>(),
|
|
};
|
|
Dispositivos = new List<DispositivoDataModel>();
|
|
|
|
switch (TipoDisp)
|
|
{
|
|
case T_Code.Sen:
|
|
{
|
|
DispositivosService<SensoriamentoModel> Disp = (DispositivosService<SensoriamentoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == TipoDisp);
|
|
|
|
if (Disp == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.Text = "Pinout - Sensoriamento";
|
|
|
|
Funcoes = SensoriamentoModel.Funcoes.ToList();
|
|
Pinout = SensoriamentoModel.Pinout;
|
|
Dispositivos.Add(new DispositivoDataModel()
|
|
{
|
|
ID = "",
|
|
Funcoes = Funcoes
|
|
});
|
|
Dispositivos.AddRange(Disp.Dados.Sensores.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}));
|
|
Dispositivos.AddRange(Disp.Dados.Sinaleiros.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}));
|
|
Dispositivos.AddRange(Disp.Dados.Reles.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}));
|
|
Dispositivos.AddRange(Disp.Dados.Servos.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}));
|
|
Dispositivos.Add(new DispositivoDataModel()
|
|
{
|
|
ID = Variaveis.LoraService.ID,
|
|
Funcoes = Variaveis.LoraService.Funcoes
|
|
});
|
|
break;
|
|
}
|
|
case T_Code.Atu:
|
|
{
|
|
DispositivosService<AtuadorModel> Disp = (DispositivosService<AtuadorModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == TipoDisp);
|
|
|
|
if (Disp == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.Text = "Pinout - Atuador";
|
|
|
|
Funcoes = AtuadorModel.Funcoes.ToList();
|
|
Pinout = AtuadorModel.Pinout;
|
|
Dispositivos = new List<DispositivoDataModel>();
|
|
Dispositivos.AddRange(Disp.Dados.BombasPressurizadoras.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}).ToList());
|
|
Dispositivos.AddRange(Disp.Dados.BicosPulverizadores.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}).ToList());
|
|
Dispositivos.AddRange(Disp.Dados.Sensores.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}).ToList());
|
|
break;
|
|
}
|
|
case T_Code.Mvd:
|
|
{
|
|
DispositivosService<MovimentacaoUnificadaModel> Disp = (DispositivosService<MovimentacaoUnificadaModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == TipoDisp);
|
|
|
|
if (Disp == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.Text = "Pinout - Movimentação Unificado";
|
|
|
|
Funcoes = ModuloMvdModel.Funcoes.ToList();
|
|
Pinout = ModuloMvdModel.Pinout;
|
|
Dispositivos = new List<DispositivoDataModel>();
|
|
Dispositivos.Add(new DispositivoDataModel()
|
|
{
|
|
ID = Disp.Dados.Modulos.First().MovMotor.ID,
|
|
Funcoes = Disp.Dados.Modulos.First().MovMotor.Funcoes
|
|
});
|
|
Dispositivos.Add(new DispositivoDataModel()
|
|
{
|
|
ID = Disp.Dados.Modulos.First().DirMotor.ID,
|
|
Funcoes = Disp.Dados.Modulos.First().DirMotor.Funcoes
|
|
});
|
|
break;
|
|
}
|
|
}
|
|
|
|
cmbMCPendereco.Items.Clear();
|
|
cmbMCPendereco.Items.AddRange(new string[] { "0x20 (GND)" });
|
|
cmbMCPendereco.SelectedIndex = 0;
|
|
chbMCP.Checked = Pinout.ExpansorGPIO;
|
|
//txtMCP1.Text = Pinout.EnderecoGPIO;
|
|
|
|
cmbADSendereco.Items.Clear();
|
|
cmbADSendereco.Items.AddRange(new string[] { "0x48 (GND)", "0x49 (VCC)", "0x4A (SDA)", "0x4B (SCL)" });
|
|
cmbADSendereco.SelectedIndex = 0;
|
|
chbADS.Checked = Pinout.ExpansorADS;
|
|
//txtADS1.Text = Pinout.EnderecoADS;
|
|
|
|
Funcoes.ForEach(x => Pinos.Add(TipoDisp.ToString() + " " + Enum.GetName(typeof(FuncoesPinout), x)));
|
|
|
|
foreach (var Dispositivo in Dispositivos)
|
|
{
|
|
Dispositivo.Funcoes?.ForEach(x => Pinos.Add(Dispositivo.ID + " " + Enum.GetName(typeof(FuncoesPinout), x)));
|
|
}
|
|
|
|
List<ComboBox> cmbsControlador = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmb")).ToList();
|
|
AtualizarPinoutBarramento(cmbsControlador);
|
|
List<ComboBox> cmbsMcp = gpbMCP.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
AtualizarPinoutBarramento(cmbsMcp);
|
|
List<ComboBox> cmbsAds = gpbADS.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
AtualizarPinoutBarramento(cmbsAds);
|
|
|
|
AtualizaTipoControlador(Pinout.Pinos.FirstOrDefault().Controlador, false);
|
|
}
|
|
|
|
private void AtualizarPinoutBarramento(List<ComboBox> cmbs)
|
|
{
|
|
foreach (var cmb in cmbs)
|
|
{
|
|
cmb.SelectedIndexChanged -= Cmb_SelectedIndexChanged;
|
|
cmb.SelectedIndexChanged += Cmb_SelectedIndexChanged;
|
|
cmb.Items.Clear();
|
|
Pinos.ForEach(x => cmb.Items.Add(x));
|
|
cmb.SelectedIndex = 0;
|
|
|
|
string pino = cmb.Name.Replace("cmb", "");
|
|
var Selecionado = Pinout.Pinos.FirstOrDefault(x => x.Descricao == pino);
|
|
if (Selecionado != null)
|
|
{
|
|
cmb.Enabled =
|
|
(Selecionado.Barramento == TiposBarramentos.CONTROLADOR && Selecionado.Habilitado) ||
|
|
(Selecionado.Barramento == TiposBarramentos.EXPANSOR_GPIO && chbMCP.Checked && cmb.Name.Contains("MCP")) ||
|
|
(Selecionado.Barramento == TiposBarramentos.EXPANSOR_ADS && chbADS.Checked && cmb.Name.Contains("ADS"));
|
|
|
|
if (Selecionado.Habilitado && cmb.Enabled)
|
|
{
|
|
cmb.SelectedItem = Selecionado.ComponenteID + " " + Enum.GetName(typeof(FuncoesPinout), Selecionado.Funcao);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void frmPinout_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void Cmb_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
var cmb = (ComboBox)sender;
|
|
this.Controls.OfType<ComboBox>().Where(x => x.Name != cmb.Name && x.SelectedItem != null && x.SelectedItem.ToString() == cmb.SelectedItem.ToString()).ToList().ForEach(x => x.SelectedIndex = 0);
|
|
}
|
|
|
|
private void btnSalvar_Click(object sender, EventArgs e)
|
|
{
|
|
List<ComboBox> cmbsControlador = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmb") && x.Enabled && x.Visible).ToList();
|
|
SalvarPinoutBarramento(cmbsControlador);
|
|
/*for (int i = 0; i < cmbMCPendereco.Items.Count; i++)
|
|
{
|
|
atualizarPinosMCP(i);
|
|
List<ComboBox> cmbsMcp = gpbMCP.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
SalvarPinoutBarramento(cmbsMcp);
|
|
}
|
|
for (int i = 0; i < cmbADSendereco.Items.Count; i++)
|
|
{
|
|
atualizarPinosADS(i);
|
|
List<ComboBox> cmbsAds = gpbADS.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
SalvarPinoutBarramento(cmbsAds);
|
|
}*/
|
|
|
|
Pinout.ExpansorGPIO = chbMCP.Checked;
|
|
//Pinout.EnderecoGPIO = txtMCP1.Text;
|
|
|
|
Pinout.ExpansorADS = chbADS.Checked;
|
|
//Pinout.EnderecoADS = txtADS1.Text;
|
|
|
|
VersaoArquivoModel arquivo = VersionamentoService.ArquivoPinout(TipoDisp);
|
|
if (arquivo != null)
|
|
{
|
|
PinoutModel.SalvarPinout(Pinout, arquivo.CaminhoCompleto);
|
|
}
|
|
|
|
switch (TipoDisp)
|
|
{
|
|
case T_Code.Sen:
|
|
SensoriamentoModel.Pinout = Pinout;
|
|
break;
|
|
case T_Code.Atu:
|
|
AtuadorModel.Pinout = Pinout;
|
|
break;
|
|
case T_Code.Mvd:
|
|
ModuloMvdModel.Pinout = Pinout;
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void SalvarPinoutBarramento(List<ComboBox> cmbs)
|
|
{
|
|
foreach (var cmb in cmbs)
|
|
{
|
|
string ComponenteID = cmb.SelectedItem.ToString().Split(' ').Length > 1 ? cmb.SelectedItem.ToString().Split(' ')[0] : "";
|
|
FuncoesPinout Funcao = (FuncoesPinout)Enum.Parse(typeof(FuncoesPinout), ComponenteID != "" ? (cmb.SelectedItem.ToString().Split(' ')[1]) : cmb.SelectedItem.ToString());
|
|
string pino = cmb.Name.Replace("cmb", "");
|
|
var _pino = Pinout.Pinos.FirstOrDefault(x => x.Descricao == pino);
|
|
if (_pino == null)
|
|
{
|
|
_pino = new PinoutModel()
|
|
{
|
|
Controlador = TiposControladores.TODOS,
|
|
Descricao = pino,
|
|
Habilitado = true,
|
|
Pino = Convert.ToInt32(Regex.Match(pino, @"\d+").Value),
|
|
Barramento = TiposBarramentos.CONTROLADOR,
|
|
ComponenteID = "",
|
|
Funcao = FuncoesPinout.NaoConectado
|
|
};
|
|
Pinout.Pinos.Add(_pino);
|
|
}
|
|
_pino.Funcao = Funcao;
|
|
_pino.ComponenteID = ComponenteID;
|
|
_pino.Barramento =
|
|
cmb.Name.Contains("MCP") ? TiposBarramentos.EXPANSOR_GPIO :
|
|
cmb.Name.Contains("ADS") ? TiposBarramentos.EXPANSOR_ADS :
|
|
TiposBarramentos.CONTROLADOR;
|
|
}
|
|
}
|
|
|
|
private void cbTipo_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
TiposControladores Tipo = (TiposControladores)(((ComboBox)sender).SelectedIndex);
|
|
if (Pinout.Pinos.FirstOrDefault().Controlador != Tipo)
|
|
{
|
|
AtualizaTipoControlador(Tipo, true);
|
|
}
|
|
}
|
|
|
|
private void AtualizaTipoControlador(TiposControladores TipoControlador, bool Novo)
|
|
{
|
|
switch (TipoControlador)
|
|
{
|
|
case TiposControladores.ESP32_S3:
|
|
imgESP32.Image = Properties.Resources.esp32_s3;
|
|
imgESP32.Size = new Size(304, 688);
|
|
imgESP32.Location = new Point(130, 2);
|
|
if (Novo)
|
|
Pinout = new PinoutDataModel()
|
|
{
|
|
ExpansorGPIO = false,
|
|
EnderecoGPIO = "0x20",
|
|
ExpansorADS = false,
|
|
EnderecoADS = "0x48",
|
|
Pinos = PinoutModel.CarregarPinoutPadrao_S3(),
|
|
};
|
|
break;
|
|
case TiposControladores.ESP32_WROVER:
|
|
imgESP32.Image = Properties.Resources.esp32_wrover;
|
|
imgESP32.Size = new Size(304, 540);
|
|
imgESP32.Location = new Point(130, 40);
|
|
if (Novo)
|
|
Pinout = new PinoutDataModel()
|
|
{
|
|
ExpansorGPIO = false,
|
|
EnderecoGPIO = "0x20",
|
|
ExpansorADS = false,
|
|
EnderecoADS = "0x48",
|
|
Pinos = PinoutModel.CarregarPinoutPadrao_Wrover(),
|
|
};
|
|
break;
|
|
}
|
|
|
|
List<ComboBox> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmb")).ToList();
|
|
foreach (var cmb in cmbs)
|
|
{
|
|
cmb.Visible = Pinout.Pinos.Any(x => x.Descricao == cmb.Name.Replace("cmb", ""));
|
|
cmb.Enabled = cmb.Visible ? Pinout.Pinos.First(x => x.Descricao == cmb.Name.Replace("cmb", "")).Habilitado : false;
|
|
}
|
|
|
|
cbTipo.SelectedIndex = (int)TipoControlador;
|
|
|
|
chbMCP.Checked = Pinout.ExpansorGPIO;
|
|
chbADS.Checked = Pinout.ExpansorADS;
|
|
}
|
|
|
|
private void chbExpansor_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
CheckBox chb = sender as CheckBox;
|
|
if (chb.Name.Contains("MCP"))
|
|
{
|
|
AtualizarCombosMCP(chb);
|
|
}
|
|
else if (chb.Name.Contains("ADS"))
|
|
{
|
|
AtualizarCombosADS(chb);
|
|
}
|
|
}
|
|
|
|
private void AtualizarCombosMCP(CheckBox chb)
|
|
{
|
|
if (chb.Checked && !Pinout.Pinos.Any(x => x.Barramento == TiposBarramentos.EXPANSOR_GPIO))
|
|
{
|
|
Pinout.Pinos.AddRange(PinoutModel.CarregarPinoutPadrao_MCP());
|
|
}
|
|
string ID = chb.Name.Replace("chbMCP", "");
|
|
GroupBox gpb = this.Controls.OfType<GroupBox>().FirstOrDefault(x => x.Name == "gpbMCP" + ID);
|
|
foreach (var cmb in gpb.Controls.OfType<ComboBox>())
|
|
{
|
|
cmb.Enabled = chb.Checked;
|
|
}
|
|
TextBox txt = gpb.Controls.OfType<TextBox>().FirstOrDefault(x => x.Name == "txtMCP" + ID);
|
|
txt.Enabled = chb.Checked;
|
|
}
|
|
|
|
private void AtualizarCombosADS(CheckBox chb)
|
|
{
|
|
if (chb.Checked && !Pinout.Pinos.Any(x => x.Barramento == TiposBarramentos.EXPANSOR_ADS))
|
|
{
|
|
Pinout.Pinos.AddRange(PinoutModel.CarregarPinoutPadrao_ADS());
|
|
}
|
|
string ID = chb.Name.Replace("chbADS", "");
|
|
GroupBox gpb = this.Controls.OfType<GroupBox>().FirstOrDefault(x => x.Name == "gpbADS" + ID);
|
|
foreach (var cmb in gpb.Controls.OfType<ComboBox>())
|
|
{
|
|
cmb.Enabled = chb.Checked;
|
|
}
|
|
ComboBox cmbAddr = gpb.Controls.OfType<ComboBox>().FirstOrDefault(x => x.Name.Contains("endereco"));
|
|
cmbAddr.Enabled = chb.Checked;
|
|
}
|
|
|
|
private void cmbADSendereco_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
atualizarPinosADS(cmbADSendereco.SelectedIndex);
|
|
}
|
|
|
|
private void atualizarPinosADS(int addr)
|
|
{
|
|
cmbADS_A0.Name = $"cmbADS_A{addr}{0}";
|
|
cmbADS_A1.Name = $"cmbADS_A{addr}{1}";
|
|
cmbADS_A2.Name = $"cmbADS_A{addr}{2}";
|
|
cmbADS_A3.Name = $"cmbADS_A{addr}{3}";
|
|
|
|
List<ComboBox> cmbsAds = gpbADS.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
AtualizarPinoutBarramento(cmbsAds);
|
|
}
|
|
|
|
private void cmbMCPendereco_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
atualizarPinosMCP(cmbMCPendereco.SelectedIndex);
|
|
}
|
|
|
|
private void atualizarPinosMCP(int addr)
|
|
{
|
|
cmbMCP_A0.Name = $"cmbMCP_A{addr}{0}";
|
|
cmbMCP_A1.Name = $"cmbMCP_A{addr}{1}";
|
|
cmbMCP_A2.Name = $"cmbMCP_A{addr}{2}";
|
|
cmbMCP_A3.Name = $"cmbMCP_A{addr}{3}";
|
|
cmbMCP_A4.Name = $"cmbMCP_A{addr}{4}";
|
|
cmbMCP_A5.Name = $"cmbMCP_A{addr}{5}";
|
|
cmbMCP_A6.Name = $"cmbMCP_A{addr}{6}";
|
|
cmbMCP_A7.Name = $"cmbMCP_A{addr}{7}";
|
|
|
|
cmbMCP_B0.Name = $"cmbMCP_B{addr}{0}";
|
|
cmbMCP_B1.Name = $"cmbMCP_B{addr}{1}";
|
|
cmbMCP_B2.Name = $"cmbMCP_B{addr}{2}";
|
|
cmbMCP_B3.Name = $"cmbMCP_B{addr}{3}";
|
|
cmbMCP_B4.Name = $"cmbMCP_B{addr}{4}";
|
|
cmbMCP_B5.Name = $"cmbMCP_B{addr}{5}";
|
|
cmbMCP_B6.Name = $"cmbMCP_B{addr}{6}";
|
|
cmbMCP_B7.Name = $"cmbMCP_B{addr}{7}";
|
|
|
|
List<ComboBox> cmbsMcp = gpbMCP.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
AtualizarPinoutBarramento(cmbsMcp);
|
|
}
|
|
|
|
private void btnADSfixar_Click(object sender, EventArgs e)
|
|
{
|
|
List<ComboBox> cmbsAds = gpbADS.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
SalvarPinoutBarramento(cmbsAds);
|
|
}
|
|
|
|
private void btnMCPfixar_Click(object sender, EventArgs e)
|
|
{
|
|
List<ComboBox> cmbsMcp = gpbMCP.Controls.OfType<ComboBox>().Where(x => !x.Name.Contains("endereco")).ToList();
|
|
SalvarPinoutBarramento(cmbsMcp);
|
|
}
|
|
}
|
|
|
|
class DispositivoDataModel
|
|
{
|
|
public string ID { get; set; }
|
|
public List<FuncoesPinout> Funcoes { get; set; }
|
|
}
|
|
}
|