Skip to content

Instantly share code, notes, and snippets.

@connorjak
Last active December 8, 2019 11:25
Show Gist options
  • Save connorjak/9f853bb83559976e12c9e38811c3c0af to your computer and use it in GitHub Desktop.
Save connorjak/9f853bb83559976e12c9e38811c3c0af to your computer and use it in GitHub Desktop.
ISS Telemetry Stream
#include "./../include/ISSLIVE_Telemetry.h"
#include "./../include/TelemIdents.h"
#include "./../../../server/SystemUtils/HelperMacros.h"
#include <map>
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <stdlib.h> // for stoi
using std::string;
using std::to_string;
using std::cout;
using std::map;
using std::stof;
template <class Container>
void split2(const std::string& str, Container& cont, char delim = ' ')
{
std::stringstream ss(str);
std::string token;
while (std::getline(ss, token, delim)) {
cont.push_back(token);
}
}
// Avert your eyes, there are no thoughts given to performance here.
static TelemUpdate decodeJson(string jsonstring)
{
jsonstring.erase(std::remove(jsonstring.begin(), jsonstring.end(), '"'), jsonstring.end());
vector<string> sections;
split2(jsonstring, sections,',');
vector<string> smallersections;
for (string section : sections)
{
vector<string> newsections;
split2(section, newsections, ':');
std::move(newsections.begin(), newsections.end(), std::back_inserter(smallersections));
}
TelemUpdate tu;
tu.name = smallersections[1];
tu.value = smallersections[3];
return tu;
}
ISSLIVE_Telemetry::ISSLIVE_Telemetry()
{
}
void ISSLIVE_Telemetry::init()
{
// Start Javascript connection to ISSLIVE that puts the telemetry into the database
startJS_Telemetry();
usleep(500000);
for (uint i = 0; i < entities.size(); i++)
{
for (string ident : telemIdentifiers)
{
ENTITY(i)->addParameter(ident, new GenParam_String()); //TODO Breaking when using ue4 client
string tmpmsg = "NO_DATA";
ENTITY(i)->setParameter(ident, tmpmsg);
}
}
// Socket stuff
/*char* str;
int fd = 0;
struct sockaddr_in demoserverAddr;*/
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0)
{
output->perror("[ISSLIVE-IPC] Could not create socket");
}
else
{
demoserverAddr.sin_family = AF_INET;
demoserverAddr.sin_port = htons(4337);
demoserverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(demoserverAddr.sin_zero, '\0', sizeof(demoserverAddr.sin_zero));
}
int numTries = 0;
while (connect(fd, (const struct sockaddr*) & demoserverAddr, sizeof(demoserverAddr)) < 0)
{
output->pwarning("[ISSLIVE-IPC] Could not yet connect to server");
usleep(200000);
if (++numTries > 100)
{
output->perror("[ISSLIVE-IPC] Exceeded 100 tries of connecting to server");
}
}
// End socket stuff
}
void ISSLIVE_Telemetry::update()
{
char buf[21];
memset(&buf, '0', sizeof(buf));
int numReads = 0;
while ((read(fd, buf, 20)) > 0)
{
//for (uint i = 0; i < 157; i++)
//{
// //printf("%s\n", json_object_to_json_string(jobj));
// //json_parse(jobj);
// printf("%d\n", buf[i]);
//}
for (uint i = 0; i < 20; i++)
{
if (buf[i] == '{')
{
currentstring = "";
}
else if (buf[i] == '}')
{
telemUpdates.push_back(decodeJson(currentstring));
currentstring = "";
//output->print(/*" " +*/ to_string(telemUpdates.size()) + " ");
}
else
{
currentstring += buf[i];
}
}
/*string tmpmsg = "";
tmpmsg = tmpmsg + buf[i];
output->print(tmpmsg);*/
if (++numReads > 50) //TODO this looks like it might not break out properly if it runs out of data to process
break;
}
//Set relevant parameters
for (TelemUpdate tu : telemUpdates)
{
for (uint i = 0; i < entities.size(); i++)
{
ENTITY(i)->setParameter(tu.name, tu.value); //TODO Breaking when using ue4 client
}
}
telemUpdates.clear();
}
void ISSLIVE_Telemetry::startJS_Telemetry()
{
// Run the JS telemetry script here
system("node ./packages/ISSLIVE_Telemetry/src/ISS_Telemetry_IPC.js &");
}
//(SpaceCRAFT Boilerplate)
extern "C"
{
ISSLIVE_Telemetry* create(map<string, string> properties)
{
// Create new instance and return
ISSLIVE_Telemetry* newInstance = new ISSLIVE_Telemetry();
// Set parameters Here
newInstance->setProperties(properties);
return newInstance;
}
}
/************************************************************
* Copyright SpaceCRAFT 2019, All Rights Reserved.
* Released under MIT License.
* Used libraries:
* - lightstreamer-client on the nodejs side of this
*************************************************************/
#pragma once
#include "./../../../server/AtomicStandardOutput.h"
#include "./../../../server/Entity.h"
#include "./../../../server/System.h"
#include <stdio.h>
//NOTE: more #includes for added-in libraries go here
struct TelemUpdate
{
string name;
string value;
};
class ISSLIVE_Telemetry : public System
{
private:
//IPC stuff
char* str;
int fd = 0;
struct sockaddr_in demoserverAddr;
string currentstring = "";
vector<TelemUpdate> telemUpdates;
public:
ISSLIVE_Telemetry();
void init();
void update();
void startJS_Telemetry();
};
function alert(message)
{
}
var ls = require("lightstreamer-client");
var sqlite3 = require("sqlite3");
//var db = new sqlite3.Database("/home/pi/Mimic/Pi/iss_telemetry.db", sqlite3.OPEN_READWRITE, db_err);
var db = new sqlite3.Database("/dev/shm/iss_telemetry.db", sqlite3.OPEN_CREATE | sqlite3.OPEN_READWRITE);
// var telemetry = require("/home/pi/Mimic/Pi/Telemetry_identifiers.js");
var telemetry = require("./Telemetry_identifiers.js");
var classes = ["TimeStamp", "Value"];
var lsClient = new ls.LightstreamerClient("http://push.lightstreamer.com", "ISSLIVE"); //actual telemetry server
//var lsClient = new ls.LightstreamerClient("http://sl-iot-server-13.slsandbox.com:8080", "ISSLIVE_LS_SL"); //sl recorded data server
lsClient.connectionOptions.setSlowingEnabled(false);
var sub = new ls.Subscription("MERGE", telemetry.identifiers, classes);
var timeSub = new ls.Subscription("MERGE", "TIME_000001", ["TimeStamp", "Value", "Status.Class", "Status.Indicator"]);
lsClient.subscribe(sub);
lsClient.subscribe(timeSub);
var AOS;
var AOSnum = 0;
var now = new Date();
var gmtoff = (now.getTimezoneOffset())/60;
var start = new Date(now.getFullYear(), 0, 0);
var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
var oneDay = 1000 * 60 * 60 * 24;
var timestampnow = (diff / oneDay) * 24 + gmtoff;
console.log("[ISSLIVE-JS-TELEM] " + 'ISS Telemetry script active');
//console.log("[ISSLIVE-JS-TELEM] " + 'Current timestamp: ' + timestampnow);
lsClient.addListener({
onStatusChange: function(newStatus) {
console.log("[ISSLIVE-JS-TELEM] " + "Client status:" + newStatus);
db.run("UPDATE telemetry set Value = ? where Label = ?", newStatus, "ClientStatus");
}
});
lsClient.connect();
console.log("[ISSLIVE-JS-TELEM] " + lsClient.getStatus());
sub.addListener({
onSubscription: function() {
console.log("[ISSLIVE-JS-TELEM] " + "Subscribed");
db.run("UPDATE telemetry set Value = ? where Label = ?", "Subscribed", "Lightstreamer");
},
onUnsubscription: function() {
console.log("[ISSLIVE-JS-TELEM] " + "Unsubscribed");
db.run("UPDATE telemetry set Value = ? where Label = ?", "Unsubscribed", "Lightstreamer");
},
onItemUpdate: function(update)
{
// console.log("[ISSLIVE-JS-TELEM] (DEBUG) Telemetry itemUpdate");
// console.log("[ISSLIVE-JS-TELEM] (DEBUG) Item: " + update.getItemName() + ": "+ update.getValue("Value"));
db.run("UPDATE telemetry set Value = ? where ID = ?", update.getValue("Value"), update.getItemName());
db.run("UPDATE telemetry set Timestamp = ? where ID = ?", update.getValue("TimeStamp"), update.getItemName());
}
});
timeSub.addListener({
onItemUpdate: function (update) {
// console.log("[ISSLIVE-JS-TELEM] (DEBUG) Timestamp itemUpdate");
var status = update.getValue("Status.Class");
// console.log("[ISSLIVE-JS-TELEM] " + "Status: " + status);
AOStimestamp = parseFloat(update.getValue("TimeStamp"));
// console.log("[ISSLIVE-JS-TELEM] " + "Timestamp: " + update.getValue("TimeStamp"));
difference = timestampnow - AOStimestamp;
// console.log("[ISSLIVE-JS-TELEM] " + "Difference " + difference);
if ( status === "24")
{
if( difference > 0.00153680542553047 )
{
console.log("[ISSLIVE-JS-TELEM] " + "Signal Error! @ " + update.getValue("TimeStamp"));
AOS = "Stale Signal";
AOSnum = 2;
}
else
{
if ( AOSnum !== 1 )
{
console.log("[ISSLIVE-JS-TELEM] " + "Connected to the ISS! @ " + update.getValue("TimeStamp"));
}
AOS = "Siqnal Acquired";
AOSnum = 1;
}
}
else
{
if( difference > 0.00153680542553047 )
{
console.log("[ISSLIVE-JS-TELEM] " + "Signal Error! @ " + update.getValue("TimeStamp"));
AOS = "Stale Signal";
AOSnum = 2;
}
else
{
console.log("[ISSLIVE-JS-TELEM] " + "Signal Lost! @ " + update.getValue("TimeStamp"));
AOS = "Signal Lost";
AOSnum = 0;
}
}
db.run("UPDATE telemetry set Value = ? where Label = ?", AOSnum, "aos");
db.run("UPDATE telemetry set Timestamp = ? where Label = ?", AOStimestamp, "aos");
}
});
function alert(message)
{
}
// Terminal text coloring:
const ANSIReset = "\x1b[0m"
const ANSIBright = "\x1b[1m"
const ANSIDim = "\x1b[2m"
const ANSIUnderscore = "\x1b[4m"
const ANSIBlink = "\x1b[5m"
const ANSIReverse = "\x1b[7m"
const ANSIHidden = "\x1b[8m"
const ANSIFgBlack = "\x1b[30m"
const ANSIFgRed = "\x1b[31m"
const ANSIFgGreen = "\x1b[32m"
const ANSIFgYellow = "\x1b[33m"
const ANSIFgBlue = "\x1b[34m"
const ANSIFgMagenta = "\x1b[35m"
const ANSIFgCyan = "\x1b[36m"
const ANSIFgWhite = "\x1b[37m"
const ANSIBgBlack = "\x1b[40m"
const ANSIBgRed = "\x1b[41m"
const ANSIBgGreen = "\x1b[42m"
const ANSIBgYellow = "\x1b[43m"
const ANSIBgBlue = "\x1b[44m"
const ANSIBgMagenta = "\x1b[45m"
const ANSIBgCyan = "\x1b[46m"
const ANSIBgWhite = "\x1b[47m"
var ls = require("lightstreamer-client");
/////////////
var net = require('net');
var socks = [];
var server = net.createServer(function(socket) {
socks.push(socket);
//socket.write('Joined to server\r\n');
//socket.pipe(socket);
});
server.listen(4337, '127.0.0.1');
server.on('newLSdata', (updateJSON) => {
socks[0].write(JSON.stringify(updateJSON));
//NOTE only writes to the first connection for now
});
////////////////
var telemetry = require("./Telemetry_identifiers.js");
var classes = ["TimeStamp", "Value"];
var lsClient = new ls.LightstreamerClient("http://push.lightstreamer.com", "ISSLIVE"); //actual telemetry server
//var lsClient = new ls.LightstreamerClient("http://sl-iot-server-13.slsandbox.com:8080", "ISSLIVE_LS_SL"); //sl recorded data server
lsClient.connectionOptions.setSlowingEnabled(false);
var sub = new ls.Subscription("MERGE", telemetry.identifiers, classes);
var timeSub = new ls.Subscription("MERGE", "TIME_000001", ["TimeStamp", "Value", "Status.Class", "Status.Indicator"]);
lsClient.subscribe(sub);
lsClient.subscribe(timeSub);
var AOS;
var AOSnum = 0;
var now = new Date();
var gmtoff = (now.getTimezoneOffset())/60;
var start = new Date(now.getFullYear(), 0, 0);
var diff = (now - start) + ((start.getTimezoneOffset() - now.getTimezoneOffset()) * 60 * 1000);
var oneDay = 1000 * 60 * 60 * 24;
var timestampnow = (diff / oneDay) * 24 + gmtoff;
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIFgWhite + 'ISS Telemetry script active' + ANSIReset);
//console.log("[ISSLIVE-JS-TELEM] " + 'Current timestamp: ' + timestampnow);
lsClient.addListener({
onStatusChange: function(newStatus) {
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Client status:" + newStatus);
//TODO omitting this data for now
//server.emit('newLSdata',"UPDATE telemetry set Value = " + newStatus + " where Label = " + "ClientStatus");
}
});
lsClient.connect();
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + lsClient.getStatus());
sub.addListener({
onSubscription: function() {
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Subscribed");
//TODO omitting this data for now
//server.emit('newLSdata',"|telemetry|Value|Subscribed|Name|Lightstreamer");
},
onUnsubscription: function() {
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Unsubscribed");
//TODO omitting this data for now
//server.emit('newLSdata',"UPDATE telemetry set Value = Unsubscribed where Label = Lightstreamer");
},
onItemUpdate: function(update)
{
//console.log("[ISSLIVE-JS-TELEM] (DEBUG) Telemetry itemUpdate");
//console.log("[ISSLIVE-JS-TELEM] (DEBUG) Item: " + update.getItemName() + ": "+ update.getValue("Value"));
var updateJson = {
name: update.getItemName(),
value: update.getValue("Value")
}
server.emit('newLSdata',updateJson);
// server.emit('newLSdata',"UPDATE telemetry set Value = "+update.getValue("Value")+" where ID = " + update.getItemName());
//server.emit('newLSdata',"UPDATE telemetry set Timestamp = "+update.getValue("TimeStamp")+" where ID = " + update.getItemName());
}
});
timeSub.addListener({
onItemUpdate: function (update) {
// console.log("[ISSLIVE-JS-TELEM] (DEBUG) Timestamp itemUpdate");
var status = update.getValue("Status.Class");
// console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Status: " + status);
AOStimestamp = parseFloat(update.getValue("TimeStamp"));
// console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Timestamp: " + update.getValue("TimeStamp"));
difference = timestampnow - AOStimestamp;
// console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Difference " + difference);
if ( status === "24")
{
if( difference > 0.00153680542553047 )
{
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + ANSIBgYellow + ANSIFgBlack + "ISS Downlink Signal Stale. @ " + update.getValue("TimeStamp") + ANSIReset);
AOS = "Stale Signal";
AOSnum = 2;
}
else
{
if ( AOSnum !== 1 )
{
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + ANSIBgGreen + ANSIFgBlack + "Connected to the ISS! @ " + update.getValue("TimeStamp") + ANSIReset);
}
AOS = "Siqnal Acquired";
AOSnum = 1;
}
}
else
{
if( difference > 0.00153680542553047 )
{
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + ANSIBgYellow + ANSIFgBlack + "ISS Downlink Signal Stale. @ " + update.getValue("TimeStamp") + ANSIReset);
AOS = "Stale Signal";
AOSnum = 2;
}
else
{
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + ANSIBgRed + ANSIFgBlack + "ISS Downlink Signal Lost! @ " + update.getValue("TimeStamp") + ANSIReset);
console.log(ANSIFgBlue + "[ISSLIVE-JS-TELEM] " + ANSIReset + "Signal is likely to be reacquired within 5-20 minutes.");
AOS = "Signal Lost";
AOSnum = 0;
}
}
//TODO disabling this data for now
//server.emit('newLSdata',"UPDATE telemetry set Value = "+AOSnum+" where Label = aos");
//server.emit('newLSdata',"UPDATE telemetry set Timestamp = "+AOStimestamp+" where Label = aos");
}
});
#include "./../include/ISSLIVE_Telemetry.h"
#include "./../include/TelemIdents.h"
#include "./../../../server/SystemUtils/HelperMacros.h"
#include <map>
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <stdlib.h> // for stoi
using std::string;
using std::to_string;
using std::cout;
using std::map;
using std::stof;
// Communication method from JS to C++
#define USE_SQLITE false
#define USE_IPC true
// Details about SQLite
#define CLOSEAFTERINIT_SQLITE true //SEGFAULT if false!
#define RESPAWN_SQLITE false //Javascript has Locking Protocol error if false; C++ has Locking Protocol error if true.
// No matter the RESPAWN_SQLITE state, it seems to not affect the JS "Signal Failure" / "Connected to the ISS" state.
template <class Container>
void split2(const std::string& str, Container& cont, char delim = ' ')
{
std::stringstream ss(str);
std::string token;
while (std::getline(ss, token, delim)) {
cont.push_back(token);
}
}
// Avert your eyes, there are no thoughts given to performance here.
static TelemUpdate decodeJson(string jsonstring)
{
/*jsonstring.erase(std::remove(jsonstring.begin(), jsonstring.end(), '{'), jsonstring.end());
jsonstring.erase(std::remove(jsonstring.begin(), jsonstring.end(), '}'), jsonstring.end());*/
jsonstring.erase(std::remove(jsonstring.begin(), jsonstring.end(), '"'), jsonstring.end());
vector<string> sections;
split2(jsonstring, sections,',');
vector<string> smallersections;
for (string section : sections)
{
vector<string> newsections;
split2(section, newsections, ':');
std::move(newsections.begin(), newsections.end(), std::back_inserter(smallersections));
}
TelemUpdate tu;
tu.name = smallersections[1];
tu.value = smallersections[3];
return tu;
/*char currentchar = '\0';
char flagchar = ':';
while (currentchar != flagchar)
{
jsonstring.
}*/
}
static int sqldebugcallback(void* output, int argc, char** argv, char** azColName)
{
int i;
for (i = 0; i < argc; i++)
{
string tmpmsg = "";
tmpmsg = tmpmsg + azColName[i] + " = " + (argv[i] ? argv[i] : "NULL");
//tmpmsg.erase(std::remove(tmpmsg.begin(), tmpmsg.end(), '\n'), tmpmsg.end()); //remove all newlines
((AtomicStandardOutput*)output)->print(tmpmsg);
}
return 0;
}
static void handleSQLiteRC(int rc, AtomicStandardOutput* output, sqlite3* db)
{
if (rc != SQLITE_OK)
{
string tmpmsg = "[ISSLIVE] SQLite Error: ";
tmpmsg = tmpmsg + sqlite3_errmsg(db);
output->perror(tmpmsg, false);
}
}
static void handleSQLiteOpendbRC(int rc, AtomicStandardOutput* output, sqlite3* db)
{
if (rc != SQLITE_OK)
{
string tmpmsg = "[ISSLIVE] Can't open database: ";
tmpmsg = tmpmsg + sqlite3_errmsg(db);
output->perror(tmpmsg);
}
else
{
output->printlnColor("[ISSLIVE] Opened database successfully.",ANSI::Color::GREEN);
}
}
void ISSLIVE_Telemetry::executePragmas(AtomicStandardOutput* output, sqlite3* db)
{
int rc = SQLITE_OK;
if (getInst_Parameter("read_uncommitted")->GetBool()) //This setting has no apparent effect?
{
rc = sqlite3_exec(db, "PRAGMA read_uncommitted = true;", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db);
}
else
{
rc = sqlite3_exec(db, "PRAGMA read_uncommitted = false;", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db);
}
if (getInst_Parameter("journal_mode_wal")->GetBool())
{
rc = sqlite3_exec(db, "pragma journal_mode=wal", 0, 0, &zErrMsg); //This line is CRITICAL! Locking Protocol error otherwise.
handleSQLiteRC(rc, output, db);
}
}
ISSLIVE_Telemetry::ISSLIVE_Telemetry()
{
}
void ISSLIVE_Telemetry::init()
{
#if USE_SQLITE
// Connect to sqlite
//(reimplemented sqlite connection)
// Python code:
/*conn = sqlite3.connect('/dev/shm/iss_telemetry.db')
conn.isolation_level = None
c = conn.cursor()*/
//C++ code:
// just making sure we aren't jumping the gun on the database:
//usleep(1000000);
initializeDatabase(output, db, zErrMsg);
// just making sure we aren't jumping the gun on the database:
//usleep(1000000);
#if CLOSEAFTERINIT_SQLITE
rc = sqlite3_open("/dev/shm/iss_telemetry.db", &db);
handleSQLiteOpendbRC(rc, output, db);
output->println("[ISSLIVE] SQLite reopened after initialize.");
#endif
/*rc = sqlite3_get_autocommit(db); //Don't really ever need this probably
if(rc != 0)
output->println("[ISSLIVE] SQLite is in autocommit mode.");
else
output->pwarning("[ISSLIVE] SQLite is NOT in autocommit mode.");*/
executePragmas(output, db);
output->println("[ISSLIVE] SQLite pragmas applied.");
/*rc = sqlite3_get_autocommit(db);
if (rc != 0)
output->println("[ISSLIVE] SQLite is in autocommit mode.");
else
output->pwarning("[ISSLIVE] SQLite is NOT in autocommit mode.");*/
////////////////////
#if RESPAWN_SQLITE
rc = sqlite3_close(db);
handleSQLiteRC(rc, output, db);
#endif
///////////////////
#endif //USE_SQLITE
// Start Javascript connection to ISSLIVE that puts the telemetry into the database
startJS_Telemetry();
usleep(500000);
#if USE_IPC
for (uint i = 0; i < entities.size(); i++)
{
for (string ident : telemIdentifiers)
{
ENTITY(i)->addParameter(ident, new GenParam_String()); //TODO Breaking when using ue4 client
string tmpmsg = "NO_DATA";
ENTITY(i)->setParameter(ident, tmpmsg);
}
}
// Socket stuff
/*char* str;
int fd = 0;
struct sockaddr_in demoserverAddr;*/
fd = socket(AF_INET, SOCK_STREAM, 0);
if (fd < 0)
{
output->perror("[ISSLIVE-IPC] Could not create socket");
}
else
{
demoserverAddr.sin_family = AF_INET;
demoserverAddr.sin_port = htons(4337);
demoserverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(demoserverAddr.sin_zero, '\0', sizeof(demoserverAddr.sin_zero));
}
int numTries = 0;
while (connect(fd, (const struct sockaddr*) & demoserverAddr, sizeof(demoserverAddr)) < 0)
{
output->pwarning("[ISSLIVE-IPC] Could not yet connect to server");
usleep(200000);
if (++numTries > 100)
{
output->perror("[ISSLIVE-IPC] Exceeded 100 tries of connecting to server");
}
}
// End socket stuff
#endif //USE_IPC
}
void ISSLIVE_Telemetry::update()
{
#if USE_SQLITE
// Get updates from sqlite
//(reimplemented sqlite check for updates)
/*Python code:
c.execute('select Value from telemetry')
values = c.fetchall()
c.execute('select Timestamp from telemetry')
timestamps = c.fetchall()
sub_status = str((values[255])[0]) #lightstreamer subscript checker
client_status = str((values[256])[0]) #lightstreamer client checker
psarj = "{:.2f}".format(float((values[0])[0]))*/
//C++ code:
///////////////////
#if RESPAWN_SQLITE
rc = sqlite3_open("/dev/shm/iss_telemetry.db", &db);
handleSQLiteOpendbRC(rc, output, db);
executePragmas(output, db);
#endif
///////////////////
rc = sqlite3_exec(db, "select Value from telemetry", /*ISSLIVE_Telemetry::*/sqldebugcallback, output, &zErrMsg);
handleSQLiteRC(rc, output, db);
//values =
rc = sqlite3_exec(db, "select Timestamp from telemetry", /*ISSLIVE_Telemetry::*/sqldebugcallback, output, &zErrMsg);
handleSQLiteRC(rc, output, db);
//timestamps =
////////////////////
#if RESPAWN_SQLITE
rc = sqlite3_close(db);
handleSQLiteRC(rc, output, db);
#endif
///////////////////
output->println("\n");
#endif //USE_SQLITE
#if USE_IPC
char buf[21];
memset(&buf, '0', sizeof(buf));
int numReads = 0;
while ((read(fd, buf, 20)) > 0)
{
//for (uint i = 0; i < 157; i++)
//{
// //printf("%s\n", json_object_to_json_string(jobj));
// //json_parse(jobj);
// printf("%d\n", buf[i]);
//}
for (uint i = 0; i < 20; i++)
{
if (buf[i] == '{')
{
currentstring = "";
}
else if (buf[i] == '}')
{
telemUpdates.push_back(decodeJson(currentstring));
currentstring = "";
//output->print(/*" " +*/ to_string(telemUpdates.size()) + " ");
}
else
{
currentstring += buf[i];
}
}
/*string tmpmsg = "";
tmpmsg = tmpmsg + buf[i];
output->print(tmpmsg);*/
if (++numReads > 50)
break;
}
#endif //USE_IPC
//Set relevant parameters
for (TelemUpdate tu : telemUpdates)
{
for (uint i = 0; i < entities.size(); i++)
{
ENTITY(i)->setParameter(tu.name, tu.value); //TODO Breaking when using ue4 client
}
}
telemUpdates.clear();
}
//TODO end behavior:
//sqlite3_close(db);
void ISSLIVE_Telemetry::startJS_Telemetry()
{
// Run the JS telemetry script here
#if USE_SQLITE
system("node ./packages/ISSLIVE_Telemetry/src/ISS_Telemetry.js &");
#endif
#if USE_IPC
system("node ./packages/ISSLIVE_Telemetry/src/ISS_Telemetry_IPC.js &");
#endif
}
void ISSLIVE_Telemetry::initializeDatabase(AtomicStandardOutput* output, sqlite3* db, char* zErrMsg)
{
//----------------Open SQLITE3 Database that holds the current ISS Telemetry--------------
output->println("[ISSLIVE-INIT-SQLITE3] Initializing telemetry database.");
system("rm /dev/shm/iss_telemetry.db"); //delete sqlite database on exit, db is recreated each time to avoid concurrency issues
//system("rm /dev/shm/iss_*"); //delete sqlite database on exit, db is recreated each time to avoid concurrency issues
int rc = SQLITE_OK;
rc = sqlite3_open("/dev/shm/iss_telemetry.db", &db);
handleSQLiteOpendbRC(rc, output, db);
//now we populate the blank database, this prevents locked database issues
output->println("[ISSLIVE-INIT-SQLITE3] Populating with blank initial values...");
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "pragma journal_mode=wal", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS telemetry (`Label` TEXT PRIMARY KEY, `Timestamp` TEXT, `Value` TEXT, `ID` TEXT, `dbID` NUMERIC )", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('psarj', '0', '0', 'S0000004', 0)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('ssarj', '0', '0', 'S0000003', 1)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('ptrrj', '0', '0', 'S0000002', 2)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('strrj', '0', '0', 'S0000001', 3)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta1b', '0', '0', 'S6000008', 4)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta1a', '0', '0', 'S4000007', 5)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta2b', '0', '0', 'P6000008', 6)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta2a', '0', '0', 'P4000007', 7)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta3b', '0', '0', 'S6000007', 8)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta3a', '0', '0', 'S4000008', 9)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta4b', '0', '0', 'P6000007', 10)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('beta4a', '0', '0', 'P4000008', 11)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('aos', '0', '0', 'AOS', 12)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('los', '0', '0', 'LOS', 13)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sasa1_elevation', '0', '0', 'S1000005', 14)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sgant_elevation', '0', '0', 'Z1000014', 15)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('crewlock_pres', '0', '0', 'AIRLOCK000049', 16)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sgant_xel', '0', '0', 'Z1000015', 17)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sasa1_azimuth', '0', '0', 'S1000004', 18)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('loopb_flowrate', '0', '0', 'P1000001', 19)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('loopb_pressure', '0', '0', 'P1000002', 20)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('loopb_temp', '0', '0', 'P1000003', 21)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('loopa_flowrate', '0', '0', 'S1000001', 22)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('loopa_pressure', '0', '0', 'S1000002', 23)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('loopa_temp', '0', '0', 'S1000003', 24)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_1a', '0', '0', 'S4000001', 25)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_1b', '0', '0', 'S6000004', 26)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_2a', '0', '0', 'P4000001', 27)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_2b', '0', '0', 'P6000004', 28)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_3a', '0', '0', 'S4000004', 29)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_3b', '0', '0', 'S6000001', 30)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_4a', '0', '0', 'P4000004', 31)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('voltage_4b', '0', '0', 'P6000001', 32)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_1a', '0', '0', 'S4000002', 33)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_1b', '0', '0', 'S6000005', 34)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_2a', '0', '0', 'P4000002', 35)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_2b', '0', '0', 'P6000005', 36)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_3a', '0', '0', 'S4000005', 37)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_3b', '0', '0', 'S6000002', 38)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_4a', '0', '0', 'P4000005', 39)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('current_4b', '0', '0', 'P6000002', 40)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('kuband_transmit', '0', '0', 'Z1000013', 41)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('ptrrj_mode', '0', '0', 'S0000006', 42)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('strrj_mode', '0', '0', 'S0000007', 43)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('psarj_mode', '0', '0', 'S0000008', 44)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('ssarj_mode', '0', '0', 'S0000009', 45)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('russian_mode', '0', '0', 'RUSSEG000001', 46)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('iss_mode', '0', '0', 'USLAB000086', 47)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('iss_mass', '0', '0', 'USLAB000039', 48)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('us_gnc_mode', '0', '0', 'USLAB000012', 49)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sasa2_elevation', '0', '0', 'P1000005', 50)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sasa2_azimuth', '0', '0', 'P1000004', 51)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sasa2_status', '0', '0', 'P1000007', 52)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('sasa1_status', '0', '0', 'S1000009', 53)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('active_sasa', '0', '0', 'USLAB000092', 54)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('position_x', '0', '0', 'USLAB000032', 55)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('position_y', '0', '0', 'USLAB000033', 56)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('position_z', '0', '0', 'USLAB000034', 57)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('velocity_x', '0', '0', 'USLAB000035', 58)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('velocity_y', '0', '0', 'USLAB000036', 59)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('velocity_z', '0', '0', 'USLAB000037', 60)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('PSA_EMU1_VOLTS', '0', '0', 'AIRLOCK000001', 61)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('PSA_EMU1_AMPS', '0', '0', 'AIRLOCK000002', 62)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('PSA_EMU2_VOLTS', '0', '0', 'AIRLOCK000003', 63)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('PSA_EMU2_AMPS', '0', '0', 'AIRLOCK000004', 64)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('PSA_IRU_Utility_VOLTS', '0', '0', 'AIRLOCK000005', 65)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('PSA_IRU_Utility_AMPS', '0', '0', 'AIRLOCK000006', 66)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('UIA_EV_1_VOLTS', '0', '0', 'AIRLOCK000007', 67)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('UIA_EV_1_AMPS', '0', '0', 'AIRLOCK000008', 68)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('UIA_EV_2_VOLTS', '0', '0', 'AIRLOCK000009', 69)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('UIA_EV_2_AMPS', '0', '0', 'AIRLOCK000010', 70)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_AL1A4A_A_RPC_01_Depress_Pump_On_Off_Stat', '0', '0', 'AIRLOCK000047', 71)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_Depress_Pump_Power_Switch', '0', '0', 'AIRLOCK000048', 72)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_O2_Hi_P_Supply_Vlv_Actual_Posn', '0', '0', 'AIRLOCK000050', 73)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_O2_Lo_P_Supply_Vlv_Actual_Posn', '0', '0', 'AIRLOCK000051', 74)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_N2_Supply_Vlv_Actual_Posn', '0', '0', 'AIRLOCK000052', 75)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_CCAA_State', '0', '0', 'AIRLOCK000053', 76)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_PCA_Cabin_Pressure', '0', '0', 'AIRLOCK000054', 77)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_O2_Hi_P_Supply_Pressure', '0', '0', 'AIRLOCK000055', 78)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_O2_Lo_P_Supply_Pressure', '0', '0', 'AIRLOCK000056', 79)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Airlock_N2_Supply_Pressure', '0', '0', 'AIRLOCK000057', 80)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node2_MTL_PPA_Avg_Accum_Qty', '0', '0', 'NODE2000001', 81)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node2_LTL_PPA_Avg_Accum_Qty', '0', '0', 'NODE2000002', 82)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_2_CCAA_State', '0', '0', 'NODE2000003', 83)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node2_LTL_TWMV_Out_Temp', '0', '0', 'NODE2000006', 84)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node2_MTL_TWMV_Out_Temp', '0', '0', 'NODE2000007', 85)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_MCA_ppO2', '0', '0', 'NODE3000001', 86)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_MCA_ppN2', '0', '0', 'NODE3000002', 87)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_MCA_ppCO2', '0', '0', 'NODE3000003', 88)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_UPA_Current_State', '0', '0', 'NODE3000004', 89)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_UPA_WSTA_Qty_Ctrl_Pct', '0', '0', 'NODE3000005', 90)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_WPA_Process_Cmd_Status', '0', '0', 'NODE3000006', 91)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_WPA_Process_Step', '0', '0', 'NODE3000007', 92)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_WPA_Waste_Water_Qty_Ctrl', '0', '0', 'NODE3000008', 93)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_WPA_Water_Storage_Qty_Ctrl', '0', '0', 'NODE3000009', 94)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_OGA_Process_Cmd_Status', '0', '0', 'NODE3000010', 95)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_OGA_O2_Production_Rate', '0', '0', 'NODE3000011', 96)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node3_MTL_TWMV_Out_Temp', '0', '0', 'NODE3000012', 97)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node3_LTL_TWMV_Out_Temp', '0', '0', 'NODE3000013', 98)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node3_MTL_PPA_Avg_Accum_Qty', '0', '0', 'NODE3000017', 99)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node_3_CCAA_State', '0', '0', 'NODE3000018', 100)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Node3_LTL_PPA_Avg_Accum_Qty', '0', '0', 'NODE3000019', 101)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_2A_PVCU_On_Off_V_Stat', '0', '0', 'P4000003', 102)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_4A_PVCU_On_Off_V_Stat', '0', '0', 'P4000006', 103)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_4B_RBI_6_Integ_I', '0', '0', 'P6000002', 104)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_4B_PVCU_On_Off_V_Stat', '0', '0', 'P6000003', 105)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_2B_PVCU_On_Off_V_Stat', '0', '0', 'P6000006', 106)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_KURS1_On', '0', '0', 'RUSSEG000002', 107)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_KURS2_On', '0', '0', 'RUSSEG000003', 108)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SM_ECW_KURS_Fail', '0', '0', 'RUSSEG000004', 109)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_KURS_Rng', '0', '0', 'RUSSEG000005', 110)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_KURS_Vel', '0', '0', 'RUSSEG000006', 111)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SM_KURS_P_Test_Mode_RS', '0', '0', 'RUSSEG000007', 112)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SM_KURS_P_Capture_Signal_RS', '0', '0', 'RUSSEG000008', 113)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SM_KURS_P_Target_Acquisition_Signal_RS', '0', '0', 'RUSSEG000009', 114)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SM_KURS_P_Functional_Mode_Signal_RS', '0', '0', 'RUSSEG000010', 115)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SM_KURS_P_In_Stand_by_Mode_RS', '0', '0', 'RUSSEG000011', 116)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_Dock_Contact', '0', '0', 'RUSSEG000012', 117)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_Forward_Port_Engaged', '0', '0', 'RUSSEG000013', 118)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_Aft_Port_Engaged', '0', '0', 'RUSSEG000014', 119)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_Nadir_Port_Engaged', '0', '0', 'RUSSEG000015', 120)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_FGB_Nadir_Port_Engaged', '0', '0', 'RUSSEG000016', 121)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_UDM_Nadir_Port_Engaged', '0', '0', 'RUSSEG000017', 122)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_MRM1_Port_Engaged', '0', '0', 'RUSSEG000018', 123)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_MRM2_Port_Engaged', '0', '0', 'RUSSEG000019', 124)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_ETOV_Hooks_Closed', '0', '0', 'RUSSEG000020', 125)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_Act_Att_Ref_Frame', '0', '0', 'RUSSEG000021', 126)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_RS_Is_Master', '0', '0', 'RUSSEG000022', 127)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_Ready_For_Indicator', '0', '0', 'RUSSEG000023', 128)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSProp_SM_Thrstr_Mode_Terminated', '0', '0', 'RUSSEG000024', 129)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RSMCS_SM_SUDN_Mode', '0', '0', 'RUSSEG000025', 130)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SARJ_Port_Commanded_Position', '0', '0', 'S0000005', 131)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S01A_C_RPC_01_Ext_1_MDM_On_Off_Stat', '0', '0', 'S0000010', 132)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S01A_C_RPC_16_S0_1_MDM_On_Off_Stat', '0', '0', 'S0000011', 133)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S02B_C_RPC_01_Ext_2_MDM_On_Off_Stat', '0', '0', 'S0000012', 134)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S02B_C_RPC_16_S0_2_MDM_On_Off_Stat', '0', '0', 'S0000013', 135)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S11A_C_RPC_03_STR_MDM_On_Off_Stat', '0', '0', 'S1000006', 136)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S11A_C_RPC_16_S1_1_MDM_On_Off_Stat', '0', '0', 'S1000007', 137)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_S12B_B_RPC_05_S1_2_MDM_On_Off_Stat', '0', '0', 'S1000008', 138)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_1A_PVCU_On_Off_V_Stat', '0', '0', 'S4000003', 139)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_3A_PVCU_On_Off_V_Stat', '0', '0', 'S4000006', 140)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_3B_PVCU_On_Off_V_Stat', '0', '0', 'S6000003', 141)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('DCSU_1B_PVCU_On_Off_V_Stat', '0', '0', 'S6000006', 142)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Time of Occurrence', '0', '0', 'TIME_000001', 143)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Year of Occurrence', '0', '0', 'TIME_000002', 144)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_SEQ_CMG1_Online', '0', '0', 'USLAB000001', 145)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_SEQ_CMG2_Online', '0', '0', 'USLAB000002', 146)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_SEQ_CMG3_Online', '0', '0', 'USLAB000003', 147)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_SEQ_CMG4_Online', '0', '0', 'USLAB000004', 148)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Num_CMGs_Online', '0', '0', 'USLAB000005', 149)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Unlim_Cntl_Trq_InBody_X', '0', '0', 'USLAB000006', 150)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Unlim_Cntl_Trq_InBody_Y', '0', '0', 'USLAB000007', 151)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Unlim_Cntl_Trq_InBody_Z', '0', '0', 'USLAB000008', 152)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_CMG_Mom_Act_Mag', '0', '0', 'USLAB000009', 153)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_CMG_Mom_Act_Cap_Pct', '0', '0', 'USLAB000010', 154)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Desat_Request_Inh', '0', '0', 'USLAB000011', 155)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_AD_Selected_Att_Source', '0', '0', 'USLAB000013', 156)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_AD_Selected_Rate_Source', '0', '0', 'USLAB000014', 157)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_SD_Selected_State_Source', '0', '0', 'USLAB000015', 158)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Act_CCDB_Att_Cntl_Type', '0', '0', 'USLAB000016', 159)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Act_CCDB_Att_Cntl_Ref_Frame', '0', '0', 'USLAB000017', 160)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_LVLH_Att_Quatrn_0', '0', '0', 'USLAB000018', 161)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_LVLH_Att_Quatrn_1', '0', '0', 'USLAB000019', 162)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_LVLH_Att_Quatrn_2', '0', '0', 'USLAB000020', 163)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_LVLH_Att_Quatrn_3', '0', '0', 'USLAB000021', 164)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Att_Error_X', '0', '0', 'USLAB000022', 165)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Att_Error_Y', '0', '0', 'USLAB000023', 166)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Att_Error_Z', '0', '0', 'USLAB000024', 167)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_Current_Inert_Rate_Vector_X', '0', '0', 'USLAB000025', 168)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_Current_Inert_Rate_Vector_Y', '0', '0', 'USLAB000026', 169)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Pointing_Current_Inert_Rate_Vector_Z', '0', '0', 'USLAB000027', 170)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Act_CCDB_AttQuatrn_0_Cmd', '0', '0', 'USLAB000028', 171)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Act_CCDB_AttQuatrn_1_Cmd', '0', '0', 'USLAB000029', 172)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Act_CCDB_AttQuatrn_2_Cmd', '0', '0', 'USLAB000030', 173)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Act_CCDB_AttQuatrn_3_Cmd', '0', '0', 'USLAB000031', 174)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_CMG_Mom_Act_Cap', '0', '0', 'USLAB000038', 175)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_PS_Solar_Beta_Angle', '0', '0', 'USLAB000040', 176)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_Loss_Of_CMG_Att_Cntl_Latched_Caution', '0', '0', 'USLAB000041', 177)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CCS_Loss_of_ISS_Attitude_Control_Warning', '0', '0', 'USLAB000042', 178)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_GPS1_Operational_Status', '0', '0', 'USLAB000043', 179)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_GPS2_Operational_Status', '0', '0', 'USLAB000044', 180)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG1_SpinBrg_Temp1', '0', '0', 'USLAB000045', 181)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG2_SpinBrg_Temp1', '0', '0', 'USLAB000046', 182)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG3_SpinBrg_Temp1', '0', '0', 'USLAB000047', 183)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG4_SpinBrg_Temp1', '0', '0', 'USLAB000048', 184)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG1_SpinBrg_Temp2', '0', '0', 'USLAB000049', 185)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG2_SpinBrg_Temp2', '0', '0', 'USLAB000050', 186)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG3_SpinBrg_Temp2', '0', '0', 'USLAB000051', 187)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG4_SpinBrg_Temp2', '0', '0', 'USLAB000052', 188)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_MCA_ppO2', '0', '0', 'USLAB000053', 189)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_MCA_ppN2', '0', '0', 'USLAB000054', 190)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_MCA_ppCO2', '0', '0', 'USLAB000055', 191)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_LTL_PPA_Avg_Accum_Qty', '0', '0', 'USLAB000056', 192)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_MTL_PPA_Avg_Accum_Qty', '0', '0', 'USLAB000057', 193)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_PCA_Cabin_Pressure', '0', '0', 'USLAB000058', 194)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB1P6_CCAA_In_T1', '0', '0', 'USLAB000059', 195)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_MTL_Regen_TWMV_Out_Temp', '0', '0', 'USLAB000060', 196)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_LTL_TWMV_Out_Temp', '0', '0', 'USLAB000061', 197)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_VRS_Vent_Vlv_Posn_Raw', '0', '0', 'USLAB000062', 198)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB_VES_Vent_Vlv_Posn_Raw', '0', '0', 'USLAB000063', 199)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB1P6_CCAA_State', '0', '0', 'USLAB000064', 200)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('LAB1S6_CCAA_State', '0', '0', 'USLAB000065', 201)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD11B_A_RPC_07_CC_1_MDM_On_Off_Stat', '0', '0', 'USLAB000066', 202)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD52B_A_RPC_03_CC_2_MDM_On_Off_Stat', '0', '0', 'USLAB000067', 203)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA1A4A_E_RPC_01_CC_3_MDM_On_Off_Stat', '0', '0', 'USLAB000068', 204)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD11B_A_RPC_09_Int_1_MDM_On_Off_Stat', '0', '0', 'USLAB000069', 205)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD52B_A_RPC_04_Int_2_MDM_On_Off_Stat', '0', '0', 'USLAB000070', 206)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD11B_A_RPC_11_PL_1_MDM_On_Off_Stat', '0', '0', 'USLAB000071', 207)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD22B_A_RPC_01_PL_2_MDM_On_Off_Stat', '0', '0', 'USLAB000072', 208)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA1B_B_RPC_14_GNC_1_MDM_On_Off_Stat', '0', '0', 'USLAB000073', 209)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA2B_E_RPC_03_GNC_2_MDM_On_Off_Stat', '0', '0', 'USLAB000074', 210)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD11B_A_RPC_08_PMCU_1_MDM_On_Off_Stat', '0', '0', 'USLAB000075', 211)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD52B_A_RPC_01_PMCU_2_MDM_On_Off_Stat', '0', '0', 'USLAB000076', 212)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA1B_B_RPC_09_LAB_1_MDM_On_Off_Stat', '0', '0', 'USLAB000077', 213)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA2B_E_RPC_04_LAB_2_MDM_On_Off_Stat', '0', '0', 'USLAB000078', 214)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA2B_E_RPC_13_LAB_3_MDM_On_Off_Stat', '0', '0', 'USLAB000079', 215)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA1B_D_RPC_01_LAB_FSEGF_Sys_Pwr_1_On_Off_Stat', '0', '0', 'USLAB000080', 216)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CA_AttMnvr_In_Progress', '0', '0', 'USLAB000081', 217)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Prim_CCS_MDM_Std_Cmd_Accept_Cnt', '0', '0', 'USLAB000082', 218)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Prim_CCS_MDM_Data_Load_Cmd_Accept_Cnt', '0', '0', 'USLAB000083', 219)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Coarse_Time', '0', '0', 'USLAB000084', 220)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Fine_Time', '0', '0', 'USLAB000085', 221)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Prim_CCS_MDM_PCS_Cnct_Cnt', '0', '0', 'USLAB000087', 222)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Ku_HRFM_VBSP_1_Activity_Indicator', '0', '0', 'USLAB000088', 223)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Ku_HRFM_VBSP_2_Activity_Indicator', '0', '0', 'USLAB000089', 224)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Ku_HRFM_VBSP_3_Activity_Indicator', '0', '0', 'USLAB000090', 225)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Ku_HRFM_VBSP_4_Activity_Indicator', '0', '0', 'USLAB000091', 226)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Audio_IAC1_Mode_Indication', '0', '0', 'USLAB000093', 227)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Audio_IAC2_Mode_Indication', '0', '0', 'USLAB000094', 228)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('VDS_Destination_9_Source_ID', '0', '0', 'USLAB000095', 229)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('VDS_Destination_13_Source_ID', '0', '0', 'USLAB000096', 230)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('VDS_Destination_14_Source_ID', '0', '0', 'USLAB000097', 231)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('VDS_Destination_29_Source_ID', '0', '0', 'USLAB000098', 232)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LAD52B_A_RPC_08_UHF_SSSR_1_On_Off_Stat', '0', '0', 'USLAB000099', 233)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('RPCM_LA1B_H_RPC_04_UHF_SSSR_2_On_Off_Stat', '0', '0', 'USLAB000100', 234)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('UHF_Frame_Sync', '0', '0', 'USLAB000101', 235)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_SD_Selected_State_Time_Tag', '0', '0', 'USLAB000102', 236)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG1_IG_Vibration', '0', '0', 'Z1000001', 237)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG2_IG_Vibration', '0', '0', 'Z1000002', 238)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG3_IG_Vibration', '0', '0', 'Z1000003', 239)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG4_IG_Vibration', '0', '0', 'Z1000004', 240)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG1_SpinMtr_Current', '0', '0', 'Z1000005', 241)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG2_SpinMtr_Current', '0', '0', 'Z1000006', 242)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG3_SpinMtr_Current', '0', '0', 'Z1000007', 243)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG4_SpinMtr_Current', '0', '0', 'Z1000008', 244)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG1_Current_Wheel_Speed', '0', '0', 'Z1000009', 245)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG2_Current_Wheel_Speed', '0', '0', 'Z1000010', 246)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG3_Current_Wheel_Speed', '0', '0', 'Z1000011', 247)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('USGNC_CMG4_Current_Wheel_Speed', '0', '0', 'Z1000012', 248)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('eva_crew_1', '0', 'crew1', '0', 249)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('eva_crew_2', '0', 'crew2', '0', 250)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('us_eva_#', '0', '0', '0', 251)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('rs_eva_#', '0', '0', '0', 252)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('last_us_eva_duration', '0', '0', '0', 253)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('last_rs_eva_duration', '0', '0', '0', 254)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('Lightstreamer', '0', 'Unsubscribed', '0', 255)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('ClientStatus', '0', '0', '0', 256)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS MT Position Float', '0', '0', 'CSAMT000001', 257)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS MT Utility Port ID', '0', '0', 'CSAMT000002', 258)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS EDCD SSRMS Base Location', '0', '0', 'CSASSRMS001', 259)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS EDCD SSRMS Base Location2', '0', '0', 'CSASSRMS002', 260)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS EDCD SSRMS Operating Base', '0', '0', 'CSASSRMS003', 261)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS SR Measured Joint Position', '0', '0', 'CSASSRMS004', 262)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS SY Measured Joint Position', '0', '0', 'CSASSRMS005', 263)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS SP Measured Joint Position', '0', '0', 'CSASSRMS006', 264)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS EP Measured Joint Position', '0', '0', 'CSASSRMS007', 265)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS WP Measured Joint Position', '0', '0', 'CSASSRMS008', 266)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS WY Measured Joint Position', '0', '0', 'CSASSRMS009', 267)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('SSRMS WR Measured Joint Position', '0', '0', 'CSASSRMS010', 268)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Payload Status SSRMS Tip LEE', '0', '0', 'CSASSRMS011', 269)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Base Location SPDM', '0', '0', 'CSASPDM0001', 270)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Base Location SPDM2', '0', '0', 'CSASPDM0002', 271)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 SR Measured Joint Position', '0', '0', 'CSASPDM0003', 272)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 SY Measured Joint Position', '0', '0', 'CSASPDM0004', 273)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 SP Measured Joint Position', '0', '0', 'CSASPDM0005', 274)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 EP Measured Joint Position', '0', '0', 'CSASPDM0006', 275)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 WP Measured Joint Position', '0', '0', 'CSASPDM0007', 276)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 WY Measured Joint Position', '0', '0', 'CSASPDM0008', 277)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 1 WR Measured Joint Position', '0', '0', 'CSASPDM0009', 278)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS Payload Status OCS SPDM Arm 1 OTCM', '0', '0', 'CSASPDM0010', 279)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 SR Measured Joint Position', '0', '0', 'CSASPDM0011', 280)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 SY Measured Joint Position', '0', '0', 'CSASPDM0012', 281)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 SP Measured Joint Position', '0', '0', 'CSASPDM0013', 282)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 EP Measured Joint Position', '0', '0', 'CSASPDM0014', 283)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 WP Measured Joint Position', '0', '0', 'CSASPDM0015', 284)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 WY Measured Joint Position', '0', '0', 'CSASPDM0016', 285)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM 2 WR Measured Joint Position', '0', '0', 'CSASPDM0017', 286)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS Payload Status OCS SPDM Arm 2 OTCM', '0', '0', 'CSASPDM0018', 287)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS Payload Status OCS SPDM Arm 2 OTCM2', '0', '0', 'CSASPDM0019', 288)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS SPDM Body Roll Joint Position', '0', '0', 'CSASPDM0020', 289)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS Payload Status OCS SPDM Body', '0', '0', 'CSASPDM0021', 290)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS Payload Status OCS SPDM Body2', '0', '0', 'CSASPDM0022', 291)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Payload Status MBS MCAS', '0', '0', 'CSAMBS00001', 292)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Payload Status MBS MCAS2', '0', '0', 'CSAMBS00002', 293)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Payload Status MBS POA', '0', '0', 'CSAMBA00003', 294)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db); rc = sqlite3_exec(db, "INSERT OR IGNORE INTO telemetry VALUES('MSS OCS Payload Status MBS POA2', '0', '0', 'CSAMBA00004', 295)", 0, 0, &zErrMsg);
handleSQLiteRC(rc, output, db);
#if CLOSEAFTERINIT_SQLITE
rc = sqlite3_close(db);
handleSQLiteRC(rc, output, db);
output->printlnColor("[ISSLIVE-INIT-SQLITE3] Database initialized and connection closed.", ANSI::Color::GREEN);
#endif
output->printlnColor("[ISSLIVE-INIT-SQLITE3] Database initialized.", ANSI::Color::GREEN);
}
////UNUSED (not working)
//void ISSLIVE_Telemetry::lightstreamerUpdate()
//{
// std::vector<LSSubscription*>* subscriptions = lsc->getSubscriptions();
//
// for (int i = 0; i < subscriptions->size(); i++) {
// //LSTables are the objects containing the LS Data
// LSTable* table = subscriptions->at(i)->table_ref;
//
// output->println("Num objects on sub " + to_string(i) + ": " + to_string(subscriptions->at(i)->getObjectIds().size()));
//
// for (int j = 0; j < subscriptions->at(i)->getObjectIds().size(); j++) {
// vector<string>* values = table->getItemData(j);
//
// if (values->size() > 0) {
// output->println("Size of values: " + to_string(values->size()));
// /*cout << "ITEM:" << subscriptions->at(i)->getObjectIds()[j] << endl;
// cout << "BID:" << values->at(0) << endl;
// cout << "OFFER:" << values->at(1) << endl;*/
// }
//
// ////////
//
// /*output->println("Incoming Info:");
// output->println("Num: " + to_string(j));
// output->println("ObjId: " + subscriptions->at(i)->getObjectIds()[j]);*/
// }
// }
//}
//
//
////UNUSED (not working)
//void ISSLIVE_Telemetry::lightstreamerInit()
//{
// string ls_url, ls_username, ls_password, ls_adapter;
// ls_url = "https://demo-apd.marketdatasystems.com";
// ls_username = "MyIGAccount";
// ls_password = "CST-6bc9d12be108b8a4216e68c0b4b08e04db87f3b4afd2328bac14c9|XST-6895c30224df50889c1ac9cc5263e9864d0cc96404";
//
// ls_url = getInst_Parameter("URL")->GetString();
// ls_username = getInst_Parameter("Username")->GetString();
// ls_password = getInst_Parameter("Password")->GetString();
// ls_adapter = getInst_Parameter("Adapter")->GetString();
//
//
// //instanciates new LSClient object with connection parameters
// lsc = new LSClient(ls_url, ls_username, ls_password, ls_adapter);
//
//
// //Adds a new subscription with 2 items to the client.
// /*lsc->addSubscription(new LSSubscription("MARKET",
// { "MARKET:IX.D.CAC.IMF.IP",
// "MARKET:IX.D.DAX.IMF.IP" },
// { "BID","OFFER" }));*/
//
// const vector<string> classes{ "TimeStamp", "Value" };
//
// lsc->addSubscription(new LSSubscription("MERGE",
// {
// telemIdentifiers //from TelemIdents.h
// },
// {
// classes
// }));
// lsc->addSubscription(new LSSubscription("MERGE",
// {
// "TIME_000001"
// },
// {
// "TimeStamp", "Value", "Status.Class", "Status.Indicator"
// }));
//
// output->println("[LSCLIENT] Connecting to LightStreamer...");
//
// //starts stream connection thread
// lsc->start();
//
// //waits until LSClient stream is connected.
// while (lsc->getStatus() != LS_STATUS_CONNECTED) {
// cout << ".";
// sleep(1);
// }
//
// output->println("[LSCLIENT] Connected.");
//
// //Sends added subscriptions to Lightstreamer control connection.
// lsc->subscribeAll();
// }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment