mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-21 10:26:06 +03:00
This includes empty stubs for most core Arduino functions. Need to actually implement all those digital reads writes whatever. Need to prebuild toolchains (xtensa-elf-lx106) for 3 platforms and put them on some download server. Need to do the same with esptool. Need to fix 0x40000 binary generation and add correct upload commands. Maybe even implement uploads over WiFi.
147 lines
2.6 KiB
C++
147 lines
2.6 KiB
C++
/*
|
|
|
|
SD - a slightly more friendly wrapper for sdfatlib
|
|
|
|
This library aims to expose a subset of SD card functionality
|
|
in the form of a higher level "wrapper" object.
|
|
|
|
License: GNU General Public License V3
|
|
(Because sdfatlib is licensed with this.)
|
|
|
|
(C) Copyright 2010 SparkFun Electronics
|
|
|
|
*/
|
|
|
|
#include <SD.h>
|
|
|
|
/* for debugging file open/close leaks
|
|
uint8_t nfilecount=0;
|
|
*/
|
|
|
|
File::File(SdFile f, const char *n) {
|
|
// oh man you are kidding me, new() doesnt exist? Ok we do it by hand!
|
|
_file = (SdFile *)malloc(sizeof(SdFile));
|
|
if (_file) {
|
|
memcpy(_file, &f, sizeof(SdFile));
|
|
|
|
strncpy(_name, n, 12);
|
|
_name[12] = 0;
|
|
|
|
/* for debugging file open/close leaks
|
|
nfilecount++;
|
|
Serial.print("Created \"");
|
|
Serial.print(n);
|
|
Serial.print("\": ");
|
|
Serial.println(nfilecount, DEC);
|
|
*/
|
|
}
|
|
}
|
|
|
|
File::File(void) {
|
|
_file = 0;
|
|
_name[0] = 0;
|
|
//Serial.print("Created empty file object");
|
|
}
|
|
|
|
// returns a pointer to the file name
|
|
char *File::name(void) {
|
|
return _name;
|
|
}
|
|
|
|
// a directory is a special type of file
|
|
boolean File::isDirectory(void) {
|
|
return (_file && _file->isDir());
|
|
}
|
|
|
|
|
|
size_t File::write(uint8_t val) {
|
|
return write(&val, 1);
|
|
}
|
|
|
|
size_t File::write(const uint8_t *buf, size_t size) {
|
|
size_t t;
|
|
if (!_file) {
|
|
setWriteError();
|
|
return 0;
|
|
}
|
|
_file->clearWriteError();
|
|
t = _file->write(buf, size);
|
|
if (_file->getWriteError()) {
|
|
setWriteError();
|
|
return 0;
|
|
}
|
|
return t;
|
|
}
|
|
|
|
int File::peek() {
|
|
if (! _file)
|
|
return 0;
|
|
|
|
int c = _file->read();
|
|
if (c != -1) _file->seekCur(-1);
|
|
return c;
|
|
}
|
|
|
|
int File::read() {
|
|
if (_file)
|
|
return _file->read();
|
|
return -1;
|
|
}
|
|
|
|
// buffered read for more efficient, high speed reading
|
|
int File::read(void *buf, uint16_t nbyte) {
|
|
if (_file)
|
|
return _file->read(buf, nbyte);
|
|
return 0;
|
|
}
|
|
|
|
int File::available() {
|
|
if (! _file) return 0;
|
|
|
|
uint32_t n = size() - position();
|
|
|
|
return n > 0X7FFF ? 0X7FFF : n;
|
|
}
|
|
|
|
void File::flush() {
|
|
if (_file)
|
|
_file->sync();
|
|
}
|
|
|
|
boolean File::seek(uint32_t pos) {
|
|
if (! _file) return false;
|
|
|
|
return _file->seekSet(pos);
|
|
}
|
|
|
|
uint32_t File::position() {
|
|
if (! _file) return -1;
|
|
return _file->curPosition();
|
|
}
|
|
|
|
uint32_t File::size() {
|
|
if (! _file) return 0;
|
|
return _file->fileSize();
|
|
}
|
|
|
|
void File::close() {
|
|
if (_file) {
|
|
_file->close();
|
|
free(_file);
|
|
_file = 0;
|
|
|
|
/* for debugging file open/close leaks
|
|
nfilecount--;
|
|
Serial.print("Deleted ");
|
|
Serial.println(nfilecount, DEC);
|
|
*/
|
|
}
|
|
}
|
|
|
|
File::operator bool() {
|
|
if (_file)
|
|
return _file->isOpen();
|
|
return false;
|
|
}
|
|
|