Fix formatting on new code
This commit is contained in:
parent
66e9049891
commit
18faa3a65a
|
|
@ -104,14 +104,14 @@ void* browseloop(Parameters* p, char* datadir)
|
||||||
{
|
{
|
||||||
|
|
||||||
struct _h_result result;
|
struct _h_result result;
|
||||||
struct _h_connection * conn;
|
struct _h_connection* conn;
|
||||||
conn = h_connect_pgsql(p->db_conn);
|
conn = h_connect_pgsql(p->db_conn);
|
||||||
|
|
||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
{
|
{
|
||||||
slogf("Unable to connect to configured Gilles database. Are the parameters in the config correct? Is the user allowed to access from this address?");
|
slogf("Unable to connect to configured Gilles database. Are the parameters in the config correct? Is the user allowed to access from this address?");
|
||||||
p->err = E_FAILED_DB_CONN;
|
p->err = E_FAILED_DB_CONN;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
slogt("Starting analyzer");
|
slogt("Starting analyzer");
|
||||||
|
|
@ -326,221 +326,224 @@ void* browseloop(Parameters* p, char* datadir)
|
||||||
|
|
||||||
if (action == 2)
|
if (action == 2)
|
||||||
{
|
{
|
||||||
slogt("going to perform an action");
|
slogt("going to perform an action");
|
||||||
int err = E_NO_ERROR;
|
int err = E_NO_ERROR;
|
||||||
sessions = getsessions(conn, "Sessions", &sess);
|
sessions = getsessions(conn, "Sessions", &sess);
|
||||||
if (sessions < 0)
|
if (sessions < 0)
|
||||||
{
|
{
|
||||||
go = false;
|
go = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
curresults = sessions;
|
curresults = sessions;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action == 3)
|
if (action == 3)
|
||||||
{
|
{
|
||||||
slogt("going to perform an action");
|
slogt("going to perform an action");
|
||||||
|
|
||||||
int err = E_NO_ERROR;
|
int err = E_NO_ERROR;
|
||||||
stintsid = getstints(conn, "Stints", &stints, stint_useid);
|
stintsid = getstints(conn, "Stints", &stints, stint_useid);
|
||||||
|
curresults = stintsid;
|
||||||
|
if (stintsid < 0)
|
||||||
|
{
|
||||||
|
go = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
curresults = stintsid;
|
curresults = stintsid;
|
||||||
if (stintsid < 0)
|
}
|
||||||
{
|
|
||||||
go = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
curresults = stintsid;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (action == 4)
|
if (action == 4)
|
||||||
{
|
{
|
||||||
slogt("going to perform an action");
|
slogt("going to perform an action");
|
||||||
|
|
||||||
int err = E_NO_ERROR;
|
int err = E_NO_ERROR;
|
||||||
lapsresults = getlaps(conn, "laps", &lapsdb, lap_useid);
|
lapsresults = getlaps(conn, "laps", &lapsdb, lap_useid);
|
||||||
slogt("laps query executed");
|
slogt("laps query executed");
|
||||||
|
curresults = lapsresults;
|
||||||
|
if (lapsresults < 0)
|
||||||
|
{
|
||||||
|
go = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
curresults = lapsresults;
|
curresults = lapsresults;
|
||||||
if (lapsresults < 0)
|
}
|
||||||
{
|
|
||||||
go = false;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
curresults = lapsresults;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action > 0)
|
if (action > 0)
|
||||||
{
|
{
|
||||||
wclear(bwin1);
|
wclear(bwin1);
|
||||||
|
|
||||||
switch(screen) {
|
switch(screen)
|
||||||
case SESSIONS_SCREEN:
|
{
|
||||||
|
case SESSIONS_SCREEN:
|
||||||
|
|
||||||
|
|
||||||
for(int i=0; i<sessions+1; i++)
|
for(int i=0; i<sessions+1; i++)
|
||||||
{
|
|
||||||
int displaycolumns = 6;
|
|
||||||
int width1 = displaycolumns + 1;
|
|
||||||
int width2 = displaycolumns * 2;
|
|
||||||
|
|
||||||
if (i == 0)
|
|
||||||
{
|
{
|
||||||
|
int displaycolumns = 6;
|
||||||
|
int width1 = displaycolumns + 1;
|
||||||
|
int width2 = displaycolumns * 2;
|
||||||
|
|
||||||
wattrset(bwin1, COLOR_PAIR(2));
|
if (i == 0)
|
||||||
wattron(bwin1, A_BOLD);
|
{
|
||||||
mvwaddnstr(bwin1, 2, bwiny/2, "Sessions", -1);
|
|
||||||
mvwaddnstr(bwin1, 3, bwiny/width2, "idx", -1);
|
wattrset(bwin1, COLOR_PAIR(2));
|
||||||
mvwaddnstr(bwin1, 3, bwiny/width1+bwiny/width2, "name", -1);
|
wattron(bwin1, A_BOLD);
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/width1)*2)+bwiny/width2, "track", -1);
|
mvwaddnstr(bwin1, 2, bwiny/2, "Sessions", -1);
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/width1)*3)+bwiny/width2, "car", -1);
|
mvwaddnstr(bwin1, 3, bwiny/width2, "idx", -1);
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/width1)*4)+bwiny/width2, "stints", -1);
|
mvwaddnstr(bwin1, 3, bwiny/width1+bwiny/width2, "name", -1);
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/width1)*5)+bwiny/width2, "time", -1);
|
mvwaddnstr(bwin1, 3, ((bwiny/width1)*2)+bwiny/width2, "track", -1);
|
||||||
mvwhline(bwin1, 4, 0, 0, bwiny);
|
mvwaddnstr(bwin1, 3, ((bwiny/width1)*3)+bwiny/width2, "car", -1);
|
||||||
wattroff(bwin1, A_BOLD);
|
mvwaddnstr(bwin1, 3, ((bwiny/width1)*4)+bwiny/width2, "stints", -1);
|
||||||
wattrset(bwin1, COLOR_PAIR(1));
|
mvwaddnstr(bwin1, 3, ((bwiny/width1)*5)+bwiny/width2, "time", -1);
|
||||||
|
mvwhline(bwin1, 4, 0, 0, bwiny);
|
||||||
|
wattroff(bwin1, A_BOLD);
|
||||||
|
wattrset(bwin1, COLOR_PAIR(1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( i == selection )
|
||||||
|
{
|
||||||
|
wattrset(bwin1, COLOR_PAIR(5));
|
||||||
|
stint_useid = sess.rows[i-1].session_id;
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2, " * ", 3);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/6, " ", 3);
|
||||||
|
}
|
||||||
|
char idchar[4];
|
||||||
|
snprintf(idchar, 4, "%i", sess.rows[i-1].session_id);
|
||||||
|
char lapschar[4];
|
||||||
|
snprintf(lapschar, 4, "%i", sess.rows[i-1].laps);
|
||||||
|
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+2, idchar, -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+bwiny/width1, "my session name", -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*2), sess.rows[i-1].track, -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*3), sess.rows[i-1].car, -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*4), lapschar, -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*5), sess.rows[i-1].start_time, -1);
|
||||||
|
}
|
||||||
|
wattrset(bwin1, COLOR_PAIR(1));
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
|
case STINTS_SCREEN:
|
||||||
|
if (stintsid == 0)
|
||||||
{
|
{
|
||||||
|
break;
|
||||||
if ( i == selection )
|
|
||||||
{
|
|
||||||
wattrset(bwin1, COLOR_PAIR(5));
|
|
||||||
stint_useid = sess.rows[i-1].session_id;
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2, " * ", 3);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/6, " ", 3);
|
|
||||||
}
|
|
||||||
char idchar[4];
|
|
||||||
snprintf(idchar, 4, "%i", sess.rows[i-1].session_id);
|
|
||||||
char lapschar[4];
|
|
||||||
snprintf(lapschar, 4, "%i", sess.rows[i-1].laps);
|
|
||||||
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+2, idchar, -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+bwiny/width1, "my session name", -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*2), sess.rows[i-1].track, -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*3), sess.rows[i-1].car, -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*4), lapschar, -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*5), sess.rows[i-1].start_time, -1);
|
|
||||||
}
|
|
||||||
wattrset(bwin1, COLOR_PAIR(1));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case STINTS_SCREEN:
|
|
||||||
if (stintsid == 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
for(int i=0; i<stintsid+1; i++)
|
|
||||||
{
|
|
||||||
if (i == 0)
|
|
||||||
{
|
|
||||||
wattrset(bwin1, COLOR_PAIR(2));
|
|
||||||
wattron(bwin1, A_BOLD);
|
|
||||||
mvwaddnstr(bwin1, 2, bwiny/2, "Stints", -1);
|
|
||||||
mvwaddnstr(bwin1, 3, bwiny/6, "idx", 3);
|
|
||||||
mvwaddnstr(bwin1, 3, bwiny/4+bwiny/6, "name", 4);
|
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/4)*2)+bwiny/6, "laps", 4);
|
|
||||||
mvwhline(bwin1, 4, 0, 0, bwiny);
|
|
||||||
wattroff(bwin1, A_BOLD);
|
|
||||||
wattrset(bwin1, COLOR_PAIR(1));
|
|
||||||
}
|
}
|
||||||
else
|
for(int i=0; i<stintsid+1; i++)
|
||||||
|
{
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
wattrset(bwin1, COLOR_PAIR(2));
|
||||||
|
wattron(bwin1, A_BOLD);
|
||||||
|
mvwaddnstr(bwin1, 2, bwiny/2, "Stints", -1);
|
||||||
|
mvwaddnstr(bwin1, 3, bwiny/6, "idx", 3);
|
||||||
|
mvwaddnstr(bwin1, 3, bwiny/4+bwiny/6, "name", 4);
|
||||||
|
mvwaddnstr(bwin1, 3, ((bwiny/4)*2)+bwiny/6, "laps", 4);
|
||||||
|
mvwhline(bwin1, 4, 0, 0, bwiny);
|
||||||
|
wattroff(bwin1, A_BOLD);
|
||||||
|
wattrset(bwin1, COLOR_PAIR(1));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
if ( i == selection )
|
||||||
|
{
|
||||||
|
wattrset(bwin1, COLOR_PAIR(5));
|
||||||
|
lap_useid = stints.rows[i-1].stint_id;
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/6, " * ", 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/6, " ", 3);
|
||||||
|
}
|
||||||
|
char idchar[4];
|
||||||
|
snprintf(idchar, 4, "%i", stints.rows[i-1].stint_id);
|
||||||
|
char lapschar[4];
|
||||||
|
snprintf(lapschar, 4, "%i", stints.rows[i-1].laps);
|
||||||
|
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/6+2, idchar, 4);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/6+bwiny/4, "my session name", 15);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/6+((bwiny/4)*2), lapschar, 4);
|
||||||
|
}
|
||||||
|
wattrset(bwin1, COLOR_PAIR(1));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case LAPS_SCREEN:
|
||||||
|
if (lapsresults == 0)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i=0; i<lapsresults+1; i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( i == selection )
|
int displaycolumns = 4;
|
||||||
{
|
int width1 = displaycolumns + 1;
|
||||||
wattrset(bwin1, COLOR_PAIR(5));
|
int width2 = displaycolumns * 2;
|
||||||
lap_useid = stints.rows[i-1].stint_id;
|
if (i == 0)
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/6, " * ", 3);
|
{
|
||||||
}
|
wattrset(bwin1, COLOR_PAIR(2));
|
||||||
else
|
wattron(bwin1, A_BOLD);
|
||||||
{
|
mvwaddnstr(bwin1, 2, bwiny/2, "Laps", -1);
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/6, " ", 3);
|
mvwaddnstr(bwin1, 3, bwiny/width2, "idx", -1);
|
||||||
}
|
mvwaddnstr(bwin1, 3, bwiny/width1+bwiny/width2, "name", -1);
|
||||||
char idchar[4];
|
mvwaddnstr(bwin1, 3, ((bwiny/width1)*2)+bwiny/width2, "tyre", -1);
|
||||||
snprintf(idchar, 4, "%i", stints.rows[i-1].stint_id);
|
mvwaddnstr(bwin1, 3, ((bwiny/width1)*3)+bwiny/width2, "maxspeed", -1);
|
||||||
char lapschar[4];
|
mvwhline(bwin1, 4, 0, 0, bwiny);
|
||||||
snprintf(lapschar, 4, "%i", stints.rows[i-1].laps);
|
wattroff(bwin1, A_BOLD);
|
||||||
|
wattrset(bwin1, COLOR_PAIR(1));
|
||||||
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/6+2, idchar, 4);
|
}
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/6+bwiny/4, "my session name", 15);
|
else
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/6+((bwiny/4)*2), lapschar, 4);
|
{
|
||||||
}
|
|
||||||
wattrset(bwin1, COLOR_PAIR(1));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case LAPS_SCREEN:
|
|
||||||
if (lapsresults == 0)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int i=0; i<lapsresults+1; i++)
|
//stint_useid = lapsdb.rows[i-1].rows;
|
||||||
{
|
if ( lapsdb.rows[i-1].lap_id == selection1 )
|
||||||
|
{
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/7 - 4, " 1 ", 3);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ( lapsdb.rows[i-1].lap_id == selection2 )
|
||||||
|
{
|
||||||
|
|
||||||
int displaycolumns = 4;
|
mvwaddnstr(bwin1, 4+i, bwiny/7 - 4, " 2 ", 3);
|
||||||
int width1 = displaycolumns + 1;
|
}
|
||||||
int width2 = displaycolumns * 2;
|
if ( i == selection )
|
||||||
if (i == 0)
|
{
|
||||||
{
|
wattrset(bwin1, COLOR_PAIR(5));
|
||||||
wattrset(bwin1, COLOR_PAIR(2));
|
mvwaddnstr(bwin1, 4+i, bwiny/7, " * ", 3);
|
||||||
wattron(bwin1, A_BOLD);
|
}
|
||||||
mvwaddnstr(bwin1, 2, bwiny/2, "Laps", -1);
|
else
|
||||||
mvwaddnstr(bwin1, 3, bwiny/width2, "idx", -1);
|
{
|
||||||
mvwaddnstr(bwin1, 3, bwiny/width1+bwiny/width2, "name", -1);
|
mvwaddnstr(bwin1, 4+i, bwiny/7, " ", 3);
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/width1)*2)+bwiny/width2, "tyre", -1);
|
|
||||||
mvwaddnstr(bwin1, 3, ((bwiny/width1)*3)+bwiny/width2, "maxspeed", -1);
|
}
|
||||||
mvwhline(bwin1, 4, 0, 0, bwiny);
|
char idchar[4];
|
||||||
wattroff(bwin1, A_BOLD);
|
snprintf(idchar, 4, "%i", lapsdb.rows[i-1].lap_id);
|
||||||
wattrset(bwin1, COLOR_PAIR(1));
|
char tyrechar[10];
|
||||||
|
snprintf(tyrechar, 10, "%s", lapsdb.rows[i-1].tyre);
|
||||||
|
char maxspeedchar[4];
|
||||||
|
snprintf(maxspeedchar, 4, "%i", lapsdb.rows[i-1].max_speed);
|
||||||
|
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+2, idchar, -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+bwiny/width1, "my session name", -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*2), lapsdb.rows[i-1].tyre, -1);
|
||||||
|
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*3), maxspeedchar, -1);
|
||||||
|
}
|
||||||
|
wattrset(bwin1, COLOR_PAIR(1));
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
break;
|
||||||
{
|
}
|
||||||
|
|
||||||
//stint_useid = lapsdb.rows[i-1].rows;
|
|
||||||
if ( lapsdb.rows[i-1].lap_id == selection1 ) {
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/7 - 4, " 1 ", 3);
|
|
||||||
}
|
|
||||||
else if ( lapsdb.rows[i-1].lap_id == selection2 )
|
|
||||||
{
|
|
||||||
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/7 - 4, " 2 ", 3);
|
|
||||||
}
|
|
||||||
if ( i == selection )
|
|
||||||
{
|
|
||||||
wattrset(bwin1, COLOR_PAIR(5));
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/7, " * ", 3);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/7, " ", 3);
|
|
||||||
|
|
||||||
}
|
|
||||||
char idchar[4];
|
|
||||||
snprintf(idchar, 4, "%i", lapsdb.rows[i-1].lap_id);
|
|
||||||
char tyrechar[10];
|
|
||||||
snprintf(tyrechar, 10, "%s", lapsdb.rows[i-1].tyre);
|
|
||||||
char maxspeedchar[4];
|
|
||||||
snprintf(maxspeedchar, 4, "%i", lapsdb.rows[i-1].max_speed);
|
|
||||||
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+2, idchar, -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+bwiny/width1, "my session name", -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*2), lapsdb.rows[i-1].tyre, -1);
|
|
||||||
mvwaddnstr(bwin1, 4+i, bwiny/width2+((bwiny/width1)*3), maxspeedchar, -1);
|
|
||||||
}
|
|
||||||
wattrset(bwin1, COLOR_PAIR(1));
|
|
||||||
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
action = 0;
|
action = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -554,40 +557,42 @@ void* browseloop(Parameters* p, char* datadir)
|
||||||
}
|
}
|
||||||
if (ch == 'b')
|
if (ch == 'b')
|
||||||
{
|
{
|
||||||
switch(screen) {
|
switch(screen)
|
||||||
|
{
|
||||||
|
|
||||||
case STINTS_SCREEN:
|
case STINTS_SCREEN:
|
||||||
action = 2;
|
action = 2;
|
||||||
screen = SESSIONS_SCREEN;
|
screen = SESSIONS_SCREEN;
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case LAPS_SCREEN:
|
case LAPS_SCREEN:
|
||||||
action = 3;
|
action = 3;
|
||||||
screen = STINTS_SCREEN;
|
screen = STINTS_SCREEN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
selection = 1;
|
selection = 1;
|
||||||
lastselection = 1;
|
lastselection = 1;
|
||||||
}
|
}
|
||||||
if (ch == 'e')
|
if (ch == 'e')
|
||||||
{
|
{
|
||||||
switch(screen) {
|
switch(screen)
|
||||||
|
{
|
||||||
|
|
||||||
case SESSIONS_SCREEN:
|
case SESSIONS_SCREEN:
|
||||||
action = 3;
|
action = 3;
|
||||||
screen = STINTS_SCREEN;
|
screen = STINTS_SCREEN;
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case STINTS_SCREEN:
|
case STINTS_SCREEN:
|
||||||
action = 4;
|
action = 4;
|
||||||
screen = LAPS_SCREEN;
|
screen = LAPS_SCREEN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
selection = 1;
|
selection = 1;
|
||||||
lastselection = 1;
|
lastselection = 1;
|
||||||
}
|
}
|
||||||
if (ch == 'g')
|
if (ch == 'g')
|
||||||
{
|
{
|
||||||
|
|
@ -597,24 +602,24 @@ void* browseloop(Parameters* p, char* datadir)
|
||||||
{
|
{
|
||||||
if (selection1 > 0 && selection2 > 0)
|
if (selection1 > 0 && selection2 > 0)
|
||||||
{
|
{
|
||||||
dumptelemetrytofile(conn, datadir, selection1, selection2);
|
dumptelemetrytofile(conn, datadir, selection1, selection2);
|
||||||
|
|
||||||
slogi("finished dumping data");
|
slogi("finished dumping data");
|
||||||
size_t strsize = strlen(datadir) + strlen(p->gnuplot_file) + 1;
|
size_t strsize = strlen(datadir) + strlen(p->gnuplot_file) + 1;
|
||||||
char* plotfile = malloc(strsize);
|
char* plotfile = malloc(strsize);
|
||||||
snprintf(plotfile, strsize, "%s%s", datadir, p->gnuplot_file);
|
snprintf(plotfile, strsize, "%s%s", datadir, p->gnuplot_file);
|
||||||
static char* argv1[]={"gnuplot", "-p", "plotfile.gp", NULL};
|
static char* argv1[]= {"gnuplot", "-p", "plotfile.gp", NULL};
|
||||||
argv1[2] = plotfile;
|
argv1[2] = plotfile;
|
||||||
slogi("Using gnu plot file %s", plotfile);
|
slogi("Using gnu plot file %s", plotfile);
|
||||||
if(!fork())
|
if(!fork())
|
||||||
{
|
{
|
||||||
execv(p->gnuplot_bin, argv1);
|
execv(p->gnuplot_bin, argv1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sloge("No gnuplot binary found or specified");
|
sloge("No gnuplot binary found or specified");
|
||||||
}
|
}
|
||||||
action = 4;
|
action = 4;
|
||||||
}
|
}
|
||||||
|
|
@ -623,7 +628,7 @@ void* browseloop(Parameters* p, char* datadir)
|
||||||
selection++;
|
selection++;
|
||||||
if (selection > curresults)
|
if (selection > curresults)
|
||||||
{
|
{
|
||||||
selection = curresults;
|
selection = curresults;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ch == 'A' || ch == 'k')
|
if (ch == 'A' || ch == 'k')
|
||||||
|
|
@ -631,18 +636,18 @@ void* browseloop(Parameters* p, char* datadir)
|
||||||
selection--;
|
selection--;
|
||||||
if (selection <= 1)
|
if (selection <= 1)
|
||||||
{
|
{
|
||||||
selection = 1;
|
selection = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ch == '1')
|
if (ch == '1')
|
||||||
{
|
{
|
||||||
selection1 = lapsdb.rows[selection-1].lap_id;
|
selection1 = lapsdb.rows[selection-1].lap_id;
|
||||||
action = 1;
|
action = 1;
|
||||||
}
|
}
|
||||||
if (ch == '2')
|
if (ch == '2')
|
||||||
{
|
{
|
||||||
selection2 = lapsdb.rows[selection-1].lap_id;
|
selection2 = lapsdb.rows[selection-1].lap_id;
|
||||||
action = 1;
|
action = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ int curses_init()
|
||||||
box(win4, 0, 0);
|
box(win4, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
char * removeSpacesFromStr(char *string)
|
char* removeSpacesFromStr(char* string)
|
||||||
{
|
{
|
||||||
int non_space_count = 0;
|
int non_space_count = 0;
|
||||||
|
|
||||||
|
|
@ -129,7 +129,7 @@ char * removeSpacesFromStr(char *string)
|
||||||
void update_date()
|
void update_date()
|
||||||
{
|
{
|
||||||
time_t rawtime;
|
time_t rawtime;
|
||||||
struct tm * timeinfo;
|
struct tm* timeinfo;
|
||||||
time ( &rawtime );
|
time ( &rawtime );
|
||||||
timeinfo = localtime ( &rawtime );
|
timeinfo = localtime ( &rawtime );
|
||||||
sprintf(datestring, "%.24s", asctime (timeinfo));
|
sprintf(datestring, "%.24s", asctime (timeinfo));
|
||||||
|
|
@ -171,7 +171,8 @@ int mainloop(Parameters* p)
|
||||||
getSim(simdata, simmap, &p->simon, &p->sim);
|
getSim(simdata, simmap, &p->simon, &p->sim);
|
||||||
|
|
||||||
|
|
||||||
if (p->simon == true) {
|
if (p->simon == true)
|
||||||
|
{
|
||||||
p->program_state = 1;
|
p->program_state = 1;
|
||||||
if (p->cli == true)
|
if (p->cli == true)
|
||||||
{
|
{
|
||||||
|
|
@ -319,7 +320,8 @@ void* looper(void* thargs)
|
||||||
wclear(win3);
|
wclear(win3);
|
||||||
wclear(win4);
|
wclear(win4);
|
||||||
|
|
||||||
{ // window 1 car diagnostics
|
{
|
||||||
|
// window 1 car diagnostics
|
||||||
|
|
||||||
char spacer[14];
|
char spacer[14];
|
||||||
sprintf(spacer, "\n");
|
sprintf(spacer, "\n");
|
||||||
|
|
@ -474,7 +476,8 @@ void* looper(void* thargs)
|
||||||
rectangle(18, 18, 22, 22); // right rear
|
rectangle(18, 18, 22, 22); // right rear
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // window 2 session info
|
{
|
||||||
|
// window 2 session info
|
||||||
|
|
||||||
char spacer[14];
|
char spacer[14];
|
||||||
sprintf(spacer, "\n");
|
sprintf(spacer, "\n");
|
||||||
|
|
@ -537,7 +540,8 @@ void* looper(void* thargs)
|
||||||
wattrset(win2, COLOR_PAIR(1));
|
wattrset(win2, COLOR_PAIR(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // window 3 basic timing and scoring
|
{
|
||||||
|
// window 3 basic timing and scoring
|
||||||
|
|
||||||
char spacer[14];
|
char spacer[14];
|
||||||
sprintf(spacer, "\n");
|
sprintf(spacer, "\n");
|
||||||
|
|
@ -602,7 +606,8 @@ void* looper(void* thargs)
|
||||||
wattrset(win3, COLOR_PAIR(1));
|
wattrset(win3, COLOR_PAIR(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // window 4 live standings timing and scoring
|
{
|
||||||
|
// window 4 live standings timing and scoring
|
||||||
char spacer[14];
|
char spacer[14];
|
||||||
sprintf(spacer, "\n");
|
sprintf(spacer, "\n");
|
||||||
waddstr(win4, spacer);
|
waddstr(win4, spacer);
|
||||||
|
|
@ -637,7 +642,9 @@ void* looper(void* thargs)
|
||||||
for(i=0; i<displaycars; i++)
|
for(i=0; i<displaycars; i++)
|
||||||
{
|
{
|
||||||
if((ihold+1)==simdata->cars[i].pos)
|
if((ihold+1)==simdata->cars[i].pos)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wattrset(win4, COLOR_PAIR(2));
|
wattrset(win4, COLOR_PAIR(2));
|
||||||
|
|
@ -667,8 +674,8 @@ void* looper(void* thargs)
|
||||||
|
|
||||||
if(simdata->cars[i].inpitlane == 0 && simdata->cars[i].inpit == 0)
|
if(simdata->cars[i].inpitlane == 0 && simdata->cars[i].inpit == 0)
|
||||||
{
|
{
|
||||||
wattrset(win4, COLOR_PAIR(1));
|
wattrset(win4, COLOR_PAIR(1));
|
||||||
wprintw(win4, " ontrack ");
|
wprintw(win4, " ontrack ");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -730,31 +737,31 @@ void* simviewmysql(void* thargs)
|
||||||
SimMap* simmap = p->simmap;
|
SimMap* simmap = p->simmap;
|
||||||
|
|
||||||
struct _h_result result;
|
struct _h_result result;
|
||||||
struct _h_connection * conn;
|
struct _h_connection* conn;
|
||||||
conn = h_connect_pgsql(p->db_conn);
|
conn = h_connect_pgsql(p->db_conn);
|
||||||
|
|
||||||
if (conn == NULL)
|
if (conn == NULL)
|
||||||
{
|
{
|
||||||
slogf("Unable to connect to configured Gilles database. Are the parameters in the config correct? Is the user allowed to access from this address?");
|
slogf("Unable to connect to configured Gilles database. Are the parameters in the config correct? Is the user allowed to access from this address?");
|
||||||
p->err = E_FAILED_DB_CONN;
|
p->err = E_FAILED_DB_CONN;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
slogi("Starting telemetry");
|
slogi("Starting telemetry");
|
||||||
|
|
||||||
int trackconfig = gettrack(conn, simdata->track);
|
int trackconfig = gettrack(conn, simdata->track);
|
||||||
if (trackconfig == -1)
|
if (trackconfig == -1)
|
||||||
{
|
{
|
||||||
slogf("Problem performing select query. Does the db user have read permissions?");
|
slogf("Problem performing select query. Does the db user have read permissions?");
|
||||||
p->err = E_FAILED_DB_CONN;
|
p->err = E_FAILED_DB_CONN;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
trackconfig = addtrackconfig(conn, trackconfig, simdata->track, simdata->trackdistancearound);
|
trackconfig = addtrackconfig(conn, trackconfig, simdata->track, simdata->trackdistancearound);
|
||||||
if (trackconfig == -1)
|
if (trackconfig == -1)
|
||||||
{
|
{
|
||||||
slogf("Problem performing insert query. Does the db user have write permissions?");
|
slogf("Problem performing insert query. Does the db user have write permissions?");
|
||||||
p->err = E_FAILED_DB_CONN;
|
p->err = E_FAILED_DB_CONN;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
slogt("Detected track configuration id: %i", trackconfig);
|
slogt("Detected track configuration id: %i", trackconfig);
|
||||||
int eventid = addevent(conn, trackconfig);
|
int eventid = addevent(conn, trackconfig);
|
||||||
|
|
@ -854,9 +861,9 @@ void* simviewmysql(void* thargs)
|
||||||
if (simdata->inpit == true && pitstatus != lastpitstatus)
|
if (simdata->inpit == true && pitstatus != lastpitstatus)
|
||||||
{
|
{
|
||||||
//pitstatus = 1;
|
//pitstatus = 1;
|
||||||
//}
|
//}
|
||||||
//if (pitstatus = 0 && pitstatus != lastpitstatus)
|
//if (pitstatus = 0 && pitstatus != lastpitstatus)
|
||||||
//{
|
//{
|
||||||
// close last stint
|
// close last stint
|
||||||
|
|
||||||
closestint(conn, stintid, stintlaps, validstintlaps);
|
closestint(conn, stintid, stintlaps, validstintlaps);
|
||||||
|
|
|
||||||
|
|
@ -20,64 +20,70 @@ int getLastInsertID(struct _h_connection* conn)
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
void get_row_results(struct _h_result result, DBField* fields, void* rows, size_t rowsize) {
|
void get_row_results(struct _h_result result, DBField* fields, void* rows, size_t rowsize)
|
||||||
int col, row, i;
|
{
|
||||||
char buf[64];
|
int col, row, i;
|
||||||
//sess->hasdata = true;
|
char buf[64];
|
||||||
//sess->rows = result.nb_rows;
|
//sess->hasdata = true;
|
||||||
slogi("rows: %d, col: %d", result.nb_rows, result.nb_columns);
|
//sess->rows = result.nb_rows;
|
||||||
char* aaa = (char *) rows;
|
slogi("rows: %d, col: %d", result.nb_rows, result.nb_columns);
|
||||||
for (row = 0; row<result.nb_rows; row++) {
|
char* aaa = (char*) rows;
|
||||||
|
for (row = 0; row<result.nb_rows; row++)
|
||||||
|
{
|
||||||
|
|
||||||
char* aa = (char*)aaa + (rowsize * row);
|
char* aa = (char*)aaa + (rowsize * row);
|
||||||
for (col=0; col<result.nb_columns; col++) {
|
for (col=0; col<result.nb_columns; col++)
|
||||||
char* a = (char*) aa + fields[col].offset;
|
{
|
||||||
switch(result.data[row][col].type) {
|
char* a = (char*) aa + fields[col].offset;
|
||||||
case HOEL_COL_TYPE_INT:
|
switch(result.data[row][col].type)
|
||||||
int bb = ((struct _h_type_int *)result.data[row][col].t_data)->value;
|
{
|
||||||
*(int*) a = bb;
|
case HOEL_COL_TYPE_INT:
|
||||||
break;
|
int bb = ((struct _h_type_int*)result.data[row][col].t_data)->value;
|
||||||
case HOEL_COL_TYPE_DOUBLE:
|
*(int*) a = bb;
|
||||||
double cc = ((struct _h_type_double *)result.data[row][col].t_data)->value;
|
break;
|
||||||
*(double*) a = cc;
|
case HOEL_COL_TYPE_DOUBLE:
|
||||||
break;
|
double cc = ((struct _h_type_double*)result.data[row][col].t_data)->value;
|
||||||
case HOEL_COL_TYPE_TEXT:
|
*(double*) a = cc;
|
||||||
char* ddd = ((struct _h_type_text *)result.data[row][col].t_data)->value;
|
break;
|
||||||
memcpy(a, ddd, fields[col].size);
|
case HOEL_COL_TYPE_TEXT:
|
||||||
break;
|
char* ddd = ((struct _h_type_text*)result.data[row][col].t_data)->value;
|
||||||
case HOEL_COL_TYPE_BLOB:
|
memcpy(a, ddd, fields[col].size);
|
||||||
for (i=0; i<((struct _h_type_blob *)result.data[row][col].t_data)->length; i++) {
|
break;
|
||||||
printf("%c", *((char*)(((struct _h_type_blob *)result.data[row][col].t_data)->value+i)));
|
case HOEL_COL_TYPE_BLOB:
|
||||||
if (i%80 == 0 && i>0) {
|
for (i=0; i<((struct _h_type_blob*)result.data[row][col].t_data)->length; i++)
|
||||||
printf("\n");
|
{
|
||||||
|
printf("%c", *((char*)(((struct _h_type_blob*)result.data[row][col].t_data)->value+i)));
|
||||||
|
if (i%80 == 0 && i>0)
|
||||||
|
{
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case HOEL_COL_TYPE_DATE:
|
||||||
|
strftime(a, fields[col].size, "%Y-%m-%d %H:%M:%S", &((struct _h_type_datetime*)result.data[row][col].t_data)->value);
|
||||||
|
//strftime(buf, 64, "%Y-%m-%d %H:%M:%S", &((struct _h_type_datetime *)result.data[row][col].t_data)->value);
|
||||||
|
printf("| %s ", buf);
|
||||||
|
case HOEL_COL_TYPE_NULL:
|
||||||
|
printf("| [null] ");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
printf("|\n");
|
||||||
case HOEL_COL_TYPE_DATE:
|
|
||||||
strftime(a, fields[col].size, "%Y-%m-%d %H:%M:%S", &((struct _h_type_datetime *)result.data[row][col].t_data)->value);
|
|
||||||
//strftime(buf, 64, "%Y-%m-%d %H:%M:%S", &((struct _h_type_datetime *)result.data[row][col].t_data)->value);
|
|
||||||
printf("| %s ", buf);
|
|
||||||
case HOEL_COL_TYPE_NULL:
|
|
||||||
printf("| [null] ");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
printf("|\n");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int getsessions(struct _h_connection* conn, const char* sessionname, SessionDbo* sess)
|
int getsessions(struct _h_connection* conn, const char* sessionname, SessionDbo* sess)
|
||||||
{
|
{
|
||||||
struct _h_result result;
|
struct _h_result result;
|
||||||
struct _h_data * data;
|
struct _h_data* data;
|
||||||
char* query = malloc(515 * sizeof(char));
|
char* query = malloc(515 * sizeof(char));
|
||||||
slogt("Performing query sessions");
|
slogt("Performing query sessions");
|
||||||
|
|
||||||
sprintf(query, "select sessions.session_id, events.event_id, sessions.event_type, table1.stints, track_config.display_name, cars.car_name, start_time "
|
sprintf(query, "select sessions.session_id, events.event_id, sessions.event_type, table1.stints, track_config.display_name, cars.car_name, start_time "
|
||||||
"FROM %s JOIN events ON sessions.event_id=events.event_id JOIN track_config ON events.track_config_id=track_config.track_config_id "
|
"FROM %s JOIN events ON sessions.event_id=events.event_id JOIN track_config ON events.track_config_id=track_config.track_config_id "
|
||||||
"JOIN cars ON sessions.car_id=cars.car_id "
|
"JOIN cars ON sessions.car_id=cars.car_id "
|
||||||
"JOIN (Select session_id, COUNT(stint_id) AS stints FROM stints GROUP BY session_id) AS table1 ON table1.session_id=sessions.session_id "
|
"JOIN (Select session_id, COUNT(stint_id) AS stints FROM stints GROUP BY session_id) AS table1 ON table1.session_id=sessions.session_id "
|
||||||
"ORDER BY session_id DESC LIMIT 25", "Sessions");
|
"ORDER BY session_id DESC LIMIT 25", "Sessions");
|
||||||
|
|
||||||
int errcode = h_query_select(conn, query, &result);
|
int errcode = h_query_select(conn, query, &result);
|
||||||
if (errcode == H_OK)
|
if (errcode == H_OK)
|
||||||
|
|
@ -100,7 +106,7 @@ int getsessions(struct _h_connection* conn, const char* sessionname, SessionDbo*
|
||||||
int getstints(struct _h_connection* conn, const char* sessionname, StintDbo* stint, int use_id)
|
int getstints(struct _h_connection* conn, const char* sessionname, StintDbo* stint, int use_id)
|
||||||
{
|
{
|
||||||
struct _h_result result;
|
struct _h_result result;
|
||||||
struct _h_data * data;
|
struct _h_data* data;
|
||||||
char* query = malloc(150 * sizeof(char));
|
char* query = malloc(150 * sizeof(char));
|
||||||
slogt("Performing query stints");
|
slogt("Performing query stints");
|
||||||
|
|
||||||
|
|
@ -128,7 +134,7 @@ int getstints(struct _h_connection* conn, const char* sessionname, StintDbo* sti
|
||||||
int getlaps(struct _h_connection* conn, const char* sessionname, LapDbo* laps, int use_id)
|
int getlaps(struct _h_connection* conn, const char* sessionname, LapDbo* laps, int use_id)
|
||||||
{
|
{
|
||||||
struct _h_result result;
|
struct _h_result result;
|
||||||
struct _h_data * data;
|
struct _h_data* data;
|
||||||
char* query = malloc(250 * sizeof(char));
|
char* query = malloc(250 * sizeof(char));
|
||||||
slogt("Performing query laps");
|
slogt("Performing query laps");
|
||||||
|
|
||||||
|
|
@ -139,7 +145,9 @@ int getlaps(struct _h_connection* conn, const char* sessionname, LapDbo* laps, i
|
||||||
laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
||||||
get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
||||||
h_clean_result(&result);
|
h_clean_result(&result);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
sloge("Error executing query %s returned %i", query, errcode);
|
sloge("Error executing query %s returned %i", query, errcode);
|
||||||
free(query);
|
free(query);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
@ -153,124 +161,135 @@ int gettrack(struct _h_connection* conn, const char* trackname)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
json_t *j_result;
|
json_t* j_result;
|
||||||
char* where_clause = h_build_where_clause(conn, "config_name=%s AND track_name=%s", "default", trackname);
|
char* where_clause = h_build_where_clause(conn, "config_name=%s AND track_name=%s", "default", trackname);
|
||||||
json_t* j_query = json_pack("{sss[s]s{s{ssss}}}", "table", "track_config", "columns", "track_config_id", "where", " ", "operator", "raw",
|
json_t* j_query = json_pack("{sss[s]s{s{ssss}}}", "table", "track_config", "columns", "track_config_id", "where", " ", "operator", "raw",
|
||||||
"value", where_clause);
|
"value", where_clause);
|
||||||
|
|
||||||
char* qq;
|
char* qq;
|
||||||
int res = h_select(conn, j_query, &j_result, &qq);
|
int res = h_select(conn, j_query, &j_result, &qq);
|
||||||
|
|
||||||
// Deallocate j_query since it won't be needed anymore
|
// Deallocate j_query since it won't be needed anymore
|
||||||
json_decref(j_query);
|
json_decref(j_query);
|
||||||
h_free(where_clause);
|
h_free(where_clause);
|
||||||
int track_config = -1;
|
int track_config = -1;
|
||||||
// Test query execution result
|
// Test query execution result
|
||||||
if (res == H_OK) {
|
if (res == H_OK)
|
||||||
// Print result
|
{
|
||||||
//char* dump = json_dumps(j_result, JSON_INDENT(2));
|
// Print result
|
||||||
//slogi("json select result is\n%s", dump);
|
//char* dump = json_dumps(j_result, JSON_INDENT(2));
|
||||||
int index1 = json_array_size(j_result);
|
//slogi("json select result is\n%s", dump);
|
||||||
//if (index1 == 0)
|
int index1 = json_array_size(j_result);
|
||||||
//{
|
//if (index1 == 0)
|
||||||
// slogw("no config for this track");
|
//{
|
||||||
//}
|
// slogw("no config for this track");
|
||||||
//else {
|
//}
|
||||||
json_t* jj = json_array_get(j_result, index1-1);
|
//else {
|
||||||
track_config = json_integer_value(json_object_get(jj, "track_config_id"));
|
json_t* jj = json_array_get(j_result, index1-1);
|
||||||
//}
|
track_config = json_integer_value(json_object_get(jj, "track_config_id"));
|
||||||
// Deallocate data result
|
//}
|
||||||
|
// Deallocate data result
|
||||||
|
|
||||||
//free(dump);
|
//free(dump);
|
||||||
} else {
|
}
|
||||||
sloge("Error executing select query %s: %d", qq, res);
|
else
|
||||||
}
|
{
|
||||||
json_decref(j_result);
|
sloge("Error executing select query %s: %d", qq, res);
|
||||||
free(qq);
|
}
|
||||||
json_decref(j_query);
|
json_decref(j_result);
|
||||||
h_free(where_clause);
|
free(qq);
|
||||||
return track_config;
|
json_decref(j_query);
|
||||||
|
h_free(where_clause);
|
||||||
|
return track_config;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getdriver(struct _h_connection* conn, const char* driver_name)
|
int getdriver(struct _h_connection* conn, const char* driver_name)
|
||||||
{
|
{
|
||||||
json_t *j_result;
|
json_t* j_result;
|
||||||
char* where_clause = h_build_where_clause(conn, "driver_name=%s", driver_name);
|
char* where_clause = h_build_where_clause(conn, "driver_name=%s", driver_name);
|
||||||
json_t* j_query = json_pack("{sss[s]s{s{ssss}}}","table", "drivers", "columns", "driver_id", "where", " ", "operator", "raw",
|
json_t* j_query = json_pack("{sss[s]s{s{ssss}}}","table", "drivers", "columns", "driver_id", "where", " ", "operator", "raw",
|
||||||
"value", where_clause);
|
"value", where_clause);
|
||||||
|
|
||||||
slogi("Looking for driver named %s", driver_name);
|
slogi("Looking for driver named %s", driver_name);
|
||||||
char* qq;
|
char* qq;
|
||||||
int res = h_select(conn, j_query, &j_result, &qq);
|
int res = h_select(conn, j_query, &j_result, &qq);
|
||||||
//slogi("here your query: %s", qq);
|
//slogi("here your query: %s", qq);
|
||||||
// Deallocate j_query since it won't be needed anymore
|
// Deallocate j_query since it won't be needed anymore
|
||||||
json_decref(j_query);
|
json_decref(j_query);
|
||||||
h_free(where_clause);
|
h_free(where_clause);
|
||||||
int driver_id = -1;
|
int driver_id = -1;
|
||||||
// Test query execution result
|
// Test query execution result
|
||||||
if (res == H_OK) {
|
if (res == H_OK)
|
||||||
// Print result
|
|
||||||
char* dump = json_dumps(j_result, JSON_INDENT(2));
|
|
||||||
slogt("json select result is\n%s", dump);
|
|
||||||
int index1 = json_array_size(j_result);
|
|
||||||
if (index1 == 0)
|
|
||||||
{
|
{
|
||||||
slogw("no driver by this name");
|
// Print result
|
||||||
|
char* dump = json_dumps(j_result, JSON_INDENT(2));
|
||||||
|
slogt("json select result is\n%s", dump);
|
||||||
|
int index1 = json_array_size(j_result);
|
||||||
|
if (index1 == 0)
|
||||||
|
{
|
||||||
|
slogw("no driver by this name");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
json_t* jj = json_array_get(j_result, index1-1);
|
||||||
|
driver_id = json_integer_value(json_object_get(jj, "driver_id"));
|
||||||
|
}
|
||||||
|
// Deallocate data result
|
||||||
|
free(dump);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
json_t* jj = json_array_get(j_result, index1-1);
|
{
|
||||||
driver_id = json_integer_value(json_object_get(jj, "driver_id"));
|
sloge("Error executing select query %s: %d", qq, res);
|
||||||
}
|
}
|
||||||
// Deallocate data result
|
json_decref(j_result);
|
||||||
free(dump);
|
free(qq);
|
||||||
} else {
|
json_decref(j_query);
|
||||||
sloge("Error executing select query %s: %d", qq, res);
|
h_free(where_clause);
|
||||||
}
|
return driver_id;
|
||||||
json_decref(j_result);
|
|
||||||
free(qq);
|
|
||||||
json_decref(j_query);
|
|
||||||
h_free(where_clause);
|
|
||||||
return driver_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int getcar(struct _h_connection* conn, const char* carname)
|
int getcar(struct _h_connection* conn, const char* carname)
|
||||||
{
|
{
|
||||||
json_t *j_result;
|
json_t* j_result;
|
||||||
char* where_clause = h_build_where_clause(conn, "car_name=%s", carname);
|
char* where_clause = h_build_where_clause(conn, "car_name=%s", carname);
|
||||||
json_t* j_query = json_pack("{sss[s]s{s{ssss}}}","table", "cars", "columns", "car_id", "where", " ", "operator", "raw",
|
json_t* j_query = json_pack("{sss[s]s{s{ssss}}}","table", "cars", "columns", "car_id", "where", " ", "operator", "raw",
|
||||||
"value", where_clause);
|
"value", where_clause);
|
||||||
|
|
||||||
slogi("Looking for car named %s", carname);
|
slogi("Looking for car named %s", carname);
|
||||||
char* qq;
|
char* qq;
|
||||||
int res = h_select(conn, j_query, &j_result, &qq);
|
int res = h_select(conn, j_query, &j_result, &qq);
|
||||||
//slogi("here your query: %s", qq);
|
//slogi("here your query: %s", qq);
|
||||||
// Deallocate j_query since it won't be needed anymore
|
// Deallocate j_query since it won't be needed anymore
|
||||||
|
|
||||||
int car_id = -1;
|
int car_id = -1;
|
||||||
// Test query execution result
|
// Test query execution result
|
||||||
if (res == H_OK) {
|
if (res == H_OK)
|
||||||
// Print result
|
|
||||||
char* dump = json_dumps(j_result, JSON_INDENT(2));
|
|
||||||
slogt("json select result is\n%s", dump);
|
|
||||||
int index1 = json_array_size(j_result);
|
|
||||||
if (index1 == 0)
|
|
||||||
{
|
{
|
||||||
slogw("no car by this name");
|
// Print result
|
||||||
|
char* dump = json_dumps(j_result, JSON_INDENT(2));
|
||||||
|
slogt("json select result is\n%s", dump);
|
||||||
|
int index1 = json_array_size(j_result);
|
||||||
|
if (index1 == 0)
|
||||||
|
{
|
||||||
|
slogw("no car by this name");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
json_t* jj = json_array_get(j_result, index1-1);
|
||||||
|
car_id = json_integer_value(json_object_get(jj, "car_id"));
|
||||||
|
}
|
||||||
|
// Deallocate data result
|
||||||
|
free(dump);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
json_t* jj = json_array_get(j_result, index1-1);
|
{
|
||||||
car_id = json_integer_value(json_object_get(jj, "car_id"));
|
sloge("Error executing select query %s: %d", qq, res);
|
||||||
}
|
}
|
||||||
// Deallocate data result
|
json_decref(j_result);
|
||||||
free(dump);
|
free(qq);
|
||||||
} else {
|
json_decref(j_query);
|
||||||
sloge("Error executing select query %s: %d", qq, res);
|
h_free(where_clause);
|
||||||
}
|
return car_id;
|
||||||
json_decref(j_result);
|
|
||||||
free(qq);
|
|
||||||
json_decref(j_query);
|
|
||||||
h_free(where_clause);
|
|
||||||
return car_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -282,8 +301,8 @@ int addtrackconfig(struct _h_connection* conn, int trackconfigid, const char* tr
|
||||||
{
|
{
|
||||||
return trackconfigid;
|
return trackconfigid;
|
||||||
}
|
}
|
||||||
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("track_config") );
|
json_object_set_new( root, "table", json_string("track_config") );
|
||||||
json_object_set_new( root, "values", json_arr );
|
json_object_set_new( root, "values", json_arr );
|
||||||
|
|
@ -319,8 +338,8 @@ int addsession(struct _h_connection* conn, int eventid, int carid, int eventtype
|
||||||
// session_id | event_id | event_type | track_time | session_name
|
// session_id | event_id | event_type | track_time | session_name
|
||||||
// | start_time | duration_min | elapsed_ms | laps | weather |
|
// | start_time | duration_min | elapsed_ms | laps | weather |
|
||||||
// air_temp | road_temp | start_grip |
|
// air_temp | road_temp | start_grip |
|
||||||
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("sessions") );
|
json_object_set_new( root, "table", json_string("sessions") );
|
||||||
json_object_set_new( root, "values", json_arr );
|
json_object_set_new( root, "values", json_arr );
|
||||||
|
|
@ -359,8 +378,8 @@ int adddriver(struct _h_connection* conn, int driverid, const char* drivername)
|
||||||
{
|
{
|
||||||
return driverid;
|
return driverid;
|
||||||
}
|
}
|
||||||
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("drivers") );
|
json_object_set_new( root, "table", json_string("drivers") );
|
||||||
json_object_set_new( root, "values", json_arr );
|
json_object_set_new( root, "values", json_arr );
|
||||||
|
|
@ -393,8 +412,8 @@ int adddriver(struct _h_connection* conn, int driverid, const char* drivername)
|
||||||
int addevent(struct _h_connection* conn, int track_config)
|
int addevent(struct _h_connection* conn, int track_config)
|
||||||
{
|
{
|
||||||
|
|
||||||
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("events") );
|
json_object_set_new( root, "table", json_string("events") );
|
||||||
json_object_set_new( root, "values", json_arr );
|
json_object_set_new( root, "values", json_arr );
|
||||||
|
|
@ -425,8 +444,8 @@ 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("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 );
|
||||||
|
|
@ -468,8 +487,8 @@ int addstintlap(struct _h_connection* conn, int stintid, SimData* simdata)
|
||||||
// stint laps
|
// stint laps
|
||||||
// stint_lap_id | stint_id | sector_1 | sector_2 | sector_3 | grip | tyre | time | cuts | crashes
|
// stint_lap_id | stint_id | sector_1 | sector_2 | sector_3 | grip | tyre | time | cuts | crashes
|
||||||
// max_speed | avg_speed | finished_at
|
// max_speed | avg_speed | finished_at
|
||||||
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("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 );
|
||||||
|
|
@ -503,8 +522,8 @@ int addcar(struct _h_connection* conn, int carid, const char* carname)
|
||||||
{
|
{
|
||||||
return carid;
|
return 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("cars") );
|
json_object_set_new( root, "table", json_string("cars") );
|
||||||
json_object_set_new( root, "values", json_arr );
|
json_object_set_new( root, "values", json_arr );
|
||||||
|
|
@ -534,8 +553,8 @@ int addcar(struct _h_connection* conn, int carid, const char* carname)
|
||||||
int addtelemetry(struct _h_connection* conn, int points, int stintid)
|
int addtelemetry(struct _h_connection* conn, int points, 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("telemetry") );
|
json_object_set_new( root, "table", json_string("telemetry") );
|
||||||
json_object_set_new( root, "values", json_arr );
|
json_object_set_new( root, "values", json_arr );
|
||||||
|
|
@ -572,24 +591,24 @@ int closelap(struct _h_connection* conn, int lapid, int sector1, int sector2, in
|
||||||
|
|
||||||
char* query = malloc((sizeof(char)*632));
|
char* query = malloc((sizeof(char)*632));
|
||||||
sprintf(query, "UPDATE %s SET %s=%i, %s=%i, %s=%i, %s=%i, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, finished_at=NOW() WHERE lap_id=%i;",
|
sprintf(query, "UPDATE %s SET %s=%i, %s=%i, %s=%i, %s=%i, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, %s=%f, finished_at=NOW() WHERE lap_id=%i;",
|
||||||
"laps", "time", simdata->lastlap, "sector_1", sector1, "sector_2", sector2, "sector_3", sector3,
|
"laps", "time", simdata->lastlap, "sector_1", sector1, "sector_2", sector2, "sector_3", sector3,
|
||||||
"right_front_tyre_temp", simdata->tyretemp[1],
|
"right_front_tyre_temp", simdata->tyretemp[1],
|
||||||
"right_rear_tyre_temp", simdata->tyretemp[3],
|
"right_rear_tyre_temp", simdata->tyretemp[3],
|
||||||
"right_front_tyre_wear", simdata->tyrewear[1],
|
"right_front_tyre_wear", simdata->tyrewear[1],
|
||||||
"right_rear_tyre_wear", simdata->tyrewear[3],
|
"right_rear_tyre_wear", simdata->tyrewear[3],
|
||||||
"right_front_tyre_press",simdata->tyrepressure[1],
|
"right_front_tyre_press",simdata->tyrepressure[1],
|
||||||
"right_rear_tyre_press", simdata->tyrepressure[3],
|
"right_rear_tyre_press", simdata->tyrepressure[3],
|
||||||
"right_front_brake_temp",simdata->braketemp[1],
|
"right_front_brake_temp",simdata->braketemp[1],
|
||||||
"right_rear_brake_temp", simdata->braketemp[3],
|
"right_rear_brake_temp", simdata->braketemp[3],
|
||||||
"left_front_tyre_temp", simdata->tyretemp[0],
|
"left_front_tyre_temp", simdata->tyretemp[0],
|
||||||
"left_rear_tyre_temp", simdata->tyretemp[2],
|
"left_rear_tyre_temp", simdata->tyretemp[2],
|
||||||
"left_front_tyre_wear", simdata->tyrewear[0],
|
"left_front_tyre_wear", simdata->tyrewear[0],
|
||||||
"left_rear_tyre_wear", simdata->tyrewear[2],
|
"left_rear_tyre_wear", simdata->tyrewear[2],
|
||||||
"left_front_tyre_press",simdata->tyrepressure[0],
|
"left_front_tyre_press",simdata->tyrepressure[0],
|
||||||
"left_rear_tyre_press", simdata->tyrepressure[2],
|
"left_rear_tyre_press", simdata->tyrepressure[2],
|
||||||
"left_front_brake_temp",simdata->braketemp[0],
|
"left_front_brake_temp",simdata->braketemp[0],
|
||||||
"left_rear_brake_temp", simdata->braketemp[2],
|
"left_rear_brake_temp", simdata->braketemp[2],
|
||||||
lapid);
|
lapid);
|
||||||
|
|
||||||
int errcode = h_query_update(conn, query);
|
int errcode = h_query_update(conn, query);
|
||||||
if (errcode != H_OK)
|
if (errcode != H_OK)
|
||||||
|
|
|
||||||
|
|
@ -12,109 +12,113 @@
|
||||||
#include "../helper/confighelper.h"
|
#include "../helper/confighelper.h"
|
||||||
#include "../slog/slog.h"
|
#include "../slog/slog.h"
|
||||||
|
|
||||||
int telem_result(struct _h_result result, int doublefields, int intfields, int* intarrays, double* doublearrays) {
|
int telem_result(struct _h_result result, int doublefields, int intfields, int* intarrays, double* doublearrays)
|
||||||
int col, row, i;
|
{
|
||||||
char buf[64];
|
int col, row, i;
|
||||||
slogt("rows: %d, col: %d", result.nb_rows, result.nb_columns);
|
char buf[64];
|
||||||
//int* intarrays;
|
slogt("rows: %d, col: %d", result.nb_rows, result.nb_columns);
|
||||||
int points = 0;
|
//int* intarrays;
|
||||||
//int doublefields = 3;
|
int points = 0;
|
||||||
//int intfields = 3;
|
//int doublefields = 3;
|
||||||
//int* intarrays;
|
//int intfields = 3;
|
||||||
//int* doublearrays;
|
//int* intarrays;
|
||||||
//int* intarrays = malloc((sizeof(int)*1736)*3);
|
//int* doublearrays;
|
||||||
//double* doublearrays = malloc((sizeof(double)*1736)*3);
|
//int* intarrays = malloc((sizeof(int)*1736)*3);
|
||||||
int intarrayoffset = 0;
|
//double* doublearrays = malloc((sizeof(double)*1736)*3);
|
||||||
int doublearrayoffset = 0;
|
int intarrayoffset = 0;
|
||||||
|
int doublearrayoffset = 0;
|
||||||
|
|
||||||
for (row = 0; row<result.nb_rows; row++) {
|
for (row = 0; row<result.nb_rows; row++)
|
||||||
for (col=0; col<result.nb_columns; col++) {
|
{
|
||||||
switch(result.data[row][col].type) {
|
for (col=0; col<result.nb_columns; col++)
|
||||||
case HOEL_COL_TYPE_INT:
|
{
|
||||||
int cc = ((struct _h_type_int *)result.data[row][col].t_data)->value;
|
switch(result.data[row][col].type)
|
||||||
if (col == 1)
|
{
|
||||||
{
|
case HOEL_COL_TYPE_INT:
|
||||||
points = cc;
|
int cc = ((struct _h_type_int*)result.data[row][col].t_data)->value;
|
||||||
}
|
if (col == 1)
|
||||||
break;
|
{
|
||||||
case HOEL_COL_TYPE_DOUBLE:
|
points = cc;
|
||||||
//intarrays = malloc((sizeof(int)*1736)*3);
|
}
|
||||||
break;
|
break;
|
||||||
case HOEL_COL_TYPE_TEXT:
|
case HOEL_COL_TYPE_DOUBLE:
|
||||||
slogi("| %s ", ((struct _h_type_text *)result.data[row][col].t_data)->value);
|
//intarrays = malloc((sizeof(int)*1736)*3);
|
||||||
break;
|
break;
|
||||||
case HOEL_COL_TYPE_BLOB:
|
case HOEL_COL_TYPE_TEXT:
|
||||||
int offset2 = 0;
|
slogi("| %s ", ((struct _h_type_text*)result.data[row][col].t_data)->value);
|
||||||
|
break;
|
||||||
|
case HOEL_COL_TYPE_BLOB:
|
||||||
|
int offset2 = 0;
|
||||||
|
|
||||||
int j = 0;
|
int j = 0;
|
||||||
i = 2;
|
i = 2;
|
||||||
if (col < 5)
|
if (col < 5)
|
||||||
{
|
{
|
||||||
while (i<((struct _h_type_blob *)result.data[row][col].t_data)->length)
|
while (i<((struct _h_type_blob*)result.data[row][col].t_data)->length)
|
||||||
{
|
{
|
||||||
char sss[10];
|
char sss[10];
|
||||||
sss[0] = '0';
|
sss[0] = '0';
|
||||||
sss[1] = 'x';
|
sss[1] = 'x';
|
||||||
sss[2] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+2);
|
sss[2] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+2);
|
||||||
sss[3] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+3);
|
sss[3] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+3);
|
||||||
sss[4] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+4);
|
sss[4] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+4);
|
||||||
sss[5] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+5);
|
sss[5] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+5);
|
||||||
sss[6] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+6);
|
sss[6] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+6);
|
||||||
sss[7] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+7);
|
sss[7] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+7);
|
||||||
sss[8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+8);
|
sss[8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+8);
|
||||||
sss[9] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+9);
|
sss[9] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+9);
|
||||||
long val;
|
long val;
|
||||||
int number = (int)strtol(sss, NULL, 16);
|
int number = (int)strtol(sss, NULL, 16);
|
||||||
int swapped = __bswap_32(number);
|
int swapped = __bswap_32(number);
|
||||||
|
|
||||||
intarrays[j+intarrayoffset] = __bswap_32(number);
|
intarrays[j+intarrayoffset] = __bswap_32(number);
|
||||||
offset2 = offset2 + 8;
|
offset2 = offset2 + 8;
|
||||||
i+=8;
|
i+=8;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
intarrayoffset += points;
|
intarrayoffset += points;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while (i<((struct _h_type_blob *)result.data[row][col].t_data)->length)
|
while (i<((struct _h_type_blob*)result.data[row][col].t_data)->length)
|
||||||
{
|
{
|
||||||
char sss[18];
|
char sss[18];
|
||||||
sss[0] = '0';
|
sss[0] = '0';
|
||||||
sss[1] = 'x';
|
sss[1] = 'x';
|
||||||
sss[2] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+2);
|
sss[2] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+2);
|
||||||
sss[3] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+3);
|
sss[3] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+3);
|
||||||
sss[4] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+4);
|
sss[4] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+4);
|
||||||
sss[5] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+5);
|
sss[5] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+5);
|
||||||
sss[6] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+6);
|
sss[6] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+6);
|
||||||
sss[7] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+7);
|
sss[7] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+7);
|
||||||
sss[8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+8);
|
sss[8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+8);
|
||||||
sss[9] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+9);
|
sss[9] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+9);
|
||||||
sss[2+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+2+8);
|
sss[2+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+2+8);
|
||||||
sss[3+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+3+8);
|
sss[3+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+3+8);
|
||||||
sss[4+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+4+8);
|
sss[4+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+4+8);
|
||||||
sss[5+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+5+8);
|
sss[5+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+5+8);
|
||||||
sss[6+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+6+8);
|
sss[6+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+6+8);
|
||||||
sss[7+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+7+8);
|
sss[7+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+7+8);
|
||||||
sss[8+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+8+8);
|
sss[8+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+8+8);
|
||||||
sss[9+8] = *((char*)((struct _h_type_blob *)result.data[row][col].t_data)->value+offset2+9+8);
|
sss[9+8] = *((char*)((struct _h_type_blob*)result.data[row][col].t_data)->value+offset2+9+8);
|
||||||
long val;
|
long val;
|
||||||
int64_t number = (int64_t) strtoll(sss, NULL, 16);
|
int64_t number = (int64_t) strtoll(sss, NULL, 16);
|
||||||
int64_t swapped = __bswap_64(number);
|
int64_t swapped = __bswap_64(number);
|
||||||
double d = *((double*)&swapped);
|
double d = *((double*)&swapped);
|
||||||
doublearrays[j+doublearrayoffset] = (double) d;
|
doublearrays[j+doublearrayoffset] = (double) d;
|
||||||
offset2 = offset2 + 16;
|
offset2 = offset2 + 16;
|
||||||
i+=16;
|
i+=16;
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
doublearrayoffset += points;
|
doublearrayoffset += points;
|
||||||
|
|
||||||
}
|
}
|
||||||
//snprintf( "blob value: %.*s", ((struct _h_type_blob *)result.data[row][col].t_data)->length, ((struct _h_type_blob *)result.data[row][col].t_data)->value);
|
//snprintf( "blob value: %.*s", ((struct _h_type_blob *)result.data[row][col].t_data)->length, ((struct _h_type_blob *)result.data[row][col].t_data)->value);
|
||||||
//char* b = malloc(sizeof(int)*1736);
|
//char* b = malloc(sizeof(int)*1736);
|
||||||
//for (i=0; i<((struct _h_type_blob *)result.data[row][col].t_data)->length; i++) {
|
//for (i=0; i<((struct _h_type_blob *)result.data[row][col].t_data)->length; i++) {
|
||||||
// //slogi("%c", *((char*)(((struct _h_type_blob *)result.data[row][col].t_data)->value+i)));
|
// //slogi("%c", *((char*)(((struct _h_type_blob *)result.data[row][col].t_data)->value+i)));
|
||||||
// memcpy(&b[i], ((struct _h_type_blob *)result.data[row][col].t_data)->value+1*sizeof(char), sizeof(char));
|
// memcpy(&b[i], ((struct _h_type_blob *)result.data[row][col].t_data)->value+1*sizeof(char), sizeof(char));
|
||||||
//}
|
//}
|
||||||
// FILE *out = fopen("memory.bin", "wb");
|
// FILE *out = fopen("memory.bin", "wb");
|
||||||
// if(out != NULL)
|
// if(out != NULL)
|
||||||
// {
|
// {
|
||||||
|
|
@ -128,19 +132,19 @@ int telem_result(struct _h_result result, int doublefields, int intfields, int*
|
||||||
// }
|
// }
|
||||||
// fclose(out);
|
// fclose(out);
|
||||||
// }
|
// }
|
||||||
break;
|
break;
|
||||||
case HOEL_COL_TYPE_DATE:
|
case HOEL_COL_TYPE_DATE:
|
||||||
strftime(buf, 64, "%Y-%m-%d %H:%M:%S", &((struct _h_type_datetime *)result.data[row][col].t_data)->value);
|
strftime(buf, 64, "%Y-%m-%d %H:%M:%S", &((struct _h_type_datetime*)result.data[row][col].t_data)->value);
|
||||||
printf("| %s ", buf);
|
printf("| %s ", buf);
|
||||||
case HOEL_COL_TYPE_NULL:
|
case HOEL_COL_TYPE_NULL:
|
||||||
slogi("| [null] ");
|
slogi("| [null] ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
printf("|\n");
|
||||||
}
|
}
|
||||||
printf("|\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
|
|
||||||
int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, int lap2id)
|
int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, int lap2id)
|
||||||
|
|
@ -153,16 +157,19 @@ int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, i
|
||||||
int doublefields = 3;
|
int doublefields = 3;
|
||||||
|
|
||||||
struct _h_result result;
|
struct _h_result result;
|
||||||
struct _h_data *data;
|
struct _h_data* data;
|
||||||
char* query = malloc(150 * sizeof(char));
|
char* query = malloc(150 * sizeof(char));
|
||||||
sprintf(query, "SELECT lap_id, points FROM %s WHERE %s=%i", "telemetry", "lap_id", lap1id);
|
sprintf(query, "SELECT lap_id, points FROM %s WHERE %s=%i", "telemetry", "lap_id", lap1id);
|
||||||
if (h_query_select(conn, query, &result) == H_OK) {
|
if (h_query_select(conn, query, &result) == H_OK)
|
||||||
|
{
|
||||||
//laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
//laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
||||||
//get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
//get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
||||||
points = telem_result(result, 3, 3, NULL, NULL);
|
points = telem_result(result, 3, 3, NULL, NULL);
|
||||||
//get_stint_result(result, stint);
|
//get_stint_result(result, stint);
|
||||||
h_clean_result(&result);
|
h_clean_result(&result);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
printf("Error executing query\n");
|
printf("Error executing query\n");
|
||||||
}
|
}
|
||||||
free(query);
|
free(query);
|
||||||
|
|
@ -174,31 +181,37 @@ int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, i
|
||||||
double* doublearrays2 = malloc((sizeof(double))*points*doublefields);
|
double* doublearrays2 = malloc((sizeof(double))*points*doublefields);
|
||||||
|
|
||||||
struct _h_result result1;
|
struct _h_result result1;
|
||||||
struct _h_data * data1;
|
struct _h_data* data1;
|
||||||
char* query1 = malloc(150 * sizeof(char));
|
char* query1 = malloc(150 * sizeof(char));
|
||||||
sprintf(query1, "SELECT lap_id, points, speed, gear, rpms, brake, accel, steer FROM %s WHERE %s=%i", "telemetry", "lap_id", lap1id);
|
sprintf(query1, "SELECT lap_id, points, speed, gear, rpms, brake, accel, steer FROM %s WHERE %s=%i", "telemetry", "lap_id", lap1id);
|
||||||
if (h_query_select(conn, query1, &result1) == H_OK) {
|
if (h_query_select(conn, query1, &result1) == H_OK)
|
||||||
|
{
|
||||||
//laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
//laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
||||||
//get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
//get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
||||||
points = telem_result(result1, intfields, doublefields, intarrays1, doublearrays1);
|
points = telem_result(result1, intfields, doublefields, intarrays1, doublearrays1);
|
||||||
//get_stint_result(result, stint);
|
//get_stint_result(result, stint);
|
||||||
h_clean_result(&result1);
|
h_clean_result(&result1);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
printf("Error executing query\n");
|
printf("Error executing query\n");
|
||||||
}
|
}
|
||||||
free(query1);
|
free(query1);
|
||||||
|
|
||||||
struct _h_result result2;
|
struct _h_result result2;
|
||||||
struct _h_data * data2;
|
struct _h_data* data2;
|
||||||
char* query2 = malloc(150 * sizeof(char));
|
char* query2 = malloc(150 * sizeof(char));
|
||||||
sprintf(query2, "SELECT lap_id, points, speed, gear, rpms, brake, accel, steer FROM %s WHERE %s=%i", "telemetry", "lap_id", lap2id);
|
sprintf(query2, "SELECT lap_id, points, speed, gear, rpms, brake, accel, steer FROM %s WHERE %s=%i", "telemetry", "lap_id", lap2id);
|
||||||
if (h_query_select(conn, query2, &result2) == H_OK) {
|
if (h_query_select(conn, query2, &result2) == H_OK)
|
||||||
|
{
|
||||||
//laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
//laps->rows = malloc(sizeof(LapRowData) * result.nb_rows);
|
||||||
//get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
//get_row_results(result, laps->fields, laps->rows, sizeof(LapRowData));
|
||||||
points = telem_result(result2, intfields, doublefields, intarrays2, doublearrays2);
|
points = telem_result(result2, intfields, doublefields, intarrays2, doublearrays2);
|
||||||
//get_stint_result(result, stint);
|
//get_stint_result(result, stint);
|
||||||
h_clean_result(&result2);
|
h_clean_result(&result2);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
printf("Error executing query\n");
|
printf("Error executing query\n");
|
||||||
}
|
}
|
||||||
free(query2);
|
free(query2);
|
||||||
|
|
@ -209,12 +222,12 @@ int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, i
|
||||||
|
|
||||||
snprintf(datafile, strsize, "%s%s", datadir, filename1);
|
snprintf(datafile, strsize, "%s%s", datadir, filename1);
|
||||||
slogt("dumping %i points to file %s", points, datafile);
|
slogt("dumping %i points to file %s", points, datafile);
|
||||||
FILE *out = fopen(datafile, "w");
|
FILE* out = fopen(datafile, "w");
|
||||||
fprintf(out, "%s %s %s %s %s %s %s %s %s %s %s %s %s\n", "point", "speed1", "rpms1", "gear1", "brake1", "accel1", "steer1", "speed2", "rpms2", "gear2", "brake2", "accel2", "steer2" );
|
fprintf(out, "%s %s %s %s %s %s %s %s %s %s %s %s %s\n", "point", "speed1", "rpms1", "gear1", "brake1", "accel1", "steer1", "speed2", "rpms2", "gear2", "brake2", "accel2", "steer2" );
|
||||||
for (int i=0; i<points; i++)
|
for (int i=0; i<points; i++)
|
||||||
{
|
{
|
||||||
fprintf(out, "%i %i %i %i %f %f %f", i+1, intarrays1[i], intarrays1[i+points], intarrays1[i+(points*2)], doublearrays1[i], doublearrays1[i+points], doublearrays1[i+(points*2)]);
|
fprintf(out, "%i %i %i %i %f %f %f", i+1, intarrays1[i], intarrays1[i+points], intarrays1[i+(points*2)], doublearrays1[i], doublearrays1[i+points], doublearrays1[i+(points*2)]);
|
||||||
fprintf(out, "%i %i %i %i %f %f %f\n", i+1, intarrays2[i], intarrays2[i+points], intarrays2[i+(points*2)], doublearrays2[i], doublearrays2[i+points], doublearrays2[i+(points*2)]);
|
fprintf(out, "%i %i %i %i %f %f %f\n", i+1, intarrays2[i], intarrays2[i+points], intarrays2[i+(points*2)], doublearrays2[i], doublearrays2[i+points], doublearrays2[i+(points*2)]);
|
||||||
}
|
}
|
||||||
fclose(out);
|
fclose(out);
|
||||||
|
|
||||||
|
|
@ -227,14 +240,15 @@ int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, i
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_bytes(void *ptr, int size)
|
void print_bytes(void* ptr, int size)
|
||||||
{
|
{
|
||||||
char *pp = malloc((size*2)+1);
|
char* pp = malloc((size*2)+1);
|
||||||
char output[(size * 2) + 1];
|
char output[(size * 2) + 1];
|
||||||
char *ppp = &output[0];
|
char* ppp = &output[0];
|
||||||
unsigned char *p = ptr;
|
unsigned char* p = ptr;
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i<size; i++) {
|
for (i=0; i<size; i++)
|
||||||
|
{
|
||||||
slogt("%02hhX", p[i]);
|
slogt("%02hhX", p[i]);
|
||||||
ppp += sprintf(ppp, "%02X", p[i]);
|
ppp += sprintf(ppp, "%02X", p[i]);
|
||||||
//snprintf(pp, (size*2)+1, "%s%02hhX", pp, p[i]);
|
//snprintf(pp, (size*2)+1, "%s%02hhX", pp, p[i]);
|
||||||
|
|
@ -248,10 +262,11 @@ int updatetelemetry(struct _h_connection* conn, int telemid, int size, const cha
|
||||||
|
|
||||||
//char *pp = malloc((size*2)+1);
|
//char *pp = malloc((size*2)+1);
|
||||||
char output[(size * 2) + 1];
|
char output[(size * 2) + 1];
|
||||||
char *ppp = &output[0];
|
char* ppp = &output[0];
|
||||||
unsigned char *p = data;
|
unsigned char* p = data;
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i<size; i++) {
|
for (i=0; i<size; i++)
|
||||||
|
{
|
||||||
ppp += sprintf(ppp, "%02hhX", p[i]);
|
ppp += sprintf(ppp, "%02hhX", p[i]);
|
||||||
//snprintf(pp, (size*2)+1, "%s%02hhX", pp, p[i]);
|
//snprintf(pp, (size*2)+1, "%s%02hhX", pp, p[i]);
|
||||||
}
|
}
|
||||||
|
|
@ -267,8 +282,8 @@ int updatetelemetry(struct _h_connection* conn, int telemid, int size, const cha
|
||||||
}
|
}
|
||||||
|
|
||||||
int updatetelemetrydata(struct _h_connection* conn, int tracksamples, int telemid, int lapid,
|
int updatetelemetrydata(struct _h_connection* conn, int tracksamples, int telemid, int lapid,
|
||||||
int* speeddata, int* rpmdata, int* geardata,
|
int* speeddata, int* rpmdata, int* geardata,
|
||||||
double* steerdata, double* acceldata, double* brakedata)
|
double* steerdata, double* acceldata, double* brakedata)
|
||||||
{
|
{
|
||||||
int b = 0;
|
int b = 0;
|
||||||
b = updatetelemetry(conn, telemid, tracksamples*sizeof(double), "steer", steerdata);
|
b = updatetelemetry(conn, telemid, tracksamples*sizeof(double), "steer", steerdata);
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
|
|
||||||
int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, int lap2id);
|
int dumptelemetrytofile(struct _h_connection* conn, char* datadir, int lap1id, int lap2id);
|
||||||
|
|
||||||
void print_bytes(void *ptr, int size);
|
void print_bytes(void* ptr, int size);
|
||||||
|
|
||||||
int updatetelemetrydata(struct _h_connection* conn, int tracksamples, int telemid, int lapid,
|
int updatetelemetrydata(struct _h_connection* conn, int tracksamples, int telemid, int lapid,
|
||||||
int* speeddata, int* rpmdata, int* geardata,
|
int* speeddata, int* rpmdata, int* geardata,
|
||||||
double* steerdata, double* acceldata, double* brakedata);
|
double* steerdata, double* acceldata, double* brakedata);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue