Send DeviceResetCmd after task handle is dropped.
Previously the command was sent before the task handle is dropped. This may cause race condition that the DeviceResetRsp may be consumed by the reader created in open(). In this case, the consume_device_reset_rsp_and_ntf will wait until timeout. Bug: 316421259 Test: manual Change-Id: I680d3ea79344f9b5f07a36877837bfc1b8e0532a
This commit is contained in:
parent
141967eed6
commit
965dd14687
1 changed files with 15 additions and 15 deletions
|
@ -61,6 +61,20 @@ impl State {
|
|||
callbacks.as_binder().unlink_to_death(death_recipient)?;
|
||||
token.cancel();
|
||||
handle.await.unwrap();
|
||||
let packet: UciControlPacket = DeviceResetCmdBuilder {
|
||||
reset_config: ResetConfig::UwbsReset,
|
||||
}
|
||||
.build()
|
||||
.into();
|
||||
// DeviceResetCmd need to be send to reset the device to stop all running
|
||||
// activities on UWBS.
|
||||
let packet_vec: Vec<UciControlPacketHal> = packet.into();
|
||||
for hal_packet in packet_vec.into_iter() {
|
||||
serial
|
||||
.write(&hal_packet.to_vec())
|
||||
.map(|written| written as i32)
|
||||
.map_err(|_| binder::StatusCode::UNKNOWN_ERROR)?;
|
||||
}
|
||||
consume_device_reset_rsp_and_ntf(
|
||||
&mut serial
|
||||
.try_clone()
|
||||
|
@ -238,21 +252,7 @@ impl IUwbChipAsyncServer for UwbChip {
|
|||
|
||||
let mut state = self.state.lock().await;
|
||||
|
||||
if let State::Opened { ref mut serial, .. } = *state {
|
||||
let packet: UciControlPacket = DeviceResetCmdBuilder {
|
||||
reset_config: ResetConfig::UwbsReset,
|
||||
}
|
||||
.build()
|
||||
.into();
|
||||
// DeviceResetCmd need to be send to reset the device to stop all running
|
||||
// activities on UWBS.
|
||||
let packet_vec: Vec<UciControlPacketHal> = packet.into();
|
||||
for hal_packet in packet_vec.into_iter() {
|
||||
serial
|
||||
.write(&hal_packet.to_vec())
|
||||
.map(|written| written as i32)
|
||||
.map_err(|_| binder::StatusCode::UNKNOWN_ERROR)?;
|
||||
}
|
||||
if let State::Opened { .. } = *state {
|
||||
state.close().await
|
||||
} else {
|
||||
Err(binder::ExceptionCode::ILLEGAL_STATE.into())
|
||||
|
|
Loading…
Reference in a new issue