libsigrok
0.3.0
sigrok hardware access and backend library
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
output
output.c
Go to the documentation of this file.
1
/*
2
* This file is part of the libsigrok project.
3
*
4
* Copyright (C) 2010-2012 Bert Vermeulen <bert@biot.com>
5
*
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#include "
libsigrok.h
"
21
#include "libsigrok-internal.h"
22
23
/**
24
* @file
25
*
26
* Output file/data format handling.
27
*/
28
29
/**
30
* @defgroup grp_output Output formats
31
*
32
* Output file/data format handling.
33
*
34
* libsigrok supports several output (file) formats, e.g. binary, VCD,
35
* gnuplot, and so on. It provides an output API that frontends can use.
36
* New output formats can be added/implemented in libsigrok without having
37
* to change the frontends at all.
38
*
39
* All output modules are fed data in a stream. Devices that can stream data
40
* into libsigrok, instead of storing and then transferring the whole buffer,
41
* can thus generate output live.
42
*
43
* Output modules generate a newly allocated GString. The caller is then
44
* expected to free this with g_string_free() when finished with it.
45
*
46
* @{
47
*/
48
49
/** @cond PRIVATE */
50
extern
SR_PRIV
struct
sr_output_format
output_bits;
51
extern
SR_PRIV
struct
sr_output_format
output_hex;
52
extern
SR_PRIV
struct
sr_output_format
output_ascii;
53
extern
SR_PRIV
struct
sr_output_format
output_binary;
54
extern
SR_PRIV
struct
sr_output_format
output_vcd;
55
extern
SR_PRIV
struct
sr_output_format
output_ols;
56
extern
SR_PRIV
struct
sr_output_format
output_gnuplot;
57
extern
SR_PRIV
struct
sr_output_format
output_chronovu_la8;
58
extern
SR_PRIV
struct
sr_output_format
output_csv;
59
extern
SR_PRIV
struct
sr_output_format
output_analog;
60
/* @endcond */
61
62
static
struct
sr_output_format
*output_module_list[] = {
63
&output_ascii,
64
&output_binary,
65
&output_bits,
66
&output_csv,
67
&output_gnuplot,
68
&output_hex,
69
&output_ols,
70
&output_vcd,
71
&output_chronovu_la8,
72
&output_analog,
73
NULL,
74
};
75
76
/** @since 0.1.0 */
77
SR_API
struct
sr_output_format
**
sr_output_list
(
void
)
78
{
79
return
output_module_list;
80
}
81
82
/** @since 0.3.0 */
83
SR_API
struct
sr_output
*
sr_output_new
(
struct
sr_output_format
*of,
84
GHashTable *
params
,
const
struct
sr_dev_inst
*
sdi
)
85
{
86
struct
sr_output
*o;
87
88
o = g_malloc(
sizeof
(
struct
sr_output
));
89
o->
format
= of;
90
o->
sdi
=
sdi
;
91
o->
params
=
params
;
92
if
(o->
format
->
init
&& o->
format
->
init
(o) !=
SR_OK
) {
93
g_free(o);
94
o = NULL;
95
}
96
97
return
o;
98
}
99
100
/** @since 0.3.0 */
101
SR_API
int
sr_output_send
(
struct
sr_output
*o,
102
const
struct
sr_datafeed_packet
*packet, GString **out)
103
{
104
return
o->
format
->
receive
(o, packet, out);
105
}
106
107
/** @since 0.3.0 */
108
SR_API
int
sr_output_free
(
struct
sr_output
*o)
109
{
110
int
ret;
111
112
ret =
SR_OK
;
113
if
(o->
format
->
cleanup
)
114
ret = o->
format
->
cleanup
(o);
115
g_free(o);
116
117
return
ret;
118
}
119
120
/** @} */
Generated on Sat Sep 20 2014 08:10:15 for libsigrok by
1.8.3.1