OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 #include "tools/battor_agent/battor_agent.h" | 4 #include "tools/battor_agent/battor_agent.h" |
5 | 5 |
6 #include <iomanip> | 6 #include <iomanip> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
10 #include "tools/battor_agent/battor_connection_impl.h" | 10 #include "tools/battor_agent/battor_connection_impl.h" |
(...skipping 527 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 | 538 |
539 void BattOrAgent::OnActionTimeout() { | 539 void BattOrAgent::OnActionTimeout() { |
540 switch (last_action_) { | 540 switch (last_action_) { |
541 case Action::READ_INIT_ACK: | 541 case Action::READ_INIT_ACK: |
542 if (num_init_attempts_++ < kMaxInitAttempts) { | 542 if (num_init_attempts_++ < kMaxInitAttempts) { |
543 // OnMessageRead() will fail and retry SEND_INIT. | 543 // OnMessageRead() will fail and retry SEND_INIT. |
544 connection_->CancelReadMessage(); | 544 connection_->CancelReadMessage(); |
545 } else { | 545 } else { |
546 CompleteCommand(BATTOR_ERROR_TOO_MANY_INIT_RETRIES); | 546 CompleteCommand(BATTOR_ERROR_TOO_MANY_INIT_RETRIES); |
547 } | 547 } |
548 | |
549 return; | 548 return; |
550 | 549 |
551 // TODO(crbug.com/672631): There's currently a BattOr firmware bug that's | 550 // TODO(crbug.com/672631): There's currently a BattOr firmware bug that's |
552 // causing the BattOr to reset when it's sent the START_TRACING command. | 551 // causing the BattOr to reset when it's sent the START_TRACING command. |
553 // When the BattOr resets, it emits 0x00 to the serial connection. This 0x00 | 552 // When the BattOr resets, it emits 0x00 to the serial connection. This 0x00 |
554 // isn't long enough for the connection to consider it a full ack of the | 553 // isn't long enough for the connection to consider it a full ack of the |
555 // START_TRACING command, so it continues to wait for more data. We handle | 554 // START_TRACING command, so it continues to wait for more data. We handle |
556 // this case here by assuming any timeouts while waiting for the | 555 // this case here by assuming any timeouts while waiting for the |
557 // StartTracing ack are related to this bug and retrying the full | 556 // StartTracing ack are related to this bug and retrying the full |
558 // initialization sequence. | 557 // initialization sequence. |
559 case Action::READ_START_TRACING_ACK: | 558 case Action::READ_START_TRACING_ACK: |
560 if (num_start_tracing_attempts_ < kMaxStartTracingAttempts) { | 559 if (num_start_tracing_attempts_ < kMaxStartTracingAttempts) { |
561 // OnMessageRead() will fail and retry StartTracing. | 560 // OnMessageRead() will fail and retry StartTracing. |
562 connection_->CancelReadMessage(); | 561 connection_->CancelReadMessage(); |
563 } else { | 562 } else { |
564 CompleteCommand(BATTOR_ERROR_TOO_MANY_START_TRACING_RETRIES); | 563 CompleteCommand(BATTOR_ERROR_TOO_MANY_START_TRACING_RETRIES); |
565 } | 564 } |
| 565 return; |
566 | 566 |
567 default: | 567 default: |
568 CompleteCommand(BATTOR_ERROR_TIMEOUT); | 568 CompleteCommand(BATTOR_ERROR_TIMEOUT); |
| 569 timeout_callback_.Cancel(); |
569 } | 570 } |
570 | |
571 timeout_callback_.Cancel(); | |
572 } | 571 } |
573 | 572 |
574 void BattOrAgent::SendControlMessage(BattOrControlMessageType type, | 573 void BattOrAgent::SendControlMessage(BattOrControlMessageType type, |
575 uint16_t param1, | 574 uint16_t param1, |
576 uint16_t param2) { | 575 uint16_t param2) { |
577 DCHECK(thread_checker_.CalledOnValidThread()); | 576 DCHECK(thread_checker_.CalledOnValidThread()); |
578 | 577 |
579 BattOrControlMessage msg{type, param1, param2}; | 578 BattOrControlMessage msg{type, param1, param2}; |
580 connection_->SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, &msg, sizeof(msg)); | 579 connection_->SendBytes(BATTOR_MESSAGE_TYPE_CONTROL, &msg, sizeof(msg)); |
581 } | 580 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 if (clock_sync_marker != clock_sync_markers_.end()) | 650 if (clock_sync_marker != clock_sync_markers_.end()) |
652 trace_stream << " <" << clock_sync_marker->second << ">"; | 651 trace_stream << " <" << clock_sync_marker->second << ">"; |
653 | 652 |
654 trace_stream << std::endl; | 653 trace_stream << std::endl; |
655 } | 654 } |
656 | 655 |
657 return trace_stream.str(); | 656 return trace_stream.str(); |
658 } | 657 } |
659 | 658 |
660 } // namespace battor | 659 } // namespace battor |
OLD | NEW |