Add intial support for component analyzers

master
Timothy Pearson 9 years ago
parent a2b262276c
commit a1de7e6e37

@ -3,7 +3,7 @@ KDE_CXXFLAGS = $(USE_EXCEPTIONS)
bin_PROGRAMS = ulab_gpibserver
ulab_gpibserver_SOURCES = commanalyzer_functions.cpp gpib_functions.cpp scope_functions.cpp signal_functions.cpp main.cpp gpib_conn.cpp
ulab_gpibserver_SOURCES = commanalyzer_functions.cpp companalyzer_functions.cpp gpib_functions.cpp scope_functions.cpp signal_functions.cpp main.cpp gpib_conn.cpp
ulab_gpibserver_METASOURCES = AUTO
ulab_gpibserver_LDFLAGS = $(all_libraries) $(KDE_RPATH) $(LIB_QT) -lDCOP $(LIB_TDECORE) $(LIB_TDEUI) -ltdefx $(LIB_TDEIO) -ltdetexteditor -ltdeldap -ltdekrbsocket -ltqtrla -lgpib

@ -0,0 +1,423 @@
/*
* Remote Laboratory Instrumentation Server
*
* 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 3 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 Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (c) 2009 - 2015 Timothy Pearson
* Raptor Engineering
* http://www.raptorengineeringinc.com
*/
#include <ctype.h>
#include <ctime>
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <getopt.h>
#include "parameters.h"
#include "gpib_functions.h"
#include "gpib/ib.h"
#include "companalyzer_functions.h"
extern char falpha[1024];
double companalyzer_raw_trace_data[1024];
unsigned long companalyzerTraceLength (const char * companalyzerType) {
if (strcmp("HP4191A", companalyzerType) == 0) {
return 417;
}
else {
return 1;
}
}
int companalyzer_set_date(struct tm * datetime, const char * companalyzerType, int gpibDevice) {
char datebuffer [80];
strftime(datebuffer, 80, "CONF:DATE %m%d%y",datetime);
if (strcmp("HP4191A", companalyzerType) == 0) {
printf("[INFO] Setting date on component analyzer\n\r");
if (strcmp("HP4191A", companalyzerType) == 0) {
printf("[INFO] Instrument does not contain a clock, ignoring...\n\r");
return 0;
}
else {
return 1;
}
}
else {
return 1;
}
}
int companalyzer_set_time(struct tm * datetime, const char * companalyzerType, int gpibDevice) {
char timebuffer [80];
strftime(timebuffer, 80, "CONF:TIME +%H.%M",datetime); // FIXME wrong format
if (strcmp("HP4191A", companalyzerType) == 0) {
printf("[INFO] Setting time on component analyzer\n\r");
if (strcmp("HP4191A", companalyzerType) == 0) {
printf("[INFO] Instrument does not contain a clock, ignoring...\n\r");
// Since this function is used to detect instrument presence, reset the instrument displays here...
snprintf(timebuffer, 80, "A1B1");
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", timebuffer);
#endif
if (gpib_write(gpibDevice, timebuffer) == 0) {
return 0;
}
else {
return 2;
}
return 0;
}
else {
return 1;
}
}
else {
return 1;
}
}
int companalyzer_lock_local_controls (const char * companalyzerType, int gpibDevice) {
if (strcmp("HP4191A", companalyzerType) == 0) {
printf("[INFO] Locking component analyzer local controls\n\r");
if (strcmp("HP4191A", companalyzerType) == 0) {
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Setting REN\n\r");
#endif
if (ibsre(gpibDevice, 1) == 0) {
return 0;
}
else {
return 2;
}
}
else {
return 1;
}
}
else {
return 1;
}
}
int companalyzer_set_measurement_parameters(companalyzer_measurement::companalyzer_measurement_t parameter_a, companalyzer_measurement::companalyzer_measurement_t parameter_b, const char * companalyzerType, int gpibDevice, char * extendedError) {
char first_parameter[1024];
if ((strcmp("HP4191A", companalyzerType) == 0)) {
printf("[INFO] Setting component analyzer measurement parameters to types %d:%d\n\r", parameter_a, parameter_b);
if (strcmp("HP4191A", companalyzerType) == 0) {
falpha[0] = 0;
first_parameter[0] = 0;
if (parameter_a == companalyzer_measurement::resistance) {
sprintf(first_parameter, "A4");
}
else if (parameter_a == companalyzer_measurement::conductance) {
sprintf(first_parameter, "A5");
}
else if (parameter_a == companalyzer_measurement::inductance) {
sprintf(first_parameter, "A7");
}
else if (parameter_a == companalyzer_measurement::capacitance) {
sprintf(first_parameter, "A8");
}
else if (parameter_a == companalyzer_measurement::impedance) {
sprintf(first_parameter, "A1");
}
else if (parameter_a == companalyzer_measurement::admittance) {
sprintf(first_parameter, "A2");
}
else if (parameter_a == companalyzer_measurement::reflection_absolute) {
sprintf(first_parameter, "A3");
}
else if (parameter_a == companalyzer_measurement::reflection_x) {
sprintf(first_parameter, "A6");
}
if (first_parameter[0] != 0) {
if (parameter_b == companalyzer_measurement::resistance) {
sprintf(falpha, "%sB1", first_parameter);
}
else if (parameter_b == companalyzer_measurement::conductance) {
sprintf(falpha, "%sB2", first_parameter);
}
else if (parameter_b == companalyzer_measurement::dissipation_factor) {
sprintf(falpha, "%sB3", first_parameter);
}
else if (parameter_b == companalyzer_measurement::quality_factor) {
sprintf(falpha, "%sB4", first_parameter);
}
else if (parameter_b == companalyzer_measurement::phase_angle_deg) {
sprintf(falpha, "%sB1", first_parameter);
}
else if (parameter_b == companalyzer_measurement::phase_angle_rad) {
sprintf(falpha, "%sB2", first_parameter);
}
}
if (strlen(falpha) == 0) {
sprintf(extendedError, "EXTAn invalid parameter or combination of parameters was requested°");
return 2;
}
else {
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return 0;
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!°");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!°");
return 1;
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!°");
return 1;
}
}
int companalyzer_set_measurement_frequency(double frequency, const char * companalyzerType, int gpibDevice, char * extendedError) {
if ((strcmp("HP4191A", companalyzerType) == 0)) {
printf("[INFO] Setting component analyzer measurement frequency to %eMHz\n\r", frequency);
if (strcmp("HP4191A", companalyzerType) == 0) {
falpha[0] = 0;
if ((frequency >= 1.0) && (frequency <= 1000.0)) {
sprintf(falpha, "FR%04.04fEN", frequency);
}
if (strlen(falpha) == 0) {
sprintf(extendedError, "EXTAn invalid parameter or combination of parameters was requested°");
return 2;
}
else {
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Writing: %s\n\r", falpha);
#endif
if (gpib_write(gpibDevice, falpha) == 0) {
return 0;
}
else {
sprintf(extendedError, "EXTAn unknown communications error has occured!°");
return 2;
}
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!°");
return 1;
}
}
else {
sprintf(extendedError, "EXTAn invalid device was selected!°");
return 1;
}
}
int companalyzer_get_parameter_measurement(companalyzer_measurements_t * retval, const char * companalyzerType, int gpibDevice) {
char segarray[1024];
char meas_a_string[1024];
char meas_b_string[1024];
int i;
long ai;
long left_char;
long right_char;
char* display_data_string;
int max_num_bytes = 0;
double parameter_value;
companalyzer_measurements_t measurement;
companalyzer_status::companalyzer_status_t parameter_status;
companalyzer_measurement_type::companalyzer_measurement_type parameter_type;
if ((strcmp("HP4191A", companalyzerType) == 0)) {
printf("[INFO] Getting component analyzer measurement\n\r");
// Read measurement
max_num_bytes = 512; // Request more bytes than are possible to ensure no bytes are left behind
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Trying to read %i bytes from GPIB device...\n", max_num_bytes);
#endif
ibtmo(gpibDevice, T10s);
ibeos(gpibDevice, 0x0);
ai = gpib_read_array(gpibDevice, max_num_bytes, segarray);
if (ai == -1) {
return 1;
}
else {
if (strcmp("HP4191A", companalyzerType) == 0) {
segarray[ai] = 0;
left_char = 1;
right_char = 0;
for (right_char=left_char;right_char<ai;right_char++) {
if (segarray[right_char] == ',') {
break;
}
}
strncpy(meas_a_string, segarray+left_char, right_char-left_char);
meas_a_string[right_char-left_char] = 0;
left_char = right_char + 1;
for (right_char=left_char;right_char<ai;right_char++) {
if (segarray[right_char] == '\r') {
break;
}
}
strncpy(meas_b_string, segarray+left_char, right_char-left_char);
meas_b_string[right_char-left_char] = 0;
// Parse display data strings
for (i = 0; i < 2; i++) {
if (i == 0) {
display_data_string = meas_a_string;
}
else {
display_data_string = meas_b_string;
}
switch (display_data_string[0]) {
case 'N':
parameter_status = companalyzer_status::ok;
break;
case 'O':
parameter_status = companalyzer_status::overflow;
break;
case 'D':
parameter_status = companalyzer_status::invalid;
break;
case 'U':
parameter_status = companalyzer_status::cal_req;
break;
}
if (i == 0) {
switch (display_data_string[1]) {
case 'Z':
measurement.parameter_a = companalyzer_measurement::impedance;
break;
case 'Y':
measurement.parameter_a = companalyzer_measurement::admittance;
break;
case 'M':
measurement.parameter_a = companalyzer_measurement::reflection_absolute;
break;
case 'R':
measurement.parameter_a = companalyzer_measurement::resistance;
break;
case 'G':
measurement.parameter_a = companalyzer_measurement::conductance;
break;
case 'X':
measurement.parameter_a = companalyzer_measurement::reflection_x;
break;
case 'L':
measurement.parameter_a = companalyzer_measurement::inductance;
break;
case 'C':
measurement.parameter_a = companalyzer_measurement::capacitance;
break;
}
}
else {
switch (display_data_string[1]) {
case 'D':
measurement.parameter_b = companalyzer_measurement::phase_angle_deg;
break;
case 'R':
measurement.parameter_b = companalyzer_measurement::phase_angle_rad;
break;
case 'X':
measurement.parameter_b = companalyzer_measurement::reactance;
break;
case 'B':
measurement.parameter_b = companalyzer_measurement::susceptance;
break;
case 'Y':
measurement.parameter_b = companalyzer_measurement::reflection_y;
break;
// case 'R':
// measurement.parameter_b = companalyzer_measurement::resistance;
// break;
case 'G':
measurement.parameter_b = companalyzer_measurement::conductance;
break;
// case 'D':
// measurement.parameter_b = companalyzer_measurement::dissipation_factor;
// break;
case 'Q':
measurement.parameter_b = companalyzer_measurement::quality_factor;
break;
}
}
switch (display_data_string[2]) {
case 'N':
parameter_type = companalyzer_measurement_type::normal;
break;
case 'D':
parameter_type = companalyzer_measurement_type::deviation;
break;
case 'P':
parameter_type = companalyzer_measurement_type::deviation_percent;
break;
}
parameter_value = atof(display_data_string + 3);
if (i == 0) {
measurement.parameter_a_status = parameter_status;
measurement.parameter_a_type = parameter_type;
measurement.parameter_a_value = parameter_value;
}
else {
measurement.parameter_b_status = parameter_status;
measurement.parameter_b_type = parameter_type;
measurement.parameter_b_value = parameter_value;
}
}
*retval = measurement;
}
else {
return 2;
}
}
ibtmo(gpibDevice, T10s);
#ifdef ENABLE_EXTRA_DEBUGGING
printf("[DEBG] Read %li bytes from GPIB device\n", ai);
#endif
return 0;
}
else {
return -1;
}
}

@ -0,0 +1,77 @@
/*
* Remote Laboratory Instrumentation Server
*
* 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 3 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 Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* (c) 2009 - 2015 Timothy Pearson
* Raptor Engineering
* http://www.raptorengineeringinc.com
*/
namespace companalyzer_status {
typedef enum companalyzer_status {
ok = 0x00000001,
overflow = 0x00000002,
invalid = 0x00000004,
cal_req = 0x00000008
} companalyzer_status_t;
}
namespace companalyzer_measurement {
typedef enum companalyzer_measurement {
resistance = 0, /* R */
reactance = 1, /* X */
conductance = 2, /* G */
susceptance = 3, /* B */
inductance = 4, /* L */
capacitance = 5, /* C */
dissipation_factor = 6, /* D */
quality_factor = 7, /* Q */
impedance = 8, /* |Z| */
admittance = 9, /* |Y| */
reflection_absolute = 10, /* |Γ| */
reflection_x = 11, /* Γx */
reflection_y = 12, /* Γy */
phase_angle_deg = 13, /* Ө (d) */
phase_angle_rad = 14 /* Ө (r) */
} companalyzer_measurement_t;
}
namespace companalyzer_measurement_type {
typedef enum companalyzer_measurement_type {
normal = 0,
deviation = 1,
deviation_percent = 2
} companalyzer_measurement_type_t;
}
typedef struct companalyzer_measurements {
companalyzer_status::companalyzer_status_t parameter_a_status;
companalyzer_status::companalyzer_status_t parameter_b_status;
companalyzer_measurement::companalyzer_measurement_t parameter_a;
companalyzer_measurement::companalyzer_measurement_t parameter_b;
companalyzer_measurement_type::companalyzer_measurement_type parameter_a_type;
companalyzer_measurement_type::companalyzer_measurement_type parameter_b_type;
double parameter_a_value;
double parameter_b_value;
} companalyzer_measurements_t;
int companalyzer_set_date(struct tm * datetime, const char * companalyzerType, int gpibDevice);
int companalyzer_set_time(struct tm * datetime, const char * companalyzerType, int gpibDevice);
int companalyzer_lock_local_controls (const char * companalyzerType, int gpibDevice);
int companalyzer_set_measurement_parameters(companalyzer_measurement::companalyzer_measurement_t parameter_a, companalyzer_measurement::companalyzer_measurement_t parameter_b, const char * companalyzerType, int gpibDevice, char * extendedError);
int companalyzer_set_measurement_frequency(double frequency, const char * companalyzerType, int gpibDevice, char * extendedError);
int companalyzer_get_parameter_measurement (companalyzer_measurements_t * retval, const char * companalyzerType, int gpibDevice);

@ -46,6 +46,7 @@
#include "scope_functions.h"
#include "signal_functions.h"
#include "commanalyzer_functions.h"
#include "companalyzer_functions.h"
#include "gpib_conn.h"
@ -192,6 +193,9 @@ void GPIBSocket::commandLoop() {
if (m_serverParent->m_commanalyzerType != "") {
deviceList.append("COMMUNICATIONS ANALYZER");
}
if (m_serverParent->m_companalyzerType != "") {
deviceList.append("COMPONENT ANALYZER");
}
ds << deviceList;
writeEndOfFrame();
}
@ -1016,6 +1020,73 @@ void GPIBSocket::commandLoop() {
printf("[WARNING] Received unknown command %s from host %s\n\r", m_instrumentCommand.ascii(), m_remoteHost.ascii()); fflush(stdout);
}
}
else if (m_activeDeviceType == 5) {
// Component analyzer
char errorbuf[1000];
if (m_instrumentCommand == "GETMEASUREMENT") { // Want a new component measurement with the configured parameters
TQ_UINT8 number_of_parameters = 2;
companalyzer_measurements_t measurement;
int retcode = companalyzer_get_parameter_measurement(&measurement, m_serverParent->m_companalyzerType.ascii(), m_serverParent->m_companalyzerDeviceSocket);
if (retcode == 0) {
ds << TQString("ACK");
ds << number_of_parameters;
ds << (TQ_UINT32&)measurement.parameter_a_status;
ds << (TQ_UINT32&)measurement.parameter_a;
ds << (TQ_UINT32&)measurement.parameter_a_type;
ds << measurement.parameter_a_value;
ds << (TQ_UINT32&)measurement.parameter_b_status;
ds << (TQ_UINT32&)measurement.parameter_b;
ds << (TQ_UINT32&)measurement.parameter_b_type;
ds << measurement.parameter_b_value;
writeEndOfFrame();
}
else {
ds << TQString("NCK");
writeEndOfFrame();
}
}
else if (m_instrumentCommand == "SETMEASUREDPARAMETERS") { // Want to set the measured parameters
uint8_t all_ok = 1;
uint8_t number_of_parameters;
companalyzer_measurement::companalyzer_measurement_t parameter_a;
companalyzer_measurement::companalyzer_measurement_t parameter_b;
ds >> number_of_parameters;
if (number_of_parameters == 2) {
ds >> (TQ_UINT32&)parameter_a;
ds >> (TQ_UINT32&)parameter_b;
if (companalyzer_set_measurement_parameters(parameter_a, parameter_b, m_serverParent->m_companalyzerType.ascii(), m_serverParent->m_companalyzerDeviceSocket, errorbuf) != 0) {
all_ok = false;
}
}
else {
sprintf(errorbuf, "EXTInvalid number of parameters provided°");
all_ok = false;
}
if (all_ok) {
ds << TQString("ACK");
writeEndOfFrame();
}
else {
ds << TQString(errorbuf);
writeEndOfFrame();
}
}
else if (m_instrumentCommand == "SETMEASUREMENTFREQUENCY") { // Want to set the measurement frequency
double frequency;
ds >> frequency;
if (companalyzer_set_measurement_frequency(frequency, m_serverParent->m_companalyzerType.ascii(), m_serverParent->m_companalyzerDeviceSocket, errorbuf) == 0) {
ds << TQString("ACK");
writeEndOfFrame();
}
else {
ds << TQString(errorbuf);
writeEndOfFrame();
}
}
else {
printf("[WARNING] Received unknown command %s from host %s\n\r", m_instrumentCommand.ascii(), m_remoteHost.ascii()); fflush(stdout);
}
}
else {
// Unknown
transferred_data = true;
@ -1064,7 +1135,7 @@ int GPIBSocket::enterCommandLoop() {
*/
GPIBServer::GPIBServer(TQObject* parent, int port, KSimpleConfig* config) :
TQServerSocket( port, 1, parent ), m_config(config), m_numberOfConnections(0),
m_scopeDeviceSocket(-1), m_funcgenDeviceSocket(-1), m_commanalyzerDeviceSocket(-1) {
m_scopeDeviceSocket(-1), m_funcgenDeviceSocket(-1), m_commanalyzerDeviceSocket(-1), m_companalyzerDeviceSocket(-1) {
if ( !ok() ) {
printf("[ERROR] Failed to bind to port %d\n\r", port);
@ -1139,6 +1210,13 @@ int GPIBServer::readConfig() {
m_commanalyzerBoard = m_config->readNumEntry("board", 0);
m_commanalyzerDevice = m_config->readNumEntry("device", 0);
// Component analyzer
m_config->setGroup("Component Analyzer");
m_companalyzerType = m_config->readEntry("type", "");
m_companalyzerConnection = m_config->readEntry("connection", "gpib");
m_companalyzerBoard = m_config->readNumEntry("board", 0);
m_companalyzerDevice = m_config->readNumEntry("device", 0);
if (m_serialDevice != "") {
struct termios oldtio, newtio;
@ -1235,5 +1313,27 @@ int GPIBServer::readConfig() {
}
}
if (m_companalyzerType != "") {
printf("[INFO] Component analyzer conjectured to be on GPIB address %d:%d\n\r", m_companalyzerBoard, m_companalyzerDevice);
m_companalyzerDeviceSocket = open_gpib_device(m_companalyzerBoard, m_companalyzerDevice);
if (m_companalyzerDeviceSocket < 0) {
//return 1;
}
else {
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
printf("[INFO] Configuring %s component analyzer\n\r", companalyzerLongDescription(m_companalyzerType.ascii()));
if (companalyzer_set_time(timeinfo, m_companalyzerType.ascii(), m_companalyzerDeviceSocket) == 0) {
companalyzer_set_date(timeinfo, m_companalyzerType.ascii(), m_companalyzerDeviceSocket);
printf("[INFO] Communication verified\n\r");
}
else {
printf("[WARN] Communication failed!\n\r");
}
}
}
return 0;
}

@ -121,6 +121,12 @@ class GPIBServer : public TQServerSocket
int m_commanalyzerDevice;
int m_commanalyzerDeviceSocket;
TQString m_companalyzerType;
TQString m_companalyzerConnection;
int m_companalyzerBoard;
int m_companalyzerDevice;
int m_companalyzerDeviceSocket;
friend class GPIBSocket;
};

@ -32,7 +32,7 @@
char falpha[1024];
char * scopeLongDescription (const char * scopeType) {
const char * scopeLongDescription (const char * scopeType) {
if (strcmp("HP54600OS", scopeType) == 0) {
return "Hewlett Packard 54600 series";
}
@ -44,7 +44,7 @@ char * scopeLongDescription (const char * scopeType) {
}
}
char * commanalyzerLongDescription (const char * commanalyzerType) {
const char * commanalyzerLongDescription (const char * commanalyzerType) {
if (strcmp("HP8924C", commanalyzerType) == 0) {
return "Hewlett Packard 8924 series";
}
@ -53,7 +53,16 @@ char * commanalyzerLongDescription (const char * commanalyzerType) {
}
}
char * funcgenLongDescription (const char * funcgenType) {
const char * companalyzerLongDescription (const char * companalyzerType) {
if (strcmp("HP4191A", companalyzerType) == 0) {
return "Hewlett Packard HP4191 series";
}
else {
return "UNKNOWN";
}
}
const char * funcgenLongDescription (const char * funcgenType) {
if (strcmp("AG33250A", funcgenType) == 0) {
return "Agilent AG33250A";
}
@ -81,7 +90,7 @@ int open_gpib_device(int minor, int pad) {
return ud;
}
int gpib_write(int ud, char * buffer) {
int gpib_write(int ud, const char * buffer) {
if( ibwrt(ud, buffer, strlen(buffer)) & ERR )
{
return -1;

@ -22,9 +22,10 @@
char * scopeLongDescription (const char * scopeType);
char * commanalyzerLongDescription (const char * scopeType);
char * companalyzerLongDescription (const char * scopeType);
char * funcgenLongDescription (const char * funcgenType);
int open_gpib_device(int minor, int pad);
int gpib_write(int ud, char * buffer);
int gpib_write(int ud, const char * buffer);
int gpib_read_array(int ud, int max_num_bytes, char * segarray);
int gpib_read_binary(int ud, int max_num_bytes);

@ -47,7 +47,7 @@ int main(int argc, char *argv[])
{
TDEAboutData aboutData( "ulab_gpib_server", I18N_NOOP("uLab GPIB Server"),
version, description, TDEAboutData::License_GPL,
"(c) 2012, Timothy Pearson");
"(c) 2012 - 2015, Timothy Pearson");
aboutData.addAuthor("Timothy Pearson",0, "kb9vqf@pearsoncomputing.net");
TDECmdLineArgs::init( argc, argv, &aboutData );
TDEApplication::disableAutoDcopRegistration();

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save