mirror of
https://github.com/lvgl/lvgl.git
synced 2026-05-26 19:15:38 +08:00
add misc as submodule
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
[submodule "misc"]
|
||||
path = misc
|
||||
url = ./misc/
|
||||
+5
-5
@@ -13,11 +13,11 @@
|
||||
#include "lv_draw.h"
|
||||
#include "lv_draw_rbasic.h"
|
||||
#include "lv_draw_vbasic.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "misc/gfx/circ.h"
|
||||
#include "misc/fs/fsint.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "misc/fs/ufs/ufs.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "lvgl/misc/gfx/circ.h"
|
||||
#include "lvgl/misc/fs/fsint.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
#include "lvgl/misc/fs/ufs/ufs.h"
|
||||
#include "../lv_objx/lv_img.h"
|
||||
|
||||
/*********************
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ extern "C" {
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "misc_conf.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "../lv_obj/lv_style.h"
|
||||
|
||||
/*********************
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include "../lv_hal/lv_hal_disp.h"
|
||||
#include "lv_draw_rbasic.h"
|
||||
#include "lv_conf.h"
|
||||
#include "misc/gfx/font.h"
|
||||
#include "lvgl/misc/gfx/font.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -13,9 +13,9 @@ extern "C" {
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "misc/gfx/color.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "misc/gfx/font.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/font.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -10,9 +10,9 @@
|
||||
#include <string.h>
|
||||
|
||||
#include "../lv_hal/lv_hal_disp.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "misc/gfx/font.h"
|
||||
#include "misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/font.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
|
||||
#if LV_VDB_SIZE != 0
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ extern "C" {
|
||||
|
||||
#if LV_VDB_SIZE != 0
|
||||
|
||||
#include "misc/gfx/color.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "misc/gfx/font.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/font.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#include <stdint.h>
|
||||
#include <stddef.h>
|
||||
#include "../lv_hal/lv_hal_disp.h"
|
||||
#include "misc/mem/dyn_mem.h"
|
||||
#include "lvgl/misc/mem/dyn_mem.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -18,7 +18,7 @@ extern "C" {
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "lv_hal.h"
|
||||
#include "misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "../lv_hal/lv_hal_indev.h"
|
||||
#include "misc/mem/linked_list.h"
|
||||
#include "lvgl/misc/mem/linked_list.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -18,7 +18,7 @@ extern "C" {
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include "lv_hal.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+2
-2
@@ -11,8 +11,8 @@
|
||||
|
||||
#include "../lv_hal/lv_hal_tick.h"
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "misc/os/ptask.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/os/ptask.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
#include "../lv_draw/lv_draw_rbasic.h"
|
||||
#include "lv_obj.h"
|
||||
|
||||
|
||||
+4
-1
@@ -14,7 +14,7 @@
|
||||
#include "../lv_draw/lv_draw_rbasic.h"
|
||||
#include "lv_refr.h"
|
||||
#include "lv_group.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
@@ -60,6 +60,9 @@ static ll_dsc_t scr_ll; /*Linked list of screens*/
|
||||
*/
|
||||
void lv_init(void)
|
||||
{
|
||||
/*Initialize misc. library. (Protected against re-initialization)*/
|
||||
misc_init();
|
||||
|
||||
/*Clear the screen*/
|
||||
area_t scr_area;
|
||||
area_set(&scr_area, 0, 0, LV_HOR_RES, LV_VER_RES);
|
||||
|
||||
+4
-4
@@ -16,10 +16,10 @@ extern "C" {
|
||||
#include "lv_conf.h"
|
||||
#include <stddef.h>
|
||||
#include <stdbool.h>
|
||||
#include "misc/gfx/area.h"
|
||||
#include "misc/mem/dyn_mem.h"
|
||||
#include "misc/mem/linked_list.h"
|
||||
#include "misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
#include "lvgl/misc/mem/dyn_mem.h"
|
||||
#include "lvgl/misc/mem/linked_list.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lv_style.h"
|
||||
|
||||
/*********************
|
||||
|
||||
+2
-2
@@ -11,8 +11,8 @@
|
||||
#include <stddef.h>
|
||||
#include "lv_refr.h"
|
||||
#include "lv_vdb.h"
|
||||
#include "misc/os/ptask.h"
|
||||
#include "misc/mem/fifo.h"
|
||||
#include "lvgl/misc/os/ptask.h"
|
||||
#include "lvgl/misc/mem/fifo.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
#include "lv_conf.h"
|
||||
#include "lv_style.h"
|
||||
#include "lv_obj.h"
|
||||
#include "misc/mem/dyn_mem.h"
|
||||
#include "lvgl/misc/mem/dyn_mem.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+4
-4
@@ -14,10 +14,10 @@ extern "C" {
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include <stdbool.h>
|
||||
#include "misc/gfx/color.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "misc/gfx/font.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/font.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+2
-2
@@ -17,8 +17,8 @@ extern "C" {
|
||||
|
||||
#if LV_VDB_SIZE != 0
|
||||
|
||||
#include "misc/gfx/color.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
#include "lv_bar.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
#include <stdio.h>
|
||||
|
||||
/*********************
|
||||
|
||||
+2
-2
@@ -15,8 +15,8 @@
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+20
-4
@@ -14,7 +14,7 @@
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_obj/lv_refr.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -384,9 +384,12 @@ static bool lv_btnm_design(lv_obj_t * btnm, const area_t * mask, lv_design_mode_
|
||||
lv_style_t * btn_style;
|
||||
|
||||
area_t area_btnm;
|
||||
lv_obj_get_coords(btnm, &area_btnm);
|
||||
|
||||
area_t area_tmp;
|
||||
cord_t btn_w;
|
||||
cord_t btn_h;
|
||||
bool border_mod = false;
|
||||
|
||||
uint16_t btn_i = 0;
|
||||
uint16_t txt_i = 0;
|
||||
@@ -397,8 +400,6 @@ static bool lv_btnm_design(lv_obj_t * btnm, const area_t * mask, lv_design_mode_
|
||||
/*Skip hidden buttons*/
|
||||
if(button_is_hidden(ext->map_p[txt_i])) continue;
|
||||
|
||||
lv_obj_get_coords(btnm, &area_btnm);
|
||||
|
||||
area_cpy(&area_tmp, &ext->button_areas[btn_i]);
|
||||
area_tmp.x1 += area_btnm.x1;
|
||||
area_tmp.y1 += area_btnm.y1;
|
||||
@@ -414,7 +415,22 @@ static bool lv_btnm_design(lv_obj_t * btnm, const area_t * mask, lv_design_mode_
|
||||
else if(btn_i == ext->btn_id_pr && btn_i != ext->btn_id_tgl) btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_PR);
|
||||
else if(btn_i != ext->btn_id_pr && btn_i == ext->btn_id_tgl) btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_REL);
|
||||
else if(btn_i == ext->btn_id_pr && btn_i == ext->btn_id_tgl) btn_style = lv_btnm_get_style(btnm, LV_BTNM_STYLE_BTN_TGL_PR);
|
||||
lv_draw_rect(&area_tmp, mask, btn_style);
|
||||
|
||||
/*On the right buttons clear the border if only right borders are drawn*/
|
||||
if(ext->map_p[txt_i + 1][0] == '\0' || ext->map_p[txt_i + 1][0] == '\n') {
|
||||
if(btn_style->body.border.part == LV_BORDER_RIGHT) {
|
||||
btn_style->body.border.part = LV_BORDER_NONE;
|
||||
border_mod = true;
|
||||
}
|
||||
}
|
||||
|
||||
lv_draw_rect(&area_tmp, mask, btn_style);
|
||||
|
||||
if(border_mod) {
|
||||
border_mod = false;
|
||||
btn_style->body.border.part = LV_BORDER_RIGHT;
|
||||
}
|
||||
|
||||
|
||||
/*Calculate the size of the text*/
|
||||
const font_t * font = btn_style->text.font;
|
||||
|
||||
+3
-3
@@ -18,10 +18,10 @@
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_draw/lv_draw_vbasic.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/area.h"
|
||||
#include "lvgl/misc/gfx/area.h"
|
||||
|
||||
#include "misc/gfx/color.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+2
-2
@@ -15,8 +15,8 @@
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_obj/lv_indev.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/fonts/symbol_def.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/fonts/symbol_def.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+3
-3
@@ -13,9 +13,9 @@
|
||||
#include "lv_gauge.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "misc/math/trigo.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "lvgl/misc/math/trigo.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
+3
-3
@@ -13,9 +13,9 @@
|
||||
#include "lv_img.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/fs/fsint.h"
|
||||
#include "misc/fs/ufs/ufs.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "lvgl/misc/fs/fsint.h"
|
||||
#include "lvgl/misc/fs/ufs/ufs.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ extern "C" {
|
||||
#if USE_LV_IMG != 0 && USE_FSINT != 0
|
||||
|
||||
#include "../lv_obj/lv_obj.h"
|
||||
#include "misc/fs/fsint.h"
|
||||
#include "lvgl/misc/fs/fsint.h"
|
||||
|
||||
#ifndef LV_IMG_ENABLE_SYMBOLS
|
||||
#define LV_IMG_ENABLE_SYMBOLS 0
|
||||
@@ -26,7 +26,7 @@ extern "C" {
|
||||
|
||||
#if LV_IMG_ENABLE_SYMBOLS != 0
|
||||
#include "lv_label.h"
|
||||
#include "misc/gfx/fonts/symbol_def.h"
|
||||
#include "lvgl/misc/gfx/fonts/symbol_def.h"
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
|
||||
+5
-5
@@ -13,11 +13,11 @@
|
||||
#include "../lv_obj/lv_obj.h"
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "misc/gfx/color.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/color.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+3
-3
@@ -17,9 +17,9 @@ extern "C" {
|
||||
#if USE_LV_LABEL != 0
|
||||
|
||||
#include "../lv_obj/lv_obj.h"
|
||||
#include "misc/gfx/font.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "misc/gfx/fonts/symbol_def.h"
|
||||
#include "lvgl/misc/gfx/font.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "lvgl/misc/gfx/fonts/symbol_def.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
#if USE_LV_LINE != 0
|
||||
#include "lv_line.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
+2
-2
@@ -12,8 +12,8 @@
|
||||
#include "lv_list.h"
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "misc/math/trigo.h"
|
||||
#include "lvgl/misc/math/trigo.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+2
-2
@@ -13,8 +13,8 @@
|
||||
#include "lv_mbox.h"
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+2
-2
@@ -9,13 +9,13 @@
|
||||
#include "lv_conf.h"
|
||||
#if USE_LV_PAGE != 0
|
||||
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_objx/lv_page.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "../lv_obj/lv_refr.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
@@ -226,6 +226,7 @@ static bool lv_roller_design(lv_obj_t * roller, const area_t * mask, lv_design_m
|
||||
lv_style_t new_style;
|
||||
lv_style_copy(&new_style, style);
|
||||
new_style.text.color = sel_style->text.color;
|
||||
new_style.text.opa = sel_style->text.opa;
|
||||
lv_draw_label(&ext->ddlist.label->coords, &mask_sel, &new_style, lv_label_get_text(ext->ddlist.label), TXT_FLAG_CENTER, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+3
-3
@@ -14,9 +14,9 @@
|
||||
#include "../lv_obj/lv_group.h"
|
||||
#include "../lv_draw/lv_draw.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "misc/gfx/text.h"
|
||||
#include "misc/math/math_base.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/text.h"
|
||||
#include "lvgl/misc/math/math_base.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
|
||||
+23
-20
@@ -12,7 +12,7 @@
|
||||
#include "lv_tabview.h"
|
||||
#include "lv_btnm.h"
|
||||
#include "../lv_themes/lv_theme.h"
|
||||
#include "misc/gfx/anim.h"
|
||||
#include "lvgl/misc/gfx/anim.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
@@ -209,6 +209,7 @@ lv_obj_t * lv_tabview_add_tab(lv_obj_t * tabview, const char * name)
|
||||
if(ext->tab_cnt == 1) {
|
||||
ext->tab_cur = 0;
|
||||
lv_tabview_set_current_tab(tabview, 0, false);
|
||||
tabview_realign(tabview); /*To set the proper btns height*/
|
||||
}
|
||||
|
||||
return h;
|
||||
@@ -305,19 +306,6 @@ void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time_ms)
|
||||
ext->anim_time = anim_time_ms;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the height of the tab buttons
|
||||
* @param tabview pointer to a tabview object
|
||||
* @param h the new height
|
||||
*/
|
||||
void lv_tabview_set_btn_height(lv_obj_t *tabview, cord_t h)
|
||||
{
|
||||
lv_tabview_ext_t *ext = lv_obj_get_ext_attr(tabview);
|
||||
lv_obj_set_height(ext->btns, h);
|
||||
tabview_realign(tabview);
|
||||
}
|
||||
|
||||
|
||||
void lv_tabview_set_style(lv_obj_t *tabview, lv_tabview_style_t type, lv_style_t *style)
|
||||
{
|
||||
lv_tabview_ext_t *ext = lv_obj_get_ext_attr(tabview);
|
||||
@@ -328,9 +316,11 @@ void lv_tabview_set_style(lv_obj_t *tabview, lv_tabview_style_t type, lv_style_t
|
||||
break;
|
||||
case LV_TABVIEW_STYLE_BTN_BG:
|
||||
lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BG, style);
|
||||
tabview_realign(tabview);
|
||||
break;
|
||||
case LV_TABVIEW_STYLE_BTN_REL:
|
||||
lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_REL, style);
|
||||
tabview_realign(tabview);
|
||||
break;
|
||||
case LV_TABVIEW_STYLE_BTN_PR:
|
||||
lv_btnm_set_style(ext->btns, LV_BTNM_STYLE_BTN_PR, style);
|
||||
@@ -673,20 +663,33 @@ static void tabview_realign(lv_obj_t * tabview)
|
||||
lv_tabview_ext_t * ext = lv_obj_get_ext_attr(tabview);
|
||||
|
||||
lv_obj_set_width(ext->btns, lv_obj_get_width(tabview));
|
||||
|
||||
if(ext->tab_cnt != 0) {
|
||||
lv_style_t * style_btn_bg = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_BG);
|
||||
lv_style_t * style_btn_rel = lv_tabview_get_style(tabview, LV_TABVIEW_STYLE_BTN_REL);
|
||||
|
||||
/*Set the indicator widths*/
|
||||
cord_t indic_width = (lv_obj_get_width(tabview) - style_btn_bg->body.padding.inner * (ext->tab_cnt - 1) -
|
||||
2 * style_btn_bg->body.padding.hor) / ext->tab_cnt;
|
||||
lv_obj_set_width(ext->indic, indic_width);
|
||||
|
||||
/*Set the tabs height*/
|
||||
cord_t btns_height = font_get_height_scale(style_btn_rel->text.font) +
|
||||
2 * style_btn_rel->body.padding.ver +
|
||||
2 * style_btn_bg->body.padding.ver;
|
||||
lv_obj_set_height(ext->btns, btns_height);
|
||||
|
||||
}
|
||||
|
||||
lv_obj_set_height(ext->content, lv_obj_get_height(tabview) - lv_obj_get_height(ext->btns));
|
||||
lv_obj_align(ext->content, ext->btns, LV_ALIGN_OUT_BOTTOM_LEFT, 0, 0);
|
||||
|
||||
lv_obj_t * pages = lv_obj_get_child(ext->content, NULL);
|
||||
while(pages != NULL) {
|
||||
lv_obj_set_size(pages, lv_obj_get_width(tabview), lv_obj_get_height(ext->content));
|
||||
pages = lv_obj_get_child(ext->content, pages);
|
||||
}
|
||||
|
||||
if(ext->tab_cnt != 0) {
|
||||
lv_style_t * style_tabs = lv_obj_get_style(ext->btns);
|
||||
cord_t indic_width = (lv_obj_get_width(tabview) - style_tabs->body.padding.inner * (ext->tab_cnt - 1) -
|
||||
2 * style_tabs->body.padding.hor) / ext->tab_cnt;
|
||||
lv_obj_set_width(ext->indic, indic_width);
|
||||
}
|
||||
|
||||
lv_obj_align(ext->indic, ext->btns, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0);
|
||||
|
||||
|
||||
@@ -122,13 +122,6 @@ void lv_tabview_set_tab_load_action(lv_obj_t *tabview, lv_tabview_action_t actio
|
||||
*/
|
||||
void lv_tabview_set_anim_time(lv_obj_t * tabview, uint16_t anim_time_ms);
|
||||
|
||||
/**
|
||||
* Set the height of the tab buttons
|
||||
* @param tabview pointer to a tabview object
|
||||
* @param h the new height
|
||||
*/
|
||||
void lv_tabview_set_btn_height(lv_obj_t *tabview, cord_t h);
|
||||
|
||||
|
||||
void lv_tabview_set_style(lv_obj_t *tabview, lv_tabview_style_t type, lv_style_t *style);
|
||||
|
||||
|
||||
@@ -260,6 +260,7 @@ lv_theme_t * lv_theme_get_current(void);
|
||||
#include "lv_theme_templ.h"
|
||||
#include "lv_theme_default.h"
|
||||
#include "lv_theme_alien.h"
|
||||
#include "lv_theme_night.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* @file lv_theme_night.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LV_THEME_NIGHT_H
|
||||
#define LV_THEME_NIGHT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "lv_conf.h"
|
||||
|
||||
#if USE_LV_THEME_NIGHT
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Initialize the night theme
|
||||
* @param hue [0..360] hue value from HSV color space to define the theme's base color
|
||||
* @param font pointer to a font (NULL to use the default)
|
||||
* @return pointer to the initialized theme
|
||||
*/
|
||||
lv_theme_t * lv_theme_night_init(uint16_t hue, font_t *font);
|
||||
|
||||
/**
|
||||
* Get a pointer to the theme
|
||||
* @return pointer to the theme
|
||||
*/
|
||||
lv_theme_t * lv_theme_get_night(void);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /*LV_THEME_NIGHT_H*/
|
||||
@@ -15,7 +15,9 @@ extern "C" {
|
||||
*********************/
|
||||
|
||||
/*Test misc. module version*/
|
||||
#include "misc/misc.h"
|
||||
#include "lvgl/misc/misc.h"
|
||||
#include "lvgl/misc/os/ptask.h"
|
||||
|
||||
#include "lv_hal/lv_hal.h"
|
||||
|
||||
#include "lv_obj/lv_obj.h"
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
# Miscellaneous Library
|
||||
|
||||
This library is written especially for the Littlev Graphics Library however its useful hardware independent software modules can be used in your non graphical projects too. Some of the most important components:
|
||||
* Dynamic memory manager with defrag. and memory monitoring
|
||||
* Simple task scheduler with priority and idle measurement
|
||||
* File system interface to access different mediums easily
|
||||
* RAM FS
|
||||
* FIFO
|
||||
* Linked list
|
||||
* Fonts
|
||||
* etc
|
||||
|
||||
## Usage
|
||||
1. Clone the repository into the root folder of your project: `git clone https://github.com/littlevgl/misc.git`
|
||||
2. In your IDE add the project **root folder as include path**
|
||||
3. Copy *misc/misc_conf_templ.h* as **misc_conf.h** to the project root folder
|
||||
4. Delete the first `#if 0` and the last `#endif` to enable the file
|
||||
5. Enable/disable or configure the components
|
||||
6. To initialize the library `#include misc/misc.h` and call `misc_init()`
|
||||
|
||||
## Documentation
|
||||
* You will find **well commented** source and header files.
|
||||
* There are same documentation on the graphics library's webpage: http://gl.littlev.hu
|
||||
|
||||
## Contributing
|
||||
1. Fork it!
|
||||
2. Create your feature branch: `git checkout -b my-new-feature`
|
||||
3. Commit your changes: `git commit -am 'Add some feature'`
|
||||
4. Push to the branch: `git push origin my-new-feature`
|
||||
5. Submit a pull request!
|
||||
|
||||
If you find an issue, please report it via GitHub!
|
||||
|
||||
## Donate
|
||||
If you are pleased with the Misc. Library and found it useful please support its further development:
|
||||
|
||||
[](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=LWHHAQYZMRQJS)
|
||||
@@ -0,0 +1,413 @@
|
||||
/**
|
||||
* @file fat32.c
|
||||
* Functions to give an API to a Fat32 storage device which is compatible
|
||||
* with the fs_int module.
|
||||
* It uses the FatFS as FAT32.
|
||||
* For more information about FatFS see:
|
||||
* http://elm-chan.org/fsw/ff/00index_e.html
|
||||
*/
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "misc_conf.h"
|
||||
#if USE_FAT32 != 0
|
||||
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
#include "fat32.h"
|
||||
#include "ff.h"
|
||||
#include "hw/dev/ext_mem/sdcard.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
static fs_res_t fat32_res_trans(FRESULT fat32_res);
|
||||
|
||||
/**********************
|
||||
* STATIC VARIABLES
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL FUNCTIONS
|
||||
**********************/
|
||||
/**
|
||||
* Create a driver for the fat32 device and initilaize it.
|
||||
*/
|
||||
void fat32_init(void)
|
||||
{
|
||||
/*Create the driver*/
|
||||
fs_drv_t fat_drv;
|
||||
memset(&fat_drv, 0, sizeof(fs_drv_t)); /*Initialization*/
|
||||
|
||||
fat_drv.file_size = sizeof(FIL);
|
||||
fat_drv.rddir_size = sizeof(DIR);
|
||||
fat_drv.letter = FAT32_LETTER;
|
||||
fat_drv.ready = fat32_ready;
|
||||
|
||||
fat_drv.open = fat32_open;
|
||||
fat_drv.close = fat32_close;
|
||||
#if _FS_MINIMIZE < 1
|
||||
fat_drv.remove = fat32_remove;
|
||||
#else
|
||||
fat_drv.remove = NULL;
|
||||
#endif
|
||||
fat_drv.read = fat32_read;
|
||||
#if _FS_READONLY == 0
|
||||
fat_drv.write = fat32_write;
|
||||
#else
|
||||
fat_drv.write = NULL;
|
||||
#endif
|
||||
#if _FS_MINIMIZE < 3
|
||||
fat_drv.seek = fat32_seek;
|
||||
#else
|
||||
fat_drv.seek = NULL;
|
||||
#endif
|
||||
fat_drv.tell = fat32_tell;
|
||||
fat_drv.size = fat32_size;
|
||||
fat_drv.trunc = fat32_trunc;
|
||||
#if _FS_MINIMIZE < 2
|
||||
fat_drv.rddir_init = fat32_readdir_init;
|
||||
fat_drv.rddir = fat32_readdir;
|
||||
fat_drv.rddir_close = fat32_readdir_close;
|
||||
#else
|
||||
fat_drv.rddir_init = NULL;
|
||||
fat_drv.rddir = NULL;
|
||||
fat_drv.rddir_close = NULL;
|
||||
#endif
|
||||
|
||||
#if _FS_MINIMIZE == 0
|
||||
fat_drv.free = fat32_free;
|
||||
#else
|
||||
fat_drv.free = NULL;
|
||||
#endif
|
||||
fs_add_drv(&fat_drv);
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the state of the fat32 storage device
|
||||
* @return true if the device is initialized and can be used else false
|
||||
*/
|
||||
bool fat32_ready(void)
|
||||
{
|
||||
return sdcard_ready();
|
||||
}
|
||||
|
||||
/**
|
||||
* Open a file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param path path of the file (e.g. "dir1/dir2/file1.txt")
|
||||
* @param mode open mode (FS_MODE_RD or FS_MODE_WR or both with | (or connection))
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_open (void * file_p, const char * path, fs_mode_t mode)
|
||||
{
|
||||
uint8_t fat32_mode = 0;
|
||||
if(mode & FS_MODE_RD) fat32_mode |= FA_READ;
|
||||
#if _FS_READONLY == 0
|
||||
if(mode & FS_MODE_WR) fat32_mode |= FA_WRITE | FA_OPEN_ALWAYS;
|
||||
#endif
|
||||
|
||||
/*In ready only mode the write is not implemented*/
|
||||
if(mode == 0) return FS_RES_NOT_IMP;
|
||||
|
||||
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_open(file_p, path, fat32_mode);
|
||||
return fat32_res_trans(fat32_res);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Close an already opened file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @return FS_RES_OK or any error from fs_res_t
|
||||
*/
|
||||
fs_res_t fat32_close (void * file_p)
|
||||
{
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_close(file_p);
|
||||
return fat32_res_trans(fat32_res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove (delete) a file
|
||||
* @param path the path of the file ("dir1/file1.txt")
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_remove(const char * path)
|
||||
{
|
||||
#if _FS_MINIMIZE < 1
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_unlink(path);
|
||||
return fat32_res_trans(fat32_res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Read data from an opened file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param buf pointer a buffer to store the read bytes
|
||||
* @param btr the number of Bytes To Read
|
||||
* @param br the number of real read bytes (Bytes Read)
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_read (void * file_p, void * buf, uint32_t btr, uint32_t * br)
|
||||
{
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_read(file_p, buf, btr, (UINT *)br);
|
||||
return fat32_res_trans(fat32_res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write data to an opened file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param buf pointer to buffer where the data to write is located
|
||||
* @param btw the number of Bytes To Write
|
||||
* @param bw the number of real written bytes (Bytes Written)
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_write (void * file_p, const void * buf, uint32_t btw, uint32_t * bw)
|
||||
{
|
||||
#if _FS_READONLY == 0
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_write(file_p, buf, btw, (UINT *)bw);
|
||||
return fat32_res_trans(fat32_res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Position the read write pointer to given position
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param pos the new position expressed in bytes index (0: start of file)
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_seek (void * file_p, uint32_t pos)
|
||||
{
|
||||
#if _FS_MINIMIZE < 3
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_lseek(file_p, pos);
|
||||
return fat32_res_trans(fat32_res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the position of the read write pointer
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param pos_p pointer to store the position of the read write pointer
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_tell (void * file_p, uint32_t * pos_p)
|
||||
{
|
||||
*pos_p = f_tell((FIL *)file_p);
|
||||
|
||||
return FS_RES_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* Truncate the file size to the current position of read write pointer
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_trunc (void * file_p)
|
||||
{
|
||||
#if _FS_MINIMIZE < 1
|
||||
FRESULT fat32_res;
|
||||
fat32_res = f_truncate(file_p);
|
||||
return fat32_res_trans(fat32_res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the size of a file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param size_p pointer to store the size
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_size (void * file_p, uint32_t * size_p)
|
||||
{
|
||||
*size_p = f_size((FIL *)file_p);
|
||||
return FS_RES_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize a variable for directory reading
|
||||
* @param rddir_p pointer to a 'DIR' variable
|
||||
* @param path path to a directory
|
||||
* @return FS_RES_OK or any error from fs_res_t enum
|
||||
*/
|
||||
fs_res_t fat32_readdir_init(void * rddir_p, const char * path)
|
||||
{
|
||||
#if _FS_MINIMIZE < 2
|
||||
FRESULT res = f_opendir(rddir_p, path);
|
||||
|
||||
return fat32_res_trans(res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the next filename form a directory.
|
||||
* The name of the directories will begin with '/'
|
||||
* @param rddir_p pointer to an initialized 'DIR' variable
|
||||
* @param fn pointer to a buffer to store the filename
|
||||
* @return FS_RES_OK or any error from fs_res_t enum
|
||||
*/
|
||||
fs_res_t fat32_readdir(void * rddir_p, char * fn)
|
||||
{
|
||||
|
||||
#if _FS_MINIMIZE < 2
|
||||
FRESULT res;
|
||||
FILINFO fno;
|
||||
char lfn_buf[FSINT_MAX_FN_LENGTH];
|
||||
fno.lfname = lfn_buf;
|
||||
fno.lfsize = FSINT_MAX_FN_LENGTH;
|
||||
res = f_readdir(rddir_p, &fno);
|
||||
if(res == FR_OK && fno.fname[0] != '\0') {
|
||||
if (fno.fattrib & AM_DIR) { /* It is a directory */
|
||||
#if _USE_LFN != 0
|
||||
sprintf(fn, "/%s", fno.lfname[0] != '\0' ? fno.lfname : fno.fname);
|
||||
#else
|
||||
sprintf(fn, "/%s", fno.fname);
|
||||
#endif
|
||||
} else { /* It is a file. */
|
||||
#if _USE_LFN != 0
|
||||
strcpy(fn, fno.lfname[0] != '\0' ? fno.lfname : fno.fname);
|
||||
#else
|
||||
strcpy(fn, fno.fname);
|
||||
#endif
|
||||
}
|
||||
} else {
|
||||
fn[0] = '\0';
|
||||
}
|
||||
|
||||
return fat32_res_trans(res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Close the directory reading
|
||||
* @param rddir_p pointer to an initialized 'DIR' variable
|
||||
* @return FS_RES_OK or any error from fs_res_t enum
|
||||
*/
|
||||
fs_res_t fat32_readdir_close(void * rddir_p)
|
||||
{
|
||||
#if _FS_MINIMIZE < 2
|
||||
f_closedir(rddir_p);
|
||||
return FS_RES_OK;
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Give the size of a drive
|
||||
* @param total_p pointer to store the total size [kB]
|
||||
* @param free_p pointer to store the free size [kB]
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_free (uint32_t * total_p, uint32_t * free_p)
|
||||
{
|
||||
#if _FS_READONLY == 0 && _FS_MINIMIZE == 0
|
||||
FATFS *fs;
|
||||
FRESULT fat32_res;
|
||||
uint32_t fre_clust = 0;
|
||||
uint32_t fre_sect=0;
|
||||
uint32_t tot_sect=0;
|
||||
|
||||
fat32_res = f_getfree("", (unsigned long*)&fre_clust, &fs);
|
||||
tot_sect=(fs->n_fatent - 2) * fs->csize;
|
||||
fre_sect=fre_clust*fs->csize;
|
||||
#if _MAX_SS!=512
|
||||
tot_sect*=fs1->ssize / 512;
|
||||
fre_sect*=fs1->ssize / 512;
|
||||
#endif
|
||||
*total_p=tot_sect >> 1;
|
||||
*free_p=fre_sect >> 1;
|
||||
return fat32_res_trans(fat32_res);
|
||||
#else
|
||||
return FS_RES_NOT_IMP;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Translate the return codes to fs_res_t
|
||||
* @param fat32_res the original fat_32 result
|
||||
* @return the converted, fs_res_t return code
|
||||
*/
|
||||
|
||||
static fs_res_t fat32_res_trans(FRESULT fat32_res)
|
||||
{
|
||||
switch(fat32_res) {
|
||||
case FR_OK: /* (0) Succeeded */
|
||||
return FS_RES_OK;
|
||||
|
||||
case FR_DISK_ERR: /* (1) A hard error occurred in the low level disk I/O layer */
|
||||
case FR_NOT_READY: /* (3) The physical drive cannot work */
|
||||
return FS_RES_HW_ERR;
|
||||
|
||||
case FR_INT_ERR: /* (2) Assertion failed */
|
||||
case FR_NOT_ENABLED: /* (12) The volume has no work area */
|
||||
case FR_NO_FILESYSTEM: /* (13) There is no valid FAT volume */
|
||||
return FS_RES_FS_ERR;
|
||||
|
||||
case FR_NO_FILE: /* (4) Could not find the file */
|
||||
case FR_NO_PATH: /* (5) Could not find the path */
|
||||
case FR_INVALID_NAME: /* (6) The path name format is invalid */
|
||||
case FR_INVALID_DRIVE: /* (11) The logical drive number is invalid */
|
||||
return FS_RES_NOT_EX;
|
||||
|
||||
case FR_DENIED: /* (7) Access denied due to prohibited access or directory full */
|
||||
case FR_EXIST: /* (8) Access denied due to prohibited access */
|
||||
case FR_WRITE_PROTECTED: /* (10) The physical drive is write protected */
|
||||
case FR_LOCKED: /* (16) The operation is rejected according to the file sharing policy */
|
||||
return FS_RES_DENIED;
|
||||
|
||||
case FR_INVALID_OBJECT: /* (9) The file/directory object is invalid */
|
||||
case FR_INVALID_PARAMETER: /* (19) Given parameter is invalid */
|
||||
return FS_RES_INV_PARAM;
|
||||
|
||||
case FR_TIMEOUT: /* (15) Could not get a grant to access the volume within defined period */
|
||||
return FS_RES_TOUT;
|
||||
|
||||
case FR_TOO_MANY_OPEN_FILES:/* (18) Number of open files > _FS_LOCK */
|
||||
case FR_NOT_ENOUGH_CORE: /* (17) LFN working buffer could not be allocated */
|
||||
return FS_RES_OUT_OF_MEM;
|
||||
|
||||
case FR_MKFS_ABORTED: /* (14) The f_mkfs() aborted due to any parameter error */
|
||||
return FS_RES_UNKNOWN;
|
||||
|
||||
}
|
||||
|
||||
return FS_RES_UNKNOWN;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,163 @@
|
||||
/**
|
||||
* @file fat32.h
|
||||
* Functions to give an API to a Fat32 storage device which is compatible
|
||||
* with the fs_int module.
|
||||
*/
|
||||
|
||||
#ifndef FAT32_H
|
||||
#define FAT32_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "misc_conf.h"
|
||||
#if USE_FAT32 != 0
|
||||
|
||||
#include "../fsint.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Create a driver for the fat32 device and initilaize it.
|
||||
*/
|
||||
void fat32_init(void);
|
||||
|
||||
/**
|
||||
* Give the state of the fat32 storage device
|
||||
* @return true if the device is initialized and can be used else false
|
||||
*/
|
||||
bool fat32_ready(void);
|
||||
|
||||
/**
|
||||
* Open a file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param path path of the file (e.g. "dir1/dir2/file1.txt")
|
||||
* @param mode open mode (FS_MODE_RD or FS_MODE_WR or both with | (or connection))
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_open (void * file_p, const char * path, fs_mode_t mode);
|
||||
|
||||
/**
|
||||
* Close an already opened file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @return FS_RES_OK or any error from fs_res_t
|
||||
*/
|
||||
fs_res_t fat32_close (void * file_p);
|
||||
|
||||
/**
|
||||
* Remove (delete) a file
|
||||
* @param path the path of the file ("dir1/file1.txt")
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_remove(const char * path);
|
||||
|
||||
/**
|
||||
* Read data from an opened file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param buf pointer a buffer to store the read bytes
|
||||
* @param btr the number of Bytes To Read
|
||||
* @param br the number of real read bytes (Bytes Read)
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_read (void * file_p, void * buf, uint32_t btr, uint32_t * br);
|
||||
|
||||
/**
|
||||
* Write data to an opened file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param buf pointer to buffer where the data to write is located
|
||||
* @param btw the number of Bytes To Write
|
||||
* @param bw the number of real written bytes (Bytes Written)
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_write (void * file_p, const void * buf, uint32_t btw, uint32_t * bw);
|
||||
|
||||
/**
|
||||
* Position the read write pointer to given position
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param pos the new position expressed in bytes index (0: start of file)
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_seek (void * file_p, uint32_t pos);
|
||||
|
||||
/**
|
||||
* Give the position of the read write pointer
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param pos_p pointer to store the position of the read write pointer
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_tell (void * file_p, uint32_t * pos_p);
|
||||
|
||||
/**
|
||||
* Truncate the file size to the current position of read write pointer
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_trunc (void * file_p);
|
||||
|
||||
/**
|
||||
* Give the size of a file
|
||||
* @param file_p pointer to a FIL type variable
|
||||
* @param size_p pointer to store the size
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_size (void * file_p, uint32_t * size_p);
|
||||
|
||||
/**
|
||||
* Initialize a variable for directory reading
|
||||
* @param rddir_p pointer to a 'DIR' variable
|
||||
* @param path path to a directory
|
||||
* @return FS_RES_OK or any error from fs_res_t enum
|
||||
*/
|
||||
fs_res_t fat32_readdir_init(void * rddir_p, const char * path);
|
||||
|
||||
/**
|
||||
* Read the next filename form a directory.
|
||||
* The name of the directories will begin with '/'
|
||||
* @param rddir_p pointer to an initialized 'DIR' variable
|
||||
* @param fn pointer to a buffer to store the filename
|
||||
* @return FS_RES_OK or any error from fs_res_t enum
|
||||
*/
|
||||
fs_res_t fat32_readdir(void * rddir_p, char * fn);
|
||||
|
||||
/**
|
||||
* Close the directory reading
|
||||
* @param rddir_p pointer to an initialized 'DIR' variable
|
||||
* @return FS_RES_OK or any error from fs_res_t enum
|
||||
*/
|
||||
fs_res_t fat32_readdir_close(void * rddir_p);
|
||||
|
||||
/**
|
||||
* Give the size of a drive
|
||||
* @param total_p pointer to store the total size [kB]
|
||||
* @param free_p pointer to store the free size [kB]
|
||||
* @return FS_RES_OK or any error from 'fs_res_t'
|
||||
*/
|
||||
fs_res_t fat32_free (uint32_t * total_p, uint32_t * free_p);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1 @@
|
||||
This is the well known FatFS from http://elm-chan.org/fsw/ff/00index_e.html
|
||||
+4681
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,351 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module include R0.11a (C)ChaN, 2015
|
||||
/----------------------------------------------------------------------------/
|
||||
/ FatFs module is a free software that opened under license policy of
|
||||
/ following conditions.
|
||||
/
|
||||
/ Copyright (C) 2015, ChaN, all right reserved.
|
||||
/
|
||||
/ 1. Redistributions of source code must retain the above copyright notice,
|
||||
/ this condition and the following disclaimer.
|
||||
/
|
||||
/ This software is provided by the copyright holder and contributors "AS IS"
|
||||
/ and any warranties related to this software are DISCLAIMED.
|
||||
/ The copyright owner or contributors be NOT LIABLE for any damages caused
|
||||
/ by use of this software.
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#ifndef _FATFS
|
||||
#define _FATFS 64180 /* Revision ID */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "integer.h" /* Basic integer types */
|
||||
#include "ffconf.h" /* FatFs configuration options */
|
||||
|
||||
#if _FATFS != _FFCONF
|
||||
#error Wrong configuration file (ffconf.h).
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Definitions of volume management */
|
||||
|
||||
#if _MULTI_PARTITION /* Multiple partition configuration */
|
||||
typedef struct {
|
||||
BYTE pd; /* Physical drive number */
|
||||
BYTE pt; /* Partition: 0:Auto detect, 1-4:Forced partition) */
|
||||
} PARTITION;
|
||||
extern PARTITION VolToPart[]; /* Volume - Partition resolution table */
|
||||
#define LD2PD(vol) (VolToPart[vol].pd) /* Get physical drive number */
|
||||
#define LD2PT(vol) (VolToPart[vol].pt) /* Get partition index */
|
||||
|
||||
#else /* Single partition configuration */
|
||||
#define LD2PD(vol) (BYTE)(vol) /* Each logical drive is bound to the same physical drive number */
|
||||
#define LD2PT(vol) 0 /* Find first valid partition or in SFD */
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* Type of path name strings on FatFs API */
|
||||
|
||||
#if _LFN_UNICODE /* Unicode string */
|
||||
#if !_USE_LFN
|
||||
#error _LFN_UNICODE must be 0 at non-LFN cfg.
|
||||
#endif
|
||||
#ifndef _INC_TCHAR
|
||||
typedef WCHAR TCHAR;
|
||||
#define _T(x) L ## x
|
||||
#define _TEXT(x) L ## x
|
||||
#endif
|
||||
|
||||
#else /* ANSI/OEM string */
|
||||
#ifndef _INC_TCHAR
|
||||
typedef char TCHAR;
|
||||
#define _T(x) x
|
||||
#define _TEXT(x) x
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* File system object structure (FATFS) */
|
||||
|
||||
typedef struct {
|
||||
BYTE fs_type; /* FAT sub-type (0:Not mounted) */
|
||||
BYTE drv; /* Physical drive number */
|
||||
BYTE csize; /* Sectors per cluster (1,2,4...128) */
|
||||
BYTE n_fats; /* Number of FAT copies (1 or 2) */
|
||||
BYTE wflag; /* win[] flag (b0:dirty) */
|
||||
BYTE fsi_flag; /* FSINFO flags (b7:disabled, b0:dirty) */
|
||||
WORD id; /* File system mount ID */
|
||||
WORD n_rootdir; /* Number of root directory entries (FAT12/16) */
|
||||
#if _MAX_SS != _MIN_SS
|
||||
WORD ssize; /* Bytes per sector (512, 1024, 2048 or 4096) */
|
||||
#endif
|
||||
#if _FS_REENTRANT
|
||||
_SYNC_t sobj; /* Identifier of sync object */
|
||||
#endif
|
||||
#if !_FS_READONLY
|
||||
DWORD last_clust; /* Last allocated cluster */
|
||||
DWORD free_clust; /* Number of free clusters */
|
||||
#endif
|
||||
#if _FS_RPATH
|
||||
DWORD cdir; /* Current directory start cluster (0:root) */
|
||||
#endif
|
||||
DWORD n_fatent; /* Number of FAT entries, = number of clusters + 2 */
|
||||
DWORD fsize; /* Sectors per FAT */
|
||||
DWORD volbase; /* Volume start sector */
|
||||
DWORD fatbase; /* FAT start sector */
|
||||
DWORD dirbase; /* Root directory start sector (FAT32:Cluster#) */
|
||||
DWORD database; /* Data start sector */
|
||||
DWORD winsect; /* Current sector appearing in the win[] */
|
||||
BYTE win[_MAX_SS]; /* Disk access window for Directory, FAT (and file data at tiny cfg) */
|
||||
} FATFS;
|
||||
|
||||
|
||||
|
||||
/* File object structure (FIL) */
|
||||
|
||||
typedef struct {
|
||||
FATFS* fs; /* Pointer to the related file system object (**do not change order**) */
|
||||
WORD id; /* Owner file system mount ID (**do not change order**) */
|
||||
BYTE flag; /* Status flags */
|
||||
BYTE err; /* Abort flag (error code) */
|
||||
DWORD fptr; /* File read/write pointer (Zeroed on file open) */
|
||||
DWORD fsize; /* File size */
|
||||
DWORD sclust; /* File start cluster (0:no cluster chain, always 0 when fsize is 0) */
|
||||
DWORD clust; /* Current cluster of fpter (not valid when fprt is 0) */
|
||||
DWORD dsect; /* Sector number appearing in buf[] (0:invalid) */
|
||||
#if !_FS_READONLY
|
||||
DWORD dir_sect; /* Sector number containing the directory entry */
|
||||
BYTE* dir_ptr; /* Pointer to the directory entry in the win[] */
|
||||
#endif
|
||||
#if _USE_FASTSEEK
|
||||
DWORD* cltbl; /* Pointer to the cluster link map table (Nulled on file open) */
|
||||
#endif
|
||||
#if _FS_LOCK
|
||||
UINT lockid; /* File lock ID origin from 1 (index of file semaphore table Files[]) */
|
||||
#endif
|
||||
#if !_FS_TINY
|
||||
BYTE buf[_MAX_SS]; /* File private data read/write window */
|
||||
#endif
|
||||
} FIL;
|
||||
|
||||
|
||||
|
||||
/* Directory object structure (DIR) */
|
||||
|
||||
typedef struct {
|
||||
FATFS* fs; /* Pointer to the owner file system object (**do not change order**) */
|
||||
WORD id; /* Owner file system mount ID (**do not change order**) */
|
||||
WORD index; /* Current read/write index number */
|
||||
DWORD sclust; /* Table start cluster (0:Root dir) */
|
||||
DWORD clust; /* Current cluster */
|
||||
DWORD sect; /* Current sector */
|
||||
BYTE* dir; /* Pointer to the current SFN entry in the win[] */
|
||||
BYTE* fn; /* Pointer to the SFN (in/out) {file[8],ext[3],status[1]} */
|
||||
#if _FS_LOCK
|
||||
UINT lockid; /* File lock ID (index of file semaphore table Files[]) */
|
||||
#endif
|
||||
#if _USE_LFN
|
||||
WCHAR* lfn; /* Pointer to the LFN working buffer */
|
||||
WORD lfn_idx; /* Last matched LFN index number (0xFFFF:No LFN) */
|
||||
#endif
|
||||
#if _USE_FIND
|
||||
const TCHAR* pat; /* Pointer to the name matching pattern */
|
||||
#endif
|
||||
} DIR;
|
||||
|
||||
|
||||
|
||||
/* File information structure (FILINFO) */
|
||||
|
||||
typedef struct {
|
||||
DWORD fsize; /* File size */
|
||||
WORD fdate; /* Last modified date */
|
||||
WORD ftime; /* Last modified time */
|
||||
BYTE fattrib; /* Attribute */
|
||||
TCHAR fname[13]; /* Short file name (8.3 format) */
|
||||
#if _USE_LFN
|
||||
TCHAR* lfname; /* Pointer to the LFN buffer */
|
||||
UINT lfsize; /* Size of LFN buffer in TCHAR */
|
||||
#endif
|
||||
} FILINFO;
|
||||
|
||||
|
||||
|
||||
/* File function return code (FRESULT) */
|
||||
|
||||
typedef enum {
|
||||
FR_OK = 0, /* (0) Succeeded */
|
||||
FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
||||
FR_INT_ERR, /* (2) Assertion failed */
|
||||
FR_NOT_READY, /* (3) The physical drive cannot work */
|
||||
FR_NO_FILE, /* (4) Could not find the file */
|
||||
FR_NO_PATH, /* (5) Could not find the path */
|
||||
FR_INVALID_NAME, /* (6) The path name format is invalid */
|
||||
FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
||||
FR_EXIST, /* (8) Access denied due to prohibited access */
|
||||
FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
||||
FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
||||
FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
||||
FR_NOT_ENABLED, /* (12) The volume has no work area */
|
||||
FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
||||
FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */
|
||||
FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
||||
FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
||||
FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
||||
FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_LOCK */
|
||||
FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
||||
} FRESULT;
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* FatFs module application interface */
|
||||
|
||||
FRESULT f_open (FIL* fp, const TCHAR* path, BYTE mode); /* Open or create a file */
|
||||
FRESULT f_close (FIL* fp); /* Close an open file object */
|
||||
FRESULT f_read (FIL* fp, void* buff, UINT btr, UINT* br); /* Read data from a file */
|
||||
FRESULT f_write (FIL* fp, const void* buff, UINT btw, UINT* bw); /* Write data to a file */
|
||||
FRESULT f_forward (FIL* fp, UINT(*func)(const BYTE*,UINT), UINT btf, UINT* bf); /* Forward data to the stream */
|
||||
FRESULT f_lseek (FIL* fp, DWORD ofs); /* Move file pointer of a file object */
|
||||
FRESULT f_truncate (FIL* fp); /* Truncate file */
|
||||
FRESULT f_sync (FIL* fp); /* Flush cached data of a writing file */
|
||||
FRESULT f_opendir (DIR* dp, const TCHAR* path); /* Open a directory */
|
||||
FRESULT f_closedir (DIR* dp); /* Close an open directory */
|
||||
FRESULT f_readdir (DIR* dp, FILINFO* fno); /* Read a directory item */
|
||||
FRESULT f_findfirst (DIR* dp, FILINFO* fno, const TCHAR* path, const TCHAR* pattern); /* Find first file */
|
||||
FRESULT f_findnext (DIR* dp, FILINFO* fno); /* Find next file */
|
||||
FRESULT f_mkdir (const TCHAR* path); /* Create a sub directory */
|
||||
FRESULT f_unlink (const TCHAR* path); /* Delete an existing file or directory */
|
||||
FRESULT f_rename (const TCHAR* path_old, const TCHAR* path_new); /* Rename/Move a file or directory */
|
||||
FRESULT f_stat (const TCHAR* path, FILINFO* fno); /* Get file status */
|
||||
FRESULT f_chmod (const TCHAR* path, BYTE attr, BYTE mask); /* Change attribute of the file/dir */
|
||||
FRESULT f_utime (const TCHAR* path, const FILINFO* fno); /* Change times-tamp of the file/dir */
|
||||
FRESULT f_chdir (const TCHAR* path); /* Change current directory */
|
||||
FRESULT f_chdrive (const TCHAR* path); /* Change current drive */
|
||||
FRESULT f_getcwd (TCHAR* buff, UINT len); /* Get current directory */
|
||||
FRESULT f_getfree (const TCHAR* path, DWORD* nclst, FATFS** fatfs); /* Get number of free clusters on the drive */
|
||||
FRESULT f_getlabel (const TCHAR* path, TCHAR* label, DWORD* vsn); /* Get volume label */
|
||||
FRESULT f_setlabel (const TCHAR* label); /* Set volume label */
|
||||
FRESULT f_mount (FATFS* fs, const TCHAR* path, BYTE opt); /* Mount/Unmount a logical drive */
|
||||
FRESULT f_mkfs (const TCHAR* path, BYTE sfd, UINT au); /* Create a file system on the volume */
|
||||
FRESULT f_fdisk (BYTE pdrv, const DWORD szt[], void* work); /* Divide a physical drive into some partitions */
|
||||
int f_putc (TCHAR c, FIL* fp); /* Put a character to the file */
|
||||
int f_puts (const TCHAR* str, FIL* cp); /* Put a string to the file */
|
||||
int f_printf (FIL* fp, const TCHAR* str, ...); /* Put a formatted string to the file */
|
||||
TCHAR* f_gets (TCHAR* buff, int len, FIL* fp); /* Get a string from the file */
|
||||
|
||||
#define f_eof(fp) ((int)((fp)->fptr == (fp)->fsize))
|
||||
#define f_error(fp) ((fp)->err)
|
||||
#define f_tell(fp) ((fp)->fptr)
|
||||
#define f_size(fp) ((fp)->fsize)
|
||||
#define f_rewind(fp) f_lseek((fp), 0)
|
||||
#define f_rewinddir(dp) f_readdir((dp), 0)
|
||||
|
||||
#ifndef EOF
|
||||
#define EOF (-1)
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* Additional user defined functions */
|
||||
|
||||
/* RTC function */
|
||||
#if !_FS_READONLY && !_FS_NORTC
|
||||
DWORD get_fattime (void);
|
||||
#endif
|
||||
|
||||
/* Unicode support functions */
|
||||
#if _USE_LFN /* Unicode - OEM code conversion */
|
||||
WCHAR ff_convert (WCHAR chr, UINT dir); /* OEM-Unicode bidirectional conversion */
|
||||
WCHAR ff_wtoupper (WCHAR chr); /* Unicode upper-case conversion */
|
||||
#if _USE_LFN == 3 /* Memory functions */
|
||||
void* ff_memalloc (UINT msize); /* Allocate memory block */
|
||||
void ff_memfree (void* mblock); /* Free memory block */
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* Sync functions */
|
||||
#if _FS_REENTRANT
|
||||
int ff_cre_syncobj (BYTE vol, _SYNC_t* sobj); /* Create a sync object */
|
||||
int ff_req_grant (_SYNC_t sobj); /* Lock sync object */
|
||||
void ff_rel_grant (_SYNC_t sobj); /* Unlock sync object */
|
||||
int ff_del_syncobj (_SYNC_t sobj); /* Delete a sync object */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
/*--------------------------------------------------------------*/
|
||||
/* Flags and offset address */
|
||||
|
||||
|
||||
/* File access control and file status flags (FIL.flag) */
|
||||
|
||||
#define FA_READ 0x01
|
||||
#define FA_OPEN_EXISTING 0x00
|
||||
|
||||
#if !_FS_READONLY
|
||||
#define FA_WRITE 0x02
|
||||
#define FA_CREATE_NEW 0x04
|
||||
#define FA_CREATE_ALWAYS 0x08
|
||||
#define FA_OPEN_ALWAYS 0x10
|
||||
#define FA__WRITTEN 0x20
|
||||
#define FA__DIRTY 0x40
|
||||
#endif
|
||||
|
||||
|
||||
/* FAT sub type (FATFS.fs_type) */
|
||||
|
||||
#define FS_FAT12 1
|
||||
#define FS_FAT16 2
|
||||
#define FS_FAT32 3
|
||||
|
||||
|
||||
/* File attribute bits for directory entry */
|
||||
|
||||
#define AM_RDO 0x01 /* Read only */
|
||||
#define AM_HID 0x02 /* Hidden */
|
||||
#define AM_SYS 0x04 /* System */
|
||||
#define AM_VOL 0x08 /* Volume label */
|
||||
#define AM_LFN 0x0F /* LFN entry */
|
||||
#define AM_DIR 0x10 /* Directory */
|
||||
#define AM_ARC 0x20 /* Archive */
|
||||
#define AM_MASK 0x3F /* Mask of defined bits */
|
||||
|
||||
|
||||
/* Fast seek feature */
|
||||
#define CREATE_LINKMAP 0xFFFFFFFF
|
||||
|
||||
|
||||
|
||||
/*--------------------------------*/
|
||||
/* Multi-byte word access macros */
|
||||
|
||||
#if _WORD_ACCESS == 1 /* Enable word access to the FAT structure */
|
||||
#define LD_WORD(ptr) (WORD)(*(WORD*)(BYTE*)(ptr))
|
||||
#define LD_DWORD(ptr) (DWORD)(*(DWORD*)(BYTE*)(ptr))
|
||||
#define ST_WORD(ptr,val) *(WORD*)(BYTE*)(ptr)=(WORD)(val)
|
||||
#define ST_DWORD(ptr,val) *(DWORD*)(BYTE*)(ptr)=(DWORD)(val)
|
||||
#else /* Use byte-by-byte access to the FAT structure */
|
||||
#define LD_WORD(ptr) (WORD)(((WORD)*((BYTE*)(ptr)+1)<<8)|(WORD)*(BYTE*)(ptr))
|
||||
#define LD_DWORD(ptr) (DWORD)(((DWORD)*((BYTE*)(ptr)+3)<<24)|((DWORD)*((BYTE*)(ptr)+2)<<16)|((WORD)*((BYTE*)(ptr)+1)<<8)|*(BYTE*)(ptr))
|
||||
#define ST_WORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8)
|
||||
#define ST_DWORD(ptr,val) *(BYTE*)(ptr)=(BYTE)(val); *((BYTE*)(ptr)+1)=(BYTE)((WORD)(val)>>8); *((BYTE*)(ptr)+2)=(BYTE)((DWORD)(val)>>16); *((BYTE*)(ptr)+3)=(BYTE)((DWORD)(val)>>24)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _FATFS */
|
||||
@@ -0,0 +1,276 @@
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ FatFs - FAT file system module configuration file R0.11a (C)ChaN, 2015
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FFCONF 64180 /* Revision ID */
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Function Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_READONLY 0
|
||||
/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
|
||||
/ Read-only configuration removes writing API functions, f_write(), f_sync(),
|
||||
/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
|
||||
/ and optional writing functions as well. */
|
||||
|
||||
|
||||
#define _FS_MINIMIZE 0
|
||||
/* This option defines minimization level to remove some basic API functions.
|
||||
/
|
||||
/ 0: All basic functions are enabled.
|
||||
/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_chmod(), f_utime(),
|
||||
/ f_truncate() and f_rename() function are removed.
|
||||
/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
|
||||
/ 3: f_lseek() function is removed in addition to 2. */
|
||||
|
||||
|
||||
#define _USE_STRFUNC 0
|
||||
/* This option switches string functions, f_gets(), f_putc(), f_puts() and
|
||||
/ f_printf().
|
||||
/
|
||||
/ 0: Disable string functions.
|
||||
/ 1: Enable without LF-CRLF conversion.
|
||||
/ 2: Enable with LF-CRLF conversion. */
|
||||
|
||||
|
||||
#define _USE_FIND 0
|
||||
/* This option switches filtered directory read feature and related functions,
|
||||
/ f_findfirst() and f_findnext(). (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_MKFS 0
|
||||
/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_FASTSEEK 0
|
||||
/* This option switches fast seek feature. (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_LABEL 0
|
||||
/* This option switches volume label functions, f_getlabel() and f_setlabel().
|
||||
/ (0:Disable or 1:Enable) */
|
||||
|
||||
|
||||
#define _USE_FORWARD 0
|
||||
/* This option switches f_forward() function. (0:Disable or 1:Enable)
|
||||
/ To enable it, also _FS_TINY need to be set to 1. */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Locale and Namespace Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _CODE_PAGE 437
|
||||
/* This option specifies the OEM code page to be used on the target system.
|
||||
/ Incorrect setting of the code page can cause a file open failure.
|
||||
/
|
||||
/ 1 - ASCII (No extended character. Non-LFN cfg. only)
|
||||
/ 437 - U.S.
|
||||
/ 720 - Arabic
|
||||
/ 737 - Greek
|
||||
/ 771 - KBL
|
||||
/ 775 - Baltic
|
||||
/ 850 - Latin 1
|
||||
/ 852 - Latin 2
|
||||
/ 855 - Cyrillic
|
||||
/ 857 - Turkish
|
||||
/ 860 - Portuguese
|
||||
/ 861 - Icelandic
|
||||
/ 862 - Hebrew
|
||||
/ 863 - Canadian French
|
||||
/ 864 - Arabic
|
||||
/ 865 - Nordic
|
||||
/ 866 - Russian
|
||||
/ 869 - Greek 2
|
||||
/ 932 - Japanese (DBCS)
|
||||
/ 936 - Simplified Chinese (DBCS)
|
||||
/ 949 - Korean (DBCS)
|
||||
/ 950 - Traditional Chinese (DBCS)
|
||||
*/
|
||||
|
||||
|
||||
#define _USE_LFN 1
|
||||
#define _MAX_LFN 255
|
||||
/* The _USE_LFN option switches the LFN feature.
|
||||
/
|
||||
/ 0: Disable LFN feature. _MAX_LFN has no effect.
|
||||
/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
|
||||
/ 2: Enable LFN with dynamic working buffer on the STACK.
|
||||
/ 3: Enable LFN with dynamic working buffer on the HEAP.
|
||||
/
|
||||
/ When enable the LFN feature, Unicode handling functions (option/unicode.c) must
|
||||
/ be added to the project. The LFN working buffer occupies (_MAX_LFN + 1) * 2 bytes.
|
||||
/ When use stack for the working buffer, take care on stack overflow. When use heap
|
||||
/ memory for the working buffer, memory management functions, ff_memalloc() and
|
||||
/ ff_memfree(), must be added to the project. */
|
||||
|
||||
|
||||
#define _LFN_UNICODE 0
|
||||
/* This option switches character encoding on the API. (0:ANSI/OEM or 1:Unicode)
|
||||
/ To use Unicode string for the path name, enable LFN feature and set _LFN_UNICODE
|
||||
/ to 1. This option also affects behavior of string I/O functions. */
|
||||
|
||||
|
||||
#define _STRF_ENCODE 3
|
||||
/* When _LFN_UNICODE is 1, this option selects the character encoding on the file to
|
||||
/ be read/written via string I/O functions, f_gets(), f_putc(), f_puts and f_printf().
|
||||
/
|
||||
/ 0: ANSI/OEM
|
||||
/ 1: UTF-16LE
|
||||
/ 2: UTF-16BE
|
||||
/ 3: UTF-8
|
||||
/
|
||||
/ When _LFN_UNICODE is 0, this option has no effect. */
|
||||
|
||||
|
||||
#define _FS_RPATH 0
|
||||
/* This option configures relative path feature.
|
||||
/
|
||||
/ 0: Disable relative path feature and remove related functions.
|
||||
/ 1: Enable relative path feature. f_chdir() and f_chdrive() are available.
|
||||
/ 2: f_getcwd() function is available in addition to 1.
|
||||
/
|
||||
/ Note that directory items read via f_readdir() are affected by this option. */
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ Drive/Volume Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _VOLUMES 1
|
||||
/* Number of volumes (logical drives) to be used. */
|
||||
|
||||
|
||||
#define _STR_VOLUME_ID 0
|
||||
#define _VOLUME_STRS "RAM","NAND","CF","SD1","SD2","USB1","USB2","USB3"
|
||||
/* _STR_VOLUME_ID option switches string volume ID feature.
|
||||
/ When _STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
|
||||
/ number in the path name. _VOLUME_STRS defines the drive ID strings for each
|
||||
/ logical drives. Number of items must be equal to _VOLUMES. Valid characters for
|
||||
/ the drive ID strings are: A-Z and 0-9. */
|
||||
|
||||
|
||||
#define _MULTI_PARTITION 0
|
||||
/* This option switches multi-partition feature. By default (0), each logical drive
|
||||
/ number is bound to the same physical drive number and only an FAT volume found on
|
||||
/ the physical drive will be mounted. When multi-partition feature is enabled (1),
|
||||
/ each logical drive number is bound to arbitrary physical drive and partition
|
||||
/ listed in the VolToPart[]. Also f_fdisk() funciton will be available. */
|
||||
|
||||
|
||||
#define _MIN_SS 512
|
||||
#define _MAX_SS 512
|
||||
/* These options configure the range of sector size to be supported. (512, 1024,
|
||||
/ 2048 or 4096) Always set both 512 for most systems, all type of memory cards and
|
||||
/ harddisk. But a larger value may be required for on-board flash memory and some
|
||||
/ type of optical media. When _MAX_SS is larger than _MIN_SS, FatFs is configured
|
||||
/ to variable sector size and GET_SECTOR_SIZE command must be implemented to the
|
||||
/ disk_ioctl() function. */
|
||||
|
||||
|
||||
#define _USE_TRIM 0
|
||||
/* This option switches ATA-TRIM feature. (0:Disable or 1:Enable)
|
||||
/ To enable Trim feature, also CTRL_TRIM command should be implemented to the
|
||||
/ disk_ioctl() function. */
|
||||
|
||||
|
||||
#define _FS_NOFSINFO 0
|
||||
/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
|
||||
/ option, and f_getfree() function at first time after volume mount will force
|
||||
/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
|
||||
/
|
||||
/ bit0=0: Use free cluster count in the FSINFO if available.
|
||||
/ bit0=1: Do not trust free cluster count in the FSINFO.
|
||||
/ bit1=0: Use last allocated cluster number in the FSINFO if available.
|
||||
/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------/
|
||||
/ System Configurations
|
||||
/---------------------------------------------------------------------------*/
|
||||
|
||||
#define _FS_TINY 0
|
||||
/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
|
||||
/ At the tiny configuration, size of the file object (FIL) is reduced _MAX_SS
|
||||
/ bytes. Instead of private sector buffer eliminated from the file object,
|
||||
/ common sector buffer in the file system object (FATFS) is used for the file
|
||||
/ data transfer. */
|
||||
|
||||
|
||||
#define _FS_NORTC 1
|
||||
#define _NORTC_MON 1
|
||||
#define _NORTC_MDAY 1
|
||||
#define _NORTC_YEAR 2015
|
||||
/* The _FS_NORTC option switches timestamp feature. If the system does not have
|
||||
/ an RTC function or valid timestamp is not needed, set _FS_NORTC to 1 to disable
|
||||
/ the timestamp feature. All objects modified by FatFs will have a fixed timestamp
|
||||
/ defined by _NORTC_MON, _NORTC_MDAY and _NORTC_YEAR.
|
||||
/ When timestamp feature is enabled (_FS_NORTC == 0), get_fattime() function need
|
||||
/ to be added to the project to read current time form RTC. _NORTC_MON,
|
||||
/ _NORTC_MDAY and _NORTC_YEAR have no effect.
|
||||
/ These options have no effect at read-only configuration (_FS_READONLY == 1). */
|
||||
|
||||
|
||||
#define _FS_LOCK 0
|
||||
/* The _FS_LOCK option switches file lock feature to control duplicated file open
|
||||
/ and illegal operation to open objects. This option must be 0 when _FS_READONLY
|
||||
/ is 1.
|
||||
/
|
||||
/ 0: Disable file lock feature. To avoid volume corruption, application program
|
||||
/ should avoid illegal open, remove and rename to the open objects.
|
||||
/ >0: Enable file lock feature. The value defines how many files/sub-directories
|
||||
/ can be opened simultaneously under file lock control. Note that the file
|
||||
/ lock feature is independent of re-entrancy. */
|
||||
|
||||
|
||||
#define _FS_REENTRANT 0
|
||||
#define _FS_TIMEOUT 1000
|
||||
#define _SYNC_t HANDLE
|
||||
/* The _FS_REENTRANT option switches the re-entrancy (thread safe) of the FatFs
|
||||
/ module itself. Note that regardless of this option, file access to different
|
||||
/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
|
||||
/ and f_fdisk() function, are always not re-entrant. Only file/directory access
|
||||
/ to the same volume is under control of this feature.
|
||||
/
|
||||
/ 0: Disable re-entrancy. _FS_TIMEOUT and _SYNC_t have no effect.
|
||||
/ 1: Enable re-entrancy. Also user provided synchronization handlers,
|
||||
/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
|
||||
/ function, must be added to the project. Samples are available in
|
||||
/ option/syscall.c.
|
||||
/
|
||||
/ The _FS_TIMEOUT defines timeout period in unit of time tick.
|
||||
/ The _SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
|
||||
/ SemaphoreHandle_t and etc.. A header file for O/S definitions needs to be
|
||||
/ included somewhere in the scope of ff.c. */
|
||||
|
||||
|
||||
#define _WORD_ACCESS 0
|
||||
/* The _WORD_ACCESS option is an only platform dependent option. It defines
|
||||
/ which access method is used to the word data on the FAT volume.
|
||||
/
|
||||
/ 0: Byte-by-byte access. Always compatible with all platforms.
|
||||
/ 1: Word access. Do not choose this unless under both the following conditions.
|
||||
/
|
||||
/ * Address misaligned memory access is always allowed to ALL instructions.
|
||||
/ * Byte order on the memory is little-endian.
|
||||
/
|
||||
/ If it is the case, _WORD_ACCESS can also be set to 1 to reduce code size.
|
||||
/ Following table shows allowable settings of some type of processors.
|
||||
/
|
||||
/ ARM7TDMI 0 *2 ColdFire 0 *1 V850E 0 *2
|
||||
/ Cortex-M3 0 *3 Z80 0/1 V850ES 0/1
|
||||
/ Cortex-M0 0 *2 x86 0/1 TLCS-870 0/1
|
||||
/ AVR 0/1 RX600(LE) 0/1 TLCS-900 0/1
|
||||
/ AVR32 0 *1 RL78 0 *2 R32C 0 *2
|
||||
/ PIC18 0/1 SH-2 0 *1 M16C 0/1
|
||||
/ PIC24 0 *2 H8S 0 *1 MSP430 0 *2
|
||||
/ PIC32 0 *1 H8/300H 0 *1 8051 0/1
|
||||
/
|
||||
/ *1:Big-endian.
|
||||
/ *2:Unaligned memory access is not supported.
|
||||
/ *3:Some compilers generate LDM/STM for mem_cpy function.
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*-------------------------------------------*/
|
||||
/* Integer type definitions for FatFs module */
|
||||
/*-------------------------------------------*/
|
||||
|
||||
#ifndef _FF_INTEGER
|
||||
#define _FF_INTEGER
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _WIN32 /* Development platform */
|
||||
|
||||
#include <windows.h>
|
||||
#include <tchar.h>
|
||||
|
||||
#else /* Embedded platform */
|
||||
|
||||
/* This type MUST be 8-bit */
|
||||
typedef unsigned char BYTE;
|
||||
|
||||
/* These types MUST be 16-bit */
|
||||
typedef short SHORT;
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned short WCHAR;
|
||||
|
||||
/* These types MUST be 16-bit or 32-bit */
|
||||
typedef int INT;
|
||||
typedef unsigned int UINT;
|
||||
|
||||
/* These types MUST be 32-bit */
|
||||
typedef long LONG;
|
||||
typedef unsigned long DWORD;
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user