1 changed files with 35 additions and 4 deletions
@ -1,27 +1,58 @@ |
|||||||
|
|
||||||
#include "Util.h" |
#include "Util.h" |
||||||
|
#include "utility/vprintf.h" |
||||||
using namespace AP_HAL_AVR; |
using namespace AP_HAL_AVR; |
||||||
|
|
||||||
|
/* Helper class implements AP_HAL::Print so we can use utility/vprintf */ |
||||||
|
class BufferPrinter : public AP_HAL::Print { |
||||||
|
public: |
||||||
|
BufferPrinter(char* str, size_t size) : _str(str), _size(size), _offs(0) {} |
||||||
|
size_t write(uint8_t c) { |
||||||
|
if (_offs < _size) { |
||||||
|
_str[_offs] = c; |
||||||
|
_offs++; |
||||||
|
return 1; |
||||||
|
} else { |
||||||
|
return 0; |
||||||
|
} |
||||||
|
} |
||||||
|
size_t _offs;
|
||||||
|
char* const _str; |
||||||
|
const size_t _size; |
||||||
|
}; |
||||||
|
|
||||||
int AVRUtil::snprintf(char* str, size_t size, const char *format, ...) |
int AVRUtil::snprintf(char* str, size_t size, const char *format, ...) |
||||||
{ |
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, format); |
||||||
|
int res = this->vsnprintf(str, size, format, ap); |
||||||
|
va_end(ap); |
||||||
|
return res; |
||||||
} |
} |
||||||
|
|
||||||
int AVRUtil::snprintf_P(char* str, size_t size, const prog_char_t *format, ...) |
int AVRUtil::snprintf_P(char* str, size_t size, const prog_char_t *format, ...) |
||||||
{ |
{ |
||||||
|
va_list ap; |
||||||
|
va_start(ap, format); |
||||||
|
int res = this->vsnprintf_P(str, size, format, ap); |
||||||
|
va_end(ap); |
||||||
|
return res; |
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
int AVRUtil::vsnprintf(char* str, size_t size, const char *format, va_list ap) |
int AVRUtil::vsnprintf(char* str, size_t size, const char *format, va_list ap) |
||||||
{ |
{ |
||||||
|
BufferPrinter buf(str, size); |
||||||
|
vprintf(&buf, 0, format, ap); |
||||||
|
return (int) buf._offs; |
||||||
} |
} |
||||||
|
|
||||||
int AVRUtil::vsnprintf_P(char* str, size_t size, const prog_char_t *format, |
int AVRUtil::vsnprintf_P(char* str, size_t size, const prog_char_t *format, |
||||||
va_list ap) |
va_list ap) |
||||||
{ |
{ |
||||||
|
BufferPrinter buf(str, size); |
||||||
|
vprintf(&buf, 1,(const char*) format, ap); |
||||||
|
return (int) buf._offs; |
||||||
} |
} |
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in new issue