NetBurner 3.5.6
PDF Version
AlphaDisplay/src/Arduino.h
1/* NetBurner "Arduino Compatibility" Shim
2 *
3 * This file is hand-written by NetBurner to wrap NetBurner
4 * functions with Arduino-compatible names to more easily
5 * integrate third-party libraries. It contains no Arduino
6 * or GPL-licensed source code. Arduino is a trademark of
7 * Arduino S.A. and is not affiliated with NetBurner.
8 *
9 * This file is released without copyright, and
10 * NetBurner makes no representation or warranties with respect to the
11 * performance of this computer program, and specifically disclaims any
12 * responsibility for any damages, special or consequential, connected with
13 * the use of this program.
14 */
15
16#ifndef _NB_ARDUINO
17#define _NB_ARDUINO
18
19//Extra
20#include <nbstring.h>
21#include <stdio.h>
22#include <string.h>
23#include <serial.h>
24#include <nbprintfinternal.h>
25#include <stdarg.h>
26#include <math.h>
27
28typedef bool boolean;
29typedef uint8_t byte;
30
31#define PI 3.1415926535
32
33static inline void delay(int x)
34{
35 if (x > (1000/TICKS_PER_SECOND)) { OSTimeDly(x/TICKS_PER_SECOND+1); }
36 else for (volatile int i = 0; i < x*100000; i++);
37}
38static inline int min(const int a, const int b) {
39 return a < b ? a : b;
40}
41static inline int max(const int a, const int b) {
42 return a > b ? a : b;
43}
44static inline long map(long x, long in_min, long in_max, long out_min, long out_max)
45{
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;
50}
51static inline unsigned long millis() {
52 return Secs*1000;
53}
54
55class String : public NBString
56{
57public:
58 String(){};
59
65 String(const NBString &str) :NBString(str) {};
66
67
75 String(const NBString &str, size_t pos, size_t len = npos) :NBString(str,pos,len) {};
76
82 String(const char *s) :NBString(s) {};
83
84
91 String(const char *s, size_t n) : NBString(s,n){};
92
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); };
98
99
100
101};
102
103
104#define HEX (16)
105#define DEC (10)
106#define OCT (8)
107#define BIN (2)
108
109
110
111class Print
112{
113size_t handle_unum(uint32_t v, int base)
114{
115NBString s;
116switch(base)
117{
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;
122default:return 0;
123}
124return print((const NBString)s); // (uint8_t *)s.c_str(),s.length()
125}
126
127size_t handle_inum(int32_t v, int base)
128{
129if(v<0)
130{
131return write((uint8_t)'-')+handle_unum((uint32_t)-v,base);
132}
133return handle_unum((uint32_t)v,base);
134}
135
136public:
137virtual size_t write(uint8_t c)=0; // Pure virtual, must be implemented precisely by children
138
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; };
141
142
143inline size_t print(const char *c) {if(c) return write(c); else return 0;};
144
145inline size_t print(const NBString & s){ return write(s.c_str());}
146
147inline size_t print(char c) { return write((uint8_t *)&c,1);};
148
149inline size_t print(uint32_t i,int base=10){ return handle_unum(i,base);}
150
151inline size_t print(int32_t i,int base=10){ return handle_inum(i,base);}
152
153inline size_t print(int i,int base=10){ return handle_inum((int32_t)i,base);};
154
155//inline size_t print(long i,int base=10){ return handle_inum((int32_t)i,base);};
156
157inline size_t print(unsigned int i,int base=10){ return handle_unum((uint32_t)i,base);};
158
159inline size_t print(unsigned char i,int base=10){ return handle_unum((uint32_t)i,base);};
160
161//inline size_t print(unsigned long i,int base=10){ return handle_unum((uint32_t)i,base);};
162
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()); };
164
165
166inline size_t print(float f, int wid=2){ return print((double)f,wid);};
167
168inline size_t println(const char *c) {int rv=print(c); rv+=write((uint8_t *)"\r\n",2); return rv;};
169
170inline size_t println(const NBString & s) {int rv=print(s); rv+=write((uint8_t *)"\r\n",2); return rv;};
171
172inline size_t println(char c) {int rv=print(c); rv+=write((uint8_t *)"\r\n",2); return rv;};
173
174inline size_t println(int i,int base =10) {int rv=print(i,base); rv+=write((uint8_t *)"\r\n",2); return rv;};
175
176inline size_t println(unsigned int i,int base=10) {int rv=print(i,base); rv+=write((uint8_t *)"\r\n",2); return rv;};
177
178inline size_t println(unsigned char i,int base=10){int rv=print(i,base); rv+=write((uint8_t *)"\r\n",2); return rv;};
179
180inline size_t println(unsigned long i,int base=10){int rv=print(i,base); rv+=write((uint8_t *)"\r\n",2); return rv;};
181
182inline size_t println(long i,int base=10) {int rv=print(i,base); rv+=write((uint8_t *)"\r\n",2); return rv;};
183
184inline size_t println(double d,int wid=2){int rv=print(d,wid); rv+=write((uint8_t *)"\r\n",2); return rv;};
185
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);};
188};
189
190
191class FDprint : public Print
192{
193int m_fd;
194public:
195virtual size_t write(uint8_t c) { char o[1]; o[0] = c; return ::write(m_fd,(const char*)o, 1);};
196// virtual size_t write(const uint8_t *c, size_t len){if(c) {if(len==0) len=strlen((const char *)c); return ::write(m_fd,(const char *)c,len);} else return 0;}
197FDprint(int fd) {m_fd=fd; };
198};
199
200
201
202
203#define pgm_read_byte_near(address_short) *((uint8_t*)(address_short))
204
205#define pgm_read_word_near(address_short) *((uint16_t*)(address_short))
206
207#define pgm_read_dword_near(address_short) *((uint32_t*)(address_short))
208
209#define pgm_read_float_near(address_short) *((float *)(address_short))
210
211
212
213class SerialIf : public FDprint
214{
215public:
216inline int begin(int b){SerialClose(0); return SimpleOpenSerial(0, b);};
217SerialIf() : FDprint(0) {};
218};
219
220extern SerialIf Serial;
221
222#endif
223
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
NetBurner String Class.
NetBurner Serial API.