/** @file functions.c * @brief Diverse Funktionen * @author Tom, DL7BJ */ #include "functions.h" // EEProm uint8_t Dummy; uint8_t ee_Dummy EEMEM = 0x55; // Dummy for Address 0 uint8_t ee_WpM EEMEM = 12; // WpM uint8_t ee_Sidetone EEMEM = 1; // Mithörton An (1) oder Aus (0) uint16_t ee_FrequencySidetone EEMEM = 600; // Frequenz des Mithörtons uint8_t ee_IambicMode EEMEM = 0; // Iambic Mode A oder B uint8_t ee_Weight EEMEM = 3; // Dah dit Ratio uint8_t ee_TRX EEMEM = 2; // TRX 1 (0), TRX 2 (1), Beide (2) // Stringkonstanten für VT100 Terminals char CLRSCR[] = "\033[2J"; /** @brief Ein paar Millisekunden warten * * Dieser Variable muss atomar sein, weil es eine 16Bit Variable ist, * die im Timer 0 verwendet wird. * @param Zeit in Millisekunden, die gewartet werden soll * @return void */ void DelayMilliSeconds(uint16_t ms) { t_delayms = 0; // ResetMilliSeconds(); //ATOMIC_BLOCK(ATOMIC_FORCEON) { while(t_delayms < ms); //} } /** @brief Wert des Zählers für Millisekunden lesen * * Dieser Variable muss atomar sein, weil es eine 16Bit Variable ist, * die im Timer 0 verwendet wird. * @param none * @return milliseconds */ uint16_t GetMilliSeconds(void) { uint16_t m; ATOMIC_BLOCK(ATOMIC_FORCEON){ m = t_delayms; } return m; } /** @brief Setzt den Zähler für Millisekunden auf 0 * * Dieser Variable muss atomar sein, weil es eine 16Bit Variable ist, * die im Timer 0 verwendet wird. * @param none * @return none */ void ResetMilliSeconds(void) { //ATOMIC_BLOCK(ATOMIC_FORCEON){ t_delayms = 0; //} } /** @brief SREG wieder herstellen und Interrupts erlauben * @param none * @return none */ void IntEnable(void) { SREG = sreg_tmp; sei(); } /** @brief SREG sichern und Interrupts verbieten * @param none * @return none */ void IntDisable(void) { sreg_tmp = SREG; cli(); } /** \brief EEPROM schreiben */ void WriteEEprom(void) { cli(); eeprom_write_byte(&ee_Dummy,0x55); eeprom_write_byte(&ee_WpM, bConfig.WpM); eeprom_write_byte(&ee_IambicMode, bConfig.IambicMode); eeprom_write_word(&ee_FrequencySidetone, bConfig.FrequencySidetone); eeprom_write_byte(&ee_TRX, bConfig.TRX); sei(); } void ReadEEprom(void) { // wpm = eeprom_read_byte(&ee_wpm); } void WriteEEpromWpM(void) { cli(); sprintf(sdebug," %i WpM in EEprom schreiben\r\n",bConfig.WpM); SendSerialString(sdebug); eeprom_write_byte(&ee_WpM, bConfig.WpM); sei(); } void ReadEEpromWpM(void) { cli(); bConfig.WpM = eeprom_read_byte(&ee_WpM); sei(); sprintf(sdebug," %i WpM von EEprom gelesen\r\n",bConfig.WpM); SendSerialString(sdebug); if(bConfig.WpM > 50) { bConfig.WpM = 15; WriteEEpromWpM(); } } void SendSerialChar(unsigned char data) { while(!(UCSR0A & (1<