Umstrukturierung des Quellcodes in mehr Dateien
parent
2bdecacf56
commit
957ac1fa8d
@ -1,2 +1,2 @@
|
||||
:080000000032005802000C550B
|
||||
:080000000203005802010C5537
|
||||
:00000001FF
|
||||
|
@ -0,0 +1,317 @@
|
||||
/** @file controls.c
|
||||
* @brief Display und Bedienelemente
|
||||
* @author Tom, DL7BJ
|
||||
*/
|
||||
|
||||
#include "controls.h"
|
||||
|
||||
// Stringkonstanten für das Display
|
||||
const char CALL[] = " DL7BJ ";
|
||||
const char PRG[] = " BJ-Keyer ";
|
||||
const char VER[] = " V1.0 ";
|
||||
const char Trx1[] = "TRX 1";
|
||||
const char Trx2[] = "TRX 2";
|
||||
const char IambicA[] = "Iambic A";
|
||||
const char IambicB[] = "Iambic B";
|
||||
const char Ratio[] = "Ratio";
|
||||
const char ReverseRL[] = " L - R °";
|
||||
const char ReverseLR[] = " L ° R -";
|
||||
const char SideToneOnOff[] = "Mithörton";
|
||||
const char SideToneFreq[] = "Frequenz";
|
||||
const char RiseTime[] = "Anstieg";
|
||||
const char DebounceTime[] = "Entprl.";
|
||||
const char Yes[] = "J";
|
||||
const char No[] = "N";
|
||||
const char Hz[] = "Hz";
|
||||
|
||||
void Drehencoder(void)
|
||||
{
|
||||
int st = 0;
|
||||
static int last;
|
||||
|
||||
if(!(bMenuCtrl.Config))
|
||||
{
|
||||
EncoderMinMax(5,50);
|
||||
st = EncoderRead(1);
|
||||
if(bConfig.WpM != st)
|
||||
{
|
||||
bConfig.WpM = st; // neuen Wert in bConfig speichern
|
||||
bMerker.WpMChanged = 1; // Merker für Timer 0 setzen
|
||||
bMenuCtrl.Update = 1; // Merker für UpdateDisplay setzen
|
||||
EncoderPos = st; // neuen Werte in EncoderPos speichern
|
||||
WpM = bConfig.WpM; // neuen Wert in WpM übernehmen
|
||||
cli();
|
||||
StoreEEprom = 0; // Timer 0 Variable löschen für Update EEprom
|
||||
sei();
|
||||
}
|
||||
}
|
||||
|
||||
if((bMenuCtrl.buttonPressed == 1) && (bMenuCtrl.Config == 0))
|
||||
{
|
||||
bMenuCtrl.Config = 1;
|
||||
MenuCtrlTimer = 0;
|
||||
bMenuCtrl.buttonPressed = 0;
|
||||
EncoderPos = EncoderRead(1);
|
||||
bMenuCtrl.CurMenue = EncoderPosConfig;
|
||||
EncoderWrite(EncoderPosConfig);
|
||||
bMenuCtrl.Update = 1;
|
||||
}
|
||||
|
||||
if((bMenuCtrl.buttonPressedLong == 1) && (bMenuCtrl.Config == 1))
|
||||
{
|
||||
bMenuCtrl.Config = 0;
|
||||
bMenuCtrl.Update = 1;
|
||||
bMenuCtrl.buttonPressedLong = 0;
|
||||
bMenuCtrl.buttonPressed = 0;
|
||||
bMenuCtrl.m_buttonPressed = 0;
|
||||
MenuCtrlTimer = 0;
|
||||
EncoderPosConfig = EncoderRead(1);
|
||||
EncoderWrite(EncoderPos);
|
||||
bMenuCtrl.ClrScr = 1;
|
||||
Beep();
|
||||
}
|
||||
|
||||
if(bMenuCtrl.Config == 1)
|
||||
{
|
||||
if(!bMenuCtrl.buttonPressed)
|
||||
{
|
||||
EncoderMinMax(1,M_MAX);
|
||||
st = EncoderRead(1);
|
||||
sprintf(sdebug,"Encoder %i\r\n",st);
|
||||
if(last != st)
|
||||
{
|
||||
SendSerialString(sdebug);
|
||||
bMenuCtrl.CurMenue = st;
|
||||
bMenuCtrl.Update = 1;
|
||||
}
|
||||
last = st;
|
||||
}
|
||||
|
||||
if(bMenuCtrl.buttonPressed)
|
||||
{
|
||||
bMenuCtrl.m_buttonPressed = 1;
|
||||
bMenuCtrl.buttonPressed = 0;
|
||||
}
|
||||
|
||||
if(bMenuCtrl.m_buttonPressed == 1)
|
||||
{
|
||||
UpdateDisplay();
|
||||
switch(bMenuCtrl.CurMenue)
|
||||
{
|
||||
case M_TRX1:
|
||||
if(bConfig.TRX == 2)
|
||||
bConfig.TRX = 0;
|
||||
else
|
||||
bConfig.TRX = 1;
|
||||
bMenuCtrl.m_buttonPressed = 0;
|
||||
break;
|
||||
case M_TRX2:
|
||||
if(bConfig.TRX == 1)
|
||||
bConfig.TRX = 0;
|
||||
else
|
||||
bConfig.TRX = 2;
|
||||
bMenuCtrl.m_buttonPressed = 0;
|
||||
break;
|
||||
case M_IAMBICA:
|
||||
bConfig.IambicMode = 1;
|
||||
bMenuCtrl.m_buttonPressed = 0;
|
||||
break;
|
||||
case M_IAMBICB:
|
||||
bConfig.IambicMode = 2;
|
||||
bMenuCtrl.m_buttonPressed = 0;
|
||||
break;
|
||||
case M_REVERSE:
|
||||
if(bConfig.Reverse == 1)
|
||||
bConfig.Reverse = 0;
|
||||
else
|
||||
bConfig.Reverse = 1;
|
||||
bMenuCtrl.m_buttonPressed = 0;
|
||||
if(bConfig.Reverse == 1)
|
||||
PaddleMode = PADDLE_REVERSE;
|
||||
else
|
||||
PaddleMode = PADDLE_NORMAL;
|
||||
bMenuCtrl.Update = 1;
|
||||
break;
|
||||
case M_RATIO:
|
||||
EncoderMinMax(15,30);
|
||||
st = EncoderRead(1);
|
||||
bConfig.Ratio = st;
|
||||
if(bConfig.Ratio > 30) bConfig.Ratio = 30;
|
||||
if(bConfig.Ratio < 15) bConfig.Ratio = 15;
|
||||
bMenuCtrl.Update = 1;
|
||||
break;
|
||||
case M_TON_FREQ:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void ConfigMenue(void)
|
||||
{
|
||||
char line[22];
|
||||
|
||||
lcd_charMode(NORMAL);
|
||||
lcd_gotoxy(0,0);
|
||||
lcd_puts(CLEARLINE);
|
||||
lcd_gotoxy(0,0);
|
||||
sprintf(line,"%s - %i","Einstellungen", bMenuCtrl.CurMenue);
|
||||
lcd_puts(line);
|
||||
lcd_charMode(DOUBLESIZE);
|
||||
lcd_gotoxy(0,3);
|
||||
lcd_puts(CLEARLINE);
|
||||
switch(bMenuCtrl.CurMenue)
|
||||
{
|
||||
case M_TRX1:
|
||||
lcd_gotoxy(0,3);
|
||||
if((bConfig.TRX == 1) || (bConfig.TRX == 0))
|
||||
sprintf(line,"[%s]", "TRX 1");
|
||||
else
|
||||
sprintf(line," %s ", "TRX 1");
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_TRX2:
|
||||
lcd_gotoxy(0,3);
|
||||
if((bConfig.TRX == 2) || (bConfig.TRX == 0))
|
||||
sprintf(line,"[%s]", "TRX 2");
|
||||
else
|
||||
sprintf(line," %s ", "TRX 2");
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_IAMBICA:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.IambicMode == 1)
|
||||
sprintf(line,"[%s]", IambicA);
|
||||
else
|
||||
sprintf(line," %s ", IambicB);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_IAMBICB:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.IambicMode == 2)
|
||||
sprintf(line,"[%s]", IambicB);
|
||||
else
|
||||
sprintf(line," %s ", IambicB);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_REVERSE:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.Reverse == 0)
|
||||
sprintf(line,"%s", ReverseLR);
|
||||
else
|
||||
sprintf(line,"%s", ReverseRL);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_RATIO:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.Ratio == 30)
|
||||
sprintf(line,"%s", "Ratio 3:1");
|
||||
else
|
||||
sprintf(line,"%s %i:1", "Ratio", bConfig.Ratio/10);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_TON_FREQ:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.FrequencySidetone == 650)
|
||||
sprintf(line,"%s", "Ton 650Hz");
|
||||
else
|
||||
sprintf(line,"%s %uHz", "Ton", bConfig.FrequencySidetone);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_TON:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.SidetoneEnabled == 1)
|
||||
sprintf(line,"%s", "Ton an");
|
||||
else
|
||||
sprintf(line,"%s", "Ton aus");
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_WPMBPM:
|
||||
lcd_gotoxy(0,3);
|
||||
if(bConfig.WpMBpM == 0)
|
||||
sprintf(line,"%s", "WpM");
|
||||
else
|
||||
sprintf(line,"%s", "BpM");
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_RISETIME:
|
||||
lcd_gotoxy(0,3);
|
||||
sprintf(line,"%s %ims",RiseTime, bConfig.RiseTime);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
case M_DEBOUNCE:
|
||||
lcd_gotoxy(0,3);
|
||||
sprintf(line,"%s %ims",DebounceTime, bConfig.DebounceTime);
|
||||
lcd_puts(line);
|
||||
break;
|
||||
}
|
||||
bMenuCtrl.Update = 0;
|
||||
lcd_charMode(NORMAL);
|
||||
}
|
||||
void DisplayVersion(void)
|
||||
{
|
||||
lcd_init(LCD_DISP_ON);
|
||||
lcd_charMode(DOUBLESIZE);
|
||||
lcd_home();
|
||||
lcd_puts(PRG);
|
||||
lcd_gotoxy(1,2);
|
||||
lcd_puts(VER);
|
||||
lcd_gotoxy(2,4);
|
||||
lcd_puts(CALL);
|
||||
SideToneOff();
|
||||
DelayMilliSeconds(1000);
|
||||
}
|
||||
|
||||
/** \brief UpdateDisplay
|
||||
*
|
||||
* Aktualisierung der Anzeigen auf dem Display je nach
|
||||
* aktueller Funktion.
|
||||
*
|
||||
* DOUBLESIZE 4x10 character
|
||||
* NORMALSIZE 8x21 character
|
||||
*/
|
||||
void UpdateDisplay(void)
|
||||
{
|
||||
char line[22];
|
||||
if(bMenuCtrl.Update)
|
||||
{
|
||||
if(bMenuCtrl.ClrScr)
|
||||
{
|
||||
lcd_clrscr();
|
||||
bMenuCtrl.ClrScr = 0;
|
||||
bMenuCtrl.Update = 1;
|
||||
}
|
||||
if(!(bMenuCtrl.Config))
|
||||
{
|
||||
lcd_charMode(DOUBLESIZE);
|
||||
lcd_gotoxy(4,3);
|
||||
if(bConfig.WpMBpM)
|
||||
sprintf(line,"%i WpM ",bConfig.WpM);
|
||||
else
|
||||
sprintf(line,"%i BpM ", bConfig.WpM*5);
|
||||
lcd_puts(line);
|
||||
lcd_charMode(NORMAL);
|
||||
lcd_gotoxy(13,0);
|
||||
if(bConfig.IambicMode == 1)
|
||||
sprintf(line,"%s", IambicA);
|
||||
if(bConfig.IambicMode == 2)
|
||||
sprintf(line,"%s", IambicB);
|
||||
lcd_puts(line);
|
||||
lcd_gotoxy(0,0);
|
||||
if(bConfig.TRX == 1)
|
||||
sprintf(line, "%s", Trx1);
|
||||
if(bConfig.TRX == 2)
|
||||
sprintf(line, "%s", Trx2);
|
||||
if(bConfig.TRX == 0)
|
||||
sprintf(line, "%s %s", Trx1, Trx2);
|
||||
lcd_puts(line);
|
||||
}
|
||||
if(bMenuCtrl.Config)
|
||||
{
|
||||
ConfigMenue();
|
||||
}
|
||||
bMenuCtrl.Update = 0;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,26 @@
|
||||
/** @file controls.h
|
||||
* @brief Include Datei für controls.c
|
||||
* @author Tom, DL7BJ
|
||||
*/
|
||||
#ifndef CONTROLS_H_INCLUDED
|
||||
#define CONTROLS_H_INCLUDED
|
||||
|
||||
#include "globals.h"
|
||||
#include "encoder.h"
|
||||
|
||||
// Externe Variablen
|
||||
extern struct Config bConfig;
|
||||
extern struct MenuCtrl bMenuCtrl;
|
||||
extern struct Merker bMerker;
|
||||
extern uint16_t MenuCtrlTimer;
|
||||
extern uint8_t WpM;
|
||||
// Externe Funktionen
|
||||
extern void Boop(void);
|
||||
extern void Beep(void);
|
||||
|
||||
// Prototypes
|
||||
void Drehencoder(void);
|
||||
void ConfigMenue(void);
|
||||
void UpdateDisplay(void);
|
||||
|
||||
#endif
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
* BJ-Keyer
|
||||
*
|
||||
* 2023-07-29 Tom, DL7BJ
|
||||
*
|
||||
*/
|
||||
#ifndef MAIN_H_INCLUDED
|
||||
#define MAIN_H_INCLUDED
|
||||
|
||||
#include "globals.h"
|
||||
#include "encoder.h"
|
||||
#include "functions.h"
|
||||
|
||||
struct Config bConfig;
|
||||
struct MenuCtrl bMenuCtrl;
|
||||
struct Merker bMerker;
|
||||
// Function prototypes
|
||||
void Init(void);
|
||||
void InitTimer(void);
|
||||
|
||||
void CheckDahPaddle(void);
|
||||
void CheckDitPaddle(void);
|
||||
void CheckPaddle(void);
|
||||
void CheckStraightKey(void);
|
||||
void SendDit(uint8_t SendingType);
|
||||
void SendDah(uint8_t SendingType);
|
||||
void SideToneOff(void);
|
||||
void SideToneOn(void);
|
||||
void TXKey(uint8_t State, uint8_t SendingType);
|
||||
void SendChar(uint8_t);
|
||||
void ChangeSpeed(void);
|
||||
void DoMorse(void);
|
||||
|
||||
void SetFrequency(uint16_t f);
|
||||
|
||||
#endif // BJ-KEYER_H_INCLUDED
|
Loading…
Reference in New Issue