271 lines
11 KiB
C#
271 lines
11 KiB
C#
using AgroBase.Comum;
|
|
using AgroBase.Models.Modules;
|
|
using AgroBase.Models;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using static AgroBase.Models.Enuns;
|
|
using AgroBase.Services;
|
|
using System.Net.NetworkInformation;
|
|
|
|
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>();
|
|
List<PinoutModel> Pinout = new List<PinoutModel>();
|
|
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 List<PinoutModel>();
|
|
Dispositivos = new List<DispositivoDataModel>();
|
|
|
|
switch (TipoDisp)
|
|
{
|
|
case T_Code.Mov:
|
|
{
|
|
DispositivosService<MovimentacaoModel> Disp = (DispositivosService<MovimentacaoModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == TipoDisp);
|
|
|
|
if (Disp == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.Text = "Pinout - Movimentação";
|
|
|
|
Funcoes = MovimentacaoModel.Funcoes.ToList();
|
|
Pinout = MovimentacaoModel.Pinout.ToList();
|
|
Dispositivos = Disp.Dados.Motores.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}).ToList();
|
|
break;
|
|
}
|
|
case T_Code.Dir:
|
|
{
|
|
DispositivosService<DirecionalModel> Disp = (DispositivosService<DirecionalModel>)Variaveis.DispositivosConectados.FirstOrDefault(x => x.Dispositivo == TipoDisp);
|
|
|
|
if (Disp == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
this.Text = "Pinout - Direcional";
|
|
|
|
Funcoes = DirecionalModel.Funcoes.ToList();
|
|
Pinout = DirecionalModel.Pinout.ToList();
|
|
Dispositivos = Disp.Dados.Motores.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}).ToList();
|
|
break;
|
|
}
|
|
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.ToList();
|
|
Dispositivos = Disp.Dados.Sensores.Select(x => new DispositivoDataModel()
|
|
{
|
|
ID = x.ID,
|
|
Funcoes = x.Funcoes
|
|
}).ToList();
|
|
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.ToList();
|
|
Dispositivos = new List<DispositivoDataModel>();
|
|
Dispositivos.Add(new DispositivoDataModel()
|
|
{
|
|
ID = Disp.Dados.BombaPressurizadora.ID,
|
|
Funcoes = Disp.Dados.BombaPressurizadora.Funcoes
|
|
});
|
|
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;
|
|
}
|
|
}
|
|
|
|
Funcoes.ForEach(x => Pinos.Add(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> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmb")).ToList();
|
|
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;
|
|
|
|
var Selecionado = Pinout.FirstOrDefault(x => x.Descricao == cmb.Name.Replace("cmb", ""));
|
|
if (Selecionado != null)
|
|
{
|
|
cmb.Enabled = Selecionado.Habilitado;
|
|
if (Selecionado.Habilitado)
|
|
{
|
|
cmb.SelectedItem = (Selecionado.Funcao != FuncoesPinout.Geral ? Selecionado.ComponenteID + " " : "") + Enum.GetName(typeof(FuncoesPinout), Selecionado.Funcao);
|
|
}
|
|
}
|
|
}
|
|
|
|
AtualizaTipoControlador(Pinout.FirstOrDefault().Tipo, false);
|
|
}
|
|
|
|
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)
|
|
{
|
|
Pinout.ForEach(x =>
|
|
{
|
|
x.ComponenteID = "";
|
|
x.Funcao = FuncoesPinout.NaoConectado;
|
|
});
|
|
|
|
List<ComboBox> cmbs = this.Controls.OfType<ComboBox>().Where(x => x.Name.Contains("cmb") && x.Enabled && x.Visible).ToList();
|
|
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());
|
|
if (Pinout.Any(x => x.Descricao == cmb.Name.Replace("cmb", "")))
|
|
{
|
|
Pinout.FirstOrDefault(x => x.Descricao == cmb.Name.Replace("cmb", "")).Funcao = Funcao;
|
|
Pinout.FirstOrDefault(x => x.Descricao == cmb.Name.Replace("cmb", "")).ComponenteID = ComponenteID;
|
|
}
|
|
}
|
|
|
|
PinoutModel.SalvarPinout(Pinout, "pinout" + Enum.GetName(typeof(T_Code), TipoDisp) + ".pin");
|
|
|
|
switch (TipoDisp)
|
|
{
|
|
case T_Code.Mov:
|
|
MovimentacaoModel.Pinout = Pinout.ToList();
|
|
break;
|
|
case T_Code.Dir:
|
|
DirecionalModel.Pinout = Pinout.ToList();
|
|
break;
|
|
case T_Code.Sen:
|
|
SensoriamentoModel.Pinout = Pinout.ToList();
|
|
break;
|
|
case T_Code.Atu:
|
|
AtuadorModel.Pinout = Pinout.ToList();
|
|
break;
|
|
}
|
|
}
|
|
|
|
private void cbTipo_SelectedIndexChanged(object sender, EventArgs e)
|
|
{
|
|
TiposControladores Tipo = (TiposControladores)(((ComboBox)sender).SelectedIndex);
|
|
if (Pinout.FirstOrDefault().Tipo != 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 = 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 = 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.Any(x => x.Descricao == cmb.Name.Replace("cmb", ""));
|
|
}
|
|
|
|
|
|
cbTipo.SelectedIndex = (int)TipoControlador;
|
|
}
|
|
}
|
|
|
|
class DispositivoDataModel
|
|
{
|
|
public string ID { get; set; }
|
|
public List<FuncoesPinout> Funcoes { get; set; }
|
|
}
|
|
}
|