Add optional 's' command to packet slave to enable/disable slave mode
[fw/altos] / src / ao_packet_slave.c
index e03ebdc3a20cd90475ee00ea1610b3a3a6f28260..3c4ffb92d26837f5216fbbe1a0a8739447098ed7 100644 (file)
@@ -36,8 +36,10 @@ ao_packet_slave(void)
 void
 ao_packet_slave_start(void)
 {
-       ao_packet_enable = 1;
-       ao_add_task(&ao_packet_task, ao_packet_slave, "slave");
+       if (!ao_packet_enable) {
+               ao_packet_enable = 1;
+               ao_add_task(&ao_packet_task, ao_packet_slave, "slave");
+       }
 }
 
 void
@@ -54,10 +56,30 @@ ao_packet_slave_stop(void)
        }
 }
 
+#ifdef PACKET_HAS_SLAVE_CMD
+void
+ao_packet_slave_control(void)
+{
+       ao_cmd_hex();
+       if (ao_cmd_lex_i)
+               ao_packet_slave_start();
+       else
+               ao_packet_slave_stop();
+}
+
+__code struct ao_cmds ao_packet_slave_cmds[] = {
+       { 's',  ao_packet_slave_control,        "s <enable>                         Remote packet link slave" },
+       { 0,    ao_packet_slave_control,        NULL },
+};
+#endif
+
 void
 ao_packet_slave_init(void)
 {
        ao_add_stdio(ao_packet_pollchar,
                     ao_packet_putchar,
                     NULL);
+#ifdef PACKET_HAS_SLAVE_CMD
+       ao_cmd_register(&ao_packet_slave_cmds[0]);
+#endif
 }