24#include <nbprintfinternal.h>
31#define PI 3.1415926535
33static inline void delay(
int x)
36 else for (
volatile int i = 0; i < x*100000; i++);
38static inline int min(
const int a,
const int b) {
41static inline int max(
const int a,
const int b) {
44static inline long map(
long x,
long in_min,
long in_max,
long out_min,
long out_max)
46 long outD = (out_max - out_min);
47 long inR = (x - in_min);
48 long inD = (in_max - in_min);
49 return outD*inR/inD+out_min;
51static inline unsigned long millis() {
75 String(
const NBString &str,
size_t pos,
size_t len = npos) :
NBString(str,pos,len) {};
82 String(
const char *s) :
NBString(s) {};
91 String(
const char *s,
size_t n) :
NBString(s,n){};
93 String(uint32_t v) {
siprintf(
"%lu",v); };
94 String(uint16_t v) {
siprintf(
"%u",v); };
95 String(uint8_t v) {
siprintf(
"%u",v); };
96 String(int32_t v) {
siprintf(
"%ld",v); };
97 String(int16_t v) {
siprintf(
"%d",v); };
113size_t handle_unum(uint32_t v,
int base)
118case 16: s.siprintf(
"%lX",v);
break;
119case 10: s.siprintf(
"%ld",v);
break;
120case 8: s.siprintf(
"%lo",v);
break;
121case 2: s.siprintf(
"%b",v);
break;
127size_t handle_inum(int32_t v,
int base)
131return write((uint8_t)
'-')+handle_unum((uint32_t)-v,base);
133return handle_unum((uint32_t)v,base);
137virtual size_t write(uint8_t c)=0;
139virtual size_t write(
const uint8_t *buffer,
size_t size=0){
size_t i=0;
while(i<size) { write((uint8_t)buffer[i]); i++; }
return i; };
140virtual size_t write(
const char *str) {
if(str) {
return write((uint8_t *)str,strlen(str));}
return 0; };
143inline size_t print(
const char *c) {
if(c)
return write(c);
else return 0;};
145inline size_t print(
const NBString & s){
return write(s.c_str());}
147inline size_t print(
char c) {
return write((uint8_t *)&c,1);};
149inline size_t print(uint32_t i,
int base=10){
return handle_unum(i,base);}
151inline size_t print(int32_t i,
int base=10){
return handle_inum(i,base);}
153inline size_t print(
int i,
int base=10){
return handle_inum((int32_t)i,base);};
157inline size_t print(
unsigned int i,
int base=10){
return handle_unum((uint32_t)i,base);};
159inline size_t print(
unsigned char i,
int base=10){
return handle_unum((uint32_t)i,base);};
163inline size_t print(
double d,
int wid=2) {
NBString s; s.sprintf(
"%0.*f",wid,d);
return write((uint8_t *)s.c_str(),s.length()); };
166inline size_t print(
float f,
int wid=2){
return print((
double)f,wid);};
168inline size_t println(
const char *c) {
int rv=print(c); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
170inline size_t println(
const NBString & s) {
int rv=print(s); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
172inline size_t println(
char c) {
int rv=print(c); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
174inline size_t println(
int i,
int base =10) {
int rv=print(i,base); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
176inline size_t println(
unsigned int i,
int base=10) {
int rv=print(i,base); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
178inline size_t println(
unsigned char i,
int base=10){
int rv=print(i,base); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
180inline size_t println(
unsigned long i,
int base=10){
int rv=print(i,base); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
182inline size_t println(
long i,
int base=10) {
int rv=print(i,base); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
184inline size_t println(
double d,
int wid=2){
int rv=print(d,wid); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
186inline size_t println(
float f,
int wid=2) {
int rv=print(f,wid); rv+=write((uint8_t *)
"\r\n",2);
return rv;};
187inline size_t println() {
return write((uint8_t *)
"\r\n",2);};
191class FDprint :
public Print
195virtual size_t write(uint8_t c) {
char o[1]; o[0] = c; return ::write(m_fd,(
const char*)o, 1);};
197FDprint(
int fd) {m_fd=fd; };
203#define pgm_read_byte_near(address_short) *((uint8_t*)(address_short))
205#define pgm_read_word_near(address_short) *((uint16_t*)(address_short))
207#define pgm_read_dword_near(address_short) *((uint32_t*)(address_short))
209#define pgm_read_float_near(address_short) *((float *)(address_short))
213class SerialIf :
public FDprint
217SerialIf() : FDprint(0) {};
220extern SerialIf Serial;
Lightweight alternative to C++ CString class.
Definition nbstring.h:118
int siprintf(const char *format,...)
isprintf (integer) to a string with formatting to a character array
#define TICKS_PER_SECOND
System clock ticks per second.
Definition constants.h:49
void OSTimeDly(uint32_t to_count)
Delay the task until the specified value of the system timer ticks. The number of system ticks per se...
Definition nbrtos.h:1850
int SerialClose(int portnum)
Close a serial port.
#define SimpleOpenSerial(p, b)
Simple open a serial port.
Definition serial.h:97