Skip to content

Commit 92dd0c7

Browse files
committed
Revert "Merge branch 'master' of github.com:arduino/Arduino into diskloader_reboot"
This reverts commit df9835efafd13685251749bc210c0b96a18a96a5, reversing changes made to ec45af8bfa9222a807c075dd1db4b5aa798bba03. Conflicts: hardware/arduino/variants/mega/pins_arduino.h libraries/Ethernet/examples/PachubeClientString/PachubeClientString.ino
1 parent 0f17a97 commit 92dd0c7

File tree

3 files changed

+308
-168
lines changed

3 files changed

+308
-168
lines changed

hardware/arduino/cores/arduino/HardwareSerial.h

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class HardwareSerial : public Stream
3232
{
3333
private:
3434
ring_buffer *_rx_buffer;
35+
ring_buffer *_tx_buffer;
3536
volatile uint8_t *_ubrrh;
3637
volatile uint8_t *_ubrrl;
3738
volatile uint8_t *_ucsra;
@@ -40,28 +41,29 @@ class HardwareSerial : public Stream
4041
uint8_t _rxen;
4142
uint8_t _txen;
4243
uint8_t _rxcie;
43-
uint8_t _udre;
44+
uint8_t _udrie;
4445
uint8_t _u2x;
4546
public:
46-
HardwareSerial(ring_buffer *rx_buffer,
47+
HardwareSerial(ring_buffer *rx_buffer, ring_buffer *tx_buffer,
4748
volatile uint8_t *ubrrh, volatile uint8_t *ubrrl,
4849
volatile uint8_t *ucsra, volatile uint8_t *ucsrb,
4950
volatile uint8_t *udr,
50-
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udre, uint8_t u2x);
51+
uint8_t rxen, uint8_t txen, uint8_t rxcie, uint8_t udrie, uint8_t u2x);
5152
void begin(unsigned long);
5253
void end();
5354
virtual int available(void);
5455
virtual int peek(void);
5556
virtual int read(void);
5657
virtual void flush(void);
57-
virtual void write(uint8_t);
58+
virtual size_t write(uint8_t);
5859
using Print::write; // pull in write(str) and write(buf, size) from Print
5960
};
6061

6162
#if defined(UBRRH) || defined(UBRR0H)
6263
extern HardwareSerial Serial;
6364
#elif defined(USBCON)
64-
#include "usb_api.h"
65+
#include "USBAPI.h"
66+
// extern HardwareSerial Serial_;
6567
#endif
6668
#if defined(UBRR1H)
6769
extern HardwareSerial Serial1;
@@ -73,4 +75,6 @@ class HardwareSerial : public Stream
7375
extern HardwareSerial Serial3;
7476
#endif
7577

78+
extern void serialEventRun(void) __attribute__((weak));
79+
7680
#endif

hardware/arduino/cores/arduino/Print.cpp

Lines changed: 125 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -23,173 +23,213 @@
2323
#include <stdio.h>
2424
#include <string.h>
2525
#include <math.h>
26-
#include "wiring.h"
26+
#include "Arduino.h"
2727

2828
#include "Print.h"
2929

3030
// Public Methods //////////////////////////////////////////////////////////////
3131

3232
/* default implementation: may be overridden */
33-
void Print::write(const char *str)
33+
size_t Print::write(const uint8_t *buffer, size_t size)
3434
{
35-
while (*str)
36-
write(*str++);
35+
size_t n = 0;
36+
while (size--) {
37+
n += write(*buffer++);
38+
}
39+
return n;
3740
}
3841

39-
/* default implementation: may be overridden */
40-
void Print::write(const uint8_t *buffer, size_t size)
42+
size_t Print::print(const __FlashStringHelper *ifsh)
4143
{
42-
while (size--)
43-
write(*buffer++);
44+
const prog_char *p = (const prog_char *)ifsh;
45+
size_t n = 0;
46+
while (1) {
47+
unsigned char c = pgm_read_byte(p++);
48+
if (c == 0) break;
49+
n += write(c);
50+
}
51+
return n;
4452
}
4553

46-
void Print::print(const String &s)
54+
size_t Print::print(const String &s)
4755
{
48-
for (unsigned int i = 0; i < s.length(); i++) {
49-
write(s[i]);
56+
size_t n = 0;
57+
for (uint16_t i = 0; i < s.length(); i++) {
58+
n += write(s[i]);
5059
}
60+
return n;
5161
}
5262

53-
void Print::print(const char str[])
63+
size_t Print::print(const char str[])
5464
{
55-
write(str);
65+
return write(str);
5666
}
5767

58-
void Print::print(char c, int base)
68+
size_t Print::print(char c)
5969
{
60-
print((long) c, base);
70+
return write(c);
6171
}
6272

63-
void Print::print(unsigned char b, int base)
73+
size_t Print::print(unsigned char b, int base)
6474
{
65-
print((unsigned long) b, base);
75+
return print((unsigned long) b, base);
6676
}
6777

68-
void Print::print(int n, int base)
78+
size_t Print::print(int n, int base)
6979
{
70-
print((long) n, base);
80+
return print((long) n, base);
7181
}
7282

73-
void Print::print(unsigned int n, int base)
83+
size_t Print::print(unsigned int n, int base)
7484
{
75-
print((unsigned long) n, base);
85+
return print((unsigned long) n, base);
7686
}
7787

78-
void Print::print(long n, int base)
88+
size_t Print::print(long n, int base)
7989
{
8090
if (base == 0) {
81-
write(n);
91+
return write(n);
8292
} else if (base == 10) {
8393
if (n < 0) {
84-
print('-');
94+
int t = print('-');
8595
n = -n;
96+
return printNumber(n, 10) + t;
8697
}
87-
printNumber(n, 10);
98+
return printNumber(n, 10);
8899
} else {
89-
printNumber(n, base);
100+
return printNumber(n, base);
90101
}
91102
}
92103

93-
void Print::print(unsigned long n, int base)
104+
size_t Print::print(unsigned long n, int base)
94105
{
95-
if (base == 0) write(n);
96-
else printNumber(n, base);
106+
if (base == 0) return write(n);
107+
else return printNumber(n, base);
97108
}
98109

99-
void Print::print(double n, int digits)
110+
size_t Print::print(double n, int digits)
100111
{
101-
printFloat(n, digits);
112+
return printFloat(n, digits);
102113
}
103114

104-
void Print::println(void)
115+
size_t Print::println(const __FlashStringHelper *ifsh)
105116
{
106-
print('\r');
107-
print('\n');
117+
size_t n = print(ifsh);
118+
n += println();
119+
return n;
108120
}
109121

110-
void Print::println(const String &s)
122+
size_t Print::print(const Printable& x)
111123
{
112-
print(s);
113-
println();
124+
return x.printTo(*this);
114125
}
115126

116-
void Print::println(const char c[])
127+
size_t Print::println(void)
117128
{
118-
print(c);
119-
println();
129+
size_t n = print('\r');
130+
n += print('\n');
131+
return n;
120132
}
121133

122-
void Print::println(char c, int base)
134+
size_t Print::println(const String &s)
123135
{
124-
print(c, base);
125-
println();
136+
size_t n = print(s);
137+
n += println();
138+
return n;
126139
}
127140

128-
void Print::println(unsigned char b, int base)
141+
size_t Print::println(const char c[])
129142
{
130-
print(b, base);
131-
println();
143+
size_t n = print(c);
144+
n += println();
145+
return n;
132146
}
133147

134-
void Print::println(int n, int base)
148+
size_t Print::println(char c)
135149
{
136-
print(n, base);
137-
println();
150+
size_t n = print(c);
151+
n += println();
152+
return n;
138153
}
139154

140-
void Print::println(unsigned int n, int base)
155+
size_t Print::println(unsigned char b, int base)
141156
{
142-
print(n, base);
143-
println();
157+
size_t n = print(b, base);
158+
n += println();
159+
return n;
144160
}
145161

146-
void Print::println(long n, int base)
162+
size_t Print::println(int num, int base)
147163
{
148-
print(n, base);
149-
println();
164+
size_t n = print(num, base);
165+
n += println();
166+
return n;
150167
}
151168

152-
void Print::println(unsigned long n, int base)
169+
size_t Print::println(unsigned int num, int base)
153170
{
154-
print(n, base);
155-
println();
171+
size_t n = print(num, base);
172+
n += println();
173+
return n;
156174
}
157175

158-
void Print::println(double n, int digits)
176+
size_t Print::println(long num, int base)
159177
{
160-
print(n, digits);
161-
println();
178+
size_t n = print(num, base);
179+
n += println();
180+
return n;
162181
}
163182

164-
// Private Methods /////////////////////////////////////////////////////////////
183+
size_t Print::println(unsigned long num, int base)
184+
{
185+
size_t n = print(num, base);
186+
n += println();
187+
return n;
188+
}
165189

166-
void Print::printNumber(unsigned long n, uint8_t base)
190+
size_t Print::println(double num, int digits)
167191
{
168-
unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars.
169-
unsigned long i = 0;
192+
size_t n = print(num, digits);
193+
n += println();
194+
return n;
195+
}
170196

171-
if (n == 0) {
172-
print('0');
173-
return;
174-
}
197+
size_t Print::println(const Printable& x)
198+
{
199+
size_t n = print(x);
200+
n += println();
201+
return n;
202+
}
175203

176-
while (n > 0) {
177-
buf[i++] = n % base;
204+
// Private Methods /////////////////////////////////////////////////////////////
205+
206+
size_t Print::printNumber(unsigned long n, uint8_t base) {
207+
char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
208+
char *str = &buf[sizeof(buf) - 1];
209+
210+
*str = '\0';
211+
212+
// prevent crash if called with base == 1
213+
if (base < 2) base = 10;
214+
215+
do {
216+
unsigned long m = n;
178217
n /= base;
179-
}
218+
char c = m - base * n;
219+
*--str = c < 10 ? c + '0' : c + 'A' - 10;
220+
} while(n);
180221

181-
for (; i > 0; i--)
182-
print((char) (buf[i - 1] < 10 ?
183-
'0' + buf[i - 1] :
184-
'A' + buf[i - 1] - 10));
222+
return write(str);
185223
}
186224

187-
void Print::printFloat(double number, uint8_t digits)
225+
size_t Print::printFloat(double number, uint8_t digits)
188226
{
227+
size_t n = 0;
228+
189229
// Handle negative numbers
190230
if (number < 0.0)
191231
{
192-
print('-');
232+
n += print('-');
193233
number = -number;
194234
}
195235

@@ -203,18 +243,21 @@ void Print::printFloat(double number, uint8_t digits)
203243
// Extract the integer part of the number and print it
204244
unsigned long int_part = (unsigned long)number;
205245
double remainder = number - (double)int_part;
206-
print(int_part);
246+
n += print(int_part);
207247

208248
// Print the decimal point, but only if there are digits beyond
209-
if (digits > 0)
210-
print(".");
249+
if (digits > 0) {
250+
n += print(".");
251+
}
211252

212253
// Extract digits from the remainder one at a time
213254
while (digits-- > 0)
214255
{
215256
remainder *= 10.0;
216257
int toPrint = int(remainder);
217-
print(toPrint);
258+
n += print(toPrint);
218259
remainder -= toPrint;
219260
}
261+
262+
return n;
220263
}

0 commit comments

Comments
 (0)