File: zserial.h

package info (click to toggle)
libzia 4.36-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,320 kB
  • sloc: ansic: 24,172; sh: 4,408; makefile: 211
file content (134 lines) | stat: -rw-r--r-- 3,519 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
    zserial - portable serial port api
    Copyright (C) 2011-2020 Ladislav Vaiz <ok1zia@nagano.cz>

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    version 2 as published by the Free Software Foundation.

*/

#ifndef __ZSERIAL_H
#define __ZSERIAL_H

#include <libziaint.h>
#include <glib.h>

#ifdef Z_HAVE_WINSOCK2_H
#include <winsock2.h>
#endif
#ifdef Z_HAVE_WINDOWS_H
#include <windows.h>
#endif

#include <zthread.h>

enum zserial_type{
    ZSERTYPE_TTY,
    ZSERTYPE_FTDI,
    ZSERTYPE_WIN32,
    ZSERTYPE_TCP,
	ZSERTYPE_PROC_WIN32,
    ZSERTYPE_PROC_PTY,
    ZSERTYPE_PROC_PIPE
};

struct zserial_port{
    char *filename;
    char *desc;
};

struct zserial{
    enum zserial_type type;
    GString *errorstr;
    char *id;
    int baudrate;
    int bits;
    char parity;
    int stopbits;
#ifdef Z_HAVE_TERMIOS_H
    int fd;
    int locked;
#endif
#ifdef Z_HAVE_LIBFTDI
    int vid;
    struct ftdi_context *ftdi;
    char *serial;
#endif
#ifdef Z_MSC_MINGW
    HANDLE handle;
	HANDLE prochandle, procstdin, procstdout;
#endif
#if defined(Z_HAVE_TERMIOS_H) || defined(WIN32) || defined(Z_ANDROID)
    char *filename;
#endif
	GThread *thread;
	int thread_break;
	int pipefds[2];
	char *cmd, *arg;
    int pid;
#ifdef Z_HAVE_PTY_H
    int master;
#endif
    int read_fd;   // stdout and stderr of child
    int write_fd;  // stdin of child

    char *hostname;
    int port;
    int sock;

    int (*zs_open)(struct zserial *zser);
    int (*zs_read)(struct zserial *zser, void *data, int len, int timeout_ms);
    int (*zs_write)(struct zserial *zser, void *data, int len);
    int (*zs_close)(struct zserial *zser);
    int (*zs_dtr)(struct zserial *zser, int on);
    int (*zs_rts)(struct zserial *zser, int on);
    int (*zs_detect)(struct zserial *zser);

	int nolocks;
    GPtrArray *ports; // detected zserial_ports
	MUTEX_DEFINE(close3);

};

struct zserial *zserial_init(void);


struct zserial *zserial_init_tty(const char *filename);
struct zserial *zserial_init_ftdi(const int vid, const int pid, char *serial);
struct zserial *zserial_init_win32(const char *filename);
struct zserial *zserial_init_tcp(const char *hostname, const int tcpport);
struct zserial *zserial_init_proc_win32(const char *cmd, const char *arg);
struct zserial *zserial_init_proc_pty(const char *cmd, const char *arg);
struct zserial *zserial_init_proc_pipe(const char *cmd, const char *arg);

struct zserial *zserial_init_serial(const char *device);
struct zserial *zserial_init_process(const char *cmd, const char *arg);

void zserial_set_line(struct zserial *zser, int baudrate, int bits, char parity, int stopbits);
int zserial_open(struct zserial *zser);

int zserial_read(struct zserial *zser, void *data, int len, int timeout_ms);
int zserial_write(struct zserial *zser, void *data, int len);

int zserial_close(struct zserial *zser);
void zserial_free(struct zserial *zser);
const char *zserial_errorstr(struct zserial *zser);
void zserial_clear_errorstr(struct zserial *zser);

/* nastavi DTR (DB9 = pin 4) */
int zserial_dtr(struct zserial *zser, int on);

/* nastavi RTS (DB9 = pin 7) */
int zserial_rts(struct zserial *zser, int on);

int zserial_fd(struct zserial *zser);
const char *zserial_id(struct zserial *zser);

int zserial_prot(struct zserial *zser, char saddr, char fce, char *data, int *len, int timeout);

void zserial_nolocks(struct zserial *zser, int nolocks);

int zserial_detect(struct zserial *zser);

#endif