void mavlink_logbuffer_write(struct mavlink_logbuffer *lb, const struct mavlink_logmessage *elem) { int end = (lb->start + lb->count) % lb->size; memcpy(&(lb->elems[end]), elem, sizeof(struct mavlink_logmessage)); if (mavlink_logbuffer_is_full(lb)) { lb->start = (lb->start + 1) % lb->size; /* full, overwrite */ } else { ++lb->count; } }
__EXPORT void mavlink_logbuffer_vasprintf(struct mavlink_logbuffer *lb, int severity, const char *fmt, ...) { va_list ap; va_start(ap, fmt); int end = (lb->start + lb->count) % lb->size; lb->elems[end].severity = severity; vsnprintf(lb->elems[end].text, sizeof(lb->elems[0].text), fmt, ap); va_end(ap); /* increase count */ if (mavlink_logbuffer_is_full(lb)) { lb->start = (lb->start + 1) % lb->size; /* full, overwrite */ } else { ++lb->count; } }