static void json_gpsTarget(Serial *serial, const char *name,  GPSTargetConfig *gpsTarget, int more){
	json_blockStart(serial, name);
	json_float(serial, "lat", gpsTarget->latitude, DEFAULT_GPS_POSITION_LOGGING_PRECISION, 1);
	json_float(serial, "long", gpsTarget->longitude, DEFAULT_GPS_POSITION_LOGGING_PRECISION, 1);
	json_float(serial, "rad", gpsTarget->targetRadius, DEFAULT_GPS_RADIUS_LOGGING_PRECISION, 0);
	json_blockEnd(serial, more);
}
static void sendAnalogConfig(Serial *serial, size_t startIndex, size_t endIndex){

	json_messageStart(serial);
	json_blockStart(serial, "getAnalogCfg");
	for (size_t i = startIndex; i <= endIndex; i++){

		ADCConfig *cfg = &(getWorkingLoggerConfig()->ADCConfigs[i]);
		json_blockStartInt(serial, i);
		json_channelConfig(serial, &(cfg->cfg), 1);
		json_int(serial, "scalMod", cfg->scalingMode, 1);

		json_int(serial, "prec", cfg->loggingPrecision, 1);
		json_float(serial, "linScal", cfg->linearScaling, ANALOG_SCALING_PRECISION, 1);

		json_blockStart(serial, "map");
		json_arrayStart(serial, "raw");

		for (size_t b = 0; b < ANALOG_SCALING_BINS; b++){
			put_int(serial,  cfg->scalingMap.rawValues[b]);
			if (b < ANALOG_SCALING_BINS - 1) serial->put_c(',');
		}
		json_arrayEnd(serial, 1);
		json_arrayStart(serial, "scal");
		for (size_t b = 0; b < ANALOG_SCALING_BINS; b++){
			put_float(serial, cfg->scalingMap.scaledValues[b], ANALOG_SCALING_PRECISION);
			if (b < ANALOG_SCALING_BINS - 1) serial->put_c(',');
		}
		json_arrayEnd(serial, 0);
		json_blockEnd(serial, 0); //map
		json_blockEnd(serial, i != endIndex); //index
	}
	json_blockEnd(serial, 0);
	json_blockEnd(serial, 0);
}
static void get_speed_time(struct Serial* serial,
                           struct auto_logger_speed_time *alst,
                           const char* name,
                           const bool more)
{
        json_objStartString(serial, name);
        json_float(serial, "speed", alst->speed, 2, true);
        json_uint(serial, "time", alst->time, false);
        json_objEnd(serial, more);
}
static void sendPwmConfig(Serial *serial, size_t startIndex, size_t endIndex){

	json_messageStart(serial);
	json_blockStart(serial, "getPwmCfg");
	for (size_t i = startIndex; i <= endIndex; i++){
		PWMConfig *cfg = &(getWorkingLoggerConfig()->PWMConfigs[i]);
		json_blockStartInt(serial, i);
		json_channelConfig(serial, &(cfg->cfg), 1);
		json_uint(serial, "logPrec", cfg->loggingPrecision, 1);
		json_uint(serial, "outMode", cfg->outputMode, 1);
		json_uint(serial, "logMode", cfg->loggingMode, 1);
		json_uint(serial, "stDutyCyc", cfg->startupDutyCycle, 1);
		json_uint(serial, "stPeriod", cfg->startupPeriod, 1);
		json_float(serial, "vScal", cfg->voltageScaling, DEFAULT_PWM_LOGGING_PRECISION, 0);
		json_blockEnd(serial, i != endIndex); //index
	}
	json_blockEnd(serial, 0);
	json_blockEnd(serial, 0);
}