Tipos de Python: invocar una función con tipos personalizados en c

Estoy tratando de envolvercódigo c preexistente para usar en Python en Linux. Tengo poca experiencia con c, y actualmente estoy abordando este problema usando ctypes. Mi función C requiere una matriz 2d con entradas de tipo personalizado y no sé cómo recrear esto en python para pasarlo a la función c.

Aquí está la función que intento llamar:

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;
}

El archivo de encabezado ha definido

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

donde NCHAN_18081 y NGAINS_1808 son constantes y udev es un número entero. He seguido unpregunta anterior con respecto a las matrices multidimensionales e intentó hacer una estructura como la del 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)

Pero hay un par de problemas con esto: el tipo personalizado Calibration_AIN no se puede completar en una matriz con el operador * como puede hacerlo int o float, y no puedo pasar un tipo personalizado a c. También intenté hacer la matriz con una lista de listas en Python, pero no puedo convertir eso en algo útil para pasar a través de ctypes.

¿Cómo puedo llamar a esta función desde python sin modificar el código c? Cualquier ayuda sería muy apreciada, y también avíseme si debería aprender c y tratar de escribir mi programa en c o Cython. Ctypes puede no ser la mejor manera de hacer esto.

Respuestas a la pregunta(1)

Su respuesta a la pregunta