mirror of
https://github.com/intrepidcs/libicsneo.git
synced 2026-08-05 01:18:36 +02:00
Ethernet (DoIP) Activation Line support
This commit is contained in:
@@ -86,6 +86,7 @@ void printMainMenu() {
|
||||
printf("H - Get events\n");
|
||||
printf("I - Set HS CAN to 250K\n");
|
||||
printf("J - Set HS CAN to 500K\n");
|
||||
printf("L - Set Digital IO\n");
|
||||
printf("X - Exit\n");
|
||||
}
|
||||
|
||||
@@ -235,7 +236,7 @@ int main() {
|
||||
while(true) {
|
||||
printMainMenu();
|
||||
printf("\n");
|
||||
char input = getCharInput(22, 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'X', 'x');
|
||||
char input = getCharInput(24, 'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'L', 'l', 'X', 'x');
|
||||
printf("\n");
|
||||
switch(input) {
|
||||
// List current devices
|
||||
@@ -598,6 +599,106 @@ int main() {
|
||||
}
|
||||
}
|
||||
break;
|
||||
// Set Digital IO
|
||||
case 'L':
|
||||
case 'l':
|
||||
{
|
||||
// Select a device and get its description
|
||||
if(numDevices == 0) {
|
||||
printf("No devices found! Please scan for new devices.\n\n");
|
||||
break;
|
||||
}
|
||||
selectedDevice = selectDevice();
|
||||
|
||||
printf("Select from the following:\n");
|
||||
|
||||
printf("[1] Ethernet (DoIP) Activation Line");
|
||||
uint8_t val;
|
||||
bool haveVal = icsneo_getDigitalIO(selectedDevice, ICSNEO_IO_ETH_ACTIVATION, 1, &val);
|
||||
if(!haveVal) {
|
||||
neoevent_t event;
|
||||
bool got = icsneo_getLastError(&event);
|
||||
printf(": Unknown (%s)\n", got ? event.description : "No error");
|
||||
} else {
|
||||
if(val)
|
||||
printf(": Enabled\n");
|
||||
else
|
||||
printf(": Disabled\n");
|
||||
}
|
||||
|
||||
printf("[2] USB Host Power");
|
||||
haveVal = icsneo_getDigitalIO(selectedDevice, ICSNEO_IO_USB_HOST_POWER, 1, &val);
|
||||
if(!haveVal) {
|
||||
neoevent_t event;
|
||||
bool got = icsneo_getLastError(&event);
|
||||
printf(": Unknown (%s)\n", got ? event.description : "No error");
|
||||
} else {
|
||||
if(val)
|
||||
printf(": Enabled\n");
|
||||
else
|
||||
printf(": Disabled\n");
|
||||
}
|
||||
|
||||
printf("[3] Backup Power");
|
||||
haveVal = icsneo_getDigitalIO(selectedDevice, ICSNEO_IO_BACKUP_POWER_EN, 1, &val);
|
||||
if(!haveVal) {
|
||||
neoevent_t event;
|
||||
bool got = icsneo_getLastError(&event);
|
||||
printf(": Unknown (%s)\n", got ? event.description : "No error");
|
||||
} else {
|
||||
if(val)
|
||||
printf(": Enabled ");
|
||||
else
|
||||
printf(": Disabled ");
|
||||
|
||||
haveVal = icsneo_getDigitalIO(selectedDevice, ICSNEO_IO_BACKUP_POWER_GOOD, 1, &val);
|
||||
if(!haveVal) {
|
||||
neoevent_t event;
|
||||
bool got = icsneo_getLastError(&event);
|
||||
printf("with unknown status (%s)\n", got ? event.description : "No error");
|
||||
} else {
|
||||
if(val)
|
||||
printf("and Charged\n");
|
||||
else
|
||||
printf("and Not Charged\n");
|
||||
}
|
||||
}
|
||||
|
||||
printf("[4] Cancel\n\n");
|
||||
char selection = getCharInput(4, '1', '2', '3', '4');
|
||||
printf("\n");
|
||||
|
||||
if(selection == '4') {
|
||||
printf("Canceling!\n\n");
|
||||
break;
|
||||
}
|
||||
|
||||
printf("[0] Disable\n[1] Enable\n[2] Cancel\n\n");
|
||||
char selection2 = getCharInput(3, '0', '1', '2');
|
||||
printf("\n");
|
||||
|
||||
if(selection2 == '2') {
|
||||
printf("Canceling!\n\n");
|
||||
break;
|
||||
}
|
||||
|
||||
const bool set = selection2 == '1';
|
||||
neoio_t type;
|
||||
switch (selection)
|
||||
{
|
||||
case '1': type = ICSNEO_IO_ETH_ACTIVATION; break;
|
||||
case '2': type = ICSNEO_IO_USB_HOST_POWER; break;
|
||||
case '3': type = ICSNEO_IO_BACKUP_POWER_EN; break;
|
||||
};
|
||||
if(icsneo_setDigitalIO(selectedDevice, type, 1, set)) {
|
||||
printf("OK!\n\n");
|
||||
} else {
|
||||
neoevent_t event;
|
||||
bool got = icsneo_getLastError(&event);
|
||||
printf("Failure! (%s)\n\n", got ? event.description : "No error");
|
||||
}
|
||||
}
|
||||
break;
|
||||
// Exit
|
||||
case 'X':
|
||||
case 'x':
|
||||
|
||||
@@ -42,6 +42,7 @@ void printMainMenu() {
|
||||
std::cout << "I - Set HS CAN to 250K" << std::endl;
|
||||
std::cout << "J - Set LSFT CAN to 250K" << std::endl;
|
||||
std::cout << "K - Add/Remove a message callback" << std::endl;
|
||||
std::cout << "L - Set Digital IO" << std::endl;
|
||||
std::cout << "X - Exit" << std::endl;
|
||||
}
|
||||
|
||||
@@ -191,7 +192,7 @@ int main() {
|
||||
while(true) {
|
||||
printMainMenu();
|
||||
std::cout << std::endl;
|
||||
char input = getCharInput(std::vector<char> {'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'X', 'x'});
|
||||
char input = getCharInput(std::vector<char> {'A', 'a', 'B', 'b', 'C', 'c', 'D', 'd', 'E', 'e', 'F', 'f', 'G', 'g', 'H', 'h', 'I', 'i', 'J', 'j', 'K', 'k', 'L', 'l', 'X', 'x'});
|
||||
std::cout << std::endl;
|
||||
|
||||
switch(input) {
|
||||
@@ -603,6 +604,123 @@ int main() {
|
||||
}
|
||||
}
|
||||
break;
|
||||
// Set Digital IO
|
||||
case 'L':
|
||||
case 'l':
|
||||
{
|
||||
// Select a device and get its description
|
||||
if(devices.size() == 0) {
|
||||
std::cout << "No devices found! Please scan for new devices." << std::endl << std::endl;
|
||||
break;
|
||||
}
|
||||
selectedDevice = selectDevice(devices);
|
||||
|
||||
const auto ethAct = selectedDevice->getEthernetActivationLineCount();
|
||||
const auto usbHost = selectedDevice->getUSBHostPowerCount();
|
||||
const auto backup = selectedDevice->getBackupPowerSupported();
|
||||
|
||||
if(ethAct == 0 && usbHost == 0 && !backup) {
|
||||
std::cout << "The selected device has no controllable digital IO." << std::endl << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
std::vector<char> options = { '1' };
|
||||
std::vector<std::string> names;
|
||||
std::map< char, std::pair<icsneo::IO, size_t> > types;
|
||||
|
||||
std::cout << "Select from the following:" << std::endl;
|
||||
for(size_t i = 1; i <= ethAct; i++) {
|
||||
if(i > 1)
|
||||
options.push_back(options.back() + 1);
|
||||
names.push_back("Ethernet (DoIP) Activation Line");
|
||||
if(ethAct > 1) {
|
||||
names.back() += ' ';
|
||||
names.back() += i;
|
||||
}
|
||||
std::cout << '[' << options.back() << "] " << names.back();
|
||||
const auto val = selectedDevice->getDigitalIO(icsneo::IO::EthernetActivation, i);
|
||||
types[options.back()] = { icsneo::IO::EthernetActivation, i };
|
||||
if(val) {
|
||||
if(*val)
|
||||
std::cout << ": Enabled" << std::endl;
|
||||
else
|
||||
std::cout << ": Disabled" << std::endl;
|
||||
} else {
|
||||
std::cout << ": Unknown (" << icsneo::GetLastError() << ")" << std::endl;
|
||||
}
|
||||
}
|
||||
for(size_t i = 1; i <= usbHost; i++) {
|
||||
options.push_back(options.back() + 1);
|
||||
names.push_back("USB Host Power");
|
||||
if(usbHost > 1) {
|
||||
names.back() += ' ';
|
||||
names.back() += i;
|
||||
}
|
||||
std::cout << '[' << options.back() << "] " << names.back();
|
||||
const auto val = selectedDevice->getDigitalIO(icsneo::IO::USBHostPower, i);
|
||||
types[options.back()] = { icsneo::IO::USBHostPower, i };
|
||||
if(val) {
|
||||
if(*val)
|
||||
std::cout << ": Enabled" << std::endl;
|
||||
else
|
||||
std::cout << ": Disabled" << std::endl;
|
||||
} else {
|
||||
std::cout << ": Unknown (" << icsneo::GetLastError() << ")" << std::endl;
|
||||
}
|
||||
}
|
||||
if(backup) {
|
||||
options.push_back(options.back() + 1);
|
||||
names.push_back("Backup Power");
|
||||
std::cout << '[' << options.back() << "] " << names.back() << ": ";
|
||||
auto val = selectedDevice->getDigitalIO(icsneo::IO::BackupPowerEnabled);
|
||||
types[options.back()] = { icsneo::IO::BackupPowerEnabled, 1 };
|
||||
if(val) {
|
||||
if(*val)
|
||||
std::cout << "Enabled";
|
||||
else
|
||||
std::cout << "Disabled";
|
||||
|
||||
val = selectedDevice->getDigitalIO(icsneo::IO::BackupPowerGood);
|
||||
if(val) {
|
||||
if(*val)
|
||||
std::cout << " and Charged" << std::endl;
|
||||
else
|
||||
std::cout << " and Not Charged" << std::endl;
|
||||
} else {
|
||||
std::cout << "but the status is unknown (" << icsneo::GetLastError() << ")" << std::endl;
|
||||
}
|
||||
} else {
|
||||
std::cout << "Unknown (" << icsneo::GetLastError() << ")" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
options.push_back(options.back() + 1);
|
||||
std::cout << '[' << options.back() << "] Cancel" << std::endl << std::endl;
|
||||
|
||||
char selection = getCharInput(options);
|
||||
std::cout << std::endl;
|
||||
|
||||
if(selection == options.back()) {
|
||||
std::cout << "Canceling!" << std::endl << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
std::cout << "[0] Disable\n[1] Enable\n[2] Cancel" << std::endl << std::endl;
|
||||
char selection2 = getCharInput({ '0', '1', '2' });
|
||||
std::cout << std::endl;
|
||||
|
||||
if(selection2 == '2') {
|
||||
std::cout << "Canceling!" << std::endl << std::endl;
|
||||
break;
|
||||
}
|
||||
|
||||
const bool val = selection2 == '1';
|
||||
if(selectedDevice->setDigitalIO(types[selection].first, types[selection].second, val))
|
||||
std::cout << "OK!" << std::endl << std::endl;
|
||||
else
|
||||
std::cout << "Failure! (" << icsneo::GetLastError() << ")" << std::endl << std::endl;
|
||||
}
|
||||
break;
|
||||
// Exit
|
||||
case 'X':
|
||||
case 'x':
|
||||
|
||||
Reference in New Issue
Block a user