Fork of Smoothie to port to mbed non-LPC targets.

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Revision:
2:1df0b61d3b5a
diff -r ab59fc9af055 -r 1df0b61d3b5a libs/Network/uip/CommandQueue.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libs/Network/uip/CommandQueue.cpp	Fri Feb 28 18:52:52 2014 -0800
@@ -0,0 +1,68 @@
+#include "CommandQueue.h"
+
+#include "stdio.h"
+#include "string.h"
+#include "stdlib.h"
+
+#include "Kernel.h"
+#include "libs/SerialMessage.h"
+#include "CallbackStream.h"
+
+static CommandQueue *command_queue_instance;
+CommandQueue *CommandQueue::instance = NULL;
+
+
+CommandQueue::CommandQueue()
+{
+    command_queue_instance = this;
+    null_stream= &(StreamOutput::NullStream);
+}
+
+CommandQueue* CommandQueue::getInstance()
+{
+    if(instance == 0) instance= new CommandQueue();
+    return instance;
+}
+
+extern "C" {
+    int network_add_command(const char *cmd, void *pstream)
+    {
+        return command_queue_instance->add(cmd, (StreamOutput*)pstream);
+    }
+}
+
+int CommandQueue::add(const char *cmd, StreamOutput *pstream)
+{
+    cmd_t c= {strdup(cmd), pstream==NULL?null_stream:pstream};
+    q.push(c);
+    if(pstream != NULL) {
+        // count how many times this is on the queue
+        CallbackStream *s= static_cast<CallbackStream *>(pstream);
+        s->inc();
+    }
+    return q.size();
+}
+
+// pops the next command off the queue and submits it.
+bool CommandQueue::pop()
+{
+    if (q.size() == 0) return false;
+
+    cmd_t c= q.pop();
+    char *cmd= c.str;
+
+    struct SerialMessage message;
+    message.message = cmd;
+    message.stream = c.pstream;
+
+    free(cmd);
+    THEKERNEL->call_event(ON_CONSOLE_LINE_RECEIVED, &message );
+
+    if(message.stream != null_stream) {
+        message.stream->puts(NULL); // indicates command is done
+        // decrement usage count
+        CallbackStream *s= static_cast<CallbackStream *>(message.stream);
+        s->dec();
+    }
+    return true;
+}