Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: 02_DPPU_JUANDA_120 02_DPPU_JUANDA_120_Latest_copy 02_DPPU_JUANDA_120_Latest
SerialPipe.h
- Committer:
- mazgch
- Date:
- 2013-10-25
- Revision:
- 2:b6012cd91657
- Parent:
- 0:cb2d45baaca3
- Child:
- 9:e7a5959ffae1
File content as of revision 2:b6012cd91657:
#pragma once
#include "mbed.h"
#include "Pipe.h"
#include <ctype.h>
class SerialPipe : public Serial
{
protected:
Pipe<char> _pipe;
private:
void rxIrqBuf(void)
{
while (serial_readable(&_serial))
_pipe.putc(serial_getc(&_serial));
}
public:
SerialPipe(PinName tx, PinName rx, int rxSize = 128, const char* name = NULL)
: Serial(tx,rx,name), _pipe(rxSize)
{
attach(this, &SerialPipe::rxIrqBuf, RxIrq);
}
virtual ~SerialPipe(void)
{
attach(NULL, RxIrq);
}
// tx channel
int writeBuf(char* b, int s)
{
for (int i = 0; i < s; i ++)
putc(b[i]);
return s;
}
// rx channel
int readable(void) { return _pipe.readable() ? 1 : 0; }
int getc(void) { return _pipe.getc(); }
int readBuf(char* b, int s) { return _pipe.get(b,s); }
#define WAIT -1
#define NOT_FOUND 0
// special parsing
int getLine(char* b, int s)
{
int o = 0;
int i = 0;
int l = _pipe.start();
while ((i < l) && (o < s))
{
int t = _pipe.next();
i ++;
if (t == '\r') // terminate commands with carriage return
{
_pipe.done();
return o; // if enter send the zero char
}
else if (t == '\n') // skip/filter new line
/* skip */;
else if (t != '\b') // normal char (no backspace)
b[o++] = t;
else if (o > 0) // backspace
o --; // remove it
}
o = 0;
return WAIT;
}
};