eDosStationFull/LSWDevices/LSWDevices.cpp
2026-08-18 12:15:26 +02:00

129 lines
No EOL
3.5 KiB
C++

#include "pch.h"
#include "Device.h"
#include "LSWDevices.h"
#include <vcclr.h>
LSWDevices::cLSWDevice::cLSWDevice()
{
}
LSWDevices::cLSWDevice::~cLSWDevice()
{
}
LSWDevices::cLSWDevices::cLSWDevices()
{
DeviceList = gcnew System::Collections::Generic::List<LSWDevices::cLSWDevice^>();
}
LSWDevices::cLSWDevices::~cLSWDevices()
{
//DeviceList->Clear();
}
void LSWDevices::cLSWDevices::AddFilter(System::Collections::Generic::List<System::String^>^ Filter)
{
for each (String^ var in Filter)
{
pin_ptr<const wchar_t> wch = PtrToStringChars(var);
cAddFilter( const_cast<wchar_t*>(wch) );
}
}
void LSWDevices::cLSWDevices::Scan(int type, System::Collections::Generic::List<System::String^>^ Filter)
{
int maxFilter = 0;
DevicesFound = nullptr;
DeviceScanStart(type);
if (Filter != nullptr) {
maxFilter = Filter->Count;
AddFilter(Filter);
DevicesFound = gcnew System::Collections::Generic::Dictionary<Int32, cLSWDevice^>(maxFilter) ;
}
int i = DeviceIndex;
int rv = DeviceScan();
int minrv = 0; if (Filter != nullptr && Filter->Count > 0) minrv = 1;
while (rv >=0) {
if (rv >= minrv) {
cLSWDevice^ d = gcnew cLSWDevice();
d->DeviceInstanceID = gcnew System::String(szDeviceInstanceID);
d->Device_FriendlyName = gcnew System::String(Device_FriendlyName);
d->BusReportedDeviceDesc = gcnew System::String(BusReportedDeviceDesc);
d->Device_Manufacturer = gcnew System::String(Device_Manufacturer);
d->DeviceDisplay_Category = gcnew System::String(DeviceDisplay_Category);
d->Hardware_ID = gcnew System::String(Hardware_ID);
d->PortName = gcnew System::String(PortName);
d->Firmware = GetFirmware();
DeviceList->Add(d);
if (rv > 0 && rv<= maxFilter && DevicesFound->Count<maxFilter && !DevicesFound->ContainsKey(rv-1)) DevicesFound->Add(rv-1, d);
}
++DeviceIndex;
rv = DeviceScan();
}
DeviceScanEnd();
}
String^ LSWDevices::cLSWDevices::GetFirmware()
{
String^ result = nullptr;
wchar_t* firmware = nullptr;
if (!_tcsncmp(BusReportedDeviceDesc, TEXT("TWN"), 3)) {
wchar_t* e = BusReportedDeviceDesc + _tcslen(BusReportedDeviceDesc);
wchar_t* x = wcsrchr(BusReportedDeviceDesc, (wchar_t)'/');
if (x != nullptr) {
firmware = _tcsdup(x + 1);
result= gcnew System::String(firmware);
}
}
return result;
}
int LSWDevices::cLSWDevices::GetComPortElatec(String^% ElatecPort, String^% ElatecFirmware)
{
//LSWDevices.LSWDevices a;
String^ comport = nullptr;
System::Collections::Generic::List<System::String^>^ f = gcnew System::Collections::Generic::List<String^>();
f->Add(fElatec);
cLSWDevices^ cDev = gcnew cLSWDevices();
cDev->Scan(0, f);
if (cDev->DevicesFound->Count == 1)
{
ElatecPort = cDev->DevicesFound[0]->PortName;
ElatecFirmware = cDev->DevicesFound[0]->Firmware;
}
cDev->~cLSWDevices();
return cDev->DevicesFound->Count;
}
int LSWDevices::cLSWDevices::GetComPortEdosElatec(String^ %eDosPort, String^ %ElatecPort, String^% ElatecFirmware)
{
int r = 0;
String^ comport = nullptr;
System::Collections::Generic::List<System::String^>^ f = gcnew System::Collections::Generic::List<String^>();
f->Add(fEdos);
f->Add(fElatec);
cLSWDevices^ cDev = gcnew cLSWDevices();
cDev->Scan(0, f);
r = cDev->DevicesFound->Count;
if (cDev->DevicesFound->Count == 2)
{
eDosPort = cDev->DevicesFound[0]->PortName;
ElatecPort = cDev->DevicesFound[1]->PortName;
ElatecFirmware = cDev->DevicesFound[1]->Firmware;
}
else {
eDosPort = nullptr;
ElatecPort = nullptr;
}
cDev->~cLSWDevices();
return r;
}