A version of the PS/2 library customized for MbedConsole. Also includes a few things that make it's behavior easier to control and a few bug fixes.

Dependents:   MbedConsole

Fork of PS2 by Shinichiro Nakamura

Committer:
shintamainjp
Date:
Tue Aug 31 11:25:34 2010 +0000
Revision:
0:7ee6afa15d51
Child:
1:823c2798e398

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shintamainjp 0:7ee6afa15d51 1 /**
shintamainjp 0:7ee6afa15d51 2 * PS/2 interface control class (Version 0.0.1)
shintamainjp 0:7ee6afa15d51 3 *
shintamainjp 0:7ee6afa15d51 4 * Copyright (C) 2010 Shinichiro Nakamura (CuBeatSystems)
shintamainjp 0:7ee6afa15d51 5 * http://shinta.main.jp/
shintamainjp 0:7ee6afa15d51 6 */
shintamainjp 0:7ee6afa15d51 7
shintamainjp 0:7ee6afa15d51 8 #ifndef _PS2_H_
shintamainjp 0:7ee6afa15d51 9 #define _PS2_H_
shintamainjp 0:7ee6afa15d51 10
shintamainjp 0:7ee6afa15d51 11 #include "mbed.h"
shintamainjp 0:7ee6afa15d51 12 #include "Semaphore.h"
shintamainjp 0:7ee6afa15d51 13
shintamainjp 0:7ee6afa15d51 14 /**
shintamainjp 0:7ee6afa15d51 15 * PS/2 interface control class.
shintamainjp 0:7ee6afa15d51 16 */
shintamainjp 0:7ee6afa15d51 17 class PS2 {
shintamainjp 0:7ee6afa15d51 18 public:
shintamainjp 0:7ee6afa15d51 19 /**
shintamainjp 0:7ee6afa15d51 20 * Create.
shintamainjp 0:7ee6afa15d51 21 *
shintamainjp 0:7ee6afa15d51 22 * @param clkinpin Input pin for clock.
shintamainjp 0:7ee6afa15d51 23 * @param datinpin Input pin for data.
shintamainjp 0:7ee6afa15d51 24 */
shintamainjp 0:7ee6afa15d51 25 PS2(PinName clkin_pin, PinName datin_pin, PinName clkout_pin = NC, PinName datout_pin = NC);
shintamainjp 0:7ee6afa15d51 26
shintamainjp 0:7ee6afa15d51 27 /**
shintamainjp 0:7ee6afa15d51 28 * Destory.
shintamainjp 0:7ee6afa15d51 29 */
shintamainjp 0:7ee6afa15d51 30 ~PS2();
shintamainjp 0:7ee6afa15d51 31
shintamainjp 0:7ee6afa15d51 32 /**
shintamainjp 0:7ee6afa15d51 33 * Check exists a data.
shintamainjp 0:7ee6afa15d51 34 *
shintamainjp 0:7ee6afa15d51 35 * @return true if a data exists.
shintamainjp 0:7ee6afa15d51 36 */
shintamainjp 0:7ee6afa15d51 37 bool exists(void);
shintamainjp 0:7ee6afa15d51 38
shintamainjp 0:7ee6afa15d51 39 /**
shintamainjp 0:7ee6afa15d51 40 * Get a data into a buffer.
shintamainjp 0:7ee6afa15d51 41 *
shintamainjp 0:7ee6afa15d51 42 * @param buf A pointer to a buffer.
shintamainjp 0:7ee6afa15d51 43 * @param bufsiz A size of the buffer.
shintamainjp 0:7ee6afa15d51 44 *
shintamainjp 0:7ee6afa15d51 45 * @return Number of a byte size.
shintamainjp 0:7ee6afa15d51 46 */
shintamainjp 0:7ee6afa15d51 47 int getData(uint8_t *buf, size_t bufsiz);
shintamainjp 0:7ee6afa15d51 48
shintamainjp 0:7ee6afa15d51 49 private:
shintamainjp 0:7ee6afa15d51 50 InterruptIn clkin;
shintamainjp 0:7ee6afa15d51 51 DigitalIn datin;
shintamainjp 0:7ee6afa15d51 52 DigitalOut clkout;
shintamainjp 0:7ee6afa15d51 53 DigitalOut datout;
shintamainjp 0:7ee6afa15d51 54 Timeout timeout;
shintamainjp 0:7ee6afa15d51 55 Semaphore sem;
shintamainjp 0:7ee6afa15d51 56 int writepoint;
shintamainjp 0:7ee6afa15d51 57 int readpoint;
shintamainjp 0:7ee6afa15d51 58 static const int TIMEOUT_US = 10 * 1000;
shintamainjp 0:7ee6afa15d51 59 static const int RINGBUFSIZ = 16;
shintamainjp 0:7ee6afa15d51 60 static const int DATABUFSIZ = 32;
shintamainjp 0:7ee6afa15d51 61
shintamainjp 0:7ee6afa15d51 62 typedef enum {
shintamainjp 0:7ee6afa15d51 63 Idle,
shintamainjp 0:7ee6afa15d51 64 Reading,
shintamainjp 0:7ee6afa15d51 65 Writing
shintamainjp 0:7ee6afa15d51 66 } State;
shintamainjp 0:7ee6afa15d51 67
shintamainjp 0:7ee6afa15d51 68 typedef struct {
shintamainjp 0:7ee6afa15d51 69 State state;
shintamainjp 0:7ee6afa15d51 70 int bitcnt;
shintamainjp 0:7ee6afa15d51 71 int bytecnt;
shintamainjp 0:7ee6afa15d51 72 int errcnt;
shintamainjp 0:7ee6afa15d51 73 uint8_t buffer[DATABUFSIZ];
shintamainjp 0:7ee6afa15d51 74 } work_t;
shintamainjp 0:7ee6afa15d51 75 work_t work;
shintamainjp 0:7ee6afa15d51 76
shintamainjp 0:7ee6afa15d51 77 typedef struct {
shintamainjp 0:7ee6afa15d51 78 int bytecnt;
shintamainjp 0:7ee6afa15d51 79 uint8_t buffer[DATABUFSIZ];
shintamainjp 0:7ee6afa15d51 80 } data_t;
shintamainjp 0:7ee6afa15d51 81 data_t ringbuffer[RINGBUFSIZ];
shintamainjp 0:7ee6afa15d51 82
shintamainjp 0:7ee6afa15d51 83 void func_timeout(void);
shintamainjp 0:7ee6afa15d51 84 void func_fall(void);
shintamainjp 0:7ee6afa15d51 85 void init_work(void);
shintamainjp 0:7ee6afa15d51 86 };
shintamainjp 0:7ee6afa15d51 87
shintamainjp 0:7ee6afa15d51 88 #endif