Skip to content

Commit

Permalink
Merge pull request #664 from martinayotte/esp8266
Browse files Browse the repository at this point in the history
fix dtostrf() issue, add Dir::fileSize
  • Loading branch information
igrr committed Aug 13, 2015
2 parents 43d80ee + 568c48b commit 69e6894
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 33 deletions.
8 changes: 8 additions & 0 deletions cores/esp8266/FS.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,14 @@ String Dir::fileName() {
return _impl->fileName();
}

size_t Dir::fileSize() {
if (!_impl) {
return 0;
}

return _impl->fileSize();
}

bool Dir::next() {
if (!_impl) {
return false;
Expand Down
1 change: 1 addition & 0 deletions cores/esp8266/FS.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ class Dir {

File openFile(const char* mode);
String fileName();
size_t fileSize();
bool next();

protected:
Expand Down
1 change: 1 addition & 0 deletions cores/esp8266/FSImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class DirImpl {
virtual ~DirImpl() { }
virtual FileImplPtr openFile(OpenMode openMode, AccessMode accessMode) = 0;
virtual const char* fileName() = 0;
virtual size_t fileSize() = 0;
virtual bool next() = 0;
};

Expand Down
82 changes: 49 additions & 33 deletions cores/esp8266/core_esp8266_noniso.c
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ char* ultoa(unsigned long value, char* result, int base) {
}

char * dtostrf(double number, signed char width, unsigned char prec, char *s) {

bool negative = false;

if (isnan(number)) {
strcpy(s, "nan");
return s;
Expand All @@ -158,50 +159,65 @@ char * dtostrf(double number, signed char width, unsigned char prec, char *s) {
return s;
}

if (number > 4294967040.0 || number < -4294967040.0) {
strcpy(s, "ovf");
return s;
}

char* out = s;
int signInt_Part = 1;


int fillme = width; // how many cells to fill for the integer part
if (prec > 0) {
fillme -= (prec+1);
}

// Handle negative numbers
if (number < 0.0) {
signInt_Part = -1;
negative = true;
fillme--;
number = -number;
}

// calc left over digits
if (prec > 0)
{
width -= (prec + 1);
}

// Round correctly so that print(1.999, 2) prints as "2.00"
double rounding = 0.5;
// I optimized out most of the divisions
double rounding = 2.0;
for (uint8_t i = 0; i < prec; ++i)
rounding /= 10.0;
rounding *= 10.0;
rounding = 1.0 / rounding;

number += rounding;

// Extract the integer part of the number and print it
unsigned long int_part = (unsigned long)number;
double remainder = number - (double)int_part;
out += sprintf(out, "%*ld", width, int_part * signInt_Part);

// Print the decimal point, but only if there are digits beyond
if (prec > 0) {
*out = '.';
++out;


for (unsigned char decShift = prec; decShift > 0; decShift--) {
remainder *= 10.0;
}
sprintf(out, "%0*d", prec, (int)remainder);

// Figure out how big our number really is
double tenpow = 1.0;
int digitcount = 1;
while (number >= 10.0 * tenpow) {
tenpow *= 10.0;
digitcount++;
}

number /= tenpow;
fillme -= digitcount;

// Pad unused cells with spaces
while (fillme-- > 0) {
*out++ = ' ';
}

// Handle negative sign
if (negative) *out++ = '-';

// Print the digits, and if necessary, the decimal point
digitcount += prec;
int8_t digit = 0;
while (digitcount-- > 0) {
digit = (int8_t)number;
if (digit > 9) digit = 9; // insurance
*out++ = (char)('0' | digit);
if ((digitcount == prec) && (prec > 0)) {
*out++ = '.';
}
number -= digit;
number *= 10.0;
}

// make sure the string is terminated
*out = 0;
return s;
}


7 changes: 7 additions & 0 deletions cores/esp8266/spiffs_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,13 @@ class SPIFFSDirImpl : public DirImpl {
return (const char*) _dirent.name;
}

size_t fileSize() override {
if (!_valid)
return 0;

return _dirent.size;
}

bool next() override {
spiffs_dirent* result = SPIFFS_readdir(&_dir, &_dirent);
_valid = (result != nullptr);
Expand Down

0 comments on commit 69e6894

Please sign in to comment.