📄 flexdrv.h
字号:
/*************************************************************** FlexNet / BayCom Layer 1 Service Interface (C) 7/1994 DK7WJ, DL8MBT Translation by HB9JNX Definitionen und Prototypes f乺 Aufruf von Layer1-Funktionen Definitions and prototypes for calling Layer1 functions 28.08.94 DK7WJ Erste verteilte Version First distributed version 10.09.94 DK7WJ Modebefehl geaendert Changed the mode command Prototypen neu f. Speichermodell MEDIUM New prototypes for the MEDIUM memory model 25.09.94 DK7WJ FDX an Treiber uebergeben FDX now forwarded to the driver 20.02.95 DK7WJ CH_TBY neu CH_TBY added 31.03.95 DK7WJ Device-Versionkennungen Device version identifier 01.03.96 DK7WJ Windows extensions, comments pending :-) 22.04.96 DK7WJ . 25.03.97 HB9JNX IO trapping changes 10.01.00 DK7WJ WIN32 definitions 19.06.00 DK7WJ CH_DEAD included ***************************************************************///#ifndef _FLEXTYPES_DEFINED//#define _FLEXTYPES_DEFINEDtypedef unsigned char byte;typedef signed char i8;typedef signed short i16;typedef unsigned short u16;typedef unsigned long u32;#ifdef _WIN32#define far#define near#endif//#endif#ifdef _WIN32#pragma pack(push, flexdrv)#pragma pack(1)#endif#define MAXFLEN 400 /* Maximale Laenge eines Frames */ /* maximum length of a frame *//* Struct f. Treiberkommunikation bei TX und RX *//* struct for communicating RX and TX packets to the driver */typedef struct { i16 len; /* Laenge des Frames - length of the frame */ byte kanal; /* Kanalnummer - channel number */ byte txdelay; /* RX: Gemessenes TxDelay [*10ms], 0 wenn nicht unterstuetzt TX: Zu sendendes TxDelay */ /* RX: measured transmitter keyup delay (TxDelay) in 10ms units, 0 if not supported TX: transmitter keyup delay (TxDelay) that should be sent */ byte frame[MAXFLEN]; /* L1-Frame (ohne CRC) - L1 frame without CRC */ } L1FRAME;/* Struct f. Kanalstatistik (wird noch erweitert) *//* struct for channel statistics (still being extended) */#ifndef _FLEXAPPLtypedef struct { u32 tx_error; /* Underrun oder anderes Problem - underrun or some other problem */ u32 rx_overrun; /* Wenn Hardware das unterstuetzt - if supported by the hardware */ u32 rx_bufferoverflow; u32 tx_frames; /* Gesamt gesendete Frames - total number of sent frames */ u32 rx_frames; /* Gesamt empfangene Frames - total number of received frames */ u32 io_error; /* Reset von IO-Device - number of resets of the IO device */ u32 reserve[4]; /* f. Erweiterungen, erstmal 0 lassen! - reserved for extensions, leave 0! */ } L1_STATISTICS;#endif#ifdef _WIN32extern HANDLE hInst;#pragma pack(pop, flexdrv)#endif/* Masken f乺 den Mode-Parameter - bitmasks for the mode parameter */#define MODE_d 0x0080#define MODE_r 0x0040#define MODE_t 0x0020#define MODE_z 0x0010#define MODE_p 0x0004 /* needs also MODE_d */#define MODE_c 0x0002#define MODE_off 0x0001 /* Special: Wenn 1, Kanal abgeschaltet */ /* special: if one, the channel is switched off *//* Masken f乺 den L1-Kanalstatus *//* masks for the L1 channel status */#define CH_DEAD 0x01#define CH_RXB 0x40#define CH_PTT 0x20#define CH_DCD 0x10#define CH_FDX 0x08#define CH_TBY 0x04#ifdef _WIN32// Konfiguration. Wenn geaendert, TRUE returnen, dann erfolgt exit() und Re-Init// max_channels: Maximal moegliche Kanalanzahl f. diesen Treiberint config_device(byte max_channels, HWND hParentWindow, byte channel);// Return: Anzahl belegte Kanaele!byte *config_info(byte channel);/* Liefert String der die treiberspezifische Konfiguration beschreibt, z.B. Resourcen-Name Wenn keine treiberspezifische Konfiguration vorhanden (config_device() ist Dummy), Nullpointer liefern *//* Returns a string describing the channel configuration, i.e. the name of hardware resource If config_device() is a dummy, this call must return a null pointer*/int init_device(HKEY kHey);void far l1_exit(HKEY hKey);void set_txdelay(byte channel, byte txdel);byte get_txdelay(byte channel);u16 get_baud(byte channel);u16 get_mode(byte channel);#elseu16 far init_device(int argc, char near *argv[]);/* Treiberinterner Aufruf aus Treiberkopf bei Installation: kann benutzt werden um Command Line Parameter zu parsen Return: 0=OK; sonst Exit mit Returnwert als Exit-Argument ACHTUNG: Wenn Returnwert >0, erfolgt Abbruch, es duerfen dann also keine aktiven oder umgelegten Interrupts verbleiben!*//* This procedure is called from the driver stub at installation time. It may be used to parse the command line Return value: 0=OK; otherwise installation is cancelled and the value returned as exit argument WARNING: If return value >0 the installation is cancelled, active or patched interrupt vectors must not be left!*/void far l1_exit(void);/* Wird bei Verlassen des Programms aufgerufen und kann zum Aufr剈men verwendet werden (Interrupts und Schnittstellen abschalten)*//* Is called when the driver terminates and may be used to clean up everything (switch off interrupts and interfaces)*/#endifu16 far l1_get_ch_cnt(void);/* Aufruf aus Treiberkopf bei Programmstart; muss Anzahl der im Treiber definierten Kanaele liefern*//* called from the driver stub at installation time; should return the number of channels defined by the driver*/byte far l1_ch_active(byte kanal);/* Zurueckliefern, ob Kanal im Prinzip funktionstuechtig ist. Also immer, ausser wenn Dummykanal, >0 liefern!*//* report if the channel could work in principle. Thus always return >0 if not a dummy channel.*/byte far l1_init_kanal(byte kanal, u16 baud, u16 mode);/* Kanalnummer: 0-15 Baud: Baudrate / 100, z.B. 115200 Baud wird als 1152 uebergeben Mode: Kanalmodus, Bitflaggen, derzeit definiert: 0x0080 d Vollduplex 0x0040 r Externer RX-Takt 0x0020 t Externer TX-Takt 0x0010 z NRZ-Kodierung (Anstatt NRZI), nur f. HDLC 0x0002 c Kanal macht immer CRC, nur f. KISS Baycom: Soft-DCD aktivieren 0x0001 - Kanal per Modebefehl deaktiviert Es sind noch weitere Bits definiert, die sind aber im L1-Treiber nicht relevant! Um eventuelle Verklemmungen zu beseitigen, sollte in diesem Modul der Treiber soweit als moeglich (re)initialisiert werden! Return: 1 wenn alles ok; 0 wenn Parameterfehler, dann Anzeige von '---' in der Modeliste Aufruf erfolgt beim Programmstart sowie bei jeder Baud- oder Mode刵derung, ausserdem wenn der Kanal seit 3 Minuten nichts mehr empfangen hat.*//* kanal: channel number (0-15) baud: the baud rate / 100, for example 115200 baud is specified as baud = 1152 mode: the channel mode, a bit field, currently the following bits are defined: 0x0080 d Full duplex 0x0040 r External RX clock 0x0020 t External TX clock 0x0010 z NRZ coding (instead of NRZI) (only for HDLC) 0x0002 c KISS: driver forces checksum Baycom: activate software DCD 0x0001 - channel inactivated There are some additional bits defined which are not relevant to the L1 driver. To recover from lockups, this function should (re)initialize as much of the driver and the hardware as possible. Return value: 1 if everything is ok; 0 if a parameter error; '---' is then displayed in the ports list This procedure is called at program start, at every baud rate or mode change, or if the driver has not received anything for 3 minutes.*/L1FRAME far * far l1_rx_frame(void);/* Wird zyklisch aufgerufen Return: *Frame oder 0 wenn nichts empfangen Der Frame mu
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -