Использование ioctl с C # - PullRequest
       41

Использование ioctl с C #

0 голосов
/ 08 ноября 2019

Я пытаюсь использовать OrangePi Spi через C #. Пример кода на C ниже. Я могу импортировать методы open / ioctl, используя атрибут C # DllImport. Но я не знаю, как получить значения SPI_IOC_WR_MODE / SPI_IOC_WR_BITS_PER_WORD / SPI_IOC_WR_MAX_SPEED_HZ. SPI_IOC_WR_MODE определяется как _IOR (SPI_IOC_MAGIC, 1, __u8). Так что это не постоянное значение.

Как я могу получить фактическое значение SPI_IOC_WR_MODE из C #?

int wiringPiSPISetupMode (int channel, int speed, int mode)
{
  int fd ;

  mode    &= 3 ;    // Mode is 0, 1, 2 or 3
  channel &= 1 ;    // Channel is 0 or 1

  if ((fd = open (channel == 0 ? spiDev0 : spiDev1, O_RDWR)) < 0)
    return wiringPiFailure (WPI_ALMOST, "Unable to open SPI device: %s\n", strerror (errno)) ;

  spiSpeeds [channel] = speed ;
  spiFds    [channel] = fd ;

// Set SPI parameters.

  if (ioctl (fd, SPI_IOC_WR_MODE, &mode)            < 0)
    return wiringPiFailure (WPI_ALMOST, "SPI Mode Change failure: %s\n", strerror (errno)) ;

  if (ioctl (fd, SPI_IOC_WR_BITS_PER_WORD, &spiBPW) < 0)
    return wiringPiFailure (WPI_ALMOST, "SPI BPW Change failure: %s\n", strerror (errno)) ;

  if (ioctl (fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed)   < 0)
    return wiringPiFailure (WPI_ALMOST, "SPI Speed Change failure: %s\n", strerror (errno)) ;

  return fd ;
}
...