...

Dependencies:   SmartRemote

Committer:
cardenb
Date:
Tue Dec 08 03:09:39 2015 +0000
Revision:
1:19b95e12c3ab
Parent:
0:20c3ba3a78d0
...

Who changed what in which revision?

UserRevisionLine numberNew 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 }