14 noiembrie 2021

CW.DLL

Am scris acest DLL de proba. A fost ca o provocare pentru mine. Un experiment. Mi s-a parut interesant. La baza DLL se afla un program de transmis telegrafie pe care l-am scris in urma cu 15-20 de ani. Am mai adaugat comenzi neceasare pentru listarea si utilizarea placilor de sunet si porturilor seriale. Cu exceptia algoritmului de transmitere a semnalelor telegrafice, toate celelalte proceduri si functii le-am gasit pe internet. Nu am facut decit sa le copiez, sa le modific si sa le folosesc intocmai scopului meu. 

DLL a fost scris in Delphi 10.2 Tokyo Starter si tot in Delphi l-am testat. Mi s-a parut in regula. Codul sursa comentat este disponibil, nu este niciun secret. 

CW.DLL 
Proceduri si functii exportate:

[ DLL ]
procedure DllInitialise 
- creaza si initializeaza componentele din DLL.
procedure DllFree 
- elibereaza memoria de componentele create in DLL.

[ Placa de sunet ]
function GetSoundCards: WideString
- afiseaza lista placilor de sunet disponibile in calculator.
procedure SetSoundCard (number: cardinal)
- seteaza spre utilizare o placa de sunet din lista GetSoundCards.

[ CW ]
procedure SetTone (frequency: integer) unde frequency = 300 ... 3000
- seteaza frecventa in Hz al tonului audio telegrafic.
procedure SetAmplitude (level: integer) unde level = 0 ... 10000
- seteaza nivelul tonului audio telegrafic.
procedure SetMute (onOff: boolean)
- activeaza / dezactiveaza tonului audio telegrafic.
procedure SetSpeed (speed: integer) unde speed = 12 ... 40
- seteaza viteza de transmitere a mesajului in WPM.
procedure SetText (text: WideString )
- seteaza textul ce urmeaza a fi transmis in telegrafie.
function IsBusy: boolean
- semnalizeaza daca se transmite un mesaj in telegrafie.
procedure SendCW
- comanda pornirea transmisiei mesajului in telegrafie.
procedure StopCW
- comanda oprirea transmisiei mesajului in telegrafie.

[ Portul serial]
function GetSerialPorts: WideString
- afiseaza lista porturilor seriale disponibile in calculator.
function SetSerialPort (name: WideString): boolean
- seteaza portul serial ce urmeaza a fi folosit pentru comanda PTT si manipulare.

[ Manipulare ]
procedure EnablePTT (enable: boolean)
- activeaza / dezactiveaza comanda PTT pe durata transmiterii mesajului in telegrafie.
procedure SetPTTPin (pin: WideString)
- seteaza pinul ce urmeaza a fi folosit pentru comanda PTT. Acesta pot fi: RTS sau DTR.
procedure EnableKey (enable: boolean)
- activeaza / dezactiveaza manipularea transceiverului in telegrafie.
procedure SetKeyPin (pin: WideString)
- seteaza pinul ce urmeaza a fi folosit pentru manipularea transceiverului. Acesta pot fi: RTS sau DTR.

          Transmiterea unui text in telegrafie se poate realiza in trei pasi. Primul pas se poate face la deschiderea programului sau premergator comenzii de transmitere a textului. Este obligatoriu. Fara initializare DLL nu va functiona. Pasul 2 se utilizeaza doar cind se transmite textul. Comenzile optionale pot fi transmise catre DLL doar o singura data sau pe masura ce sint modificate. Ultimul pas se poate face la inchiderea programului sau imediat dupa transmiterea textului. Nu toti parametrii pot fi schimbati pe timpul transmisiei, o parte din acestia sint setati doar la inceputul acesteia.

1.     
DllInitialise 

2.    
SetSoundCard (0) - optional
SetTone (1000) - optional
SetAmplitude (2000) - optional
SetSpeed (24) - optional
EnablePTT (True) - optional
SetPttPin ('RTS') - optional
EnableKey (True) - optional
SetKeyPin ('DTR') - optional
SetText ('CQ CQ CQ')
SendCW

3.
DllFree

          A fost un experiment interesant. A durat cca trei saptamini. Cind m-am apucat sa scriu, nu stiam prea multe despre DLL, crearea de componente, mesagerie, handle. Acum experienta mea s-a imbogatit. Am avut de cistigat. Ce mai urmeaza?

Descarca: codul sursa

Update: deoarece pastrez fisierele pe Google Drive sint nevoit sa afisez doar codul sursa fara executabile. Devine tot mai greu partajarea fisierelor executabile, daca nu chiar imposibila.

Pentru realizarea proiectului m-am inspirat din:
---  73's   YO7FWS  ---