using CapMachine.Model.CANLIN;
using CapMachine.Wpf.CanDrive;
using ImTools;
using Prism.Ioc;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CapMachine.Wpf.Services
{
///
/// Can驱动服务
///
public class CanDriveService : BindableBase
{
///
/// 当前选中的CanLinConfigPro 程序
///
public CanLinConfigPro SelectedCanLinConfigPro { get; set; }
public HighSpeedDataService HighSpeedDataService { get; }
///
/// 实例化函数
///
public CanDriveService(HighSpeedDataService highSpeedDataService, IContainerProvider containerProvider)
{
ToomossCanDrive = new ToomossCan(containerProvider);
//高速数据服务
HighSpeedDataService = highSpeedDataService;
//ToomossCanDrive.StartCanDrive();
}
///
/// 图莫斯 CAN Drive
/// ToomossCanDrive
///
public ToomossCan ToomossCanDrive { get; set; }
///
/// Dbc消息集合
/// 包括读取的实时值和数据
///
public ObservableCollection ListCanDbcModel { get; set; } = new ObservableCollection();
///
/// 初始化CAN的配置信息
///
public void InitCanConfig(CanLinConfigPro selectedCanLinConfigPro)
{
//赋值配置数据
SelectedCanLinConfigPro = selectedCanLinConfigPro;
//为DBC实时数据关联配置的名称
foreach (var item in SelectedCanLinConfigPro.CanLinConfigContents)
{
var FindData = ListCanDbcModel.FindFirst(a => a.SignalName == item.SignalName);
if (FindData != null)
{
FindData.Name = item.Name;
}
}
}
///
/// 开始DBC 配置文件 加载
///
///
public ObservableCollection StartDbc(string Path)
{
ListCanDbcModel = ToomossCanDrive.StartDbc(Path);
return ListCanDbcModel;
}
#region 程序驱动CAN
///
/// 要发送的CAN指令数据
/// 在程序配置好后就确定要发送哪些数据
///
public List CmdData { get; set; } = new List();
///
/// 发送消息给CAN 驱动
///
public void SendMsgToCanDrive()
{
if (ToomossCanDrive.OpenState)
{
if (CmdData.Count > 0)
{
ToomossCanDrive.SendCanMsg(CmdData);
}
else
{
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
}
}
}
///
/// 循环发送数据到CAN
///
public void CycleSendMsg()
{
if (ToomossCanDrive.OpenState)
{
if (ToomossCanDrive.IsCycleSend == false)
{
if (CmdData.Count > 0)
{
ToomossCanDrive.IsCycleSend = true;
ToomossCanDrive.CmdData = CmdData;
ToomossCanDrive.StartCycleSendMsg();
}
else
{
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
}
}
else
{
ToomossCanDrive.IsCycleSend = false;
}
}
}
///
///循环接收数据
///
public void CycleReciveMsg()
{
if (ToomossCanDrive.OpenState)
{
if (ToomossCanDrive.IsCycleRevice == false)
{
if (CmdData.Count > 0)
{
ToomossCanDrive.IsCycleRevice = true;
ToomossCanDrive.StartCycleReviceCanMsg();
}
else
{
System.Windows.MessageBox.Show("未发现配置的数据内容", "提示", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Hand);
}
}
else
{
ToomossCanDrive.IsCycleRevice = false;
}
}
}
#endregion
}
}