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

Dependencies:   mbed

Fork of Smoothie by Stéphane Cachat

Committer:
Michael J. Spencer
Date:
Fri Feb 28 18:52:52 2014 -0800
Revision:
2:1df0b61d3b5a
Update to latest Smoothie.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Michael J. Spencer 2:1df0b61d3b5a 1 #include "CommandQueue.h"
Michael J. Spencer 2:1df0b61d3b5a 2
Michael J. Spencer 2:1df0b61d3b5a 3 #include "stdio.h"
Michael J. Spencer 2:1df0b61d3b5a 4 #include "string.h"
Michael J. Spencer 2:1df0b61d3b5a 5 #include "stdlib.h"
Michael J. Spencer 2:1df0b61d3b5a 6
Michael J. Spencer 2:1df0b61d3b5a 7 #include "Kernel.h"
Michael J. Spencer 2:1df0b61d3b5a 8 #include "libs/SerialMessage.h"
Michael J. Spencer 2:1df0b61d3b5a 9 #include "CallbackStream.h"
Michael J. Spencer 2:1df0b61d3b5a 10
Michael J. Spencer 2:1df0b61d3b5a 11 static CommandQueue *command_queue_instance;
Michael J. Spencer 2:1df0b61d3b5a 12 CommandQueue *CommandQueue::instance = NULL;
Michael J. Spencer 2:1df0b61d3b5a 13
Michael J. Spencer 2:1df0b61d3b5a 14
Michael J. Spencer 2:1df0b61d3b5a 15 CommandQueue::CommandQueue()
Michael J. Spencer 2:1df0b61d3b5a 16 {
Michael J. Spencer 2:1df0b61d3b5a 17 command_queue_instance = this;
Michael J. Spencer 2:1df0b61d3b5a 18 null_stream= &(StreamOutput::NullStream);
Michael J. Spencer 2:1df0b61d3b5a 19 }
Michael J. Spencer 2:1df0b61d3b5a 20
Michael J. Spencer 2:1df0b61d3b5a 21 CommandQueue* CommandQueue::getInstance()
Michael J. Spencer 2:1df0b61d3b5a 22 {
Michael J. Spencer 2:1df0b61d3b5a 23 if(instance == 0) instance= new CommandQueue();
Michael J. Spencer 2:1df0b61d3b5a 24 return instance;
Michael J. Spencer 2:1df0b61d3b5a 25 }
Michael J. Spencer 2:1df0b61d3b5a 26
Michael J. Spencer 2:1df0b61d3b5a 27 extern "C" {
Michael J. Spencer 2:1df0b61d3b5a 28 int network_add_command(const char *cmd, void *pstream)
Michael J. Spencer 2:1df0b61d3b5a 29 {
Michael J. Spencer 2:1df0b61d3b5a 30 return command_queue_instance->add(cmd, (StreamOutput*)pstream);
Michael J. Spencer 2:1df0b61d3b5a 31 }
Michael J. Spencer 2:1df0b61d3b5a 32 }
Michael J. Spencer 2:1df0b61d3b5a 33
Michael J. Spencer 2:1df0b61d3b5a 34 int CommandQueue::add(const char *cmd, StreamOutput *pstream)
Michael J. Spencer 2:1df0b61d3b5a 35 {
Michael J. Spencer 2:1df0b61d3b5a 36 cmd_t c= {strdup(cmd), pstream==NULL?null_stream:pstream};
Michael J. Spencer 2:1df0b61d3b5a 37 q.push(c);
Michael J. Spencer 2:1df0b61d3b5a 38 if(pstream != NULL) {
Michael J. Spencer 2:1df0b61d3b5a 39 // count how many times this is on the queue
Michael J. Spencer 2:1df0b61d3b5a 40 CallbackStream *s= static_cast<CallbackStream *>(pstream);
Michael J. Spencer 2:1df0b61d3b5a 41 s->inc();
Michael J. Spencer 2:1df0b61d3b5a 42 }
Michael J. Spencer 2:1df0b61d3b5a 43 return q.size();
Michael J. Spencer 2:1df0b61d3b5a 44 }
Michael J. Spencer 2:1df0b61d3b5a 45
Michael J. Spencer 2:1df0b61d3b5a 46 // pops the next command off the queue and submits it.
Michael J. Spencer 2:1df0b61d3b5a 47 bool CommandQueue::pop()
Michael J. Spencer 2:1df0b61d3b5a 48 {
Michael J. Spencer 2:1df0b61d3b5a 49 if (q.size() == 0) return false;
Michael J. Spencer 2:1df0b61d3b5a 50
Michael J. Spencer 2:1df0b61d3b5a 51 cmd_t c= q.pop();
Michael J. Spencer 2:1df0b61d3b5a 52 char *cmd= c.str;
Michael J. Spencer 2:1df0b61d3b5a 53
Michael J. Spencer 2:1df0b61d3b5a 54 struct SerialMessage message;
Michael J. Spencer 2:1df0b61d3b5a 55 message.message = cmd;
Michael J. Spencer 2:1df0b61d3b5a 56 message.stream = c.pstream;
Michael J. Spencer 2:1df0b61d3b5a 57
Michael J. Spencer 2:1df0b61d3b5a 58 free(cmd);
Michael J. Spencer 2:1df0b61d3b5a 59 THEKERNEL->call_event(ON_CONSOLE_LINE_RECEIVED, &message );
Michael J. Spencer 2:1df0b61d3b5a 60
Michael J. Spencer 2:1df0b61d3b5a 61 if(message.stream != null_stream) {
Michael J. Spencer 2:1df0b61d3b5a 62 message.stream->puts(NULL); // indicates command is done
Michael J. Spencer 2:1df0b61d3b5a 63 // decrement usage count
Michael J. Spencer 2:1df0b61d3b5a 64 CallbackStream *s= static_cast<CallbackStream *>(message.stream);
Michael J. Spencer 2:1df0b61d3b5a 65 s->dec();
Michael J. Spencer 2:1df0b61d3b5a 66 }
Michael J. Spencer 2:1df0b61d3b5a 67 return true;
Michael J. Spencer 2:1df0b61d3b5a 68 }