winusb: DriverHost_PX4: デバイスが正常に初期化されないことのある問題に対する緩和策を追加

This commit is contained in:
nns779
2021-07-06 20:06:59 +09:00
parent f8db5e59b1
commit c64eb24917
4 changed files with 23 additions and 1 deletions

View File

@@ -370,7 +370,7 @@ static int it930x_read_firmware_version(struct it930x_bridge *it930x,
IT930X_CMD_QUERYINFO, IT930X_CMD_QUERYINFO,
&wb, &rb, &wb, &rb,
NULL, false); NULL, false);
if (!ret) if (!ret && fw_version)
*fw_version = (buf[0] << 24) | (buf[1] << 16) | *fw_version = (buf[0] << 24) | (buf[1] << 16) |
(buf[2] << 8) | buf[3]; (buf[2] << 8) | buf[3];
@@ -616,6 +616,19 @@ int it930x_term(struct it930x_bridge *it930x)
return 0; return 0;
} }
int it930x_raise(struct it930x_bridge *it930x)
{
int ret = 0, i;
for (i = 0; i < 5; i++) {
ret = it930x_read_firmware_version(it930x, NULL);
if (!ret)
break;
}
return ret;
}
int it930x_load_firmware(struct it930x_bridge *it930x, const char *filename) int it930x_load_firmware(struct it930x_bridge *it930x, const char *filename)
{ {
int ret = 0; int ret = 0;

View File

@@ -81,6 +81,7 @@ int it930x_write_reg_mask(struct it930x_bridge *it930x,
int it930x_init(struct it930x_bridge *it930x); int it930x_init(struct it930x_bridge *it930x);
int it930x_term(struct it930x_bridge *it930x); int it930x_term(struct it930x_bridge *it930x);
int it930x_raise(struct it930x_bridge *it930x);
int it930x_load_firmware(struct it930x_bridge *it930x, const char *filename); int it930x_load_firmware(struct it930x_bridge *it930x, const char *filename);
int it930x_init_warm(struct it930x_bridge *it930x); int it930x_init_warm(struct it930x_bridge *it930x);
int it930x_set_gpio_mode(struct it930x_bridge *it930x, int it930x_set_gpio_mode(struct it930x_bridge *it930x,

View File

@@ -165,6 +165,10 @@ int Px4Device::Init()
stream_ctx_.stream_buf[i] = receivers_[i]->GetStreamBuffer(); stream_ctx_.stream_buf[i] = receivers_[i]->GetStreamBuffer();
} }
ret = it930x_raise(&it930x_);
if (ret)
goto fail_device;
ret = it930x_load_firmware(&it930x_, "it930x-firmware.bin"); ret = it930x_load_firmware(&it930x_, "it930x-firmware.bin");
if (ret) if (ret)
goto fail_device; goto fail_device;

View File

@@ -164,6 +164,10 @@ int PxMltDevice::Init()
it930x_.config.input[i].port_number = params_[static_cast<int>(model_)][i].port_number; it930x_.config.input[i].port_number = params_[static_cast<int>(model_)][i].port_number;
} }
ret = it930x_raise(&it930x_);
if (ret)
goto fail_device;
ret = it930x_load_firmware(&it930x_, "it930x-firmware.bin"); ret = it930x_load_firmware(&it930x_, "it930x-firmware.bin");
if (ret) if (ret)
goto fail_device; goto fail_device;