agrobot_base/AgroBase/AgroBase/Forms/frmPinout.cs

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