Skip to content
Snippets Groups Projects
Select Git revision
  • 4c977d6a90fb77ee5afcdc83d1f14209a6070d31
  • master default protected
  • fix/macos-meta-files-in-menu
  • koalo/bhi160
  • genofire/ble-rewrite
  • rahix/simple_menu
  • ch3/splashscreen
  • koalo/bhi160-works-but-dirty
  • ios-workarounds
  • koalo/wip/i2c-for-python
  • renze/safe_mode
  • renze/hatchery_apps
  • schneider/fundamental-test
  • koalo/factory-reset
  • msgctl/gfx_rle
  • msgctl/faultscreen
  • msgctl/textbuffer_api
  • schneider/bonding
  • schneider/bootloader-update-9a0d158
  • schneider/bsec
  • rahix/bma
  • v1.12
  • v1.11
  • v1.10
  • v1.9
  • v1.8
  • v1.7
  • v1.6
  • v1.5
  • v1.4
  • v1.3
  • v1.2
  • v1.1
  • v1.0
  • release-1
  • bootloader-v1
  • v0.0
37 results

fat_reader_import.c

Blame
  • Forked from card10 / firmware
    Source project has a limited visibility.
    fat_reader_import.c 1.82 KiB
    #include "epicardium.h"
    
    #include <py/runtime.h>
    #include <py/reader.h>
    #include <py/lexer.h>
    
    #define EPICFAT_READER_BUFFER_SIZE 128
    
    typedef struct _mp_reader_epicfat_t {
    	int fd;
    	size_t len;
    	size_t pos;
    	byte buf[EPICFAT_READER_BUFFER_SIZE];
    } mp_reader_epicfat_t;
    
    STATIC mp_uint_t mp_reader_epicfat_readbyte(void *data)
    {
    	mp_reader_epicfat_t *reader = (mp_reader_epicfat_t *)data;
    	if (reader->pos >= reader->len) {
    		if (reader->len == 0) {
    			return MP_READER_EOF;
    		} else {
    			int n = epic_file_read(
    				reader->fd, reader->buf, sizeof(reader->buf)
    			);
    			if (n <= 0) {
    				reader->len = 0;
    				return MP_READER_EOF;
    			}
    			reader->len = n;
    			reader->pos = 0;
    		}
    	}
    	return reader->buf[reader->pos++];
    }
    
    STATIC void mp_reader_epicfat_close(void *data)
    {
    	mp_reader_epicfat_t *reader = (mp_reader_epicfat_t *)data;
    	epic_file_close(reader->fd);
    	m_del_obj(mp_reader_epicfat_t, reader);
    }
    
    void mp_reader_new_file(mp_reader_t *reader, const char *filename)
    {
    	int fd = epic_file_open(filename, "r");
    	if (fd < 0) {
    		mp_raise_OSError(-fd);
    	}
    	mp_reader_epicfat_t *rp = m_new_obj(mp_reader_epicfat_t);
    	rp->fd                  = fd;
    	int n = epic_file_read(rp->fd, rp->buf, sizeof(rp->buf));
    	if (n < 0) {
    		epic_file_close(fd);
    	}
    	rp->len          = n;
    	rp->pos          = 0;
    	reader->data     = rp;
    	reader->readbyte = mp_reader_epicfat_readbyte;
    	reader->close    = mp_reader_epicfat_close;
    }
    
    mp_lexer_t *mp_lexer_new_from_file(const char *filename)
    {
    	mp_reader_t reader;
    	mp_reader_new_file(&reader, filename);
    	return mp_lexer_new(qstr_from_str(filename), reader);
    }
    
    mp_import_stat_t mp_import_stat(const char *path)