|
|
@ -461,6 +461,8 @@ struct I2CSPIDriverInitializing { |
|
|
|
static void initializer_trampoline(void *argument) |
|
|
|
static void initializer_trampoline(void *argument) |
|
|
|
{ |
|
|
|
{ |
|
|
|
I2CSPIDriverInitializing *data = (I2CSPIDriverInitializing *)argument; |
|
|
|
I2CSPIDriverInitializing *data = (I2CSPIDriverInitializing *)argument; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("IN{%d} instance: %d\n",__LINE__,data->runtime_instance); |
|
|
|
data->instance = data->instantiate(data->cli, data->iterator, data->runtime_instance); |
|
|
|
data->instance = data->instantiate(data->cli, data->iterator, data->runtime_instance); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -476,6 +478,7 @@ int I2CSPIDriverBase::module_start(const BusCLIArguments &cli, BusInstanceIterat |
|
|
|
bool started = false; |
|
|
|
bool started = false; |
|
|
|
|
|
|
|
|
|
|
|
while (iterator.next()) { |
|
|
|
while (iterator.next()) { |
|
|
|
|
|
|
|
printf("MS{%d} bus: %i\n",__LINE__, iterator.bus()); |
|
|
|
if (iterator.instance()) { |
|
|
|
if (iterator.instance()) { |
|
|
|
PX4_WARN("Already running on bus %i", iterator.bus()); |
|
|
|
PX4_WARN("Already running on bus %i", iterator.bus()); |
|
|
|
continue; |
|
|
|
continue; |
|
|
@ -485,6 +488,7 @@ int I2CSPIDriverBase::module_start(const BusCLIArguments &cli, BusInstanceIterat |
|
|
|
device::Device::DeviceId device_id{}; |
|
|
|
device::Device::DeviceId device_id{}; |
|
|
|
device_id.devid_s.bus = iterator.bus(); |
|
|
|
device_id.devid_s.bus = iterator.bus(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("MS{%d} busType: %d\n",__LINE__,iterator.busType()); |
|
|
|
switch (iterator.busType()) { |
|
|
|
switch (iterator.busType()) { |
|
|
|
case BOARD_I2C_BUS: device_id.devid_s.bus_type = device::Device::DeviceBusType_I2C; break; |
|
|
|
case BOARD_I2C_BUS: device_id.devid_s.bus_type = device::Device::DeviceBusType_I2C; break; |
|
|
|
|
|
|
|
|
|
|
@ -501,23 +505,29 @@ int I2CSPIDriverBase::module_start(const BusCLIArguments &cli, BusInstanceIterat |
|
|
|
initializer.wait(); |
|
|
|
initializer.wait(); |
|
|
|
I2CSPIDriverBase *instance = initializer_data.instance; |
|
|
|
I2CSPIDriverBase *instance = initializer_data.instance; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// printf("MS{%d} instance: %d\n",__LINE__,(int)instance);
|
|
|
|
if (!instance) { |
|
|
|
if (!instance) { |
|
|
|
PX4_DEBUG("instantiate failed (no device on bus %i (devid 0x%x)?)", iterator.bus(), iterator.devid()); |
|
|
|
PX4_DEBUG("instantiate failed (no device on bus %i (devid 0x%x)?)", iterator.bus(), iterator.devid()); |
|
|
|
|
|
|
|
printf("{%d}instantiate failed (no device on bus %i (devid 0x%02x)?)\n",__LINE__, iterator.bus(), device_id.devid); |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
printf("{%d}instantiate ok on bus %i (devid 0x%02x) \n",__LINE__, iterator.bus(), device_id.devid); |
|
|
|
|
|
|
|
|
|
|
|
if (cli.i2c_address != 0 && instance->_i2c_address == 0) { |
|
|
|
if (cli.i2c_address != 0 && instance->_i2c_address == 0) { |
|
|
|
PX4_ERR("Bug: driver %s does not pass the I2C address to I2CSPIDriverBase", instance->ItemName()); |
|
|
|
PX4_ERR("Bug: driver %s does not pass the I2C address to I2CSPIDriverBase", instance->ItemName()); |
|
|
|
|
|
|
|
printf("{%d}Bug: driver %s does not pass the I2C address to I2CSPIDriverBase\n",__LINE__, instance->ItemName()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
iterator.addInstance(instance); |
|
|
|
iterator.addInstance(instance); |
|
|
|
started = true; |
|
|
|
started = true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("MS{%d} busType: %d\n",__LINE__,(int)iterator.busType()); |
|
|
|
// print some info that we are running
|
|
|
|
// print some info that we are running
|
|
|
|
switch (iterator.busType()) { |
|
|
|
switch (iterator.busType()) { |
|
|
|
case BOARD_I2C_BUS: |
|
|
|
case BOARD_I2C_BUS: |
|
|
|
PX4_INFO_RAW("%s #%i on I2C bus %d", instance->ItemName(), runtime_instance, iterator.bus()); |
|
|
|
PX4_INFO_RAW("%s #%i on I2C bus %d", instance->ItemName(), runtime_instance, iterator.bus()); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("MS{%d} addr: %02x, rot:%d\n",__LINE__,cli.i2c_address,cli.rotation); |
|
|
|
if (iterator.external()) { |
|
|
|
if (iterator.external()) { |
|
|
|
PX4_INFO_RAW(" (external)"); |
|
|
|
PX4_INFO_RAW(" (external)"); |
|
|
|
} |
|
|
|
} |
|
|
|