void api_sendSampleRecord(Serial *serial, SampleRecord *sr, unsigned int tick, int sendMeta){ json_messageStart(serial); json_blockStart(serial, "s"); json_uint(serial,"t",tick,1); if (sendMeta) writeSampleMeta(serial, sr, getConnectivitySampleRateLimit(), 1); size_t channelCount = 0; unsigned int channelsBitmask = 0; json_arrayStart(serial, "d"); for (int i = 0; i < SAMPLE_RECORD_CHANNELS; i++){ ChannelSample *sample = &(sr->Samples[i]); ChannelConfig * channelConfig = sample->channelConfig; if (SAMPLE_DISABLED != channelConfig->sampleRate){ if (NIL_SAMPLE != sample->intValue){ channelsBitmask = channelsBitmask | (1 << channelCount); int precision = sample->precision; if (precision > 0){ put_float(serial, sample->floatValue, precision); } else{ put_int(serial, sample->intValue); } serial->put_c(','); } channelCount++; } } put_uint(serial, channelsBitmask); json_arrayEnd(serial, 0); json_blockEnd(serial, 0); json_blockEnd(serial, 0); }
int api_getMeta(Serial *serial, const jsmntok_t *json){ json_messageStart(serial); SampleRecord * sr = (SampleRecord *)portMalloc(sizeof(SampleRecord)); if (sr == 0) return API_ERROR_SEVERE; initSampleRecord(getWorkingLoggerConfig(), sr); writeSampleMeta(serial, sr, getConnectivitySampleRateLimit(), 0); portFree(sr); json_blockEnd(serial, 0); return API_SUCCESS_NO_RETURN; }
static int calcTelemetrySampleRate(LoggerConfig *config, int desiredSampleRate) { int maxRate = getConnectivitySampleRateLimit(); return isHigherSampleRate(desiredSampleRate, maxRate) ? maxRate : desiredSampleRate; }