summaryrefslogtreecommitdiff
path: root/boards/dk-tm4c123g/drivers/stripchartwidget.h
blob: 060ba5d7091ad5ff11cff9922cff512c1c49a6f4 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
//*****************************************************************************
//
// stripchartwidget.h - Prototypes for a strip chart widget.
//
// Copyright (c) 2011-2014 Texas Instruments Incorporated.  All rights reserved.
// Software License Agreement
// 
// Texas Instruments (TI) is supplying this software for use solely and
// exclusively on TI's microcontroller products. The software is owned by
// TI and/or its suppliers, and is protected under applicable copyright
// laws. You may not combine this software with "viral" open-source
// software in order to form a larger program.
// 
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
// 
// This is part of revision 2.1.0.12573 of the DK-TM4C123G Firmware Package.
//
//*****************************************************************************

#ifndef __STRIPCHARTWIDGET_H__
#define __STRIPCHARTWIDGET_H__

//*****************************************************************************
//
//! \addtogroup stripchartwidget_api
//! @{
//
//*****************************************************************************

//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif

//*****************************************************************************
//
//! A structure that represents a data series to be shown on the strip chart.
//
//*****************************************************************************
typedef struct _StripChartSeries
{
    //
    //! A pointer to the next series in the chart.
    //
    struct _StripChartSeries *psNextSeries;

    //
    //! A pointer to the brief name of the data set
    //
    char *pcName;

    //
    //! The color of the data series.
    //
    uint32_t ui32Color;

    //
    //! The number of bytes of the data type (1, 2, or 4)
    //
    uint8_t ui8DataTypeSize;

    //
    //! The stride of the data.  This can be used when this data set is
    //! part of a larger set of samples that appear in a large array
    //! interleaved at a regular interval.  Use a value of 1 if the data set
    //! is not interleaved.
    //
    uint8_t ui8Stride;

    //
    //! The number of items in the data set
    //
    uint16_t ui16NumItems;

    //
    //! A pointer to the first data item.
    //
    void *pvData;
}
tStripChartSeries;

//*****************************************************************************
//
//! A structure that represents an axis of the strip chart.
//
//*****************************************************************************
typedef struct _StripChartAxis
{
    //
    //! A brief name for the axis.  Leave null for no name to be shown.
    //
    char *pcName;

    //
    //! Label for the minimum extent of the axis.  Leave null for no label.
    //
    char *pcMinLabel;

    //
    //! Label for the max extent of the axis. Leave null for no label.
    //
    char *pcMaxLabel;

    //
    //! The minimum units value for the axis.
    //
    int32_t i32Min;

    //
    //! The maximum units value for the axis
    //
    int32_t i32Max;

    //
    //! The grid interval for the axis.  Use 0 for no grid.
    //
    int32_t i32GridInterval;
} tStripChartAxis;

//*****************************************************************************
//
//! A structure that represents a strip chart widget.
//
//*****************************************************************************
typedef struct _StripChartWidget
{
    //
    //! The generic widget information.
    //
    tWidget sBase;

    //
    //! The title for the strip chart.  Leave null for no title.
    //
    char *pcTitle;

    //
    //! The font to use for drawing text on the chart.
    //
    const tFont *psFont;

    //
    //! The background color of the chart.
    //
    uint32_t ui32BackgroundColor;

    //
    //! The color for text that is drawn on the chart (titles, etc).
    //
    uint32_t ui32TextColor;

    //
    //! The color of the Y-axis 0-crossing line.
    //
    uint32_t ui32Y0Color;

    //
    //! The color of the grid lines.
    //
    uint32_t ui32GridColor;

    //
    //! The X axis
    //
    tStripChartAxis *psAxisX;

    //
    //! The Y axis
    //
    tStripChartAxis *psAxisY;

    //
    //! A pointer to the first data series for the strip chart.
    //
    tStripChartSeries *psSeries;

    //
    //! A pointer to an off-screen display to be used for rendering the chart.
    //
    const tDisplay *psOffscreenDisplay;

    //
    //! The current X-grid alignment.  This value changes in order to give the
    //! appearance of the grid moving as the strip chart advances.
    //
    int32_t i32GridX;
} tStripChartWidget;

//*****************************************************************************
//
//! Declares an initialized strip chart widget data structure.
//!
//! \param psParent is a pointer to the parent widget.
//! \param psNext is a pointer to the sibling widget.
//! \param psChild is a pointer to the first child widget.
//! \param psDisplay is a pointer to the off-screen display on which to draw.
//! \param i32X is the X coordinate of the upper left corner of the canvas.
//! \param i32Y is the Y coordinate of the upper left corner of the canvas.
//! \param i32Width is the width of the canvas.
//! \param i32Height is the height of the canvas.
//! \param pcTitle is a string for the chart title, NULL for no title.
//! \param psFont is the font used for rendering text on the chart.
//! \param ui32BackgroundColor is the background color for the chart.
//! \param ui32TextColor is the color of text (titles, labels, etc.)
//! \param ui32Y0Color is the color of the Y-axis gridline at Y=0
//! \param ui32GridColor is the color of grid lines.
//! \param psAxisX is a pointer to the axis structure for the X-axis.
//! \param psAxisY is a pointer to the axis structure for the Y-axis.
//! \param psOffscreenDisplay is a buffer for rendering the chart before
//! showing on the physical display.  The dimensions of the off-screen display
//! should match the drawing area of psDisplay.
//!
//! This macro provides an initialized strip chart widget data structure, which
//! can be used to construct the widget tree at compile time in global
//! variables (as opposed to run-time via function calls).  This must be
//! assigned to a variable, such as:
//!
//! \verbatim
//!     tStripChartWidget g_sStripChart = StripChartStruct(...);
//! \endverbatim
//!
//! Or, in an array of variables:
//!
//! \verbatim
//!     tStripChartWidget g_psStripChart[] =
//!     {
//!         StripChartStruct(...),
//!         StripChartStruct(...)
//!     };
//! \endverbatim
//!
//! \return Nothing; this is not a function.
//
//*****************************************************************************
#define StripChartStruct(psParent, psNext, psChild, psDisplay,                \
                         i32X, i32Y, i32Width, i32Height,                     \
                         pcTitle, psFont, ui32BackgroundColor, ui32TextColor, \
                         ui32Y0Color, ui32GridColor, psAxisX, psAxisY,        \
                         psOffscreenDisplay)                                  \
        {                                                                     \
            {                                                                 \
                sizeof(tStripChartWidget),                                    \
                (tWidget *)(psParent),                                        \
                (tWidget *)(psNext),                                          \
                (tWidget *)(psChild),                                         \
                psDisplay,                                                    \
                {                                                             \
                    i32X,                                                     \
                    i32Y,                                                     \
                    (i32X) + (i32Width) - 1,                                  \
                    (i32Y) + (i32Height) - 1                                  \
                },                                                            \
                StripChartMsgProc                                             \
            },                                                                \
            pcTitle, psFont, ui32BackgroundColor, ui32TextColor, ui32Y0Color, \
            ui32GridColor, psAxisX, psAxisY, 0, psOffscreenDisplay, 0         \
        }

//*****************************************************************************
//
//! Declares an initialized variable containing a strip chart widget data
//! structure.
//!
//! \param sName is the name of the variable to be declared.
//! \param psParent is a pointer to the parent widget.
//! \param psNext is a pointer to the sibling widget.
//! \param psChild is a pointer to the first child widget.
//! \param psDisplay is a pointer to the off-screen display on which to draw.
//! \param i32X is the X coordinate of the upper left corner of the canvas.
//! \param i32Y is the Y coordinate of the upper left corner of the canvas.
//! \param i32Width is the width of the canvas.
//! \param i32Height is the height of the canvas.
//! \param pcTitle is a string for the chart title, NULL for no title.
//! \param psFont is the font used for rendering text on the chart.
//! \param ui32BackgroundColor is the background color for the chart.
//! \param ui32TextColor is the color of text (titles, labels, etc.)
//! \param ui32Y0Color is the color of the Y-axis gridline at Y=0
//! \param ui32GridColor is the color of grid lines.
//! \param psAxisX is a pointer to the axis structure for the X-axis.
//! \param psAxisY is a pointer to the axis structure for the Y-axis.
//! \param psOffscreenDisplay is a buffer for rendering the chart before
//! showing on the physical display.  The dimensions of the off-screen display
//! should match the drawing area of psDisplay.
//!
//! This macro declares a variable containing an initialized strip chart widget
//! data structure, which can be used to construct the widget tree at compile
//! time in global variables (as opposed to run-time via function calls).
//!
//! \return Nothing; this is not a function.
//
//*****************************************************************************
#define StripChart(sName, psParent, psNext, psChild, psDisplay,               \
                   i32X, i32Y, i32Width, i32Height,                           \
                   pcTitle, psFont, ui32BackgroundColor, ui32TextColor,       \
                   ui32Y0Color, ui32GridColor, psAxisX, psAxisY,              \
                   psOffscreenDisplay)                                        \
        tStripChartWidget sName =                                             \
            StripChartStruct(psParent, psNext, psChild, psDisplay,            \
                             i32X, i32Y, i32Width,  i32Height,                \
                             pcTitle, psFont, ui32BackgroundColor,            \
                             ui32TextColor, ui32Y0Color, ui32GridColor,       \
                             psAxisX, psAxisY, psOffscreenDisplay)

//*****************************************************************************
//
//! Sets the X-axis of the strip chart.
//!
//! \param psStripChartWidget is a pointer to the strip chart widget to modify.
//! \param psAxis is the new X-axis structure for the strip chart.
//!
//! This function sets the X-axis for the widget.
//!
//! \return None.
//
//*****************************************************************************
#define StripChartXAxisSet(psStripChartWidget, psAxis)                        \
    do                                                                        \
    {                                                                         \
        (psStripChartWidget)->psAxisX = psAxis;                               \
    } while(0)

//*****************************************************************************
//
//! Sets the Y-axis of the strip chart.
//!
//! \param psStripChartWidget is a pointer to the strip chart widget to modify.
//! \param psAxis is the new Y-axis structure for the strip chart.
//!
//! This function sets the Y-axis for the widget.
//!
//! \return None.
//
//*****************************************************************************
#define StripChartYAxisSet(psStripChartWidget, psAxis)                        \
    do                                                                        \
    {                                                                         \
        (psStripChartWidget)->psAxisY = psAxis;                               \
    } while(0)

//*****************************************************************************
//
// Prototypes for the strip chart widget APIs.
//
//*****************************************************************************
extern int32_t StripChartMsgProc(tWidget *psWidget, uint32_t ui32Msg,
                                 uint32_t ui32Param1, uint32_t ui32Param2);
extern void StripChartInit(tStripChartWidget *psWidget,
                           const tDisplay *psDisplay,
                           int32_t i32X, int32_t i32Y,
                           int32_t i32Width, int32_t i32Height,
                           char * pcTitle, tFont *psFont,
                           uint32_t ui32BackgroundColor,
                           uint32_t ui32TextColor,
                           uint32_t ui32Y0Color,
                           uint32_t ui32GridColor,
                           tStripChartAxis *psAxisX, tStripChartAxis *psAxisY,
                           tDisplay *psOffscreenDisplay);
extern void StripChartSeriesAdd(tStripChartWidget *psWidget,
                                tStripChartSeries *psSeries);
extern void StripChartSeriesRemove(tStripChartWidget *psWidget,
                                   tStripChartSeries *psSeries);
extern void StripChartAdvance(tStripChartWidget *psChartWidget,
                              int32_t i32Count);

//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif

//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************

#endif // __STRIPCHARTWIDGET_H__