Libraries and Example of mbed parallel bus using I2C port expanders
Dependencies: HDSP253X mbed PCF8574_Bus
Diff: Keyboard.cpp
- Revision:
- 6:aaefa04f06be
- Parent:
- 5:38b853bb1afa
- Child:
- 7:8680b8b718c8
--- a/Keyboard.cpp Fri Aug 26 20:35:11 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* Keyboard - Keyboard and Fire Switch control - * Copyright (c) 2011 Wim Huiskamp - * - * Released under the MIT License: http://mbed.org/license/mit - * - * version 0.2 Initial Release -*/ -#include "mbed.h" -#include "PCF8574_DataBus.h" -#include "PCF8574_EnableBus.h" -#include "MBED_ControlBus.h" -#include "Keyboard.h" - - -/** Create a Keyboard object connected to the specified buses - * - * @param PCF8574_DataBus databus to connect to - * @param PCF8574_EnableBus enable enablebus to connect to - * @param MBED_ControlBus control controlbus to connect to -*/ -Keyboard::Keyboard (PCF8574_DataBus &databus, PCF8574_EnableBus &enablebus, MBED_ControlBus &controlbus) : - _databus(databus), _enablebus(enablebus), _controlbus(controlbus) { - _init(); -} - -/** Init Keyboard - * @param - * @returns - */ -void Keyboard::_init(void) -{ - _KeyReady = false; - _KeyCode = KEY_NONE; -} - - -/** Check Keypressed or Fire switch pressed - * - * @param none - * @returns bool keypressed -*/ -bool Keyboard::readable () { - uint8_t data = 0; - - // Init to No keypressed - _KeyReady = false; - - if (_controlbus.CDINT() == HIGH) { - // CDA Key pressed - _KeyReady = true; - - // Get the switchvalue and decode it - _KeyCode = getswitch(); - } - - if (_controlbus.FIRE() == HIGH) { - // Manual Fire Key pressed - _KeyReady = true; - - _KeyCode = KEY_FIRE; - } - - return _KeyReady; -} - - -/** Read keycode - * - * @param none - * @returns keycode -*/ -Key_Code Keyboard::getkey() { - - if (_KeyReady) { - _KeyReady = false; - return _KeyCode; - } - else { - return KEY_NONE; - } -} - - -/** Get keycode for pressed switch - * - * @param none - * @returns keycode -*/ -Key_Code Keyboard::getswitch() { - uint8_t data = 0; - Key_Code code; - - // Get the switchvalue and decode it - data = _read() & D_KEYBOARD_MASK; - switch (data) { - case D_KEYBOARD_MODE: code = KEY_MODE; - break; - case D_KEYBOARD_EDIT_PATH: code = KEY_EDIT_PATH; - break; - case D_KEYBOARD_BRIGHT: code = KEY_BRIGHT; - break; - case D_KEYBOARD_GRAT_RT: code = KEY_GRAT_RT; - break; - case D_KEYBOARD_F_L_UP: code = KEY_F_L_UP; - break; - default: code = KEY_NONE; - break; - } - - return code; -} - - -/** Read switch value - * - * @param none - * @returns switch register value -*/ -uint8_t Keyboard::_read() { - uint8_t data = 0; - - // Switch databus to inputs - _databus.busdir(READ); - // Switch databus buffer to inputs - _controlbus.busdir(READ); - - - // Set CE low and wait - _enablebus.chipselect(CS_SWITCH, LOW); - wait_ms(1.0); - - // Set RD low and wait - _controlbus.RD(LOW); - wait_ms(1.0); - - // Read the data byte from databus - data = _databus.read(); - - // set RD high and wait - _controlbus.RD(HIGH); - wait_ms(1.0); - - // Set CE high and wait - _enablebus.chipselect(CS_SWITCH, HIGH); - wait_ms(1.0); - - // Switch databus buffer back to outputs - _controlbus.busdir(WRITE); - // Switch databus to outputs - _databus.busdir(WRITE); - - // Return read data to caller - return data; -} - - - - - - - - - -