F439_CPP_SPI_RA8875_TFT_LCD_03 1.0
STM32F439 SPI RA8875 7-inch TFT display demo built on the STM32_GFX and STM32_RA8875 libraries
Loading...
Searching...
No Matches
Print.cpp
Go to the documentation of this file.
1
6#include "Print.h"
7
8size_t Print::write(const uint8_t *buffer, size_t size) {
9 size_t n = 0;
10 while (size--) {
11 if (write(*buffer++))
12 n++;
13 else
14 break;
15 }
16 return n;
17}
18
19size_t Print::print(const __FlashStringHelper *ifsh) {
20 return print(reinterpret_cast<const char *>(ifsh));
21}
22size_t Print::print(const String &s) { return write(s.c_str(), s.length()); }
23size_t Print::print(const char str[]) { return write(str); }
24size_t Print::print(char c) { return write((uint8_t)c); }
25size_t Print::print(unsigned char b, int base) {
26 return print((unsigned long)b, base);
27}
28size_t Print::print(int n, int base) { return print((long)n, base); }
29size_t Print::print(unsigned int n, int base) {
30 return print((unsigned long)n, base);
31}
32size_t Print::print(long n, int base) {
33 if (base == 0)
34 return write((uint8_t)n);
35 if (base == 10 && n < 0) {
36 size_t t = print('-');
37 return t + printNumber((unsigned long)(-(n + 1)) + 1UL, 10);
38 }
39 return printNumber((unsigned long)n, (uint8_t)base);
40}
41size_t Print::print(unsigned long n, int base) {
42 return (base == 0) ? write((uint8_t)n) : printNumber(n, (uint8_t)base);
43}
44size_t Print::print(double n, int digits) { return printFloat(n, (uint8_t)digits); }
45
46size_t Print::println(void) { return write("\r\n"); }
47size_t Print::println(const __FlashStringHelper *ifsh) {
48 return print(ifsh) + println();
49}
50size_t Print::println(const String &s) { return print(s) + println(); }
51size_t Print::println(const char c[]) { return print(c) + println(); }
52size_t Print::println(char c) { return print(c) + println(); }
53size_t Print::println(unsigned char b, int base) {
54 return print(b, base) + println();
55}
56size_t Print::println(int num, int base) { return print(num, base) + println(); }
57size_t Print::println(unsigned int num, int base) {
58 return print(num, base) + println();
59}
60size_t Print::println(long num, int base) { return print(num, base) + println(); }
61size_t Print::println(unsigned long num, int base) {
62 return print(num, base) + println();
63}
64size_t Print::println(double num, int digits) {
65 return print(num, digits) + println();
66}
67
68size_t Print::printNumber(unsigned long n, uint8_t base) {
69 char buf[8 * sizeof(long) + 1]; // worst case: base 2
70 char *str = &buf[sizeof(buf) - 1];
71 *str = '\0';
72 if (base < 2)
73 base = 10;
74 do {
75 unsigned long m = n;
76 n /= base;
77 char c = (char)(m - base * n);
78 *--str = (c < 10) ? (char)(c + '0') : (char)(c + 'A' - 10);
79 } while (n);
80 return write(str);
81}
82
83size_t Print::printFloat(double number, uint8_t digits) {
84 size_t n = 0;
85 if (isnan(number))
86 return print("nan");
87 if (isinf(number))
88 return print("inf");
89 if (number > 4294967040.0 || number < -4294967040.0)
90 return print("ovf"); // beyond what fits in an unsigned long
91 if (number < 0.0) {
92 n += print('-');
93 number = -number;
94 }
95 // Round to the requested number of digits.
96 double rounding = 0.5;
97 for (uint8_t i = 0; i < digits; ++i)
98 rounding /= 10.0;
99 number += rounding;
100 unsigned long int_part = (unsigned long)number;
101 double remainder = number - (double)int_part;
102 n += print(int_part);
103 if (digits > 0)
104 n += print('.');
105 while (digits-- > 0) {
106 remainder *= 10.0;
107 unsigned int digit = (unsigned int)remainder;
108 n += print(digit);
109 remainder -= digit;
110 }
111 return n;
112}
Arduino-compatible Print base class (independent implementation).
size_t println(void)
Definition Print.cpp:46
size_t print(const __FlashStringHelper *ifsh)
Definition Print.cpp:19
virtual size_t write(uint8_t c)=0
Minimal Arduino-String stand-in (see file description).
Definition WString.h:22
const char * c_str() const
Definition WString.h:49
unsigned int length() const
Definition WString.h:51