summaryrefslogtreecommitdiffhomepage
path: root/digital/io-hub/src/common-cc/lcd.cc
diff options
context:
space:
mode:
Diffstat (limited to 'digital/io-hub/src/common-cc/lcd.cc')
-rw-r--r--digital/io-hub/src/common-cc/lcd.cc72
1 files changed, 71 insertions, 1 deletions
diff --git a/digital/io-hub/src/common-cc/lcd.cc b/digital/io-hub/src/common-cc/lcd.cc
index 9ed05691..a04574bf 100644
--- a/digital/io-hub/src/common-cc/lcd.cc
+++ b/digital/io-hub/src/common-cc/lcd.cc
@@ -23,8 +23,12 @@
// }}}
#include "lcd.hh"
+#include "ucoolib/utils/bytes.hh"
+
+#include <cstring>
+
LCD::LCD (I2cQueue &queue)
- : I2cQueue::Slave (queue, 0x20, 1)
+ : I2cQueue::Slave (queue, 0x20, 1), last_chrono_sent_ (-1)
{
}
@@ -40,3 +44,69 @@ LCD::team_color (uint8_t r, uint8_t g, uint8_t b)
send (buf, sizeof (buf));
}
+void
+LCD::chrono (int s)
+{
+ if (s != last_chrono_sent_)
+ {
+ last_chrono_sent_ = s;
+ uint8_t t = s > 0 ? s : 0;
+ uint8_t buf[] = { 't', t };
+ send (buf, sizeof (buf));
+ }
+}
+
+void
+LCD::message (const char *msg)
+{
+ uint8_t buf[16];
+ buf[0] = 'm';
+ unsigned msg_len = std::strlen (msg) + 1;
+ if (msg_len > sizeof (buf) - 1)
+ msg_len = sizeof (buf) - 1;
+ std::memcpy (buf + 1, msg, msg_len);
+ buf[sizeof (buf) - 1] = 0;
+ send (buf, 1 + msg_len);
+}
+
+void
+LCD::robot_position (const Position &pos)
+{
+ uint8_t buf[] = { 'p',
+ ucoo::bytes_unpack (pos.v.x, 1),
+ ucoo::bytes_unpack (pos.v.x, 0),
+ ucoo::bytes_unpack (pos.v.y, 1),
+ ucoo::bytes_unpack (pos.v.y, 0),
+ };
+ send (buf, sizeof (buf));
+}
+
+void
+LCD::obstacles (const vect_t *pos, int pos_nb)
+{
+ uint8_t buf[2 + 4 * 4];
+ int i = 0;
+ buf[i++] = 'o';
+ buf[i++] = pos_nb;
+ for (int o = 0; o < pos_nb; o++)
+ {
+ buf[i++] = ucoo::bytes_unpack (pos[o].x, 1);
+ buf[i++] = ucoo::bytes_unpack (pos[o].x, 0);
+ buf[i++] = ucoo::bytes_unpack (pos[o].y, 1);
+ buf[i++] = ucoo::bytes_unpack (pos[o].y, 0);
+ }
+ send (buf, i);
+}
+
+void
+LCD::target (const vect_t &pos)
+{
+ uint8_t buf[] = { 'n',
+ ucoo::bytes_unpack (pos.x, 1),
+ ucoo::bytes_unpack (pos.x, 0),
+ ucoo::bytes_unpack (pos.y, 1),
+ ucoo::bytes_unpack (pos.y, 0),
+ };
+ send (buf, sizeof (buf));
+}
+