Good Evening,

I'm just in the process of moving my project from Arduino to Teensy. I'm all up and running with my shiny new Teensy 3.1, but I'm struggling with a modification I made to the Arduino Hardware serial core.

I added a function that I called Serial.peekn(). It's just like the regular Serial.peek, but allows you to specify the location in the serial buffer that you want to peek at. For example, Serial.peekn(0); gives you the first byte, and Serial.peekn(1); gives the second etc (both without actually removing the bytes from the buffer). There was also a second function that was called Serial.remove(). As the name suggests, it allows you to discard a specified number of bytes from the buffer without having to read and then discard them.

I'm currently using Arduino IDE 1.0.6, and these are the modifications I made.

In HardwareSerial.h I added the following:

virtual int peekn(int a);
virtual void remove(uint8_t);
In HardwareSerial.cpp I added the following:

int HardwareSerial::peekn(int a)
  if (_rx_buffer->head == _rx_buffer->tail) {
    return -1;
  }  else {
    return _rx_buffer->buffer[(_rx_buffer->tail + a) % SERIAL_BUFFER_SIZE];

void HardwareSerial::remove(uint8_t n) {
    if (_rx_buffer->head != _rx_buffer->tail) {
        _rx_buffer->tail = (_rx_buffer->tail + n) % SERIAL_BUFFER_SIZE;
I've been looking through the teensy3 HardwareSerial.h (can't even find teensy3 HardwareSerial.cpp), and can't figure out how to implement similar changes. I found HardwareSerial.cpp under the teensy core, and think I've figured out the changes there (although as yet unable to test):

int HardwareSerial::peekn(int n)
	uint8_t head, tail;

	head = rx_buffer_head;
	tail = rx_buffer_tail;
	if (head == tail) return -1;
	if (++tail + a >= RX_BUFFER_SIZE) tail = 0;
	return rx_buffer[tail + n];

int HardwareSerial::remove(int n)
	uint8_t c, i;

	if (rx_buffer_head == rx_buffer_tail) return -1;
	i = rx_buffer_tail + n;
	if (i >= RX_BUFFER_SIZE) i = 0;
	rx_buffer_tail = i;
Assuming the above is correct, can anyone point me in the right direction regarding changes to the teensy3 HardwareSerial.h file ? I just can't figure out what needs to be added.