Python ctypes: chamando uma função com tipos personalizados em c

Estou tentando embrulharcódigo c pré-existente para uso em Python no Linux. Tenho pouca experiência com c, e atualmente estou abordando esse problema usando ctypes. Minha função C requer uma matriz 2D com entradas de tipo personalizado e não sei como recriar isso em python para passá-lo para a função c.

Aqui está a função que estou tentando chamar:

void usbBuildGainTableAI_USB1808(libusb_device_handle *udev, Calibration_AIN table[NCHAN_1808][NGAINS_1808])
{

  int i, j;
  uint16_t address = 0x7000;  // base address of ADC calibration coefficients.

  for (i = 0; i < NCHAN_1808; i++) {
    for (j = 0; j < NGAINS_1808; j++) {
      usbMemAddressW_USB1808(udev, address);
      usbMemoryR_USB1808(udev, (uint8_t *) &table[i][j].slope, sizeof(float));
      address += 4;
      usbMemAddressW_USB1808(udev, address);
      usbMemoryR_USB1808(udev, (uint8_t *) &table[i][j].offset, sizeof(float));
      address += 4;
    }
  }
  return;
}

O arquivo de cabeçalho definiu

typedef struct Calibration_AIN_t {
  float slope;
  float offset;
} Calibration_AIN;

onde NCHAN_18081 e NGAINS_1808 são constantes e udev é um número inteiro. Eu segui umpergunta mais antiga em relação às matrizes multidimensionais e tentou criar uma estrutura como a do código c.

_1808 = CDLL(os.path.abspath("lib1808.so"))

NCHAN_1808 = 8  # max number of A/D channels in the device
NGAINS_1808 = 4  # max number of gain levels

class Calibration_AIN(Structure):
    _fields_ = [("slope", c_float), ("offset", c_float)]

class AINarray(Structure):
    _fields_ = [("array", (Calibration_AIN() * NCHAN_1808) * NGAINS_1808)]

table_AIN = AINarray()

_1808.usbBuildGainTableAI_USB1808(udev, table_AIN)

Mas há alguns problemas com isso: o tipo personalizado Calibration_AIN não pode ser preenchido em uma matriz com o operador * como um int ou float, e não posso passar um tipo personalizado para c. Também tentei criar o array com uma lista de listas em Python, mas não posso convertê-lo em algo útil para passável por ctypes.

Como posso chamar essa função do python sem modificar o código c? Qualquer ajuda seria muito apreciada, e também deixe-me saber se eu deveria apenas aprender c e tentar escrever meu programa em c ou Cython. Ctypes pode não ser a melhor maneira de fazer isso.

questionAnswers(1)

yourAnswerToTheQuestion