* @brief Configures and connects a CAN bus from CLI options. */
| 1059 | * @brief Configures and connects a CAN bus from CLI options. |
| 1060 | */ |
| 1061 | void CLI::setupCanbusConnection() |
| 1062 | { |
| 1063 | const QStringList parts = m_parser.value(m_opts.canbusOpt).split(':'); |
| 1064 | if (parts.size() != 2) { |
| 1065 | qWarning() << "Invalid CAN bus format. Expected: plugin:interface"; |
| 1066 | return; |
| 1067 | } |
| 1068 | |
| 1069 | const QString plugin = parts[0].toLower(); |
| 1070 | const QString interfaceName = parts[1]; |
| 1071 | |
| 1072 | IO::ConnectionManager::instance().setBusType(SerialStudio::BusType::CanBus); |
| 1073 | |
| 1074 | const QStringList availablePlugins = IO::ConnectionManager::instance().canBus()->pluginList(); |
| 1075 | const int pluginIndex = availablePlugins.indexOf(plugin); |
| 1076 | if (pluginIndex < 0) { |
| 1077 | qWarning() << "CAN plugin" << plugin << "not found"; |
| 1078 | qWarning() << "Available plugins:" << availablePlugins.join(", "); |
| 1079 | return; |
| 1080 | } |
| 1081 | |
| 1082 | IO::ConnectionManager::instance().canBus()->setPluginIndex(pluginIndex); |
| 1083 | const QStringList availableInterfaces = |
| 1084 | IO::ConnectionManager::instance().canBus()->interfaceList(); |
| 1085 | const int interfaceIndex = availableInterfaces.indexOf(interfaceName); |
| 1086 | |
| 1087 | if (interfaceIndex < 0) { |
| 1088 | qWarning() << "CAN interface" << interfaceName << "not found for plugin" << plugin; |
| 1089 | qWarning() << "Available interfaces:" << availableInterfaces.join(", "); |
| 1090 | return; |
| 1091 | } |
| 1092 | |
| 1093 | IO::ConnectionManager::instance().canBus()->setInterfaceIndex(interfaceIndex); |
| 1094 | |
| 1095 | if (m_parser.isSet(m_opts.canbusBitrateOpt)) { |
| 1096 | bool ok; |
| 1097 | quint32 bitrate = m_parser.value(m_opts.canbusBitrateOpt).toUInt(&ok); |
| 1098 | if (ok && bitrate > 0) |
| 1099 | IO::ConnectionManager::instance().canBus()->setBitrate(bitrate); |
| 1100 | else |
| 1101 | qWarning() << "Invalid CAN bus bitrate:" << m_parser.value(m_opts.canbusBitrateOpt); |
| 1102 | } |
| 1103 | |
| 1104 | if (m_parser.isSet(m_opts.canbusFdOpt)) |
| 1105 | IO::ConnectionManager::instance().canBus()->setCanFD(true); |
| 1106 | |
| 1107 | IO::ConnectionManager::instance().connectDevice(); |
| 1108 | } |
| 1109 | |
| 1110 | #else |
| 1111 |
nothing calls this directly
no test coverage detected