Subversion Repositories tpanel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
196 andreas 1
/*
2
 * Copyright (C) 2022 by Andreas Theofilu <andreas@theosys.at>
3
 *
4
 * This program is free software; you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation; either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program; if not, write to the Free Software Foundation,
16
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
17
 */
18
 
19
#include "tsystem.h"
20
#include "tconfig.h"
21
#include "terror.h"
22
 
23
using std::string;
24
using std::to_string;
25
 
26
#define IDX_INVALID     -1
27
 
28
typedef enum SYSBTTYPE_t
29
{
30
    BT_UNKNOWN,
31
    BT_CHECKBOX,
32
    BT_BUTTON,
33
    BT_COMBOBOX,
34
    BT_TEXT,
35
    BT_SLIDER,
36
    BT_FUNCTION
37
}SYSBTTYPE_t;
38
 
39
typedef struct SYSBUTTONS_t
40
{
41
    int channel{0};                 // Channel number
42
    BUTTONTYPE type{NONE};          // Type of button
43
    int states{0};                  // Maximum number of states
44
    int ll{0};                      // Level low range
45
    int lh{0};                      // Level high range
46
    SYSBTTYPE_t button{BT_UNKNOWN}; // The technical type of the button (only internal use!)
47
}SYSBUTTONS_t;
48
 
49
SYSBUTTONS_t sysButtons[] = {
50
    {    6, BARGRAPH,              2, 0, 100, BT_SLIDER },      // System gain
51
    {    8, MULTISTATE_BARGRAPH,  12, 0,  11, BT_FUNCTION },    // Connection status
52
    {    9, BARGRAPH,              2, 0, 100, BT_SLIDER },      // System volume
53
    {   17, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Button sounds on/off
54
    {   25, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Controller: TP4 file name
55
    {   73, GENERAL,               2, 0,   0, BT_BUTTON },      // Enter setup page
56
    {   80, GENERAL,               2, 0,   0, BT_BUTTON },      // Shutdown program
57
    {   81, MULTISTATE_BARGRAPH,   6, 1,   6, BT_FUNCTION },    // Network signal stength
58
    {  122, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Controller: Controller: IP Address of server or domain name
59
    {  123, TEXT_INPUT,            2, 9,   0, BT_TEXT },        // Controller: Channel number of panel
60
    {  124, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Controller: The network port number (1319)
61
    {  128, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Controller: The type name of the panel
62
    {  141, GENERAL,               2, 0,   0, BT_FUNCTION },    // Standard time
63
    {  142, GENERAL,               2, 0,   0, BT_FUNCTION },    // Time AM/PM
206 andreas 64
    {  143, GENERAL,               2, 0,   0, BT_FUNCTION },    // 24 hour time
196 andreas 65
    {  144, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Network port of NetLinx
66
    {  151, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date weekday
67
    {  152, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date mm/dd
68
    {  153, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date dd/mm
69
    {  154, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date mm/dd/yyyy
70
    {  155, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date dd/mm/yyyy
71
    {  156, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date month dd, yyyy
72
    {  157, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date dd month, yyyy
73
    {  158, GENERAL,               2, 0,   0, BT_FUNCTION },    // Date yyyy-mm-dd
74
    {  159, GENERAL,               2, 0,   0, BT_BUTTON },      // Sound: Play test sound
75
    {  171, GENERAL,               2, 0,   0, BT_FUNCTION },    // Sytem volume up
76
    {  172, GENERAL,               2, 0,   0, BT_FUNCTION },    // Sytem volume down
77
    {  173, GENERAL,               2, 0,   0, BT_FUNCTION },    // Sytem mute toggle
78
    {  199, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Technical name of panel (from the settings)
79
    {  234, GENERAL,               2, 0,   0, BT_FUNCTION },    // Battery charging/not charging
80
    {  242, BARGRAPH,              2, 0, 100, BT_SLIDER },      // Battery level
81
    {  404, GENERAL,               2, 0,   0, BT_TEXT },        // Sound: Single beep
82
    {  405, GENERAL,               2, 0,   0, BT_TEXT },        // Sound: Double beep
83
    {  412, GENERAL,               2, 0,   0, BT_BUTTON },      // Button OK: Save changes of system dialogs
84
    {  413, GENERAL,               2, 0,   0, BT_BUTTON },      // Button Cancel: Cancel changes of system pages
85
    {  416, GENERAL,               2, 0,   0, BT_CHECKBOX },    // SIP: Enabled
86
    {  418, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // SIP: Proxy
87
    {  419, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // SIP: Network port
88
    {  420, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // SIP: STUN
89
    {  421, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // SIP: Domain
90
    {  422, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // SIP: User
91
    {  423, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // SIP: Password
92
    { 1143, GENERAL,               2, 0,   0, BT_TEXT },        // Sound: File name of system sound WAV
93
    { 2000, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Info
94
    { 2001, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Warning
95
    { 2002, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Error
96
    { 2003, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Trace
97
    { 2004, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Debug
98
    { 2005, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Protocol
99
    { 2006, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: all
100
    { 2007, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Profiling
101
    { 2008, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Logging: Long format
102
    { 2009, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Logging: Log file name
103
    { 2010, GENERAL,               2, 0,   0, BT_BUTTON },      // Logging: Button reset
104
    { 2011, GENERAL,               2, 0,   0, BT_BUTTON },      // Logging: Button file open
105
    { 2020, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Controller: FTP user name
106
    { 2021, TEXT_INPUT,            2, 0,   0, BT_TEXT },        // Controller: FTP password
200 andreas 107
    { 2023, LISTBOX,               1, 0,   0, BT_COMBOBOX },    // Controller: Listbox for file names of TP4 surfaces
108
    { 2024, LISTBOX,               1, 0,   0, BT_COMBOBOX },    // Sound: Button sound
109
    { 2025, LISTBOX,               1, 0,   0, BT_COMBOBOX },    // Sound: Single sound
110
    { 2026, LISTBOX,               1, 0,   0, BT_COMBOBOX },    // Sound: Double sound
196 andreas 111
    { 2030, GENERAL,               2, 0,   0, BT_BUTTON },      // Controller: Button for FTP download force
112
    { 2031, GENERAL,               2, 0,   0, BT_CHECKBOX },    // Controller: FTP passive mode (checkbox)
113
    { 2050, GENERAL,               2, 0,   0, BT_BUTTON },      // Sound: Play system sound
114
    { 2051, GENERAL,               2, 0,   0, BT_BUTTON },      // Sound: Play single beep
115
    { 2052, GENERAL,               2, 0,   0, BT_BUTTON },      // Sound: Play double beep
116
    { 2060, GENERAL,               2, 0,   0, BT_CHECKBOX },    // SIP: IPv4
117
    { 2061, GENERAL,               2, 0,   0, BT_CHECKBOX },    // SIP: IPV6
118
    { 2062, GENERAL,               2, 0,   0, BT_CHECKBOX },    // SIP: Use internal phone
119
    { 2070, GENERAL,               2, 0,   0, BT_CHECKBOX },    // View: scale to fit
120
    { 2071, GENERAL,               2, 0,   0, BT_CHECKBOX },    // View: show banner
121
    { 2072, GENERAL,               2, 0,   0, BT_CHECKBOX },    // View: suppress toolbar
122
    { 2073, GENERAL,               2, 0,   0, BT_CHECKBOX },    // View: force toolbar visible
123
    { 2074, GENERAL,               2, 0,   0, BT_CHECKBOX },    // View: lock rotation
124
    {    0, NONE,                  0, 0,   0, BT_UNKNOWN }      // Terminate
125
};
126
 
127
TSystem::TSystem()
128
{
129
    DECL_TRACER("TSystem::TSystem()");
130
}
131
 
132
string TSystem::fillButtonText(int ad, int ch)
133
{
134
    DECL_TRACER("TSystem::fillButtonText(int ad, int ch)");
135
 
136
    int idx = getSystemButtonIndex(ad > 0 ? ad : ch);
137
 
138
    if (idx == IDX_INVALID)
139
        return string();
140
 
141
    if ((sysButtons[idx].type == GENERAL || sysButtons[idx].type == TEXT_INPUT) && sysButtons[idx].button == BT_TEXT)
142
    {
143
        switch(sysButtons[idx].channel)
144
        {
145
            case 25:    return TConfig::getFtpSurface();
146
            case 122:   return TConfig::getController();
147
            case 123:   return to_string(TConfig::getChannel());
148
            case 124:   return to_string(TConfig::getPort());
149
            case 128:   return TConfig::getPanelType();
150
            case 144:   return to_string(TConfig::getPort());
151
            case 199:   return TConfig::getPanelType();
152
            case 404:   return TConfig::getSingleBeepSound();
153
            case 405:   return TConfig::getDoubleBeepSound();
154
            case 418:   return TConfig::getSIPproxy();
155
            case 419:   return to_string(TConfig::getSIPport());
156
            case 420:   return TConfig::getSIPstun();
157
            case 421:   return TConfig::getSIPdomain();
158
            case 422:   return TConfig::getSIPuser();
159
            case 423:   return TConfig::getSIPpassword();
160
            case 1143:  return TConfig::getSystemSound();
161
            case 2009:  return TConfig::getLogFile();
162
            case 2020:  return TConfig::getFtpUser();
163
            case 2021:  return TConfig::getFtpPassword();
164
        }
165
    }
166
 
167
    return string();
168
}
169
 
170
int TSystem::getButtonInstance(int ad, int ch)
171
{
172
    DECL_TRACER("TSystem::getButtonInstance(int ad, int ch)");
173
 
174
    int idx = getSystemButtonIndex(ad > 0 ? ad : ch);
175
 
176
    if (idx == IDX_INVALID)
177
        return idx;
178
 
179
    if (sysButtons[idx].type == GENERAL && sysButtons[idx].button == BT_CHECKBOX)
180
    {
181
        bool s = false;
182
 
183
        switch(sysButtons[idx].channel)
184
        {
185
            case 17:    s = TConfig::getSystemSoundState(); break;
186
            case 416:   s = TConfig::getSIPstatus(); break;
187
            case 2000:  s = (TConfig::getLogLevelBits() & HLOG_INFO); break;
188
            case 2001:  s = (TConfig::getLogLevelBits() & HLOG_WARNING); break;
189
            case 2002:  s = (TConfig::getLogLevelBits() & HLOG_ERROR); break;
190
            case 2003:  s = (TConfig::getLogLevelBits() & HLOG_TRACE); break;
191
            case 2004:  s = (TConfig::getLogLevelBits() & HLOG_DEBUG); break;
192
            case 2005:  s = (TConfig::getLogLevelBits() & HLOG_PROTOCOL) == HLOG_PROTOCOL; break;
193
            case 2006:  s = (TConfig::getLogLevelBits() & HLOG_ALL) == HLOG_ALL; break;
194
            case 2007:  s = TConfig::getProfiling(); break;
195
            case 2008:  s = TConfig::isLongFormat(); break;
196
            case 2031:  s = TConfig::getFtpPassive(); break;
197
            case 2060:  s = TConfig::getSIPnetworkIPv4(); break;
198
            case 2061:  s = TConfig::getSIPnetworkIPv6(); break;
199
            case 2062:  s = TConfig::getSIPiphone(); break;
200
            case 2070:  s = TConfig::getScale(); break;
201
            case 2071:  s = TConfig::showBanner(); break;
202
            case 2072:  s = TConfig::getToolbarSuppress(); break;
203
            case 2073:  s = TConfig::getToolbarForce(); break;
204
            case 2074:  s = TConfig::getRotationFixed(); break;
205
 
206
            default:
207
                return IDX_INVALID;
208
        }
209
 
210
        if (s)
211
            return 1;
212
 
213
        return 0;
214
    }
215
 
216
    return IDX_INVALID;
217
}
218
 
219
bool TSystem::isSystemButton(int channel)
220
{
221
    DECL_TRACER("TSystem::isSystemButton(int channel)");
222
 
223
    int i = getSystemButtonIndex(channel);
224
 
225
    if (i >= 0)
226
        return true;
227
 
228
    return false;
229
}
230
 
231
bool TSystem::isSystemCheckBox(int channel)
232
{
233
    DECL_TRACER("TSystem::isSystemCheckBox(int channel)");
234
 
235
    int i = getSystemButtonIndex(channel);
236
 
237
    if (i >= 0 && sysButtons[i].button == BT_CHECKBOX)
238
        return true;
239
 
240
    return false;
241
}
242
 
243
bool TSystem::isSystemTextLine(int channel)
244
{
245
    DECL_TRACER("TSystem::isSystemTextLine(int channel)");
246
 
247
    int i = getSystemButtonIndex(channel);
248
 
249
    if (i >= 0 && sysButtons[i].button == BT_TEXT)
250
        return true;
251
 
252
    return false;
253
}
254
 
255
bool TSystem::isSystemPushButton(int channel)
256
{
257
    DECL_TRACER("TSystem::isSystemPushButton(int channel)");
258
 
259
    int i = getSystemButtonIndex(channel);
260
 
261
    if (i >= 0 && sysButtons[i].button == BT_BUTTON)
262
        return true;
263
 
264
    return false;
265
}
266
 
267
bool TSystem::isSystemFunction(int channel)
268
{
269
    DECL_TRACER("TSystem::isSystemFunction(int channel)");
270
 
271
    int i = getSystemButtonIndex(channel);
272
 
273
    if (i >= 0 && sysButtons[i].button == BT_FUNCTION)
274
        return true;
275
 
276
    return false;
277
}
278
 
279
bool TSystem::isSystemSlider(int channel)
280
{
281
    DECL_TRACER("TSystem::isSystemSlider(int channel)");
282
 
283
    int i = getSystemButtonIndex(channel);
284
 
285
    if (i >= 0 && sysButtons[i].button == BT_SLIDER)
286
        return true;
287
 
288
    return false;
289
}
290
 
291
bool TSystem::isSystemComboBox(int channel)
292
{
293
    DECL_TRACER("TSystem::isSystemComboBox(int channel)");
294
 
295
    int i = getSystemButtonIndex(channel);
296
 
297
    if (i >= 0 && sysButtons[i].button == BT_COMBOBOX)
298
        return true;
299
 
300
    return false;
301
}
302
 
303
int TSystem::getSystemButtonIndex(int channel)
304
{
305
    DECL_TRACER("TSystem::getSystemButtonIndex(int channel)");
306
 
307
    int i = 0;
308
 
309
    while (sysButtons[i].channel > 0)
310
    {
311
        if (sysButtons[i].channel == channel)
312
            return i;
313
 
314
        i++;
315
    }
316
 
317
    return IDX_INVALID;
318
}