summaryrefslogtreecommitdiff
path: root/sigrokdecode.h
blob: c1ef9ffbb0ebd27baab250b3400e858830bb3da3 (plain)
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
/*
 * This file is part of the sigrok project.
 *
 * Copyright (C) 2010 Uwe Hermann <uwe@hermann-uwe.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 */

#ifndef SIGROKDECODE_SIGROKDECODE_H
#define SIGROKDECODE_SIGROKDECODE_H

#include <Python.h> /* First, so we avoid a _POSIX_C_SOURCE warning. */
#include <stdint.h>
#include <glib.h>

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Status/error codes returned by libsigrokdecode functions.
 *
 * All possible return codes of libsigrokdecode functions must be listed here.
 * Functions should never return hardcoded numbers as status, but rather
 * use these #defines instead. All error codes are negative numbers.
 *
 * The error codes are globally unique in libsigrokdecode, i.e. if one of the
 * libsigrokdecode functions returns a "malloc error" it must be exactly the
 * same return value as used by all other functions to indicate "malloc error".
 * There must be no functions which indicate two different errors via the
 * same return code.
 *
 * Also, for compatibility reasons, no defined return codes are ever removed
 * or reused for different #defines later. You can only add new #defines and
 * return codes, but never remove or redefine existing ones.
 */
#define SRD_OK			 0 /**< No error */
#define SRD_ERR			-1 /**< Generic/unspecified error */
#define SRD_ERR_MALLOC		-2 /**< Malloc/calloc/realloc error */
#define SRD_ERR_ARGS		-3 /**< Function argument error */
#define SRD_ERR_PYTHON		-4 /**< Python C API error */
#define SRD_ERR_DECODERS_DIR	-5 /**< Protocol decoder path invalid */

/* TODO: Documentation. */
struct srd_decoder {
	/** The decoder ID. Must be non-NULL and unique for all decoders. */
	char *id;

	/** The (short) decoder name. */
	char *name;

	/** The (long) decoder name. May be NULL. */
	char *longname;

	/** A (short, one-line) description of the decoder. */
	char *desc;

	/** A (long, multi-line) description of the decoder. May be NULL. */
	char *longdesc;

	/** The author of the decoder. May be NULL. */
	char *author;

	/** An email address of the decoder's author. May be NULL. */
	char *email;

	/** The license of the decoder. Valid values: "gplv2+", "gplv3+". */
	char *license;

	/** TODO */
	char *func;

	/** TODO */
	GSList *inputformats;

	/** TODO */
	GSList *outputformats;

	/** TODO */
	PyObject *py_mod;

	/** Python object that performs the decoding */
	PyObject *py_decobj;
};

struct srd_decoder_instance {
	struct srd_decoder *decoder;
	PyObject *py_instance;
	GSList *pd_output;
};

int srd_init(void);
int srd_exit(void);
int set_modulepath(void);
struct srd_decoder_instance *srd_instance_new(const char *id);
int srd_instance_set_probe(struct srd_decoder_instance *di,
				const char *probename, int num);
int srd_instance_start(struct srd_decoder_instance *di,
			const char *driver, int unitsize, uint64_t starttime);
int srd_run_decoder(struct srd_decoder_instance *dec,
		    uint8_t *inbuf, uint64_t inbuflen);

/* decoder.c */
GSList *srd_list_decoders(void);
struct srd_decoder *srd_get_decoder_by_id(const char *id);
int srd_load_decoder(const char *name, struct srd_decoder **dec);
int srd_unload_decoder(struct srd_decoder *dec);
int srd_load_all_decoders(void);
int srd_unload_all_decoders(void);

/* util.c */
int h_str(PyObject *py_res, PyObject *py_mod, const char *key, char **outstr);


#ifdef __cplusplus
}
#endif

#endif