Skip to content
Snippets Groups Projects
Select Git revision
  • 6bd36b959bc8e8e5af53229a1d51bec38b9c781a
  • master default protected
  • sonopard/display-pixels-drawimage
  • TilCreator/firmware-master
  • rahix/simple_menu
  • genofire/leds_rgb_get_state
  • genofire/rockets-state
  • genofire/ble-follow-py
  • hauke/ble-cleanups
  • plaetzchen/ios-workaround
  • blinkisync-as-preload
  • genofire/haule-ble-fs-deactive
  • schneider/max30001-pycardium
  • schneider/max30001-epicaridum
  • schneider/max30001
  • schneider/stream-locks
  • ios-workarounds
  • schneider/fundamental-test
  • schneider/ble-buffers
  • schneider/maxim-sdk-update
  • ch3/splashscreen
  • v1.8
  • v1.7
  • v1.6
  • v1.5
  • v1.4
  • v1.3
  • v1.2
  • v1.1
  • v1.0
  • release-1
  • bootloader-v1
  • v0.0
33 results

meson.build

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)
    {
    	struct epic_stat stat;
    
    	if (epic_file_stat(path, &stat) == 0) {
    		if (stat.type == EPICSTAT_FILE) {
    			return MP_IMPORT_STAT_FILE;
    		} else {
    			return MP_IMPORT_STAT_DIR;
    		}
    	}
    	return MP_IMPORT_STAT_NO_EXIST;
    }