int main(int argc, char* argv[])
{

	LoggerConfig *config = getWorkingLoggerConfig();
	initApi();
	initialize_logger_config();
	setupMockSerial();
	imu_init(config);
	resetPredictiveTimer();

	int pt;

	pt = open("/dev/ptmx", O_RDWR | O_NOCTTY);
	if (pt < 0)
	{
		perror("open /dev/ptmx");
		return 1;
	}

	grantpt(pt);
	unlockpt(pt);

	fprintf(stderr, "RaceCapture/Pro simulator on: %s\n", ptsname(pt));

	char line[LINE_BUFFER_SIZE];
	memset(line, 0, LINE_BUFFER_SIZE);
	int messageCount = 0;
	while(1){
		size_t count = 0;
		line[0] = '\0';
		while (count < LINE_BUFFER_SIZE){
			char c;
			read(pt, &c, 1);
			line[count] = c;
			count++;
			if (c == '\r'){
				line[count] = '\0';
				break;
			}
		}

		printf("rx: (%zu): %s\r\n", strlen(line), line);
		mock_resetTxBuffer();
		process_api(getMockSerial(), line, strlen(line));
		char *txBuffer = mock_getTxBuffer();
		printf("tx:(%zu) %s\r\n", strlen(txBuffer), txBuffer);
		write(pt, txBuffer, strlen(txBuffer));
		pr_info_int(++messageCount);
		pr_info(" messages\r\n");
	}
	return 0;
}
void lapStats_init()
{
    lapstats_reset_distance();
    reset_elapsed_time();
    set_active_track(NULL);
    resetPredictiveTimer();
    reset_current_lap();
    g_geo_circle_radius = 0;
    g_configured = 0;
    g_lastLapTime = 0;
    g_lastSectorTime = 0;
    g_at_sf = 0;
    g_lapStartTimestamp = -1;
    g_at_sector = 0;
    g_lastSectorTimestamp = 0;
    g_lapCount = 0;
    g_sector = -1;     // Indicates we haven't crossed start/finish yet.
    g_lastSector = -1; // Indicates no previous sector.
}