/*********************************************************************************/ /** * File: dvoraj42.h * Author: Jan Dvořák z Vozerovic * FEL-ID: dvoraj42 * e-mail: dvorkaman@gmail.com * site: dvorkaman.php5.cz */ #ifndef __dvoraj42_h__ #define __dvoraj42_h__ /*********************************************************************************/ /** * Defines */ #define FLASH_START 0x08008000 // start address of Page 0 of FLASH 128KB -> medium density; 128 pages * 1KB #define FLASH_END 0x0800C000 // physically ends on 0x0800BFFF #define FLASH_PAGE_SIZE 1024 // = 2^10 = 1KB #define SEGMENT_DATA GPIO_Pin_10 // PORT C #define SEGMENT_CLK GPIO_Pin_11 // PORT C #define SEGMENT_WRL GPIO_Pin_12 // PORT C #define SEGMENT_DELAY 0xF // how long keep logic ONE (in cycles) #define LCD_DATA4 GPIO_Pin_0 #define LCD_DATA5 GPIO_Pin_1 #define LCD_DATA6 GPIO_Pin_2 #define LCD_DATA7 GPIO_Pin_3 #define LCD_DATA_PORT GPIOC #define LCD_RS GPIO_Pin_1 #define LCD_ENABLE GPIO_Pin_2 #define LCD_SIGNAL_PORT GPIOB #define LCD_DELAY 0xF // wait after pins are changed #define USART_TX GPIO_Pin_9 #define USART_RX GPIO_Pin_10 #define KEY_1 0x100 #define KEY_2 0x010 #define KEY_3 0x001 #define KEY_4 0x020 #define KEY_5 0x002 #define KEY_6 0x800 #define KEY_7 0x080 #define KEY_8 0x008 #define KEY_9 0x040 #define KEY_0 0x004 #define KEY_F 0x200 #define KEY_N 0x400 #define KEY_NONE 0x000 #define KEY_OD_CHANGE 0xF // cycles #define KEY_MINIMAL_TIME 20 // ms of press #define USER_NAME_LENGT 20 typedef struct { vu32 s; vu32 ms; } timeStruct; typedef struct { int key; int time; } pressedKey; typedef struct { unsigned int value; bool longN; bool longF; bool F; bool N; }password; typedef struct { int key; // as [0]..[9], 1, N bool longN; bool longF; }input; // Unit in Flash Memory typedef struct { uint32_t preambule; // determine valid entry in DB 0b0110 1001 .... = 0x6969 6969 uint32_t pass; uint8_t name[USER_NAME_LENGT]; //20 * 8b char uint32_t crc; // another validation check }user; /*********************************************************************************/ /** * Headers */ void delayCycles(vu32 cycles); void delayMS(vu32 ms); void configureKeyboard(void); void setKeyboardToDefaultState(void); int readKeyboard(void); void configureSegment(void); void writeToSegment(int letter); int getTimeDiff(timeStruct startTime, timeStruct endTime); void keyboardCycle(void); bool keyboardIsPressed(void); pressedKey getPressedKey(void); void keyboardClearState(void); pressedKey waitForKeyboardIsReleased(void); int getSegmentEquivalentOfKey(int key); int getNumberEquivalentOfKey(int key); int getSegmentEquivalentOfNumber(int digit); void USARTsendChar(int ch); void USARTsendString(int* string); void configureLCD(void); void initializeLCD(void); void sendDataBitsToLCD(int bits); void sendCommandToLCD(int bits); void LCDSendChar(int ch); void LCDSetCursorHome(void); void LCDSetCursor(int x, int y); void LCDSendString(char* string); void LCDClear(void); input readInput( void(*callFunction)(void) ); password getEmptyPassword(void); user getEmptyUser(void); /*********************************************************************************/ #endif