#ifndef __TEENSY_KEYBOARD_H
#define __TEENSY_KEYBOARD_H

#include "physicalkeyboard.h"

class TeensyKeyboard : public PhysicalKeyboard {
 public:
  TeensyKeyboard(VMKeyboard *k);
  virtual ~TeensyKeyboard();

  // Interface used by the VM...
  virtual void maintainKeyboard();

  // Interface used by the BIOS...
  virtual bool kbhit();
  virtual int8_t read();


 public:
  // These are only public b/c teensy.ino (not a class) needs them.
  void pressedKey(uint8_t key);
  void releasedKey(uint8_t key);

private:
  bool addEvent(uint8_t kc, bool pressed);
  bool popEvent(uint8_t *kc, bool *pressed);

  uint8_t modifyKeycode(uint8_t key);

 private:
  bool leftShiftPressed;
  bool rightShiftPressed;
  bool ctrlPressed;
  bool capsLock;
  bool leftApplePressed;
  bool rightApplePressed;

  int8_t numPressed;
};

#endif
