| 22 | #include "FastLED.h" |
| 23 | |
| 24 | FL_TEST_FILE(FL_FILEPATH) { |
| 25 | |
| 26 | #define FPS 30 |
| 27 | #define FRAME_TIME 1000 / FPS |
| 28 | #define VIDEO_WIDTH 10 |
| 29 | #define VIDEO_HEIGHT 10 |
| 30 | #define LEDS_PER_FRAME VIDEO_WIDTH *VIDEO_HEIGHT |
| 31 | |
| 32 | FASTLED_SHARED_PTR(FakeFilebuf); |
| 33 | |
| 34 | |
| 35 | class FakeFilebuf : public fl::filebuf { |
| 36 | public: |
| 37 | virtual ~FakeFilebuf() {} |
| 38 | bool is_open() const override { return true; } |
| 39 | bool available() const override { return mPos < data.size(); } |
| 40 | size_t size() const override { return data.size(); } |
| 41 | |
| 42 | size_t writeData(const uint8_t *src, size_t len) { |
| 43 | data.insert(data.end(), src, src + len); |
| 44 | return len; |
| 45 | } |
| 46 | size_t writeCRGB(const CRGB *src, size_t len) { |
| 47 | size_t bytes_written = writeData((const uint8_t *)src, len * 3); |
| 48 | return bytes_written / 3; |
| 49 | } |
| 50 | size_t read(char *dst, size_t bytesToRead) override { |
| 51 | size_t bytesRead = 0; |
| 52 | while (bytesRead < bytesToRead && mPos < data.size()) { |
| 53 | dst[bytesRead] = static_cast<char>(data[mPos]); |
| 54 | bytesRead++; |
| 55 | mPos++; |
| 56 | } |
| 57 | return bytesRead; |
| 58 | } |
| 59 | using fl::filebuf::read; // u8 overload |
| 60 | size_t write(const char *dat, size_t count) override { |
| 61 | (void)dat; (void)count; |
| 62 | return 0; |
| 63 | } |
| 64 | size_t tell() override { return mPos; } |
| 65 | const char *path() const override { return "fake"; } |
| 66 | bool seek(size_t pos, fl::seek_dir dir) override { |
| 67 | if (dir == fl::seek_dir::beg) { this->mPos = pos; } |
| 68 | else if (dir == fl::seek_dir::cur) { this->mPos += pos; } |
| 69 | else { this->mPos = data.size() + pos; } |
| 70 | return true; |
| 71 | } |
| 72 | using fl::filebuf::seek; // single-arg overload |
| 73 | void close() override {} |
| 74 | bool is_eof() const override { return mPos >= data.size(); } |
| 75 | bool has_error() const override { return false; } |
| 76 | void clear_error() override {} |
| 77 | int error_code() const override { return 0; } |
| 78 | const char *error_message() const override { return "No error"; } |
| 79 | |
| 80 | fl::vector<uint8_t> data; |
| 81 | size_t mPos = 0; |