...
command.cpp@0:20c3ba3a78d0, 2015-12-08 (annotated)
- Committer:
- cardenb
- Date:
- Tue Dec 08 03:09:02 2015 +0000
- Revision:
- 0:20c3ba3a78d0
commit publishing gesture remote
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
cardenb | 0:20c3ba3a78d0 | 1 | #include "command.h" |
cardenb | 0:20c3ba3a78d0 | 2 | |
cardenb | 0:20c3ba3a78d0 | 3 | Command::Command() {} |
cardenb | 0:20c3ba3a78d0 | 4 | |
cardenb | 0:20c3ba3a78d0 | 5 | Command::Command(const string &name) { |
cardenb | 0:20c3ba3a78d0 | 6 | memset(cmd_buf_, 0x00, sizeof(cmd_buf_)); |
cardenb | 0:20c3ba3a78d0 | 7 | learned_command_ = false; |
cardenb | 0:20c3ba3a78d0 | 8 | bitlength_ = -1; |
cardenb | 0:20c3ba3a78d0 | 9 | command_name_ = name; |
cardenb | 0:20c3ba3a78d0 | 10 | } |
cardenb | 0:20c3ba3a78d0 | 11 | |
cardenb | 0:20c3ba3a78d0 | 12 | bool Command::LearnCommand(Serial &pc) { |
cardenb | 0:20c3ba3a78d0 | 13 | pc.printf("learning command: %s\r\n", command_name_.c_str()); |
cardenb | 0:20c3ba3a78d0 | 14 | while (!learned_command_) { |
cardenb | 0:20c3ba3a78d0 | 15 | bitlength_ = receive(&format_, cmd_buf_, sizeof(cmd_buf_)); |
cardenb | 0:20c3ba3a78d0 | 16 | if (bitlength_ > 0) { |
cardenb | 0:20c3ba3a78d0 | 17 | /* |
cardenb | 0:20c3ba3a78d0 | 18 | display_status("RECV", bitlength_); |
cardenb | 0:20c3ba3a78d0 | 19 | display_data(cmd_buf_, bitlength_); |
cardenb | 0:20c3ba3a78d0 | 20 | // display_format(format_); |
cardenb | 0:20c3ba3a78d0 | 21 | */ |
cardenb | 0:20c3ba3a78d0 | 22 | learned_command_ = true; |
cardenb | 0:20c3ba3a78d0 | 23 | } |
cardenb | 0:20c3ba3a78d0 | 24 | } |
cardenb | 0:20c3ba3a78d0 | 25 | return true; |
cardenb | 0:20c3ba3a78d0 | 26 | } |
cardenb | 0:20c3ba3a78d0 | 27 | |
cardenb | 0:20c3ba3a78d0 | 28 | bool Command::TransmitCommand() { |
cardenb | 0:20c3ba3a78d0 | 29 | int fail_count = 0; |
cardenb | 0:20c3ba3a78d0 | 30 | while (true) { |
cardenb | 0:20c3ba3a78d0 | 31 | int xmit_bitlen = transmit(format_, cmd_buf_, bitlength_); |
cardenb | 0:20c3ba3a78d0 | 32 | // Case where transmission fails. |
cardenb | 0:20c3ba3a78d0 | 33 | // Retry a set number of times. |
cardenb | 0:20c3ba3a78d0 | 34 | // If it fails the maximum number of times, return false. |
cardenb | 0:20c3ba3a78d0 | 35 | if (xmit_bitlen < 0) { |
cardenb | 0:20c3ba3a78d0 | 36 | if (fail_count == kmax_fail_count_) { |
cardenb | 0:20c3ba3a78d0 | 37 | return false; |
cardenb | 0:20c3ba3a78d0 | 38 | } else { |
cardenb | 0:20c3ba3a78d0 | 39 | // Continue waiting for timeout. |
cardenb | 0:20c3ba3a78d0 | 40 | fail_count++; |
cardenb | 0:20c3ba3a78d0 | 41 | wait(1); |
cardenb | 0:20c3ba3a78d0 | 42 | } |
cardenb | 0:20c3ba3a78d0 | 43 | } else { |
cardenb | 0:20c3ba3a78d0 | 44 | // display_status("TRAN", xmit_bitlen); |
cardenb | 0:20c3ba3a78d0 | 45 | return true; |
cardenb | 0:20c3ba3a78d0 | 46 | } |
cardenb | 0:20c3ba3a78d0 | 47 | } |
cardenb | 0:20c3ba3a78d0 | 48 | } |