The Smart Card Detective (SCD)
|
#include <stdio.h>
#include <avr/io.h>
Go to the source code of this file.
Defines | |
#define | LCD_COMMAND_DELAY 40 |
Delay of LCD commands. | |
#define | BUTTON_A 0x01 |
value for Button A in result from GetButton function | |
#define | BUTTON_B 0x02 |
value for Button B in result from GetButton function | |
#define | BUTTON_C 0x04 |
value for Button C in result from GetButton function | |
#define | BUTTON_D 0x08 |
value for Button D in result from GetButton function | |
Functions | |
void | Led1On () |
Turn on Led1. | |
void | Led2On () |
Turn on Led2. | |
void | Led3On () |
Turn on Led3. | |
void | Led4On () |
Turn on Led4. | |
void | Led1Off () |
Turn off Led1. | |
void | Led2Off () |
Turn off Led2. | |
void | Led3Off () |
Turn off Led3. | |
void | Led4Off () |
Turn off Led4. | |
void | T_C4On () |
void | T_C8On () |
void | T_C4Off () |
void | T_C8Off () |
void | JTAG_P1_High () |
void | JTAG_P3_High () |
void | JTAG_P1_Low () |
void | JTAG_P3_Low () |
uint8_t | GetButtonA () |
Get status of button A. | |
uint8_t | GetButtonB () |
Get status of button B. | |
uint8_t | GetButtonC () |
Get status of button C. | |
uint8_t | GetButtonD () |
Get status of button D. | |
uint8_t | GetButton () |
Returs a 1-hot encoded list of buttons pressed. | |
uint8_t | GetLCDState () |
Return the state (on/off) of the LCD. | |
void | SetLCDState (uint8_t state) |
Set the state of the LCD. | |
void | InitLCD () |
Initialize LCD. | |
void | WriteStringLCD (char *string, uint8_t len) |
Display a string on LCD. | |
int | LcdPutchar (char c, FILE *unused) |
Send character to the LCD display. | |
uint8_t | CheckLCD () |
Check if the LCD is working properly. | |
void | LCDOff () |
Switch LCD off. | |
void | LCDOn () |
Switch LCD on. | |
void | WriteSingleByteEEPROM (uint16_t addr, uint8_t data) |
Write a single byte to EEPROM. | |
uint8_t | ReadSingleByteEEPROM (uint16_t addr) |
Read a single byte from EEPROM. | |
void | WriteBytesEEPROM (uint16_t addr, uint8_t *data, uint16_t len) |
Write multiple bytes to EEPROM. | |
uint8_t * | ReadBytesEEPROM (uint16_t addr, uint16_t len) |
Read multiple bytes from EEPROM. | |
uint16_t | Read16bitRegister (volatile uint16_t *reg) |
Read multiple bytes from EEPROM. | |
void | InitUSART (uint16_t baudUBRR) |
Initialise USART. | |
void | DisableUSART () |
Disable USART. | |
void | SendCharUSART (char data) |
char | GetCharUSART (void) |
void | FlushUSART (void) |
char * | GetLineUSART () |
void | SendLineUSART (const char *data) |
scd_io.h header file
This file provides the function definitions for all micro-controller I/O functions, including control of LCD, leds and buttons
Copyright (C) 2012 Omar Choudary (omar.choudary@cl.cam.ac.uk)
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Definition in file scd_io.h.
#define BUTTON_A 0x01 |
#define BUTTON_B 0x02 |
#define BUTTON_C 0x04 |
#define BUTTON_D 0x08 |
#define LCD_COMMAND_DELAY 40 |
uint8_t CheckLCD | ( | ) |
void DisableUSART | ( | ) |
void FlushUSART | ( | void | ) |
uint8_t GetButton | ( | ) |
Returs a 1-hot encoded list of buttons pressed.
This function checks all the buttons for being pressed and returns a 1-hot encoded byte representing each pressed button.
uint8_t GetButtonA | ( | ) |
uint8_t GetButtonB | ( | ) |
uint8_t GetButtonC | ( | ) |
uint8_t GetButtonD | ( | ) |
char GetCharUSART | ( | void | ) |
uint8_t GetLCDState | ( | ) |
char* GetLineUSART | ( | ) |
void InitLCD | ( | ) |
void InitUSART | ( | uint16_t | baudUBRR | ) |
Initialise USART.
Initiualise the USART port
baudUBRR | the baud UBRR parameter as given in table 18-12 of the datasheet, page 203. The formula is: baud = FCLK / (16 * (baudUBRR + 1)). So for FCLK = 16 MHz and desired BAUD = 9600 bps => baudUBRR = 103. |
void JTAG_P1_High | ( | ) |
void JTAG_P1_Low | ( | ) |
void JTAG_P3_High | ( | ) |
void JTAG_P3_Low | ( | ) |
void LCDOff | ( | ) |
void LCDOn | ( | ) |
int LcdPutchar | ( | char | c, |
FILE * | unused | ||
) |
uint16_t Read16bitRegister | ( | volatile uint16_t * | reg | ) |
uint8_t* ReadBytesEEPROM | ( | uint16_t | addr, |
uint16_t | len | ||
) |
Read multiple bytes from EEPROM.
This function reads multiple bytes from the EEPROM. This method stops interrupts while reading the bytes.
addr | address of first byte to be read |
len | number of bytes to be read |
uint8_t ReadSingleByteEEPROM | ( | uint16_t | addr | ) |
Read a single byte from EEPROM.
This function reads a sigle byte from the EEPROM. Its code is mainly taken from the datasheet. This method does not change the interrupt vector so it should be handled with care. It is better to use ReadBytesEEPROM as it takes care of interrupts and reads multiple bytes at once.
addr | address of byte to be read |
void SendCharUSART | ( | char | data | ) |
void SendLineUSART | ( | const char * | data | ) |
void SetLCDState | ( | uint8_t | state | ) |
void WriteBytesEEPROM | ( | uint16_t | addr, |
uint8_t * | data, | ||
uint16_t | len | ||
) |
Write multiple bytes to EEPROM.
This function writes multiple bytes to the EEPROM. This method stops interrupts while writing the bytes.
addr | address of first byte to be written |
data | bytes to be written |
len | number of bytes to be written |
void WriteSingleByteEEPROM | ( | uint16_t | addr, |
uint8_t | data | ||
) |
Write a single byte to EEPROM.
This function writes a sigle byte to the EEPROM. Its code is mainly taken from the datasheet. This method does not change the interrupt vector so it should be handled with care. It is better to use WriteBytesEEPROM as it takes care of interrupts and writes multiple bytes at once.
addr | address of byte to be written |
data | byte to be written |
void WriteStringLCD | ( | char * | string, |
uint8_t | len | ||
) |