Attempts to open the reader running on the COM port number provided. Port MUST support 2M baud
| 118 | |
| 119 | // Attempts to open the reader running on the COM port number provided. Port MUST support 2M baud |
| 120 | SCPErr SCPInterface::openPort(bool useDriveA) { |
| 121 | closePort(); |
| 122 | m_useDriveA = useDriveA; |
| 123 | |
| 124 | m_selectStatus = false; |
| 125 | m_motorIsEnabled = false; |
| 126 | |
| 127 | std::vector<SerialIO::SerialPortInformation> ports; |
| 128 | SerialIO::enumSerialPorts(ports); |
| 129 | |
| 130 | // Find the port |
| 131 | for (const SerialIO::SerialPortInformation& port : ports) { |
| 132 | if ((port.portName.find(L"SCP-JIM") != std::wstring::npos) || (port.portName.find(L"Supercard Pro") != std::wstring::npos)) { |
| 133 | switch (m_comPort.openPort(port.portName)) { |
| 134 | case SerialIO::Response::rInUse:return SCPErr::scpInUse; |
| 135 | case SerialIO::Response::rNotFound:return SCPErr::scpNotFound; |
| 136 | case SerialIO::Response::rOK: break; |
| 137 | default: return SCPErr::scpUnknownError; |
| 138 | } |
| 139 | } |
| 140 | if (m_comPort.isPortOpen()) break; |
| 141 | } |
| 142 | if (!m_comPort.isPortOpen()) return SCPErr::scpNotFound; |
| 143 | |
| 144 | // Configure the port |
| 145 | SerialIO::Configuration config; |
| 146 | config.baudRate = 9600; |
| 147 | config.ctsFlowControl = false; |
| 148 | |
| 149 | if (m_comPort.configurePort(config) != SerialIO::Response::rOK) return SCPErr::scpUnknownError; |
| 150 | |
| 151 | applyCommTimeouts(false); |
| 152 | |
| 153 | m_comPort.purgeBuffers(); |
| 154 | |
| 155 | // Lookup what firmware this is running |
| 156 | SCPResponse response; |
| 157 | if (!sendCommand(SCPCommand::DoCMD_SCPInfo, response)) { |
| 158 | m_comPort.closePort(); |
| 159 | return SCPErr::scpUnknownError; |
| 160 | } |
| 161 | if (response != SCPResponse::pr_Ok) { |
| 162 | m_comPort.closePort(); |
| 163 | return SCPErr::scpUnknownError; |
| 164 | } |
| 165 | unsigned char data[2]; |
| 166 | if (m_comPort.read(data, 2) != 2) { |
| 167 | m_comPort.closePort(); |
| 168 | return SCPErr::scpUnknownError; |
| 169 | } |
| 170 | m_firmwareVersion.hardwareVersion = data[0] >> 4; |
| 171 | m_firmwareVersion.hardwareRevision = data[0] & 0xFF; |
| 172 | m_firmwareVersion.firmwareVersion = data[1] >> 4; |
| 173 | m_firmwareVersion.firmwareRevision = data[1] & 0xFF; |
| 174 | |
| 175 | // Check we're on v1.3 of the firmware |
| 176 | if ((m_firmwareVersion.firmwareVersion <= 1) && (m_firmwareVersion.firmwareRevision < 3)) { |
| 177 | m_comPort.closePort(); |
nothing calls this directly
no test coverage detected