// This method configures the pins to be used for this I2C bus. HRESULT BtI2cControllerClass::configurePins(ULONG sdaPin, ULONG sclPin) { HRESULT hr = S_OK; // Record the pins this I2C controller is using. m_sdaPin = sdaPin; m_sclPin = sclPin; // Set the MUXes for external I2C use. hr = g_pins.verifyPinFunction(sclPin, FUNC_I2C, BoardPinsClass::LOCK_FUNCTION); if (SUCCEEDED(hr)) { hr = g_pins.verifyPinFunction(sdaPin, FUNC_I2C, BoardPinsClass::LOCK_FUNCTION); } // If we did not succssfully configure the pins, return them to GPIO mode on a // best effort basis. if (FAILED(hr)) { revertPinsToGpio(); } return hr; }
/** \param[in] misoPin The pin number of the MISO signal. \param[in] mosiPin The pin number of the MOSI signal. \param[in] sckPin The pin number of the SCK signal \return HRESULT success or error code. */ HRESULT BcmSpiControllerClass::configurePins(ULONG misoPin, ULONG mosiPin, ULONG sckPin) { HRESULT hr = S_OK; // Save the pin numbers. m_sckPin = sckPin; m_mosiPin = mosiPin; m_misoPin = misoPin; // // Set SCK and MOSI as SPI pins. // hr = g_pins.verifyPinFunction(m_sckPin, FUNC_SPI, BoardPinsClass::LOCK_FUNCTION); if (SUCCEEDED(hr)) { hr = g_pins.verifyPinFunction(m_mosiPin, FUNC_SPI, BoardPinsClass::LOCK_FUNCTION); } // // Set MISO as an SPI pin. // if (SUCCEEDED(hr)) { hr = g_pins.verifyPinFunction(m_misoPin, FUNC_SPI, BoardPinsClass::LOCK_FUNCTION); } // // If this method failed, set all the pins back to digital I/O (ignoring any errors // that occur in the process.) // if (FAILED(hr)) { revertPinsToGpio(); } return hr; }
/** \param[in] misoPin The pin number of the MISO signal. \param[in] mosiPin The pin number of the MOSI signal. \param[in] sckPin The pin number of the SCK signal \return HRESULT success or error code. */ HRESULT QuarkSpiControllerClass::configurePins(ULONG misoPin, ULONG mosiPin, ULONG sckPin) { HRESULT hr = S_OK; // Save the pin numbers. m_sckPin = sckPin; m_mosiPin = mosiPin; m_misoPin = misoPin; // // Set SCK and MOSI as outputs dedicated to SPI, and pulled LOW. // hr = g_pins.setPinMode(m_sckPin, DIRECTION_OUT, FALSE); if (SUCCEEDED(hr)) { hr = g_pins.setPinState(m_sckPin, LOW); } if (SUCCEEDED(hr)) { hr = g_pins.verifyPinFunction(m_sckPin, FUNC_SPI, BoardPinsClass::LOCK_FUNCTION); } if (SUCCEEDED(hr)) { hr = g_pins.setPinMode(m_mosiPin, DIRECTION_OUT, FALSE); } if (SUCCEEDED(hr)) { hr = g_pins.setPinState(m_mosiPin, LOW); } if (SUCCEEDED(hr)) { hr = g_pins.verifyPinFunction(m_mosiPin, FUNC_SPI, BoardPinsClass::LOCK_FUNCTION); } // // Set MISO as an input dedicated to SPI. // if (SUCCEEDED(hr)) { hr = g_pins.setPinMode(m_misoPin, DIRECTION_IN, FALSE); } if (SUCCEEDED(hr)) { hr = g_pins.verifyPinFunction(m_misoPin, FUNC_SPI, BoardPinsClass::LOCK_FUNCTION); } // // If this method failed, set all the pins back to digital I/O (ignoring any errors // that occur in the process.) // if (FAILED(hr)) { revertPinsToGpio(); } return hr; }