MCPcopy Create free account
hub / github.com/BlitterStudio/amiberry / openPort

Method openPort

external/floppybridge/src/SuperCardProInterface.cpp:120–211  ·  view source on GitHub ↗

Attempts to open the reader running on the COM port number provided. Port MUST support 2M baud

Source from the content-addressed store, hash-verified

118
119// Attempts to open the reader running on the COM port number provided. Port MUST support 2M baud
120SCPErr 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();

Callers

nothing calls this directly

Calls 6

isPortOpenMethod · 0.80
configurePortMethod · 0.80
purgeBuffersMethod · 0.80
findMethod · 0.45
closePortMethod · 0.45
readMethod · 0.45

Tested by

no test coverage detected