Helauuuuuuuu erstmal xD
Gibts eigentlich Programmierer unter uns?! C++ zB. ?!
Um schreiben oder kommentieren zu können, benötigen Sie ein Benutzerkonto.
Sie haben schon ein Benutzerkonto? Melden Sie sich hier an.
Jetzt anmeldenHier können Sie ein neues Benutzerkonto erstellen.
Neues Benutzerkonto erstellenHelauuuuuuuu erstmal xD
Gibts eigentlich Programmierer unter uns?! C++ zB. ?!
programmiert haben wahrscheinlich schon einige. aber es kommt ja auf das Anliegen an.
wirf ein paar Infos in die runde ... in der passenden Stimmung bist du ja schon
Ich muss in einem existierendem Open Source Project nen existierenden Timer auslesen, den Wert in eine Variable packen und mittels 2ten Timer ne Zeit messen.
Wenn Zeit X >3Sec ist dann muss der Timer 1 resettet werden ansonsten mit der verbleibenden Zeit neu gefüttert und gestartet werden
also von der Logik her klingt das jetzt nicht sonderlich kompliziert.
der Teufel wird im Detail bzw. in den Rahmenbedingungen stecken.
hast du mehr Details zum "existierende Timer"?
also wie dieser initialisiert/gestartet wird.
Na klaro.....
da wäre es aber am einfachsten wenn man das via Skype etc machen kann, weil die Zusammenhänge hier mal eben zu erklären wäre schwierig, das wäre via Skype 1000 mal einfacher, vor allem kannst Dich dann viel besser reindenken...
oder, da es OpenSource ist, kannst auch einfach 'nen Link, Datei nennen.
dann brauchst nicht jedem neu erklären und jemand anders könnte auch mal drauf schauen.
und wenn dann noch Fragen sind, hier kurz klären und siehe Zeile 2
https://github.com/sm0svx/svxlink
https://github.com/sm0svx/svxlink…peaterLogic.cpp Zeile 166, 483....
https://github.com/sm0svx/svxlink…Application.cpp
https://github.com/sm0svx/svxlink…/AsyncTimer.cpp
if (repeater_is_up)
{
if (is_open)
{
setIdle(false);
}
idle ist der up_timer
wenn ich mich nicht irre, könnte das mit dem "ansonsten mit der verbleibenden Zeit neu gefüttert und gestartet werden" nicht so klappen wie gewünscht.
weil die Zeitspanne des Timers dann dauerhaft verändert wird. das Timeout könnte dann zB. nur 1s anstatt den gedachten 30s lang sein.
Moin,
der Timer wird per Default mit 30 Sekunden gefüttert wenn in der config nicht was anderes steht..
siehe :
int idle_timeout;
if (cfg().getValue(name(), "IDLE_TIMEOUT", idle_timeout))
{
up_timer.setTimeout(idle_timeout * 1000);
}
Und time.h gibt irgendwo die Funktion her, das die restzeit des Timers ausgelesen werden kann, also könnte man ihn auslesen bevor man ihn killt und dann mit der restzeit füttern wenn man ihn neu startet.
Oder meinste das geht nich ?!
gehen tut's schon. ich kann eben nicht überprüfen ob das nicht blöde Nebeneffekte liefert. deswegen auch "nicht wie gewünscht".
könnte schon mal so aussehen:
int timer1_value = up_timer.timeout();
up_timer.setEnable(false);
// TODO Timer2
int timer2_time = 3;
int timer2_value = ???;
// TODO Timer2
if(timer2_value > timer2_time){
up_timer.reset();
}
else {
up_timer.setTimeout(timer1_value);
}
Alles anzeigen
fehlt noch der zweite Timer. soll das als Stoppuhr für zwischendurch ausgeführte Aufgaben dienen oder auf irgend etwas warten?
Hi Alex,
der "eine" Timer existiert ja schon, das ist der up timer...
von dem müsste man wenn is_open geschieht erst die restzeit auslesen dann idle auf false setzen die dauer von is_open auswerten und wenn >x sekunden is_open resetten oder halt mit der Restzeit füttern...
Sag ja das hier so zu schreiben ist denk ich mal etwas umständlich...
is_open ist aber nur ein wahr oder falsch Wert, kein Timer und daher keine Dauer auswertbar.
Deswegen der Timer um die Dauer von is_open auszuwerten...
is_open ist der Squelch der vom Empfänger geöffnet ist...
Wenn also jemand über das Relais spricht ist für die Dauer seines Sprechdurchgangs is_open auf true...
ja und deswegen kann man is_open nicht resetten, sondern auf true oder false setzen.
das was man daran an Zeitdauer auswerten könnte, wird mit bei RepeaterLogic::squelchOpen(bool is_open) ausgerechnet.
bei is_open==true wird die Uhrzeit gespeichert: sql_up_timestamp
bei repeater_is_up==true und is_open==false, wird wieder die Uhrzeit gespeichert: now
eine Differenz ausgerechnet: now - sql_up_timestamp = diff_tv
dann noch auf Millisekunden umgerechnet: diff_ms
diff_ms wäre dann wohl die Dauer die man auswerten könnte oder das gleiche im Block bei setIdle(false); durchrechnen.
ja genau is_open is nur true oder false...
Wie gesagt so gut kann ich nicht programmieren, als das ich das mit dem timer und auswerten hinbekommen könnte
naja das Auswerten ist nicht das Problem, eher die vorgesehene Logik und dahinterstehende Protokoll nicht mit einem kleinen reset über den Haufen zu werfen.
ich schau mir das heute noch mal an.
Ja das stimmt, das ganze ist recht komplex...
Danke
kann es evtl. direkt über die Konfiguration mit höherem OPEN_ON_SQL bzw. SQL_FLAP_SUP_MIN_TIME gelöst werden?
ne open on sql is dafür da das das relais einfach durch Squelch öffnen geöffnet werden kann, dann muss eine bestimmte Zeit der Squelch offen sein, dann aktiviert sich das Relais.
Bei kürzeren Squelch öffnungen bleibt es deaktiviert.
Man kann sich natürlich diesen Timer bzw diese Messmethode zu nutze machen.
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!