quick and dirty telemetry logging

This commit is contained in:
Paul Dino Jones 2023-07-01 12:23:03 -04:00
parent a7718d8355
commit 0b3ff679a5
1 changed files with 139 additions and 14 deletions

View File

@ -22,7 +22,9 @@
#include "../slog/slog.h" #include "../slog/slog.h"
#define DEFAULT_UPDATE_RATE 60 #define DEFAULT_UPDATE_RATE 60
#define DATA_UPDATE_RATE 4 #define DATA_UPDATE_RATE 32
#define TRACK_SAMPLE_RATE 4
#define SIM_CHECK_RATE 1
#define ADDRESS "tcp://localhost:1883" #define ADDRESS "tcp://localhost:1883"
#define CLIENTID "gilles" #define CLIENTID "gilles"
@ -155,7 +157,7 @@ int mainloop(Parameters* p)
p->simmap = simmap; p->simmap = simmap;
fprintf(stdout, "Searching for sim data... Press q to quit...\n"); fprintf(stdout, "Searching for sim data... Press q to quit...\n");
double update_rate = 1; double update_rate = SIM_CHECK_RATE;
int go = true; int go = true;
char lastsimstatus = false; char lastsimstatus = false;
while (go == true) while (go == true)
@ -172,7 +174,8 @@ int mainloop(Parameters* p)
{ {
p->sim = SIMULATOR_ASSETTO_CORSA; p->sim = SIMULATOR_ASSETTO_CORSA;
int error = siminit(simdata, simmap, 1); int error = siminit(simdata, simmap, 1);
if (error == 0) simdatamap(simdata, simmap, 1);
if (error == 0 && simdata->simstatus > 1)
{ {
slogi("found Assetto Corsa, starting application..."); slogi("found Assetto Corsa, starting application...");
p->simon = true; p->simon = true;
@ -278,7 +281,7 @@ void* clilooper(void* thargs)
double update_rate = DEFAULT_UPDATE_RATE; double update_rate = DEFAULT_UPDATE_RATE;
int go = true; int go = true;
char lastsimstatus = false; char lastsimstatus = false;
while (go == true) while (go == true && simdata->simstatus > 1)
{ {
simdatamap(simdata, simmap, p->sim); simdatamap(simdata, simmap, p->sim);
@ -293,6 +296,10 @@ void* clilooper(void* thargs)
{ {
slogi("speed: %i gear: %i", simdata->velocity, simdata->gear); slogi("speed: %i gear: %i", simdata->velocity, simdata->gear);
} }
if(ch == 's')
{
slogi("status: %i", simdata->simstatus);
}
} }
} }
@ -506,7 +513,7 @@ void* looper(void* thargs)
sprintf(tracktemp, "%.0f\n", simdata->tracktemp); sprintf(tracktemp, "%.0f\n", simdata->tracktemp);
wattrset(win2, COLOR_PAIR(2)); wattrset(win2, COLOR_PAIR(2));
waddstr(win2, tracktemp); waddstr(win2, tracktemp);
char numlaps[14]; char numlaps[14];
wbkgd(win2,COLOR_PAIR(1)); wbkgd(win2,COLOR_PAIR(1));
wattrset(win2, COLOR_PAIR(1)); wattrset(win2, COLOR_PAIR(1));
@ -514,7 +521,7 @@ void* looper(void* thargs)
sprintf(numlaps, "%i\n", simdata->numlaps); sprintf(numlaps, "%i\n", simdata->numlaps);
wattrset(win2, COLOR_PAIR(2)); wattrset(win2, COLOR_PAIR(2));
waddstr(win2, numlaps); waddstr(win2, numlaps);
char timeleft[14]; char timeleft[14];
int hours = simdata->timeleft/6000; int hours = simdata->timeleft/6000;
int minutes = simdata->timeleft/60 - (hours*6000); int minutes = simdata->timeleft/60 - (hours*6000);
@ -850,7 +857,7 @@ int addstint(struct _h_connection* conn, int sessionid, int driverid, int carid)
json_t *root = json_object(); json_t *root = json_object();
json_t *json_arr = json_array(); json_t *json_arr = json_array();
json_object_set_new( root, "table", json_string("session_stints") ); json_object_set_new( root, "table", json_string("stints") );
json_object_set_new( root, "values", json_arr ); json_object_set_new( root, "values", json_arr );
json_t* values = json_object(); json_t* values = json_object();
@ -876,7 +883,7 @@ int addstintlap(struct _h_connection* conn, int stintid)
json_t *root = json_object(); json_t *root = json_object();
json_t *json_arr = json_array(); json_t *json_arr = json_array();
json_object_set_new( root, "table", json_string("stint_laps") ); json_object_set_new( root, "table", json_string("laps") );
json_object_set_new( root, "values", json_arr ); json_object_set_new( root, "values", json_arr );
json_t* values = json_object(); json_t* values = json_object();
@ -918,9 +925,80 @@ int addcar(struct _h_connection* conn, int carid, const char* carname)
carid = getLastInsertID(conn); carid = getLastInsertID(conn);
return carid; return carid;
} }
int addtelemetry(struct _h_connection* conn, int points, int stintid)
{
json_t *root = json_object();
json_t *json_arr = json_array();
json_object_set_new( root, "table", json_string("telemetry") );
json_object_set_new( root, "values", json_arr );
json_t* values = json_object();
json_object_set_new(values, "lap_id", json_integer(stintid));
json_object_set_new(values, "points", json_integer(points));
json_array_append(json_arr, values);
int res = h_insert(conn, root, NULL);
json_decref(root);
json_decref(values);
int telemid = getLastInsertID(conn);
return telemid;
}
int updatetelemetry(struct _h_connection* conn, int telemid, int size, const char* column, void* data)
{
//char *pp = malloc((size*2)+1);
char output[(size * 2) + 1];
char *ppp = &output[0];
unsigned char *p = data;
int i;
for (i=0; i<size; i++) {
ppp += sprintf(ppp, "%02hhX", p[i]);
//snprintf(pp, (size*2)+1, "%s%02hhX", pp, p[i]);
}
//char output2[((size*2)+3)];
////snprintf(output2, (size*2)+18, "%s%s%s", "decode('", output, "', 'hex')");
//snprintf(output2, (size*2)+18, "%s %s%s", "decode('", output, "', 'hex')");
//slogt("heres a string %s", output2);
//json_t* j_query = json_pack("{sss[{siso}]}",
// "table",
// "lap_telemetry",
// "values",
// "lap_id",
// lapid,
// "steer",
// json_pack("s", "decode('deadbeef', 'hex')"));
char* query = malloc((sizeof(char)*71)+(sizeof(column))+(size*2)+1);
sprintf(query, "UPDATE telemetry SET %s = decode('%s', 'hex') WHERE telemetry_id = %i", column, &output, telemid);
int res1 = h_query_update(conn, query);
//int res1 = h_insert(conn, j_query, NULL);
slogt("got res %i", res1);
free(query);
//json_t *root = json_object();
//json_t *json_arr = json_array();
//json_object_set_new( root, "table", json_string("lap_telemetry") );
//json_object_set_new( root, "values", json_arr );
//json_t* values = json_object();
//json_object_set_new(values, "lap_id", json_integer(lapid));
//json_object_set_new(values, "steer", json_string(output2));
//json_array_append(json_arr, values);
//int res = h_insert(conn, root, NULL);
//json_decref(root);
//json_decref(values);
return res1;
}
int gettrack(struct _h_connection* conn, const char* trackname) int gettrack(struct _h_connection* conn, const char* trackname)
{ {
@ -1035,6 +1113,22 @@ int getcar(struct _h_connection* conn, const char* carname)
return car_id; return car_id;
} }
void print_bytes(void *ptr, int size)
{
char *pp = malloc((size*2)+1);
char output[(size * 2) + 1];
char *ppp = &output[0];
unsigned char *p = ptr;
int i;
for (i=0; i<size; i++) {
slogt("%02hhX", p[i]);
ppp += sprintf(ppp, "%02X", p[i]);
//snprintf(pp, (size*2)+1, "%s%02hhX", pp, p[i]);
}
slogt("\n");
slogt("bytes %s", output);
}
void* simviewmysql(void* thargs) void* simviewmysql(void* thargs)
@ -1086,14 +1180,37 @@ void* simviewmysql(void* thargs)
sessionstatus = simdata->session; sessionstatus = simdata->session;
lastsessionstatus = sessionstatus; lastsessionstatus = sessionstatus;
lap = simdata->lap; lap = simdata->lap;
lastlap = lap;
double update_rate = DATA_UPDATE_RATE; double update_rate = DATA_UPDATE_RATE;
struct pollfd mypoll = { STDIN_FILENO, POLLIN|POLLPRI }; struct pollfd mypoll = { STDIN_FILENO, POLLIN|POLLPRI };
int go = true; int go = true;
char lastsimstatus = false; char lastsimstatus = false;
int tick = 0;
slogt("spline %f", simdata->trackspline);
int track_samples = simdata->trackspline / TRACK_SAMPLE_RATE;
slogt("track samples %i", track_samples);
int* speeddata = malloc(track_samples * sizeof(simdata->velocity));
double* steerdata = malloc(track_samples * sizeof(simdata->steer));
double* acceldata = malloc(track_samples * sizeof(simdata->gas));
double* brakedata = malloc(track_samples * sizeof(simdata->brake));
while (go == true && p->program_state >= 0) while (go == true && p->program_state >= 0)
{ {
slogt("tick"); slogt("tick %i", tick);
slogt("pos %f", simdata->playerspline);
int pos = (int) track_samples * simdata->playerspline;
slogt("normpos %i", pos);
steerdata[pos] = simdata->steer;
acceldata[pos] = simdata->gas;
speeddata[pos] = simdata->velocity;
brakedata[pos] = simdata->brake;
pitstatus = 0; pitstatus = 0;
sessionstatus = simdata->session; sessionstatus = simdata->session;
lap = simdata->lap; lap = simdata->lap;
@ -1114,16 +1231,24 @@ void* simviewmysql(void* thargs)
if (lap != lastlap) if (lap != lastlap)
{ {
slogt("New lap detected"); slogt("New lap detected");
// close last stint lap and telemetry lap
stintlapid = addstintlap(conn, stintid); stintlapid = addstintlap(conn, stintid);
int telemid = addtelemetry(conn, track_samples, stintlapid);
int b = updatetelemetry(conn, telemid, track_samples*sizeof(double), "steer", steerdata);
b = updatetelemetry(conn, telemid, track_samples*sizeof(double), "accel", acceldata);
b = updatetelemetry(conn, telemid, track_samples*sizeof(double), "brake", brakedata);
//print_bytes(acceldata, tick*sizeof(double));
print_bytes(&acceldata[pos], sizeof(double));
slogt("last accel %f on tick %i", acceldata[track_samples], track_samples);
slogt("telemetry respone: %i", b);
// close last stint lap and telemetry lap
tick = 0;
} }
lastpitstatus = pitstatus; lastpitstatus = pitstatus;
lastsessionstatus = sessionstatus; lastsessionstatus = sessionstatus;
lastlap = lap; lastlap = lap;
if( poll(&mypoll, 1, 1000.0/update_rate) ) tick++;
{
} poll(&mypoll, 1, 1000 / DATA_UPDATE_RATE);
} }