CameraC328
Dependents: CameraC328_TestProgram CameraC328_Thresholding Camera_TestProgram_2015 Camera_TestProgram_2015 ... more
Diff: SerialBuffered.cpp
- Revision:
- 14:640f564075af
- Parent:
- 13:17cf1e2015f7
- Child:
- 15:49cfda6c547f
--- a/SerialBuffered.cpp Fri Sep 17 11:15:37 2010 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -#include "mbed.h" -#include "SerialBuffered.h" - -/** - * Create a buffered serial class. - * - * @param tx A pin for transmit. - * @param rx A pin for receive. - */ -SerialBuffered::SerialBuffered(PinName tx, PinName rx) : Serial(tx, rx) { - indexContentStart = 0; - indexContentEnd = 0; - timeout = 1; - attach(this, &SerialBuffered::handleInterrupt); -} - -/** - * Destroy. - */ -SerialBuffered::~SerialBuffered() { -} - -/** - * Set timeout for getc(). - * - * @param ms milliseconds. (-1:Disable timeout) - */ -void SerialBuffered::setTimeout(int ms) { - timeout = ms; -} - -/** - * Read requested bytes. - * - * @param bytes A pointer to a buffer. - * @param requested Length. - * - * @return Readed byte length. - */ -size_t SerialBuffered::readBytes(uint8_t *bytes, size_t requested) { - int i = 0; - while (i < requested) { - int c = getc(); - if (c < 0) { - break; - } - bytes[i] = c; - i++; - } - return i; -} - -/** - * Get a character. - * - * @return A character. (-1:timeout) - */ -int SerialBuffered::getc() { - timer.reset(); - timer.start(); - while (indexContentStart == indexContentEnd) { - wait_ms(1); - if ((timeout > 0) && (timer.read_ms() > timeout)) { - /* - * Timeout occured. - */ - // printf("Timeout occured.\n"); - return EOF; - } - } - timer.stop(); - - uint8_t result = buffer[indexContentStart++]; - indexContentStart = indexContentStart % BUFFERSIZE; - - return result; -} - -/** - * Returns 1 if there is a character available to read, 0 otherwise. - */ -int SerialBuffered::readable() { - return indexContentStart != indexContentEnd; -} - -void SerialBuffered::handleInterrupt() { - while (Serial::readable()) { - if (indexContentStart == ((indexContentEnd + 1) % BUFFERSIZE)) { - /* - * Buffer overrun occured. - */ - // printf("Buffer overrun occured.\n"); - Serial::getc(); - } else { - buffer[indexContentEnd++] = Serial::getc(); - indexContentEnd = indexContentEnd % BUFFERSIZE; - } - } -}