Ein Roboter mit bürstenlosem Antrieb, differenzial und NRF24L01 Funk. Großflächig gebaut um ein großes Solarpanel aufzunehmen. https://gitlab.informatik.hs-fulda.de/fdai5253/roboter
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
990 B

  1. #include "spi.h"
  2. #include <pthread.h>
  3. #include <unistd.h>
  4. static pthread_mutex_t spiMutex = PTHREAD_MUTEX_INITIALIZER;
  5. bool bcmIsInitialized = false;
  6. SPI::SPI() {
  7. }
  8. void SPI::begin( int busNo ) {
  9. if(!bcmIsInitialized){
  10. if (!bcm2835_init()){
  11. return;
  12. }
  13. }
  14. bcmIsInitialized = true;
  15. bcm2835_spi_begin();
  16. }
  17. void SPI::beginTransaction(SPISettings settings){
  18. if (geteuid() != 0){
  19. throw -1;
  20. }
  21. pthread_mutex_lock (&spiMutex);
  22. setBitOrder(settings.border);
  23. setDataMode(settings.dmode);
  24. setClockDivider(settings.clck);
  25. }
  26. void SPI::endTransaction() {
  27. pthread_mutex_unlock (&spiMutex);
  28. }
  29. void SPI::setBitOrder(uint8_t bit_order) {
  30. bcm2835_spi_setBitOrder(bit_order);
  31. }
  32. void SPI::setDataMode(uint8_t data_mode) {
  33. bcm2835_spi_setDataMode(data_mode);
  34. }
  35. void SPI::setClockDivider(uint16_t spi_speed) {
  36. bcm2835_spi_setClockDivider(spi_speed);
  37. }
  38. void SPI::chipSelect(int csn_pin){
  39. bcm2835_spi_chipSelect(csn_pin);
  40. delayMicroseconds(5);
  41. }
  42. SPI::~SPI() {
  43. }