From: P15692025051 <846603105@qq.com> Date: Fri, 30 Jan 2026 11:49:15 +0000 (+0800) Subject: 补充 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=6deaf96dee158b3afcfaa1135a072a17356ba54c;p=mirrors%2FASR3603_Z5.git 补充 --- diff --git a/2.sdk/sdk/product/craneg_modem/config/watch/lv_conf.h b/2.sdk/sdk/product/craneg_modem/config/watch/lv_conf.h index 6034b4c3..c78b1037 100644 --- a/2.sdk/sdk/product/craneg_modem/config/watch/lv_conf.h +++ b/2.sdk/sdk/product/craneg_modem/config/watch/lv_conf.h @@ -1,862 +1,862 @@ -/** - * @file lv_conf.h - * - */ - -/* - * COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER - */ - -#if 1 /*Set it to "1" to enable content*/ - -#ifndef LV_CONF_H -#define LV_CONF_H -/* clang-format off */ - -#include - -#if 1 // @CHENG_MODIFY -#include "lv_conf_CUSTOM.h" -#endif - -/*==================== - Graphical settings - *====================*/ -//#define USE_LV_WATCH_UI_360_360 0 -//#define USE_LV_WATCH_UI_240_320 0 // 1 -//#define USE_LV_WATCH_UI_240_280 1 - -/* Maximal horizontal and vertical resolution to support by the library.*/ -#if USE_LV_WATCH_UI_360_360 -#define LV_HOR_RES_MAX (360) -#define LV_VER_RES_MAX (360) -#elif USE_LV_WATCH_UI_240_320 -#define LV_HOR_RES_MAX (240) -#define LV_VER_RES_MAX (320) -#elif USE_LV_WATCH_UI_240_280 -#define LV_HOR_RES_MAX (240) -#define LV_VER_RES_MAX (280) -#elif USE_LV_WATCH_UI_466_466 -#define LV_HOR_RES_MAX (466) -#define LV_VER_RES_MAX (466) -#else // USE_LV_WATCH_UI_240_240 -#define LV_HOR_RES_MAX (240) -#define LV_VER_RES_MAX (240) -#endif -/* Horizontal and vertical resolution of the library.*/ -#define LV_HOR_RES (LV_HOR_RES_MAX) -#define LV_VER_RES (LV_VER_RES_MAX) - -/* Color depth: - * - 1: 1 byte per pixel - * - 8: RGB233 - * - 16: RGB565 - * - 32: ARGB8888 - */ -#define LV_COLOR_DEPTH 16 - -/* Swap the 2 bytes of RGB565 color. - * Useful if the display has a 8 bit interface (e.g. SPI)*/ -#define LV_COLOR_16_SWAP 0 - -/* 1: Enable screen transparency. - * Useful for OSD or other overlapping GUIs. - * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be modified: `style.body.opa = ...`*/ -#define LV_COLOR_SCREEN_TRANSP 0 - -/*Images pixels with this color will not be drawn (with chroma keying)*/ -#define LV_COLOR_TRANSP LV_COLOR_LIME /*LV_COLOR_LIME: pure green*/ - -/* Enable anti-aliasing (lines, and radiuses will be smoothed) */ -#define LV_ANTIALIAS 1 - -/* Default display refresh period. - * Can be changed in the display driver (`lv_disp_drv_t`).*/ -#define LV_DISP_DEF_REFR_PERIOD 15 /*[ms]*/ - -/* Dot Per Inch: used to initialize default sizes. - * E.g. a button with width = LV_DPI / 2 -> half inch wide - * (Not so important, you can adjust it to modify default sizes and spaces)*/ -#define LV_DPI 100 /*[px]*/ - -/* The the real width of the display changes some default values: - * default object sizes, layout of examples, etc. - * According to the width of the display (hor. res. / dpi) - * the displays fall in 4 categories. - * The 4th is extra large which has no upper limit so not listed here - * The upper limit of the categories are set below in 0.1 inch unit. - */ -#define LV_DISP_SMALL_LIMIT 30 -#define LV_DISP_MEDIUM_LIMIT 50 -#define LV_DISP_LARGE_LIMIT 70 - -/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */ -typedef int16_t lv_coord_t; - -/*========================= - Memory manager settings - *=========================*/ - -/* LittelvGL's internal memory manager's settings. - * The graphical objects and other related data are stored here. */ - -/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and `lv_mem_free` */ -#define LV_MEM_CUSTOM 1 -#if LV_MEM_CUSTOM == 0 -/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/ -# define LV_MEM_SIZE (2 * 1024U * 1024U) - -/* Complier prefix for a big array declaration */ -# define LV_MEM_ATTR - -/* Set an address for the memory pool instead of allocating it as an array. - * Can be in external SRAM too. */ -# define LV_MEM_ADR 0 - -/* Automatically defrag. on free. Defrag. means joining the adjacent free cells. */ -# define LV_MEM_AUTO_DEFRAG 1 -#else /*LV_MEM_CUSTOM*/ -# define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ -# define LV_MEM_CUSTOM_ALLOC malloc /*Wrapper to malloc*/ -# define LV_MEM_CUSTOM_FREE free /*Wrapper to free*/ -# define LV_MEM_USE_MALLOC_DEFINE /*define lv_mem_alloc to malloc*/ -# include -#endif /*LV_MEM_CUSTOM*/ - -/* Use the standard memcpy and memset instead of LVGL's own functions. - * The standard functions might or might not be faster depending on their implementation. */ -#define LV_MEMCPY_MEMSET_STD 0 - -#define SDK_MMI_POOL_SIZE (3 * 1024 * 1024) - -/* Garbage Collector settings - * Used if lvgl is binded to higher level language and the memory is managed by that language */ -#define LV_ENABLE_GC 0 -#if LV_ENABLE_GC != 0 -# define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ -# define LV_MEM_CUSTOM_REALLOC your_realloc /*Wrapper to realloc*/ -# define LV_MEM_CUSTOM_GET_SIZE your_mem_get_size /*Wrapper to lv_mem_get_size*/ -#endif /* LV_ENABLE_GC */ - -/*======================= - Input device settings - *=======================*/ - -/* Input device default settings. - * Can be changed in the Input device driver (`lv_indev_drv_t`)*/ - -/* Input device read period in milliseconds */ -#define LV_INDEV_DEF_READ_PERIOD 15 - -/* Drag threshold in pixels */ -#define LV_INDEV_DEF_DRAG_LIMIT 2 - -/* Drag throw slow-down in [%]. Greater value -> faster slow-down */ -#define LV_INDEV_DEF_DRAG_THROW 2 - -/* Long press time in milliseconds. - * Time to send `LV_EVENT_LONG_PRESSSED`) */ -#define LV_INDEV_DEF_LONG_PRESS_TIME 400 - -/* Repeated trigger period in long press [ms] - * Time between `LV_EVENT_LONG_PRESSED_REPEAT */ -#define LV_INDEV_DEF_LONG_PRESS_REP_TIME 100 - - -/* Gesture threshold in pixels */ -#define LV_INDEV_DEF_GESTURE_LIMIT 2 - -/* Gesture min velocity at release before swipe (pixels)*/ -#define LV_INDEV_DEF_GESTURE_MIN_VELOCITY 1 - -/*================== - * Feature usage - *==================*/ - -/*1: Enable the Animations */ -#define LV_USE_ANIMATION 1 -#if LV_USE_ANIMATION - -/*Declare the type of the user data of animations (can be e.g. `void *`, `int`, `struct`)*/ -typedef void * lv_anim_user_data_t; - -#endif - -/* 1: Enable shadow drawing*/ -#define LV_USE_SHADOW 1 -#if LV_USE_SHADOW -/* Allow buffering some shadow calculation - * LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, - * where shadow size is `shadow_width + radius` - * Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ -#define LV_SHADOW_CACHE_SIZE 0 -#endif - -/*1: enable outline drawing on rectangles*/ -#define LV_USE_OUTLINE 1 - -/*1: enable pattern drawing on rectangles*/ -#define LV_USE_PATTERN 1 - -/*1: enable value string drawing on rectangles*/ -#define LV_USE_VALUE_STR 1 - -/* 1: Use other blend modes than normal (`LV_BLEND_MODE_...`)*/ -#define LV_USE_BLEND_MODES 1 - -/* 1: Use the `opa_scale` style property to set the opacity of an object and its children at once*/ -#define LV_USE_OPA_SCALE 1 - -/* 1: Use image zoom and rotation*/ -#define LV_USE_IMG_TRANSFORM 1 - -/* 1: Enable object groups (for keyboard/encoder navigation) */ -#define LV_USE_GROUP 1 -#if LV_USE_GROUP -typedef void * lv_group_user_data_t; -#endif /*LV_USE_GROUP*/ - -/* 1: Enable GPU interface*/ -#define LV_USE_GPU 1 /*Only enables `gpu_fill_cb` and `gpu_blend_cb` in the disp. drv- */ -#define LV_USE_GPU_STM32_DMA2D 0 - -/*If enabling LV_USE_GPU_STM32_DMA2D, LV_GPU_DMA2D_CMSIS_INCLUDE must be defined to include path of CMSIS header of target processor -e.g. "stm32f769xx.h" or "stm32f429xx.h" */ -#define LV_GPU_DMA2D_CMSIS_INCLUDE - -/*1: Use PXP for CPU off-load on NXP RTxxx platforms */ -#define LV_USE_GPU_NXP_PXP 0 - -/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) - * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol FSL_RTOS_FREE_RTOS - * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. - *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() - * */ -#define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 - -/*1: Use VG-Lite for CPU offload on NXP RTxxx platforms */ -#define LV_USE_GPU_NXP_VG_LITE 0 - -/* 1: Enable file system (might be required for images */ -#define LV_USE_FILESYSTEM 1 -#if LV_USE_FILESYSTEM -/*Declare the type of the user data of file system drivers (can be e.g. `void *`, `int`, `struct`)*/ -typedef void * lv_fs_drv_user_data_t; -#endif - -/*1: Add a `user_data` to drivers and objects*/ -#define LV_USE_USER_DATA 1 - -/*1: Show CPU usage and FPS count in the right bottom corner*/ -#define LV_USE_PERF_MONITOR 0 - -/*1: Use the functions and types from the older API if possible */ -#define LV_USE_API_EXTENSION_V6 1 -#define LV_USE_API_EXTENSION_V7 1 - -/*======================== - * Image decoder and cache - *========================*/ - -/* 1: Enable indexed (palette) images */ -#define LV_IMG_CF_INDEXED 1 - -/* 1: Enable alpha indexed images */ -#define LV_IMG_CF_ALPHA 1 - -/* Default image cache size. Image caching keeps the images opened. - * If only the built-in image formats are used there is no real advantage of caching. - * (I.e. no new image decoder is added) - * With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. - * However the opened images might consume additional RAM. - * LV_IMG_CACHE_DEF_SIZE must be >= 1 */ -#define LV_IMG_CACHE_DEF_SIZE 20 - -/*limit cache max mem size, 0 to close this feature */ -#define LV_IMG_CACHE_MEM_SIZE_LIMIT 0//(1024*1024*2) - -/*Declare the type of the user data of image decoder (can be e.g. `void *`, `int`, `struct`)*/ -typedef void * lv_img_decoder_user_data_t; - -/*===================== - * Compiler settings - *====================*/ - /* For big endian systems set to 1 */ -#define LV_BIG_ENDIAN_SYSTEM 0 - -/* Define a custom attribute to `lv_tick_inc` function */ -#define LV_ATTRIBUTE_TICK_INC - -/* Define a custom attribute to `lv_task_handler` function */ -#define LV_ATTRIBUTE_TASK_HANDLER - -/* Define a custom attribute to `lv_disp_flush_ready` function */ -#define LV_ATTRIBUTE_FLUSH_READY - -/* Required alignment size for buffers */ -#define LV_ATTRIBUTE_MEM_ALIGN_SIZE - -/* With size optimization (-Os) the compiler might not align data to - * 4 or 8 byte boundary. Some HW may need even 32 or 64 bytes. - * This alignment will be explicitly applied where needed. - * LV_ATTRIBUTE_MEM_ALIGN_SIZE should be used to specify required align size. - * E.g. __attribute__((aligned(LV_ATTRIBUTE_MEM_ALIGN_SIZE))) */ -#define LV_ATTRIBUTE_MEM_ALIGN - -/* Attribute to mark large constant arrays for example - * font's bitmaps */ -#define LV_ATTRIBUTE_LARGE_CONST - -/* Prefix performance critical functions to place them into a faster memory (e.g RAM) - * Uses 15-20 kB extra memory */ -#define LV_ATTRIBUTE_FAST_MEM - -/* Export integer constant to binding. - * This macro is used with constants in the form of LV_ that - * should also appear on lvgl binding API such as Micropython - * - * The default value just prevents a GCC warning. - */ -#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning - -/* Prefix variables that are used in GPU accelerated operations, often these need to be - * placed in RAM sections that are DMA accessible */ -#define LV_ATTRIBUTE_DMA - -/*=================== - * HAL settings - *==================*/ - -/* 1: use a custom tick source. - * It removes the need to manually update the tick with `lv_tick_inc`) */ -#define LV_TICK_CUSTOM 0 -#if LV_TICK_CUSTOM == 1 -#define LV_TICK_CUSTOM_INCLUDE "something.h" /*Header for the sys time function*/ -#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current systime in ms*/ -#endif /*LV_TICK_CUSTOM*/ - -typedef void * lv_disp_drv_user_data_t; /*Type of user data in the display driver*/ -typedef void * lv_indev_drv_user_data_t; /*Type of user data in the input device driver*/ - -/*================ - * Log settings - *===============*/ - -/*1: Enable the log module*/ -#define LV_USE_LOG 1//0 -#if LV_USE_LOG -/* How important log should be added: - * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information - * LV_LOG_LEVEL_INFO Log important events - * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem - * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail - * LV_LOG_LEVEL_NONE Do not log anything - */ -# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN -//# define LV_LOG_LEVEL LV_LOG_LEVEL_TRACE //only used for debug - -/* 1: Print the log with 'printf'; - * 0: user need to register a callback with `lv_log_register_print_cb`*/ -# define LV_LOG_PRINTF 1 -#endif /*LV_USE_LOG*/ - -/*================= - * Debug settings - *================*/ - -/* If Debug is enabled LittelvGL validates the parameters of the functions. - * If an invalid parameter is found an error log message is printed and - * the MCU halts at the error. (`LV_USE_LOG` should be enabled) - * If you are debugging the MCU you can pause - * the debugger to see exactly where the issue is. - * - * The behavior of asserts can be overwritten by redefining them here. - * E.g. #define LV_ASSERT_MEM(p) - */ -#define LV_USE_DEBUG 1 -#if LV_USE_DEBUG - -/*Check if the parameter is NULL. (Quite fast) */ -#define LV_USE_ASSERT_NULL 1 - -/*Checks is the memory is successfully allocated or no. (Quite fast)*/ -#define LV_USE_ASSERT_MEM 1 - -/*Check the integrity of `lv_mem` after critical operations. (Slow)*/ -#define LV_USE_ASSERT_MEM_INTEGRITY 0 - -/* Check the strings. - * Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow) - * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */ -#define LV_USE_ASSERT_STR 0 - -/* Check NULL, the object's type and existence (e.g. not deleted). (Quite slow) - * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */ -#define LV_USE_ASSERT_OBJ 0 - -/*Check if the styles are properly initialized. (Fast)*/ -#define LV_USE_ASSERT_STYLE 1 - -#endif /*LV_USE_DEBUG*/ - -/*================== - * FONT USAGE - *===================*/ - -/* The built-in fonts contains the ASCII range and some Symbols with 4 bit-per-pixel. - * The symbols are available via `LV_SYMBOL_...` defines - * More info about fonts: https://docs.lvgl.com/#Fonts - * To create a new font go to: https://lvgl.com/ttf-font-to-c-array - */ - -/* Montserrat fonts with bpp = 4 - * https://fonts.google.com/specimen/Montserrat */ -#define LV_FONT_MONTSERRAT_8 0 -#define LV_FONT_MONTSERRAT_10 0 -#define LV_FONT_MONTSERRAT_12 1 -#define LV_FONT_MONTSERRAT_14 1 -#define LV_FONT_MONTSERRAT_16 0 -#define LV_FONT_MONTSERRAT_18 0 -#define LV_FONT_MONTSERRAT_20 1 -#define LV_FONT_MONTSERRAT_22 0 -#define LV_FONT_MONTSERRAT_24 1 -#define LV_FONT_MONTSERRAT_26 0 -#define LV_FONT_MONTSERRAT_28 0 -#define LV_FONT_MONTSERRAT_30 0 -#define LV_FONT_MONTSERRAT_32 0 -#define LV_FONT_MONTSERRAT_34 0 -#define LV_FONT_MONTSERRAT_36 0 -#define LV_FONT_MONTSERRAT_38 0 -#define LV_FONT_MONTSERRAT_40 1 -#define LV_FONT_MONTSERRAT_42 0 -#define LV_FONT_MONTSERRAT_44 0 -#define LV_FONT_MONTSERRAT_46 0 -#define LV_FONT_MONTSERRAT_48 0 - -/* Demonstrate special features */ -#define LV_FONT_MONTSERRAT_12_SUBPX 1 -#define LV_FONT_MONTSERRAT_28_COMPRESSED 1 /*bpp = 3*/ -#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, PErisan letters and all their forms*/ -#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ - -/*Pixel perfect monospace font - * http://pelulamu.net/unscii/ */ -#define LV_FONT_UNSCII_8 0 -#define LV_FONT_UNSCII_16 0 - -/* Optionally declare your custom fonts here. - * You can use these fonts as default font too - * and they will be available globally. E.g. - * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \ - * LV_FONT_DECLARE(my_font_2) - */ -#define LV_FONT_CUSTOM_DECLARE - -/* Enable it if you have fonts with a lot of characters. - * The limit depends on the font size, font face and bpp - * but with > 10,000 characters if you see issues probably you need to enable it.*/ -#define LV_FONT_FMT_TXT_LARGE 0 - -/* Enables/disables support for compressed fonts. If it's disabled, compressed - * glyphs cannot be processed by the library and won't be rendered. - */ -#define LV_USE_FONT_COMPRESSED 1 - -/* Enable subpixel rendering */ -#define LV_USE_FONT_SUBPX 1 -#if LV_USE_FONT_SUBPX -/* Set the pixel order of the display. - * Important only if "subpx fonts" are used. - * With "normal" font it doesn't matter. - */ -#define LV_FONT_SUBPX_BGR 0 -#endif - -/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, `struct`)*/ -typedef void * lv_font_user_data_t; - -/*================ - * THEME USAGE - *================*/ - -/*Always enable at least on theme*/ - -/* No theme, you can apply your styles as you need - * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ - #define LV_USE_THEME_EMPTY 1 - -/*Simple to the create your theme based on it - * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ - #define LV_USE_THEME_TEMPLATE 0 - - /* A fast and impressive theme. - * Flags: - * LV_THEME_MATERIAL_FLAG_LIGHT: light theme - * LV_THEME_MATERIAL_FLAG_DARK: dark theme - * LV_THEME_MATERIAL_FLAG_NO_TRANSITION: disable transitions (state change animations) - * LV_THEME_MATERIAL_FLAG_NO_FOCUS: disable indication of focused state) - * */ - #define LV_USE_THEME_MATERIAL 0 - -/* Mono-color theme for monochrome displays. - * If LV_THEME_DEFAULT_COLOR_PRIMARY is LV_COLOR_BLACK the - * texts and borders will be black and the background will be - * white. Else the colors are inverted. - * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ - #define LV_USE_THEME_MONO 0 - -#define LV_THEME_DEFAULT_INCLUDE /*Include a header for the init. function*/ -#define LV_THEME_DEFAULT_INIT lv_theme_empty_init -#define LV_THEME_DEFAULT_COLOR_PRIMARY LV_COLOR_RED -#define LV_THEME_DEFAULT_COLOR_SECONDARY LV_COLOR_BLUE -#define LV_THEME_DEFAULT_FLAG 0 -#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_20 -#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_20 -#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_20 -#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_20 - -/*================= - * Text settings - *=================*/ - -/* Select a character encoding for strings. - * Your IDE or editor should have the same character encoding - * - LV_TXT_ENC_UTF8 - * - LV_TXT_ENC_ASCII - * */ -#define LV_TXT_ENC LV_TXT_ENC_UTF8 - - /*Can break (wrap) texts on these chars*/ -#define LV_TXT_BREAK_CHARS " ,.;:-_" - -/* If a word is at least this long, will break wherever "prettiest" - * To disable, set to a value <= 0 */ -#define LV_TXT_LINE_BREAK_LONG_LEN 12 - -/* Minimum number of characters in a long word to put on a line before a break. - * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ -#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 - -/* Minimum number of characters in a long word to put on a line after a break. - * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ -#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 - -/* The control character to use for signalling text recoloring. */ -#define LV_TXT_COLOR_CMD "#" - -/* Support bidirectional texts. - * Allows mixing Left-to-Right and Right-to-Left texts. - * The direction will be processed according to the Unicode Bidirectioanl Algorithm: - * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ -#define LV_USE_BIDI 0 -#if LV_USE_BIDI -/* Set the default direction. Supported values: - * `LV_BIDI_DIR_LTR` Left-to-Right - * `LV_BIDI_DIR_RTL` Right-to-Left - * `LV_BIDI_DIR_AUTO` detect texts base direction */ -#define LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_AUTO -#endif - -/* Enable Arabic/Persian processing - * In these languages characters should be replaced with - * an other form based on their position in the text */ -#define LV_USE_ARABIC_PERSIAN_CHARS 0 - -/*Change the built in (v)snprintf functions*/ -#define LV_SPRINTF_CUSTOM 0 -#if LV_SPRINTF_CUSTOM -# define LV_SPRINTF_INCLUDE -# define lv_snprintf snprintf -# define lv_vsnprintf vsnprintf -#else /*!LV_SPRINTF_CUSTOM*/ -# define LV_SPRINTF_DISABLE_FLOAT 1 -#endif /*LV_SPRINTF_CUSTOM*/ - -/*=================== - * LV_OBJ SETTINGS - *==================*/ -#define LV_USE_USER_DATA_FREE 0 - -#if LV_USE_USER_DATA -/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/ -typedef struct -{ - void * user_data; - void * user_data_for_client; - uint32_t user_num; -}lv_obj_user_data_t; - -/*Provide a function to free user data*/ -#define LV_USE_USER_DATA_FREE 0 -#if LV_USE_USER_DATA_FREE -# define LV_USER_DATA_FREE_INCLUDE "something.h" /*Header for user data free function*/ -/* Function prototype : void user_data_free(lv_obj_t * obj); */ -# define LV_USER_DATA_FREE (user_data_free) /*Invoking for user data free function*/ -#endif -#endif - -/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/ -#define LV_USE_OBJ_REALIGN 1 - -/* Enable to make the object clickable on a larger area. - * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature - * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and vertically (0..255 px) - * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions (-32k..+32k px) - */ -#define LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_OFF - -/*================== - * LV OBJ X USAGE - *================*/ -/* - * Documentation of the object types: https://docs.lvgl.com/#Object-types - */ - -/*Arc (dependencies: -)*/ -#define LV_USE_ARC 1 - -/*Bar (dependencies: -)*/ -#define LV_USE_BAR 1 - -/*Button (dependencies: lv_cont*/ -#define LV_USE_BTN 1 - -/*Button matrix (dependencies: -)*/ -#define LV_USE_BTNMATRIX 1 - -/*Calendar (dependencies: -)*/ -#define LV_USE_CALENDAR 1 -#if LV_USE_CALENDAR -# define LV_CALENDAR_WEEK_STARTS_MONDAY 0 -#endif - -/*Canvas (dependencies: lv_img)*/ -#define LV_USE_CANVAS 1 - -/*Check box (dependencies: lv_btn, lv_label)*/ -#define LV_USE_CHECKBOX 1 - -/*Chart (dependencies: -)*/ -#define LV_USE_CHART 1 -#if LV_USE_CHART -# define LV_CHART_AXIS_TICK_LABEL_MAX_LEN 20 -#endif - -/*Container (dependencies: -*/ -#define LV_USE_CONT 1 - -/*Color picker (dependencies: -*/ -//#define LV_USE_CPICKER 1 - -/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/ -#define LV_USE_DROPDOWN 1 -#if LV_USE_DROPDOWN != 0 -/*Open and close default animation time [ms] (0: no animation)*/ -# define LV_DROPDOWN_DEF_ANIM_TIME 200 -#endif - -/*Gauge (dependencies:lv_bar, lv_linemeter)*/ -#define LV_USE_GAUGE 1 - -/*Image (dependencies: lv_label*/ -#define LV_USE_IMG 1 - -/*Image Button (dependencies: lv_btn*/ -#define LV_USE_IMGBTN 1 -#if LV_USE_IMGBTN -/*1: The imgbtn requires left, mid and right parts and the width can be set freely*/ -# define LV_IMGBTN_TILED 0 -#endif - -/*Keyboard (dependencies: lv_btnm)*/ -#define LV_USE_KEYBOARD 1 - -/*Label (dependencies: -*/ -#define LV_USE_LABEL 1 -#if LV_USE_LABEL != 0 -/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/ -# define LV_LABEL_DEF_SCROLL_SPEED 25 - -/* Waiting period at beginning/end of animation cycle */ -# define LV_LABEL_WAIT_CHAR_COUNT 3 - -/*Enable selecting text of the label */ -# define LV_LABEL_TEXT_SEL 0 - -/*Store extra some info in labels (12 bytes) to speed up drawing of very long texts*/ -# define LV_LABEL_LONG_TXT_HINT 0 -#endif - -/*LED (dependencies: -)*/ -#define LV_USE_LED 1 -#if LV_USE_LED -# define LV_LED_BRIGHT_MIN 120 /*Minimal brightness*/ -# define LV_LED_BRIGHT_MAX 255 /*Maximal brightness*/ -#endif - -/*Line (dependencies: -*/ -#define LV_USE_LINE 1 - -/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons ))*/ -#define LV_USE_LIST 1 -#if LV_USE_LIST != 0 -/*Default animation time of focusing to a list element [ms] (0: no animation) */ -# define LV_LIST_DEF_ANIM_TIME 100 -#endif - -/*Line meter (dependencies: *;)*/ -#define LV_USE_LINEMETER 1 -#if LV_USE_LINEMETER -/* Draw line more precisely at cost of performance. - * Useful if there are lot of lines any minor are visible - * 0: No extra precision - * 1: Some extra precision - * 2: Best precision - */ -# define LV_LINEMETER_PRECISE 0 -#endif - -/*Mask (dependencies: -)*/ -#define LV_USE_OBJMASK 1 - -/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/ -#define LV_USE_MSGBOX 1 - -/*Page (dependencies: lv_cont)*/ -#define LV_USE_PAGE 1 -#if LV_USE_PAGE != 0 -/*Focus default animation time [ms] (0: no animation)*/ -# define LV_PAGE_DEF_ANIM_TIME 400 -#endif - -/*Preload (dependencies: lv_arc, lv_anim)*/ -#define LV_USE_SPINNER 1 -#if LV_USE_SPINNER != 0 -# define LV_SPINNER_DEF_ARC_LENGTH 60 /*[deg]*/ -# define LV_SPINNER_DEF_SPIN_TIME 1000 /*[ms]*/ -# define LV_SPINNER_DEF_ANIM LV_SPINNER_TYPE_SPINNING_ARC -#endif - -/*Roller (dependencies: lv_ddlist)*/ -#define LV_USE_ROLLER 1 -#if LV_USE_ROLLER != 0 -/*Focus animation time [ms] (0: no animation)*/ -# define LV_ROLLER_DEF_ANIM_TIME 200 - -/*Number of extra "pages" when the roller is infinite*/ -# define LV_ROLLER_INF_PAGES 7 -#endif - -/*Slider (dependencies: lv_bar)*/ -#define LV_USE_SLIDER 1 - -/*Spinbox (dependencies: lv_ta)*/ -#define LV_USE_SPINBOX 1 - -/*Switch (dependencies: lv_slider)*/ -#define LV_USE_SWITCH 1 - -/*Text area (dependencies: lv_label, lv_page)*/ -#define LV_USE_TEXTAREA 1 -#if LV_USE_TEXTAREA != 0 -# define LV_TEXTAREA_DEF_CURSOR_BLINK_TIME 400 /*ms*/ -# define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ -#endif - -/*Table (dependencies: lv_label)*/ -#define LV_USE_TABLE 1 -#if LV_USE_TABLE -# define LV_TABLE_COL_MAX 12 -# define LV_TABLE_CELL_STYLE_CNT 4 -#endif - -/*Tab (dependencies: lv_page, lv_btnm)*/ -#define LV_USE_TABVIEW 1 -# if LV_USE_TABVIEW != 0 -/*Time of slide animation [ms] (0: no animation)*/ -# define LV_TABVIEW_DEF_ANIM_TIME 300 -#endif - -/*Tileview (dependencies: lv_page) */ -#define LV_USE_TILEVIEW 1 -#if LV_USE_TILEVIEW -/*Time of slide animation [ms] (0: no animation)*/ -# define LV_TILEVIEW_DEF_ANIM_TIME 300 -#endif - -/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/ -#define LV_USE_WIN 1 - -/*================== - * Non-user section - *==================*/ - -#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) /* Disable warnings for Visual Studio*/ -# define _CRT_SECURE_NO_WARNINGS -#endif - -#define LV_WATCH_MOUSEWHEEL 0 - -/* Image decoder */ -#define USE_LV_DRAW_IMG_PNG_DECODER 1 -#define USE_LV_DRAW_IMG_JPEG_DECODER 1 -#define USE_LV_DRAW_IMG_JPEG_DECODER_HW_MODE 0 -#define USE_LV_DRAW_IMG_JPEG_DECODER_INC_JLIB 0 - -/* GIF player */ -#define USE_LV_DRAW_GIF_PLAYER 1 - -#define USE_LV_FLASH_FS 1 -#define USE_LV_ROM_FS 1 -#define FILE_INODE_BUF_SIZE 16 /*Lv_romfs.c file cahce size set 16,Low memory change size to 4*/ -#define USE_LV_SD_FS 0 // 1 -#define USE_LV_BARCODE 0 -#define USE_LV_QRCODE 1 - -#define USE_LV_WATCH_DEMO 1 - -/* xtimer */ -#define TIMER_HZ_32K (32768ul) -#define TIMER_HZ_1M (1000000ul) - -#define XTIMER_HZ TIMER_HZ_32K - -#if (XTIMER_HZ == TIMER_HZ_32K) -#define XTIMER_BACKOFF 1 -#define XTIMER_OVERHEAD 0 -#define XTIMER_ISR_BACKOFF 1 -#else /* 1MH */ -#define XTIMER_BACKOFF 30 -#define XTIMER_OVERHEAD 20 -#define XTIMER_ISR_BACKOFF 20 -#endif - -#define USE_SDK_API 1 - -extern int uart_printf(const char* fmt, ...); -#define printf(fmt, ...) uart_printf(fmt, ##__VA_ARGS__) -//#define printf(fmt, args...) watch_uart_printf(fmt, ##args) - -/*--END OF LV_CONF_H--*/ - -/* Bluetooth */ -#define USE_LV_BLUETOOTH 0 -#define USE_LV_BLE_DEMO 0 - -/* SD auto mount */ -#define USE_LV_WATCH_SD_AUTO_MOUNT 0 - -/* DM */ -#define USE_LV_DM 0 - -/*multi-task safe setting for lv_task, exclude other lv_objx */ -#define LV_TASK_MULTITASK_SAFE - -/* WLAN */ -#define USE_LV_WLAN 0 - - - -#endif /*LV_CONF_H*/ - -#endif /*End of "Content enable"*/ +/** + * @file lv_conf.h + * + */ + +/* + * COPY THIS FILE AS `lv_conf.h` NEXT TO the `lvgl` FOLDER + */ + +#if 1 /*Set it to "1" to enable content*/ + +#ifndef LV_CONF_H +#define LV_CONF_H +/* clang-format off */ + +#include + +#if 1 // @CHENG_MODIFY +#include "lv_conf_CUSTOM.h" +#endif + +/*==================== + Graphical settings + *====================*/ +//#define USE_LV_WATCH_UI_360_360 0 +//#define USE_LV_WATCH_UI_240_320 0 // 1 +//#define USE_LV_WATCH_UI_240_280 1 + +/* Maximal horizontal and vertical resolution to support by the library.*/ +#if USE_LV_WATCH_UI_360_360 +#define LV_HOR_RES_MAX (360) +#define LV_VER_RES_MAX (360) +#elif USE_LV_WATCH_UI_240_320 +#define LV_HOR_RES_MAX (240) +#define LV_VER_RES_MAX (320) +#elif USE_LV_WATCH_UI_240_280 +#define LV_HOR_RES_MAX (240) +#define LV_VER_RES_MAX (280) +#elif USE_LV_WATCH_UI_466_466 +#define LV_HOR_RES_MAX (466) +#define LV_VER_RES_MAX (466) +#else // USE_LV_WATCH_UI_240_240 +#define LV_HOR_RES_MAX (240) +#define LV_VER_RES_MAX (240) +#endif +/* Horizontal and vertical resolution of the library.*/ +#define LV_HOR_RES (LV_HOR_RES_MAX) +#define LV_VER_RES (LV_VER_RES_MAX) + +/* Color depth: + * - 1: 1 byte per pixel + * - 8: RGB233 + * - 16: RGB565 + * - 32: ARGB8888 + */ +#define LV_COLOR_DEPTH 16 + +/* Swap the 2 bytes of RGB565 color. + * Useful if the display has a 8 bit interface (e.g. SPI)*/ +#define LV_COLOR_16_SWAP 0 + +/* 1: Enable screen transparency. + * Useful for OSD or other overlapping GUIs. + * Requires `LV_COLOR_DEPTH = 32` colors and the screen's style should be modified: `style.body.opa = ...`*/ +#define LV_COLOR_SCREEN_TRANSP 0 + +/*Images pixels with this color will not be drawn (with chroma keying)*/ +#define LV_COLOR_TRANSP LV_COLOR_LIME /*LV_COLOR_LIME: pure green*/ + +/* Enable anti-aliasing (lines, and radiuses will be smoothed) */ +#define LV_ANTIALIAS 1 + +/* Default display refresh period. + * Can be changed in the display driver (`lv_disp_drv_t`).*/ +#define LV_DISP_DEF_REFR_PERIOD 15 /*[ms]*/ + +/* Dot Per Inch: used to initialize default sizes. + * E.g. a button with width = LV_DPI / 2 -> half inch wide + * (Not so important, you can adjust it to modify default sizes and spaces)*/ +#define LV_DPI 100 /*[px]*/ + +/* The the real width of the display changes some default values: + * default object sizes, layout of examples, etc. + * According to the width of the display (hor. res. / dpi) + * the displays fall in 4 categories. + * The 4th is extra large which has no upper limit so not listed here + * The upper limit of the categories are set below in 0.1 inch unit. + */ +#define LV_DISP_SMALL_LIMIT 30 +#define LV_DISP_MEDIUM_LIMIT 50 +#define LV_DISP_LARGE_LIMIT 70 + +/* Type of coordinates. Should be `int16_t` (or `int32_t` for extreme cases) */ +typedef int16_t lv_coord_t; + +/*========================= + Memory manager settings + *=========================*/ + +/* LittelvGL's internal memory manager's settings. + * The graphical objects and other related data are stored here. */ + +/* 1: use custom malloc/free, 0: use the built-in `lv_mem_alloc` and `lv_mem_free` */ +#define LV_MEM_CUSTOM 1 +#if LV_MEM_CUSTOM == 0 +/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/ +# define LV_MEM_SIZE (2 * 1024U * 1024U) + +/* Complier prefix for a big array declaration */ +# define LV_MEM_ATTR + +/* Set an address for the memory pool instead of allocating it as an array. + * Can be in external SRAM too. */ +# define LV_MEM_ADR 0 + +/* Automatically defrag. on free. Defrag. means joining the adjacent free cells. */ +# define LV_MEM_AUTO_DEFRAG 1 +#else /*LV_MEM_CUSTOM*/ +# define LV_MEM_CUSTOM_INCLUDE /*Header for the dynamic memory function*/ +# define LV_MEM_CUSTOM_ALLOC malloc /*Wrapper to malloc*/ +# define LV_MEM_CUSTOM_FREE free /*Wrapper to free*/ +# define LV_MEM_USE_MALLOC_DEFINE /*define lv_mem_alloc to malloc*/ +# include +#endif /*LV_MEM_CUSTOM*/ + +/* Use the standard memcpy and memset instead of LVGL's own functions. + * The standard functions might or might not be faster depending on their implementation. */ +#define LV_MEMCPY_MEMSET_STD 0 + +#define SDK_MMI_POOL_SIZE (3 * 1024 * 1024) + +/* Garbage Collector settings + * Used if lvgl is binded to higher level language and the memory is managed by that language */ +#define LV_ENABLE_GC 0 +#if LV_ENABLE_GC != 0 +# define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ +# define LV_MEM_CUSTOM_REALLOC your_realloc /*Wrapper to realloc*/ +# define LV_MEM_CUSTOM_GET_SIZE your_mem_get_size /*Wrapper to lv_mem_get_size*/ +#endif /* LV_ENABLE_GC */ + +/*======================= + Input device settings + *=======================*/ + +/* Input device default settings. + * Can be changed in the Input device driver (`lv_indev_drv_t`)*/ + +/* Input device read period in milliseconds */ +#define LV_INDEV_DEF_READ_PERIOD 15 + +/* Drag threshold in pixels */ +#define LV_INDEV_DEF_DRAG_LIMIT 2 + +/* Drag throw slow-down in [%]. Greater value -> faster slow-down */ +#define LV_INDEV_DEF_DRAG_THROW 2 + +/* Long press time in milliseconds. + * Time to send `LV_EVENT_LONG_PRESSSED`) */ +#define LV_INDEV_DEF_LONG_PRESS_TIME 400 + +/* Repeated trigger period in long press [ms] + * Time between `LV_EVENT_LONG_PRESSED_REPEAT */ +#define LV_INDEV_DEF_LONG_PRESS_REP_TIME 100 + + +/* Gesture threshold in pixels */ +#define LV_INDEV_DEF_GESTURE_LIMIT 2 + +/* Gesture min velocity at release before swipe (pixels)*/ +#define LV_INDEV_DEF_GESTURE_MIN_VELOCITY 1 + +/*================== + * Feature usage + *==================*/ + +/*1: Enable the Animations */ +#define LV_USE_ANIMATION 1 +#if LV_USE_ANIMATION + +/*Declare the type of the user data of animations (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_anim_user_data_t; + +#endif + +/* 1: Enable shadow drawing*/ +#define LV_USE_SHADOW 1 +#if LV_USE_SHADOW +/* Allow buffering some shadow calculation + * LV_SHADOW_CACHE_SIZE is the max. shadow size to buffer, + * where shadow size is `shadow_width + radius` + * Caching has LV_SHADOW_CACHE_SIZE^2 RAM cost*/ +#define LV_SHADOW_CACHE_SIZE 0 +#endif + +/*1: enable outline drawing on rectangles*/ +#define LV_USE_OUTLINE 1 + +/*1: enable pattern drawing on rectangles*/ +#define LV_USE_PATTERN 1 + +/*1: enable value string drawing on rectangles*/ +#define LV_USE_VALUE_STR 1 + +/* 1: Use other blend modes than normal (`LV_BLEND_MODE_...`)*/ +#define LV_USE_BLEND_MODES 1 + +/* 1: Use the `opa_scale` style property to set the opacity of an object and its children at once*/ +#define LV_USE_OPA_SCALE 1 + +/* 1: Use image zoom and rotation*/ +#define LV_USE_IMG_TRANSFORM 1 + +/* 1: Enable object groups (for keyboard/encoder navigation) */ +#define LV_USE_GROUP 1 +#if LV_USE_GROUP +typedef void * lv_group_user_data_t; +#endif /*LV_USE_GROUP*/ + +/* 1: Enable GPU interface*/ +#define LV_USE_GPU 1 /*Only enables `gpu_fill_cb` and `gpu_blend_cb` in the disp. drv- */ +#define LV_USE_GPU_STM32_DMA2D 0 + +/*If enabling LV_USE_GPU_STM32_DMA2D, LV_GPU_DMA2D_CMSIS_INCLUDE must be defined to include path of CMSIS header of target processor +e.g. "stm32f769xx.h" or "stm32f429xx.h" */ +#define LV_GPU_DMA2D_CMSIS_INCLUDE + +/*1: Use PXP for CPU off-load on NXP RTxxx platforms */ +#define LV_USE_GPU_NXP_PXP 0 + +/*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) + * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol FSL_RTOS_FREE_RTOS + * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. + *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() + * */ +#define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 + +/*1: Use VG-Lite for CPU offload on NXP RTxxx platforms */ +#define LV_USE_GPU_NXP_VG_LITE 0 + +/* 1: Enable file system (might be required for images */ +#define LV_USE_FILESYSTEM 1 +#if LV_USE_FILESYSTEM +/*Declare the type of the user data of file system drivers (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_fs_drv_user_data_t; +#endif + +/*1: Add a `user_data` to drivers and objects*/ +#define LV_USE_USER_DATA 1 + +/*1: Show CPU usage and FPS count in the right bottom corner*/ +#define LV_USE_PERF_MONITOR 0 + +/*1: Use the functions and types from the older API if possible */ +#define LV_USE_API_EXTENSION_V6 1 +#define LV_USE_API_EXTENSION_V7 1 + +/*======================== + * Image decoder and cache + *========================*/ + +/* 1: Enable indexed (palette) images */ +#define LV_IMG_CF_INDEXED 1 + +/* 1: Enable alpha indexed images */ +#define LV_IMG_CF_ALPHA 1 + +/* Default image cache size. Image caching keeps the images opened. + * If only the built-in image formats are used there is no real advantage of caching. + * (I.e. no new image decoder is added) + * With complex image decoders (e.g. PNG or JPG) caching can save the continuous open/decode of images. + * However the opened images might consume additional RAM. + * LV_IMG_CACHE_DEF_SIZE must be >= 1 */ +#define LV_IMG_CACHE_DEF_SIZE 5 + +/*limit cache max mem size, 0 to close this feature */ +#define LV_IMG_CACHE_MEM_SIZE_LIMIT 1600*1024//(1024*1024*2) + +/*Declare the type of the user data of image decoder (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_img_decoder_user_data_t; + +/*===================== + * Compiler settings + *====================*/ + /* For big endian systems set to 1 */ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/* Define a custom attribute to `lv_tick_inc` function */ +#define LV_ATTRIBUTE_TICK_INC + +/* Define a custom attribute to `lv_task_handler` function */ +#define LV_ATTRIBUTE_TASK_HANDLER + +/* Define a custom attribute to `lv_disp_flush_ready` function */ +#define LV_ATTRIBUTE_FLUSH_READY + +/* Required alignment size for buffers */ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE + +/* With size optimization (-Os) the compiler might not align data to + * 4 or 8 byte boundary. Some HW may need even 32 or 64 bytes. + * This alignment will be explicitly applied where needed. + * LV_ATTRIBUTE_MEM_ALIGN_SIZE should be used to specify required align size. + * E.g. __attribute__((aligned(LV_ATTRIBUTE_MEM_ALIGN_SIZE))) */ +#define LV_ATTRIBUTE_MEM_ALIGN + +/* Attribute to mark large constant arrays for example + * font's bitmaps */ +#define LV_ATTRIBUTE_LARGE_CONST + +/* Prefix performance critical functions to place them into a faster memory (e.g RAM) + * Uses 15-20 kB extra memory */ +#define LV_ATTRIBUTE_FAST_MEM + +/* Export integer constant to binding. + * This macro is used with constants in the form of LV_ that + * should also appear on lvgl binding API such as Micropython + * + * The default value just prevents a GCC warning. + */ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning + +/* Prefix variables that are used in GPU accelerated operations, often these need to be + * placed in RAM sections that are DMA accessible */ +#define LV_ATTRIBUTE_DMA + +/*=================== + * HAL settings + *==================*/ + +/* 1: use a custom tick source. + * It removes the need to manually update the tick with `lv_tick_inc`) */ +#define LV_TICK_CUSTOM 0 +#if LV_TICK_CUSTOM == 1 +#define LV_TICK_CUSTOM_INCLUDE "something.h" /*Header for the sys time function*/ +#define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current systime in ms*/ +#endif /*LV_TICK_CUSTOM*/ + +typedef void * lv_disp_drv_user_data_t; /*Type of user data in the display driver*/ +typedef void * lv_indev_drv_user_data_t; /*Type of user data in the input device driver*/ + +/*================ + * Log settings + *===============*/ + +/*1: Enable the log module*/ +#define LV_USE_LOG 1//0 +#if LV_USE_LOG +/* How important log should be added: + * LV_LOG_LEVEL_TRACE A lot of logs to give detailed information + * LV_LOG_LEVEL_INFO Log important events + * LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem + * LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail + * LV_LOG_LEVEL_NONE Do not log anything + */ +# define LV_LOG_LEVEL LV_LOG_LEVEL_WARN +//# define LV_LOG_LEVEL LV_LOG_LEVEL_TRACE //only used for debug + +/* 1: Print the log with 'printf'; + * 0: user need to register a callback with `lv_log_register_print_cb`*/ +# define LV_LOG_PRINTF 1 +#endif /*LV_USE_LOG*/ + +/*================= + * Debug settings + *================*/ + +/* If Debug is enabled LittelvGL validates the parameters of the functions. + * If an invalid parameter is found an error log message is printed and + * the MCU halts at the error. (`LV_USE_LOG` should be enabled) + * If you are debugging the MCU you can pause + * the debugger to see exactly where the issue is. + * + * The behavior of asserts can be overwritten by redefining them here. + * E.g. #define LV_ASSERT_MEM(p) + */ +#define LV_USE_DEBUG 1 +#if LV_USE_DEBUG + +/*Check if the parameter is NULL. (Quite fast) */ +#define LV_USE_ASSERT_NULL 1 + +/*Checks is the memory is successfully allocated or no. (Quite fast)*/ +#define LV_USE_ASSERT_MEM 1 + +/*Check the integrity of `lv_mem` after critical operations. (Slow)*/ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 + +/* Check the strings. + * Search for NULL, very long strings, invalid characters, and unnatural repetitions. (Slow) + * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */ +#define LV_USE_ASSERT_STR 0 + +/* Check NULL, the object's type and existence (e.g. not deleted). (Quite slow) + * If disabled `LV_USE_ASSERT_NULL` will be performed instead (if it's enabled) */ +#define LV_USE_ASSERT_OBJ 0 + +/*Check if the styles are properly initialized. (Fast)*/ +#define LV_USE_ASSERT_STYLE 1 + +#endif /*LV_USE_DEBUG*/ + +/*================== + * FONT USAGE + *===================*/ + +/* The built-in fonts contains the ASCII range and some Symbols with 4 bit-per-pixel. + * The symbols are available via `LV_SYMBOL_...` defines + * More info about fonts: https://docs.lvgl.com/#Fonts + * To create a new font go to: https://lvgl.com/ttf-font-to-c-array + */ + +/* Montserrat fonts with bpp = 4 + * https://fonts.google.com/specimen/Montserrat */ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 1 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 1 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 1 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 1 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/* Demonstrate special features */ +#define LV_FONT_MONTSERRAT_12_SUBPX 1 +#define LV_FONT_MONTSERRAT_28_COMPRESSED 1 /*bpp = 3*/ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /*Hebrew, Arabic, PErisan letters and all their forms*/ +#define LV_FONT_SIMSUN_16_CJK 0 /*1000 most common CJK radicals*/ + +/*Pixel perfect monospace font + * http://pelulamu.net/unscii/ */ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/* Optionally declare your custom fonts here. + * You can use these fonts as default font too + * and they will be available globally. E.g. + * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) \ + * LV_FONT_DECLARE(my_font_2) + */ +#define LV_FONT_CUSTOM_DECLARE + +/* Enable it if you have fonts with a lot of characters. + * The limit depends on the font size, font face and bpp + * but with > 10,000 characters if you see issues probably you need to enable it.*/ +#define LV_FONT_FMT_TXT_LARGE 0 + +/* Enables/disables support for compressed fonts. If it's disabled, compressed + * glyphs cannot be processed by the library and won't be rendered. + */ +#define LV_USE_FONT_COMPRESSED 1 + +/* Enable subpixel rendering */ +#define LV_USE_FONT_SUBPX 1 +#if LV_USE_FONT_SUBPX +/* Set the pixel order of the display. + * Important only if "subpx fonts" are used. + * With "normal" font it doesn't matter. + */ +#define LV_FONT_SUBPX_BGR 0 +#endif + +/*Declare the type of the user data of fonts (can be e.g. `void *`, `int`, `struct`)*/ +typedef void * lv_font_user_data_t; + +/*================ + * THEME USAGE + *================*/ + +/*Always enable at least on theme*/ + +/* No theme, you can apply your styles as you need + * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ + #define LV_USE_THEME_EMPTY 1 + +/*Simple to the create your theme based on it + * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ + #define LV_USE_THEME_TEMPLATE 0 + + /* A fast and impressive theme. + * Flags: + * LV_THEME_MATERIAL_FLAG_LIGHT: light theme + * LV_THEME_MATERIAL_FLAG_DARK: dark theme + * LV_THEME_MATERIAL_FLAG_NO_TRANSITION: disable transitions (state change animations) + * LV_THEME_MATERIAL_FLAG_NO_FOCUS: disable indication of focused state) + * */ + #define LV_USE_THEME_MATERIAL 0 + +/* Mono-color theme for monochrome displays. + * If LV_THEME_DEFAULT_COLOR_PRIMARY is LV_COLOR_BLACK the + * texts and borders will be black and the background will be + * white. Else the colors are inverted. + * No flags. Set LV_THEME_DEFAULT_FLAG 0 */ + #define LV_USE_THEME_MONO 0 + +#define LV_THEME_DEFAULT_INCLUDE /*Include a header for the init. function*/ +#define LV_THEME_DEFAULT_INIT lv_theme_empty_init +#define LV_THEME_DEFAULT_COLOR_PRIMARY LV_COLOR_RED +#define LV_THEME_DEFAULT_COLOR_SECONDARY LV_COLOR_BLUE +#define LV_THEME_DEFAULT_FLAG 0 +#define LV_THEME_DEFAULT_FONT_SMALL &lv_font_montserrat_20 +#define LV_THEME_DEFAULT_FONT_NORMAL &lv_font_montserrat_20 +#define LV_THEME_DEFAULT_FONT_SUBTITLE &lv_font_montserrat_20 +#define LV_THEME_DEFAULT_FONT_TITLE &lv_font_montserrat_20 + +/*================= + * Text settings + *=================*/ + +/* Select a character encoding for strings. + * Your IDE or editor should have the same character encoding + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + * */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + + /*Can break (wrap) texts on these chars*/ +#define LV_TXT_BREAK_CHARS " ,.;:-_" + +/* If a word is at least this long, will break wherever "prettiest" + * To disable, set to a value <= 0 */ +#define LV_TXT_LINE_BREAK_LONG_LEN 12 + +/* Minimum number of characters in a long word to put on a line before a break. + * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/* Minimum number of characters in a long word to put on a line after a break. + * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/* The control character to use for signalling text recoloring. */ +#define LV_TXT_COLOR_CMD "#" + +/* Support bidirectional texts. + * Allows mixing Left-to-Right and Right-to-Left texts. + * The direction will be processed according to the Unicode Bidirectioanl Algorithm: + * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI +/* Set the default direction. Supported values: + * `LV_BIDI_DIR_LTR` Left-to-Right + * `LV_BIDI_DIR_RTL` Right-to-Left + * `LV_BIDI_DIR_AUTO` detect texts base direction */ +#define LV_BIDI_BASE_DIR_DEF LV_BIDI_DIR_AUTO +#endif + +/* Enable Arabic/Persian processing + * In these languages characters should be replaced with + * an other form based on their position in the text */ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*Change the built in (v)snprintf functions*/ +#define LV_SPRINTF_CUSTOM 0 +#if LV_SPRINTF_CUSTOM +# define LV_SPRINTF_INCLUDE +# define lv_snprintf snprintf +# define lv_vsnprintf vsnprintf +#else /*!LV_SPRINTF_CUSTOM*/ +# define LV_SPRINTF_DISABLE_FLOAT 1 +#endif /*LV_SPRINTF_CUSTOM*/ + +/*=================== + * LV_OBJ SETTINGS + *==================*/ +#define LV_USE_USER_DATA_FREE 0 + +#if LV_USE_USER_DATA +/*Declare the type of the user data of object (can be e.g. `void *`, `int`, `struct`)*/ +typedef struct +{ + void * user_data; + void * user_data_for_client; + uint32_t user_num; +}lv_obj_user_data_t; + +/*Provide a function to free user data*/ +#define LV_USE_USER_DATA_FREE 0 +#if LV_USE_USER_DATA_FREE +# define LV_USER_DATA_FREE_INCLUDE "something.h" /*Header for user data free function*/ +/* Function prototype : void user_data_free(lv_obj_t * obj); */ +# define LV_USER_DATA_FREE (user_data_free) /*Invoking for user data free function*/ +#endif +#endif + +/*1: enable `lv_obj_realaign()` based on `lv_obj_align()` parameters*/ +#define LV_USE_OBJ_REALIGN 1 + +/* Enable to make the object clickable on a larger area. + * LV_EXT_CLICK_AREA_OFF or 0: Disable this feature + * LV_EXT_CLICK_AREA_TINY: The extra area can be adjusted horizontally and vertically (0..255 px) + * LV_EXT_CLICK_AREA_FULL: The extra area can be adjusted in all 4 directions (-32k..+32k px) + */ +#define LV_USE_EXT_CLICK_AREA LV_EXT_CLICK_AREA_OFF + +/*================== + * LV OBJ X USAGE + *================*/ +/* + * Documentation of the object types: https://docs.lvgl.com/#Object-types + */ + +/*Arc (dependencies: -)*/ +#define LV_USE_ARC 1 + +/*Bar (dependencies: -)*/ +#define LV_USE_BAR 1 + +/*Button (dependencies: lv_cont*/ +#define LV_USE_BTN 1 + +/*Button matrix (dependencies: -)*/ +#define LV_USE_BTNMATRIX 1 + +/*Calendar (dependencies: -)*/ +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR +# define LV_CALENDAR_WEEK_STARTS_MONDAY 0 +#endif + +/*Canvas (dependencies: lv_img)*/ +#define LV_USE_CANVAS 1 + +/*Check box (dependencies: lv_btn, lv_label)*/ +#define LV_USE_CHECKBOX 1 + +/*Chart (dependencies: -)*/ +#define LV_USE_CHART 1 +#if LV_USE_CHART +# define LV_CHART_AXIS_TICK_LABEL_MAX_LEN 20 +#endif + +/*Container (dependencies: -*/ +#define LV_USE_CONT 1 + +/*Color picker (dependencies: -*/ +//#define LV_USE_CPICKER 1 + +/*Drop down list (dependencies: lv_page, lv_label, lv_symbol_def.h)*/ +#define LV_USE_DROPDOWN 1 +#if LV_USE_DROPDOWN != 0 +/*Open and close default animation time [ms] (0: no animation)*/ +# define LV_DROPDOWN_DEF_ANIM_TIME 200 +#endif + +/*Gauge (dependencies:lv_bar, lv_linemeter)*/ +#define LV_USE_GAUGE 1 + +/*Image (dependencies: lv_label*/ +#define LV_USE_IMG 1 + +/*Image Button (dependencies: lv_btn*/ +#define LV_USE_IMGBTN 1 +#if LV_USE_IMGBTN +/*1: The imgbtn requires left, mid and right parts and the width can be set freely*/ +# define LV_IMGBTN_TILED 0 +#endif + +/*Keyboard (dependencies: lv_btnm)*/ +#define LV_USE_KEYBOARD 1 + +/*Label (dependencies: -*/ +#define LV_USE_LABEL 1 +#if LV_USE_LABEL != 0 +/*Hor, or ver. scroll speed [px/sec] in 'LV_LABEL_LONG_ROLL/ROLL_CIRC' mode*/ +# define LV_LABEL_DEF_SCROLL_SPEED 25 + +/* Waiting period at beginning/end of animation cycle */ +# define LV_LABEL_WAIT_CHAR_COUNT 3 + +/*Enable selecting text of the label */ +# define LV_LABEL_TEXT_SEL 0 + +/*Store extra some info in labels (12 bytes) to speed up drawing of very long texts*/ +# define LV_LABEL_LONG_TXT_HINT 0 +#endif + +/*LED (dependencies: -)*/ +#define LV_USE_LED 1 +#if LV_USE_LED +# define LV_LED_BRIGHT_MIN 120 /*Minimal brightness*/ +# define LV_LED_BRIGHT_MAX 255 /*Maximal brightness*/ +#endif + +/*Line (dependencies: -*/ +#define LV_USE_LINE 1 + +/*List (dependencies: lv_page, lv_btn, lv_label, (lv_img optionally for icons ))*/ +#define LV_USE_LIST 1 +#if LV_USE_LIST != 0 +/*Default animation time of focusing to a list element [ms] (0: no animation) */ +# define LV_LIST_DEF_ANIM_TIME 100 +#endif + +/*Line meter (dependencies: *;)*/ +#define LV_USE_LINEMETER 1 +#if LV_USE_LINEMETER +/* Draw line more precisely at cost of performance. + * Useful if there are lot of lines any minor are visible + * 0: No extra precision + * 1: Some extra precision + * 2: Best precision + */ +# define LV_LINEMETER_PRECISE 0 +#endif + +/*Mask (dependencies: -)*/ +#define LV_USE_OBJMASK 1 + +/*Message box (dependencies: lv_rect, lv_btnm, lv_label)*/ +#define LV_USE_MSGBOX 1 + +/*Page (dependencies: lv_cont)*/ +#define LV_USE_PAGE 1 +#if LV_USE_PAGE != 0 +/*Focus default animation time [ms] (0: no animation)*/ +# define LV_PAGE_DEF_ANIM_TIME 400 +#endif + +/*Preload (dependencies: lv_arc, lv_anim)*/ +#define LV_USE_SPINNER 1 +#if LV_USE_SPINNER != 0 +# define LV_SPINNER_DEF_ARC_LENGTH 60 /*[deg]*/ +# define LV_SPINNER_DEF_SPIN_TIME 1000 /*[ms]*/ +# define LV_SPINNER_DEF_ANIM LV_SPINNER_TYPE_SPINNING_ARC +#endif + +/*Roller (dependencies: lv_ddlist)*/ +#define LV_USE_ROLLER 1 +#if LV_USE_ROLLER != 0 +/*Focus animation time [ms] (0: no animation)*/ +# define LV_ROLLER_DEF_ANIM_TIME 200 + +/*Number of extra "pages" when the roller is infinite*/ +# define LV_ROLLER_INF_PAGES 7 +#endif + +/*Slider (dependencies: lv_bar)*/ +#define LV_USE_SLIDER 1 + +/*Spinbox (dependencies: lv_ta)*/ +#define LV_USE_SPINBOX 1 + +/*Switch (dependencies: lv_slider)*/ +#define LV_USE_SWITCH 1 + +/*Text area (dependencies: lv_label, lv_page)*/ +#define LV_USE_TEXTAREA 1 +#if LV_USE_TEXTAREA != 0 +# define LV_TEXTAREA_DEF_CURSOR_BLINK_TIME 400 /*ms*/ +# define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ +#endif + +/*Table (dependencies: lv_label)*/ +#define LV_USE_TABLE 1 +#if LV_USE_TABLE +# define LV_TABLE_COL_MAX 12 +# define LV_TABLE_CELL_STYLE_CNT 4 +#endif + +/*Tab (dependencies: lv_page, lv_btnm)*/ +#define LV_USE_TABVIEW 1 +# if LV_USE_TABVIEW != 0 +/*Time of slide animation [ms] (0: no animation)*/ +# define LV_TABVIEW_DEF_ANIM_TIME 300 +#endif + +/*Tileview (dependencies: lv_page) */ +#define LV_USE_TILEVIEW 1 +#if LV_USE_TILEVIEW +/*Time of slide animation [ms] (0: no animation)*/ +# define LV_TILEVIEW_DEF_ANIM_TIME 300 +#endif + +/*Window (dependencies: lv_cont, lv_btn, lv_label, lv_img, lv_page)*/ +#define LV_USE_WIN 1 + +/*================== + * Non-user section + *==================*/ + +#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS) /* Disable warnings for Visual Studio*/ +# define _CRT_SECURE_NO_WARNINGS +#endif + +#define LV_WATCH_MOUSEWHEEL 0 + +/* Image decoder */ +#define USE_LV_DRAW_IMG_PNG_DECODER 1 +#define USE_LV_DRAW_IMG_JPEG_DECODER 1 +#define USE_LV_DRAW_IMG_JPEG_DECODER_HW_MODE 0 +#define USE_LV_DRAW_IMG_JPEG_DECODER_INC_JLIB 0 + +/* GIF player */ +#define USE_LV_DRAW_GIF_PLAYER 1 + +#define USE_LV_FLASH_FS 1 +#define USE_LV_ROM_FS 1 +#define FILE_INODE_BUF_SIZE 16 /*Lv_romfs.c file cahce size set 16,Low memory change size to 4*/ +#define USE_LV_SD_FS 0 // 1 +#define USE_LV_BARCODE 0 +#define USE_LV_QRCODE 1 + +#define USE_LV_WATCH_DEMO 1 + +/* xtimer */ +#define TIMER_HZ_32K (32768ul) +#define TIMER_HZ_1M (1000000ul) + +#define XTIMER_HZ TIMER_HZ_32K + +#if (XTIMER_HZ == TIMER_HZ_32K) +#define XTIMER_BACKOFF 1 +#define XTIMER_OVERHEAD 0 +#define XTIMER_ISR_BACKOFF 1 +#else /* 1MH */ +#define XTIMER_BACKOFF 30 +#define XTIMER_OVERHEAD 20 +#define XTIMER_ISR_BACKOFF 20 +#endif + +#define USE_SDK_API 1 + +extern int uart_printf(const char* fmt, ...); +#define printf(fmt, ...) uart_printf(fmt, ##__VA_ARGS__) +//#define printf(fmt, args...) watch_uart_printf(fmt, ##args) + +/*--END OF LV_CONF_H--*/ + +/* Bluetooth */ +#define USE_LV_BLUETOOTH 0 +#define USE_LV_BLE_DEMO 0 + +/* SD auto mount */ +#define USE_LV_WATCH_SD_AUTO_MOUNT 0 + +/* DM */ +#define USE_LV_DM 0 + +/*multi-task safe setting for lv_task, exclude other lv_objx */ +#define LV_TASK_MULTITASK_SAFE + +/* WLAN */ +#define USE_LV_WLAN 0 + + + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/2.sdk/sdk/product/craneg_modem/lv_gui_main.c b/2.sdk/sdk/product/craneg_modem/lv_gui_main.c index 099b214e..3bfaba87 100644 --- a/2.sdk/sdk/product/craneg_modem/lv_gui_main.c +++ b/2.sdk/sdk/product/craneg_modem/lv_gui_main.c @@ -1,1885 +1,1885 @@ -#if 1 -#include -#include "lvgl.h" -#include "lv_drivers/display/crane_lcdc.h" -#include "lv_drivers/display/st7789v_spi.h" -#include "lv_drivers/display/st7789v_mcu.h" -#include "lv_drivers/display/st7735s_spi.h" -#include "lv_drivers/display/st7567_spi.h" -#include "lv_drivers/display/rm69330_mipi.h" -#include "lv_drivers/display/icna3310_mipi.h" -#include "lv_drivers/display/co5300_mipi.h" -#include "lv_drivers/display/ili9806e_mipi.h" -#include "lv_drivers/display/gc9a01_spi.h" -#include "lv_drivers/indev/ft6x36.h" -#include "lv_drivers/indev/bl6133.h" -#include "lv_drivers/indev/stc820.h" -#include "lv_drivers/indev/tpfw.h" -#include "lv_drivers/indev/crane_keypadc.h" -#include "lv_drivers/indev/zinitix.h" -#include "lv_drivers/indev/CT1711.h" -#include "lv_drivers/indev/si24rx/si24rx.h" -#include "lv_drivers/indev/si24rx/si24rx_drv.h" -#include "lv_drivers/indev/my_xMotion.h" -#include "lv_drivers/common/backlight.h" -#include "lv_drivers/common/lv_pm.h" -#include "lv_drivers/common/i2c.h" -#include "board.h" -#include "ril/ril.h" -#include "lvgl/hal/hal.h" -#include "lv_drivers/indev/crane_evb_keypad.h" -#include "lvgl/src/lv_misc/lv_romfs.h" -#include "lv_drivers/display/st9a01_spi.h" -#include "lv_drivers/display/gc9c01_3_2_spi.h" -#include "lv_drivers/display/gc9307_spi.h" -#include "lv_drivers/display/st7789v2_spi.h" -#if USE_MULTI_KEY -#include "lv_drivers/indev/multi_key.h" -#endif -#if USE_GH3018 -#include "lv_drivers/indev/gh3018.h" -#endif -#if USE_HX3918 -#include "lv_drivers/indev/HX3918/hx3918.h" -#endif -#if USE_FR8012HAQ -#include "lv_drivers/indev/FR8012HAQ/fr8012haq.h" -#endif -#if USE_WMM300 -#include "lv_drivers/indev/WMM300/whale_algo.h" -#endif -#if USE_ACNT180 -#include "lv_drivers/indev/ACNT180.h" -#elif USE_ACNT117 -#include "lv_drivers/indev/ACNT117.h" -#endif -#if USE_SOS_KEY -#include "lv_drivers/indev/sos_key.h" -#endif -unsigned is_phase1 = 1; - -//Simware begin -extern void gpio_set_value(unsigned int gpio,unsigned int value); -#if USE_BT_SENSOR_HUB != 0 -extern int SensorHub_int_gpio_d2_ent_callback(void); -extern int SensorHub_int_gpio_d2_exit_callback(void); -extern void hal_SensorHub_adaptor_init(void); -#endif -//Simware end -#if USE_SDK_API -/* override SDK config */ -unsigned int g_asrlcd_framebuffer[0]; -unsigned char mmiPool[SDK_MMI_POOL_SIZE]; -const unsigned int mmiPoolSize = SDK_MMI_POOL_SIZE; -#endif - -#define GUI_TASK_PRIORITY 200 -TASK_HANDLE *gui_task_id; -/*supported panels */ -static struct crane_panel_t *panels[] = { -#if 1 -#if USE_LCD_PANEL_ST7735S_SPI_POC - &st7735s_spi, -#elif USE_LCD_PANEL_ST7567_SPI_4WIRE_1LANE_1IF - &st7567_spi, -#elif USE_LCD_PANEL_ST7789V_MCU - &st7789v_mcu, -#elif USE_LCD_PANEL_RM69330_MIPI - &rm69330_mipi, -#elif USE_LCD_PANEL_ICNA3310_MIPI - &icna3310_mipi, -#elif USE_LCD_PANEL_CO5300_MIPI - &co5300_mipi, -#elif USE_LCD_PANEL_ILI9806E_MIPI - &ili9806e_mipi, -//#else - //&st7789v_spi, -#endif -#endif - -#if USE_LCD_PANEL_GC9A01_SPI_WATCH - &gc9a01_spi, -#endif -#if USE_LCD_PANEL_ST9A01_4_1_SPI_POC - &st9a01_spi, -#endif -#if USE_LCD_PANEL_GC9C01_3_2_SPI_POC - &gc9c01_3_2_spi, -#endif -#if USE_LCD_PANEL_GC9307_4_1_SPI_POC - &gc9307_spi, -#endif -#if USE_LCD_PANEL_ST7789V2_SPI_WATCH - &st7789v2_spi, -#endif -}; - -#if USE_LCD_PANEL_ST7789V_SPI_WATCH -static uint32_t lcd_watch_mfp_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_21) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - MFP_EOC -}; - -static struct lcd_info_t lcd_info = { - .mfp = (uint32_t *)lcd_watch_mfp_cfgs, - .clk = 312000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_ST7789V_SPI_PHONE -static uint32_t lcd_mfp_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_21) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - MFP_REG(GPIO_27) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_69_TDS_DIO2) | MFP_AF0 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, - MFP_EOC -}; - -static struct lcd_info_t lcd_info = { - .mfp = (uint32_t *)lcd_mfp_cfgs, - .clk = 312000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_ST7789V_MCU -static uint32_t lcd_mfp_cfgs[] = { - MFP_REG(GPIO_22) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*CS0*/ - MFP_REG(GPIO_26) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*RST*/ - MFP_REG(GPIO_20) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB0*/ - MFP_REG(GPIO_31) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB1*/ - MFP_REG(GPIO_32) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB2*/ - MFP_REG(GPIO_121) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB3*/ - MFP_REG(GPIO_124) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB4*/ - MFP_REG(GPIO_21) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB5*/ - MFP_REG(GPIO_27) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB6*/ - MFP_REG(GPIO_28) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB7*/ - MFP_REG(GPIO_23) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*RDB*/ - MFP_REG(GPIO_24) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*WRB*/ -#if USE_LCD_MCU_DCX_GPIO - MFP_REG(GPIO_81) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DCX*/ -#else - MFP_REG(GPIO_SLAVE_RESET_OUT_N) | MFP_AF5 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DCX*/ -#endif -#if LCD_TE_ENABLE - MFP_REG(GPIO_25) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*TE*/ -#endif - MFP_EOC -}; - -struct lcd_info_t lcd_info = { - .mfp = (uint32_t *)lcd_mfp_cfgs, - .clk = 52000, /* 52000 */ -}; -#endif - - -#if USE_LCD_PANEL_ST7735S_SPI_POC -static uint32_t lcd_poc_mfp_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_27) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - MFP_EOC -}; - -static struct lcd_info_t lcd_info = { - .mfp = (uint32_t *)lcd_poc_mfp_cfgs, - .clk = 104000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_ST7567_SPI_4WIRE_1LANE_1IF -static uint32_t lcd_poc_mfp_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_21) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - //MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - MFP_EOC -}; - -static struct lcd_info_t lcd_info = { - .mfp = (uint32_t *)lcd_poc_mfp_cfgs, - .clk = 104000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_GC9C01_3_2_SPI_POC -static uint32_t lcd_watch_mfp_spi_3_2_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_21) | MFP_AF3 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - //MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - //MFP_REG(GPIO_27) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN1 */ - MFP_EOC -}; - -static struct lcd_info_t gc9c01_lcd_spi_3_2_info = -{ - .mfp = (uint32_t *)lcd_watch_mfp_spi_3_2_cfgs, - .clk = 312000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_ST9A01_4_1_SPI_POC || USE_LCD_PANEL_GC9307_4_1_SPI_POC || USE_LCD_PANEL_ST7789V2_SPI_WATCH - -static uint32_t lcd_poc_mfp_spi_4_1_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_21) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - MFP_EOC -}; -#endif -#if DRV_PROJECT_Z5_K7 || DRV_PROJECT_Z5_K7_EN || USE_LCD_PANEL_GC9A01_SPI_WATCH|| DRV_PROJECT_Z5_I7 || DRV_PROJECT_Z5_HA_K7 || DRV_PROJECT_Z5_Z11 || DRV_PROJECT_Z5_Z11_2 \ - || DRV_PROJECT_Z5_LT_K7 -static uint32_t lcd_poc_mfp_spi_3_2_cfgs[] = { - MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ - MFP_REG(GPIO_21) | MFP_AF3 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ - MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ - //MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ - MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ - MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ - MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ - //MFP_REG(GPIO_27) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN1 */ - MFP_EOC -}; -#endif -#if USE_LCD_PANEL_GC9A01_SPI_WATCH -static struct lcd_info_t gc9a01_lcd_spi_3_2_info = -{ - .mfp = (uint32_t *)lcd_poc_mfp_spi_3_2_cfgs, - .clk = 312000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_ST9A01_4_1_SPI_POC -static struct lcd_info_t st9a01_lcd_spi_4_1_info = -{ - .mfp = (uint32_t *)lcd_poc_mfp_spi_4_1_cfgs, - .clk = 104000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_GC9307_4_1_SPI_POC -static struct lcd_info_t gc9307_lcd_spi_4_1_info = -{ - .mfp = (uint32_t *)lcd_poc_mfp_spi_4_1_cfgs, - .clk = 312000, /* 104000 */ -}; -#endif - -#if USE_LCD_PANEL_ST7789V2_SPI_WATCH -#if DRV_PROJECT_Z5_K6 -static struct lcd_info_t st7789v2_lcd_spi_4_1_info = -{ - .mfp = (uint32_t *)lcd_poc_mfp_spi_4_1_cfgs, - .clk = 312000, /* 104000 */ -}; -#elif DRV_PROJECT_Z5_K7 || DRV_PROJECT_Z5_K7_EN || DRV_PROJECT_Z5_I7 || DRV_PROJECT_Z5_HA_K7 || DRV_PROJECT_Z5_Z11 || DRV_PROJECT_Z5_Z11_2 \ - || DRV_PROJECT_Z5_LT_K7 -static struct lcd_info_t st7789v2_lcd_spi_3_2_info = -{ - .mfp = (uint32_t *)lcd_poc_mfp_spi_3_2_cfgs, - .clk = 312000, /* 104000 */ -}; -#endif -#endif - -#if USE_CRANE_LCD_MIPI -unsigned int lcd_mipi_mfp_cfgs[] = { - MFP_REG(GPIO_26) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*RST*/ - MFP_REG(GPIO_19) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_23) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, -#if LCD_TE_ENABLE - MFP_REG(GPIO_25) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*TE*/ -#endif -#if LCD_BACKLIGHT_ENABLE - MFP_REG(GPIO_31) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*pwm for backlight*/ - //MFP_REG(GPIO_31) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*config to gpio before pwm ready*/ -#endif - MFP_EOC -}; - - -static struct lcd_info_t lcd_info = { - .mfp = (uint32_t *)lcd_mipi_mfp_cfgs, -#if USE_CRANE_LCD_MIPI_CMD - .clk = 26000, -#else - .clk = 17300, -#endif -}; -#endif - -static struct lcd_info_t *lcd_info_detect[]= { -#if USE_CRANE_LCD_MIPI_CMD - &lcd_info, -#else - #if USE_LCD_PANEL_GC9A01_SPI_WATCH - &gc9a01_lcd_spi_3_2_info, - #endif - #if USE_LCD_PANEL_ST9A01_4_1_SPI_POC - &st9a01_lcd_spi_4_1_info, - #endif - #if USE_LCD_PANEL_GC9C01_3_2_SPI_POC - &gc9c01_lcd_spi_3_2_info, - #endif - #if USE_LCD_PANEL_GC9307_4_1_SPI_POC - &gc9307_lcd_spi_4_1_info, - #endif - #if USE_LCD_PANEL_ST7789V2_SPI_WATCH - #if DRV_PROJECT_Z5_K6 - &st7789v2_lcd_spi_4_1_info, - #elif DRV_PROJECT_Z5_K7 || DRV_PROJECT_Z5_K7_EN || DRV_PROJECT_Z5_Z12 || DRV_PROJECT_Z5_I7 || DRV_PROJECT_Z5_HA_K7 || DRV_PROJECT_Z5_DS_Z12XW_QCB || DRV_PROJECT_Z5_Z11 || DRV_PROJECT_Z5_Z11_2 \ - || DRV_PROJECT_Z5_LT_K7 - &st7789v2_lcd_spi_3_2_info, - #endif - #endif -#endif -}; - -static struct crane_panel_t *lcd = NULL; -static struct lcd_info_t * lcd_interface_info = NULL; - -#if USE_LCD_PANEL_ICNA3310_MIPI -unsigned int oled_power_mfp_cfgs[] = { - MFP_REG(GPIO_76) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*power*/ - MFP_EOC -}; - -static void oled_power_set(unsigned char on) -{ - uint32_t *mfp; - - mfp = (uint32_t *)&oled_power_mfp_cfgs; - - mfp_config((uint32_t *)mfp); - gpio_set_direction(GPIO76, GPIO_OUT); - gpio_output_set(GPIO76, on); - printf("oled_power_set=%d\n",on); -} -#endif -static void lcdc_pwr_onoff(int on) -{ - int pm_type = pmic_get_type(); - - if (pm_type == PM_812) { // PM812 - if (on) { - /* enable ldo8 and set t0 2.8V */ - PM812_Ldo_8_set_2_8(); - PM812_Ldo_8_set(1); - } - else { - /* disable ldo8 */ - PM812_Ldo_8_set(0); - } - } - else if (pm_type == PM_813) { // PM813 - if (on) { - Ningbo_Ldo_1_set_2_8(); - Ningbo_Ldo_1_set(1); -#if USE_LCD_PANEL_ICNA3310_MIPI - oled_power_set(1); -#endif - } - else { - Ningbo_Ldo_1_set(0); -#if USE_LCD_PANEL_ICNA3310_MIPI - oled_power_set(0); -#endif - } - } - else if (pm_type == PM_802) { // PM802 - /* ldo is enabled by default */ - } - else if (pm_type == PM_803) { // PM803 - GuilinLite_Ldo_6_set_2_8(); - GuilinLite_Ldo_6_set(TRUE); - } - else { - printf("unknown PMIC, lcd_pwr_onoff failed.\n"); - } -} - -static struct crane_panel_t *lcd_init(void) -{ -#if 0 - int cnt, i; - struct crane_panel_t *p; - - - lcdc_pwr_onoff(1); - if (lcdc_init(&lcd_info) < 0) { - goto error; - } - - cnt = ARRAY_SIZE(panels); - - for (i = 0; i < cnt; i++) { - p = panels[i]; - if (p->probe(lcd_info.clk) == 0) { - return p; - } - } - -error: - return NULL; -#else - int cnt, i; - struct crane_panel_t *p; - - lcdc_pwr_onoff(1); - - cnt = ARRAY_SIZE(lcd_info_detect); - lv_udelay(1*1000*1000); - - for (i = 0; i < cnt; i++) - { - if (lcdc_init(lcd_info_detect[i]) < 0) - { - continue; - } - lcd_interface_info = lcd_info_detect[i]; - p = panels[i]; - //if restart by error,should call lcdc_reset_panel - if(startup_silent_reset()) - lcdc_reset_panel(); - if (p->probe((lcd_info_detect[i])->clk) == 0) - { - return p; - } - } - -#if 0 - //if detect fail, return first - lcd_interface_info = lcd_info_detect[0]; - return panels[0]; -#else - lcd_interface_info = NULL; - return NULL; -#endif -#endif -} - -void lcdc_resume(void) -{ -#if 0 - lcdc_init(&lcd_info); - if(lcd) lcd->probe(lcd_info.clk); -#else - if(lcd_interface_info) lcdc_init(lcd_interface_info); - if(lcd) lcd->probe(lcd_interface_info->clk); -#endif -} - -void lcd_idle_refresh(void) -{ - if(lcd && lcd->idle_flush) { - lcd->idle_flush(); - } -} -#if CONFIG_BOARD_SIMWARE_W61_V2 -extern void gpio_set_value(unsigned int gpio,unsigned int value); -#if CONFIG_BOARD_SIMWARE_W61_V2 -#define HAL_TP_LDO_EN GPIO_00 -#define HAL_TP_LDO_EN_GPIO GPIO0 -#endif -static const uint32_t touch_ldo_en_mfp_cfgs[]= -{ - MFP_REG(HAL_TP_LDO_EN) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, //TP LDO EN - MFP_EOC -}; -static void tp_power_onoff(bool on) -{ - //LDO EN PIN - gpio_set_direction(HAL_TP_LDO_EN_GPIO, GPIO_OUT); - if(on){ - gpio_set_value(HAL_TP_LDO_EN_GPIO, 1); - }else{ - gpio_set_value(HAL_TP_LDO_EN_GPIO, 0); - } -} -#endif - -#if USE_FT6X36 -static const uint32_t touch_mfp_cfgs[] = { - MFP_REG(GPIO_13) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_14) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; - -static const uint32_t touch_mfp_cfgs_3601s[] = { - MFP_REG(GPIO_121) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_124) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; - -static const struct ft6x36_info tp_info = { - .irq_pin = GPIO13, - .rst_pin = GPIO14, - .i2c_addr = 0x38, /* 7-bit i2c addr */ -}; - -static const struct ft6x36_info tp_info_3601s = { - .irq_pin = GPIO121, - .rst_pin = GPIO124, - .i2c_addr = 0x38, /* 7-bit i2c addr */ -}; - -static void tp_init_ft6x36(void) -{ - lv_indev_drv_t indev_tp_drv; - const struct ft6x36_info *tp; - uint32_t *mfp; - - if (isChip_3601S() || is_chip_3603()) { - mfp = (uint32_t *)&touch_mfp_cfgs_3601s; - tp = &tp_info_3601s; - } else { - mfp = (uint32_t *)&touch_mfp_cfgs; - tp = &tp_info; - } - - mfp_config((uint32_t *)mfp); - /* power is enabled in lcd_init */ - ft6x36_init(tp); - lv_indev_drv_init(&indev_tp_drv); - indev_tp_drv.type = LV_INDEV_TYPE_POINTER; - indev_tp_drv.read_cb = ft6x36_read; - lv_indev_drv_register(&indev_tp_drv); -} -#endif - -#if USE_BL6133 -static const uint32_t touch_bl6133_mfp_cfgs[] = { - MFP_REG(GPIO_82) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_83) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; - -static const struct bl6133_info tp_bl6133_info = { - .irq_pin = GPIO83, - .rst_pin = GPIO82, - .i2c_addr = 0x2d, /* 7-bit i2c addr */ -}; - -static int tp_init_bl6133(void) -{ - int ret = 0; - lv_indev_drv_t indev_tp_drv; - const struct bl6133_info *tp; - uint32_t *mfp; -//#if USE_W61_TP - int pm_type = pmic_get_type(); - if(pm_type == PM_813) - { - Ningbo_Ldo_9_set_3_3(); - Ningbo_Ldo_9_set(1); - } -//#endif - mfp = (uint32_t *)&touch_bl6133_mfp_cfgs; - tp = &tp_bl6133_info; - - mfp_config((uint32_t *)mfp); -#if BL6133_TP_FW_UPDATE - bl6133_firmware_update(); -#endif - - /* power is enabled in lcd_init */ - ret = bl6133_init(tp); - if(ret != 0){ - cplog_printf("bl6133 probe fail\n"); - return ret; - } - lv_indev_drv_init(&indev_tp_drv); - indev_tp_drv.type = LV_INDEV_TYPE_POINTER; - indev_tp_drv.read_cb = bl6133_read; - lv_indev_drv_register(&indev_tp_drv); - cplog_printf("tp_init_bl6133 ret=%d\n",ret); - return ret; -} -#endif - -#if USE_STC820 -static const uint32_t touch_stc820_mfp_cfgs[] = { - MFP_REG(GPIO_82) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_83) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; - -static const struct stc820_info tp_stc820_info = { - .irq_pin = GPIO83, - .rst_pin = GPIO82, - .i2c_addr = 0x15, /* 7-bit i2c addr */ -}; - -static int tp_init_stc820(void) -{ - int ret = 0; - lv_indev_drv_t indev_tp_drv; - const struct stc820_info *tp; - uint32_t *mfp; -//#if USE_W61_TP - int pm_type = pmic_get_type(); - if(pm_type == PM_813) - { - Ningbo_Ldo_9_set_3_3(); - Ningbo_Ldo_9_set(1); - } -//#endif - mfp = (uint32_t *)&touch_stc820_mfp_cfgs; - tp = &tp_stc820_info; - - mfp_config((uint32_t *)mfp); - - - set_info(tp); -#if STC820_TP_FW_UPDATE - ctp_hynitron_update(); -#endif -/* power is enabled in lcd_init */ - ret = stc820_init(tp); - if(ret != 0){ - cplog_printf("stc820 probe fail\n"); - return ret; - } - lv_indev_drv_init(&indev_tp_drv); - indev_tp_drv.type = LV_INDEV_TYPE_POINTER; - indev_tp_drv.read_cb = stc820_read; - lv_indev_drv_register(&indev_tp_drv); - cplog_printf("tp_init_stc820 ret=%d\n",ret); - return ret; -} -#endif - -#if USE_ZINITIX_TOUCH -static void tp_init_zinitix(void) -{ - lv_indev_drv_t indev_tp_drv; - - /* power is enabled in lcd_init */ - zinitix_init(); - lv_indev_drv_init(&indev_tp_drv); - indev_tp_drv.type = LV_INDEV_TYPE_POINTER; - indev_tp_drv.read_cb = zinitix_read; - lv_indev_drv_register(&indev_tp_drv); -} -#endif - -#if USE_CRANE_EVB_KEYPAD -static const uint32_t keypad_mfp_cfgs[] = { - MFP_REG(GPIO_00) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_01) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_02) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_03) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_04) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_05) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_06) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_07) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_08) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_REG(GPIO_09) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; - -lv_indev_t *keypad_dev; - -static uint32_t keypad_evb_cb(struct keypad_param *arg) -{ -#if 0 - if(arg->data.key == LV_KEY_END) { - if(arg->key_event == KEY_EVENT_CLICK) { - Hal_Lcd_Sleep(); - uint32_t wake_up_flag = Hal_Pm_Suspend(); - - printf("pm wake up, wake_up_flag 0x%08x ################\n", wake_up_flag); - if(wake_up_flag & PM_RESUME_ALL) { - Hal_Pm_Resume(); - Hal_Lcd_Wakeup(); - } - } - return KEY_HANDLE_OVER; - } -#endif - return KEY_HANDLE_CONT; -} - -static void keypad_init_evb(void) -{ - lv_indev_drv_t indev_kp_drv; - - mfp_config((uint32_t *)keypad_mfp_cfgs); - keypad_crane_evb_init(keypad_evb_cb); - - lv_indev_drv_init(&indev_kp_drv); - indev_kp_drv.type = LV_INDEV_TYPE_KEYPAD; - indev_kp_drv.read_cb = keypad_crane_evb_read; - keypad_dev = lv_indev_drv_register(&indev_kp_drv); -} -#endif - - -int pm_state_flag = -1; -static uint8_t pm_state = PM_ON; -#define OSA_SUSPEND 0xFFFFFFFF -static int sdk_c1_enter() -{ - if(pm_state == PM_ON) - return 1; - if(Hal_low_power_sleep_is_vetoed()) - return 1; - - return 0; -} - -static int sdk_c1_exit() -{ - return 0; -} - -static int sdk_d2_enter() -{ -#if USE_CRANE_KEYPADC - keypad_clear_wakup_interrupt(); -#endif - if(pm_state == PM_ON) { - return 1; - } - -#if USE_BT_SENSOR_HUB != 0 - SensorHub_int_gpio_d2_ent_callback(); -#endif - -#if USE_MY_XMOTION - xmotion_int_gpio_d2_ent_callback(); -#endif -#if USE_FR8012HAQ - - fr8012haq_int_gpio_d2_ent_callback(); -#endif -#if USE_MULTI_KEY - multi_key_d2_enter(); -#endif - - return 0; -} - -static int sdk_d2_exit(BOOL ExitFromD2) -{ -#if USE_BT_SENSOR_HUB != 0 - SensorHub_int_gpio_d2_exit_callback(); -#endif - -#if USE_MY_XMOTION - xmotion_int_gpio_d2_exit_callback(); -#endif -#if USE_FR8012HAQ - fr8012haq_int_gpio_d2_exit_callback(); -#endif -#if USE_MULTI_KEY - multi_key_d2_exit(); -#endif - - return 0; -} - -static int sdk_uiSuspend(void) -{ - if(pm_state == PM_ON) - return 1; - if(Hal_low_power_sleep_is_vetoed()) - return 1; - - return 0; -} - -void sys_pm_init(void) -{ - uart_printf("sys_pm_init~~\n"); - mmiD2CallbackRegister((UINT32)sdk_d2_enter, (UINT32)sdk_d2_exit); - mmiC1CallbackRegister((UINT32)sdk_c1_enter, (UINT32)sdk_c1_exit); - mmiStatusCallbackRegister((UINT32)sdk_uiSuspend); -} - -extern void pm_unlock(void); - -uint32_t sys_pm_set_state(int state) -{ - if(state == PM_ON) { - if(pm_state != state) { - board_sys_tick_start(); - pm_state = state; - } - - return 0; - } else { - if(pm_state != state) { - board_sys_tick_stop(); - mdelay(20); - pm_state = state; - } - - if(pm_state_flag == -1) { - pm_state_flag = uos_create_flag(); - } - - uint32_t flag = 0; - #if USE_ONKEY_HISR - extern int onkey_queue_empty(void); - if (!onkey_queue_empty()) { - flag = PM_RESUME_ONKEY; - uart_printf("gui resume: onkey queue NOT empty, onkey, flag: 0x%x ~~~ \n", flag); - pm_unlock(); - } else - #endif - { - uart_printf("gui suspend: %d ~~~ \n", pm_state_flag); - pm_unlock(); - if(uos_wait_flag(pm_state_flag, PM_RESUME_ALL, UOS_FLAG_OR_CLEAR, &flag, OSA_SUSPEND) == 0) { - uart_printf("gui resume: flag: 0x%x ~~~ \n", flag); - } - } - - if(pm_state_flag != -1) { - int tmp = pm_state_flag; - pm_state_flag = -1; - uos_delete_flag(tmp); - } - return flag; - } -} - -void sys_pm_wakeup(void) -{ - if(pm_state_flag!=-1) - uos_set_flag(pm_state_flag, PM_RESUME_UI, UOS_FLAG_OR); -} - -#if 1//simware add -void sys_pm_wakeup_no_lcd(void) -{ - if(pm_state_flag!=-1) - uos_set_flag(pm_state_flag, PM_RESUME_NO_LCD, UOS_FLAG_OR); -} -#endif - -#if USE_CRANE_EVB_KEYPAD -#include "lv_drivers/indev/crane_keypadc.h" - -void normal_key_wakeup(uint32_t key) -{ - if(pm_state_flag != -1) { - if(key == KP_PWR) { - uos_set_flag(pm_state_flag, PM_RESUME_ENDKEY, UOS_FLAG_OR); - } else { - uos_set_flag(pm_state_flag, PM_RESUME_NORMALKEY, UOS_FLAG_OR); - } - } -} - -void onkey_wakeup() -{ - if(pm_state_flag != -1) { - uos_set_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR); - } -} -#endif - -#if USE_CRANE_WATCH_KEYPAD -#include "lv_watch/lv_watch.h" -#include "lv_drivers/indev/crane_watch_keypad.h" -uint8_t restarted_flag = false; - -void onkey_wakeup(void) -{ - if(pm_state_flag != -1) { - uos_set_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR); - } -} - -static int prmode_enter_suspend = 0; - -static uint32_t prmode_suspend(void) -{ - uint32_t flag = 0; - - printf("prmode suspend pm_state = %d~~~ \n", pm_state); - board_sys_tick_stop(); - mdelay(20); - pm_state = PM_SUSPEND; - - if(pm_state_flag == -1) { - pm_state_flag = uos_create_flag(); - } - - if(uos_wait_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR_CLEAR, &flag, OSA_SUSPEND) == 0) { - uart_printf("prmode resume: flag: 0x%x, pm_state = %d~~~ \n", flag, pm_state); - if(pm_state_flag != -1) { - int tmp = pm_state_flag; - pm_state_flag = -1; - uos_delete_flag(tmp); - } - board_sys_tick_start(); - return flag; - } else { - printf("prmode_suspend: uos wait flag failed\n"); - board_sys_tick_start(); - } - - return 0; -} - -static void prmode_onkey_callback(void) -{ - int state = 0; - read_onkey(&state); - - if((state == ONKEY_PRESSED)) { - printf("onkey callback prmode: %d, pm_state = %d, pm_state_flag = %d\n", - state, pm_state, pm_state_flag); - if ((pm_state == PM_SUSPEND) && (pm_state_flag != -1)) { - printf("prmode resume\n"); - uos_set_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR); - pm_state = PM_ON; - } else if (pm_state == PM_ON){ - printf("prmode suspend\n"); - prmode_enter_suspend = 1; - } - } - -} - -static void prmode_task(lv_task_t *task) -{ - printf("lvgl prmode task\n"); - if (prmode_enter_suspend) { - prmode_enter_suspend = 0; - prmode_suspend(); - } -} - -static void prmode_pm_init(void) -{ - PM812_ONKEY_BIND_INTC(prmode_onkey_callback); - PM812_ONKEY_INTC_ENABLE(true); - lv_task_create(prmode_task, 1000, LV_TASK_PRIO_MID, NULL); -} - -int is_in_poweroff_chg_mode(void) -{ - int ret = 0; - HAL_POWERUP_REASON reason = Hal_Powerup_Get_Reason(); - - if ((HAL_POWERUP_BAT == reason)||(HAL_POWERUP_USB == reason)) { - if (restarted_flag == false) { - ret = 1; - } - } - - return ret; -} - -static void keypad_watch_cb(struct keypad_param *arg) -{ - static bool set_lcd_only = false; - - if(!watch_is_ready()) return; // in start procedure - - //printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, arg->data.key); - - if(arg->data.key == LV_KEY_END) - { - #ifdef MMI_PROJECT_Z5_HA_K18_NFC - if(true == mmi_k18_nfc_experience_screen_active()) - { - return; - } - #endif - - lv_obj_t * facau_obj = lv_watch_get_activity_obj(ACT_ID_FACTORY_MODE_AUTOTEST); - lv_obj_t * emht_obj = lv_watch_get_activity_obj(ACT_ID_ENGINEER_MODE_ITEM_HWT); - if(NULL != facau_obj) { - autotest_key_event(arg); - } else if(NULL != emht_obj) { - #if USE_LV_WATCH_ENGINEER_MODE!= 0 - hardware_testing_key_event(arg); - #endif - } else { - if(arg->key_event == KEY_EVENT_CLICK) { - printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - if(set_lcd_only) { - set_lcd_only = false; - } else { - if(lv_watch_is_activity_one_level()) { - watch_suspend_by_key(); - } else { - lv_watch_go_home(); - } - } - } else if(arg->key_event == KEY_EVENT_LONG_PRESS) { - set_lcd_only = false; - // sos - if(1 != is_in_poweroff_chg_mode()) { - printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - //sos_btn_action(NULL); - #ifdef __MMI_KEY_POWER_LONG_PRESS_SCREEN_SUPPORT__ - mmi_key_power_long_press_action(); - #endif - } - } else if(arg->key_event == KEY_EVENT_POWER_ON) { - set_lcd_only = false; - if(restarted_flag) return; - HAL_POWERUP_REASON reason = Hal_Powerup_Get_Reason(); - if(((HAL_POWERUP_BAT == reason)||(HAL_POWERUP_USB == reason))&&(0 != Hal_Battery_Get_Status())) { - // from power off charging to power up - restarted_flag = true; - printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - watch_restart_req(); - } - } else if(arg->key_event == KEY_EVENT_PRESS) { - printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - if(!watch_get_lcd_status()) { - watch_set_lcd_status(true); - set_lcd_only = true; - } - } - } - } - else if(arg->data.key == LV_KEY_ESC) - { - printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); - if(arg->key_event == KEY_EVENT_CLICK) { - lv_watch_go_back(); - } - } -} - -lv_indev_t *keypad_dev; - -static void keypad_init_watch(void) -{ - lv_indev_drv_t indev_kp_drv; - printf("keypad_init_watch\n"); - keypad_watch_init(keypad_watch_cb); - - lv_indev_drv_init(&indev_kp_drv); - indev_kp_drv.type = LV_INDEV_TYPE_KEYPAD; - indev_kp_drv.read_cb = keypad_watch_read; - keypad_dev = lv_indev_drv_register(&indev_kp_drv); -} -#endif - -#if USE_LV_PHONE != 0 -extern void phone_poweron_logo(void); -extern void Ui_Phone_main(void); -#endif - -static void show_poweron_logo(void) -{ - #if USE_LV_WATCH - watch_poweron_logo(); - #endif - - #if USE_LV_PHONE != 0 - phone_poweron_logo(); - #endif - - lv_udelay(60 * 1000); /* wait for the logo display complete */ - lcd_backlight(2); - lcd_backlight_valid(); -} - -static void gui_disp_wait(struct _disp_drv_t * disp_drv) -{ - (void)disp_drv; - uos_sleep(1); -} - -#if USE_LV_WATCH_REFR_MONITOR_CB -/** OPTIONAL: Called after every refresh cycle to tell the rendering and flushing time + the - * number of flushed pixels */ -static void refr_monitor_cb(struct _disp_drv_t * disp_drv, uint32_t time, uint32_t px) -{ - (void)disp_drv; - printf("t: %u, pixel: %u\n", (unsigned)time, (unsigned)px); -} -#endif - - - -static int gui_init(void) -{ - lcd = lcd_init(); - if (!lcd) { - printf("lcd init failed\n"); - //return -1; - } - /*Create a display buffer*/ - static lv_disp_buf_t disp_buf; - static lv_color_t buf1[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*A screen sized buffer*/ - static lv_color_t buf2[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*An other screen sized buffer*/ - //char *buf1 = lv_mem_aligned_alloc(LV_HOR_RES_MAX * LV_VER_RES_MAX * 2, 32); - //char *buf2 = lv_mem_aligned_alloc(LV_HOR_RES_MAX * LV_VER_RES_MAX * 2, 32); - lv_disp_buf_init(&disp_buf, buf1, buf2, LV_HOR_RES_MAX * LV_VER_RES_MAX); /*Initialize the display buffer*/ - - /*Create a display*/ - lv_disp_drv_t disp_drv; - lv_disp_drv_init(&disp_drv); /*Basic initialization*/ - disp_drv.buffer = &disp_buf; - disp_drv.hor_res = LV_HOR_RES_MAX; - disp_drv.ver_res = LV_VER_RES_MAX; - if(lcd) disp_drv.flush_cb = lcd->flush; - disp_drv.wait_cb = gui_disp_wait; -#if USE_LV_WATCH_REFR_MONITOR_CB - disp_drv.monitor_cb = refr_monitor_cb; -#endif - lcdc_set_disp(lv_disp_drv_register(&disp_drv)); - return 0; -} - -static void board_touch_init(void) -{ - static int tp_probe_state = -1; -#if CONFIG_BOARD_SIMWARE_W61_V2 - mfp_config((uint32_t *)touch_ldo_en_mfp_cfgs); - tp_power_onoff(1); -#elif CONFIG_BOARD_SIMWARE_W71 || CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 - int pm_type = pmic_get_type(); - - if (pm_type == PM_803) { - cplog_printf("board_touch_init 872\n"); - GuilinLite_Ldo_8_set_3_0(); - GuilinLite_Ldo_8_set(true); - } -#endif -#if USE_FT6X36 - tp_init_ft6x36(); -#endif -#if USE_BL6133 - if(tp_probe_state != 0) - tp_probe_state = tp_init_bl6133(); -#endif -#if USE_STC820 - if(tp_probe_state != 0) - tp_probe_state = tp_init_stc820(); -#endif -#if USE_ZINITIX_TOUCH - tp_init_zinitix(); -#endif - cplog_printf("tp_probe_state=%d\n",tp_probe_state); -} - -static int board_init(void) -{ - pmic_init(); - //setuartlogon(); - - board_touch_init(); - - if (isSysRestartByRdProduction() == 0) { -#if USE_CRANE_EVB_KEYPAD - keypad_init_evb(); -#endif -#if USE_CRANE_WATCH_KEYPAD - keypad_init_watch(); -#endif - } - - return 0; -} - -void invalidate_dcache_range(unsigned long start, unsigned long stop) -{ - arch_invalidate_cache_range(start, (stop-start)); -} - -char * gcvt(double value, int32_t ndigit, char * buf) -{ - unsigned idx = 0; - unsigned digi_cnt = 0; - if(value < 0){ - buf[0] = '-'; - value = -value; - idx ++; - } - - long int_part = (long)value; - double float_part = value - int_part; - snprintf(buf+idx, ndigit+1, "%ld", int_part); - digi_cnt = strlen(buf) - idx; - - if((digi_cnt >= ndigit) || (float_part < 0.0000000001)) - return buf; - - idx = strlen(buf); - buf[idx++] = '.'; - - while(digi_cnt < ndigit) { - int_part = (int)(float_part * 10); - float_part = float_part * 10 - int_part; - buf[idx++] = '0' + int_part; - digi_cnt ++; - if(float_part < 0.0000000001) { - break; - } - } - - buf[idx] = '\0'; - return buf; -} - -static lv_task_t * backlight_on_task; -static void backlight_task(lv_task_t * task) -{ - if(!lv_refr_vdb_is_flushing()) { - lcd_backlight_valid_for_silent_reset(); - lv_task_del(backlight_on_task); -#if USE_LV_WATCH_DEMO != 0 - watch_set_ready_state(true); -#endif - } -} - -//#if (USE_LV_WATCH_ALIPAY != 0) || (USE_LV_WATCH_SW_ALIPAY != 0) -//extern bool do_upay_init(void); -//static lv_task_t * upay_init_task = NULL; -//static void upayinit_task(lv_task_t * param) -//{ -// if(do_upay_init()) { -// lv_task_del(upay_init_task); -// upay_init_task = NULL; -// } -//} -//#endif - -static void mmi_init(void) -{ - FS_PowerOn(); -} - -#if CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 -const uint32_t bt_ldo_en_cfgs[] = { - MFP_REG(GPIO_34) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, //bt chip en - MFP_EOC /*End of configuration, must have */ -}; - -const uint32_t hrm_ldo_en_cfgs[] = { - MFP_REG(GPIO_81) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* hrm vio en */ - MFP_REG(GPIO_84) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* hrm rst */ - MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* hrm int */ -#if CONFIG_BOARD_SIMWARE_H81 - MFP_REG(GPIO_18) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* HRM_DCDC_EN */ -#endif - MFP_EOC /*End of configuration, must have */ -}; -#endif - -#if USE_BT_SENSOR_HUB != 0 -static void SensorHub_init_timer_callback(void* param) -{ - SensorHub_device_check_cmd(); - SensorHub_boot_bin_check_cmd(); -} -#endif - -#ifdef MMI_PROJECT_Z5_HA_K18 -static int MATResponseCallback_0(TelAtParserID chnlId, const char* response, int size) -{ - cplog_printf("[@CHENG_DEBUG][%s][%d]: chnlId=%d,size=%d\n", __FUNCTION__, __LINE__, chnlId, size); - cplog_printf("[@CHENG_DEBUG][%d]: response=%s\n", __LINE__, response); - -#if 0 - MATRspParseRet ret; - MATReturnPara resp_return; - - ret = MATHandleResponse(chnlId, response, size, &resp_return); - cplog_printf("[@CHENG_DEBUG][%s][%d]: ret=%d\n", __FUNCTION__, __LINE__, ret); - if (ret == MAT_RSP_PARSER_WAIT_FOR_TERMINAL) - { - return 0; - } - else if(ret == MAT_RSP_PARSER_OK) - { - //fatal_printf("SIMCardTest AT Response: resultCode = %d; cmd_type = %d; numItems = %d\n", - // resp_return.resultCode, resp_return.cmd_type, resp_return.numItems); - } - - MATConfIndFree(&resp_return); -#endif - - return 0; -} - -static int MATResponseCallback_1(TelAtParserID chnlId, const char* response, int size) -{ - cplog_printf("[@CHENG_DEBUG][%s][%d]: chnlId=%d,size=%d\n", __FUNCTION__, __LINE__, chnlId, size); - cplog_printf("[@CHENG_DEBUG][%d]: response=%s\n", __LINE__, response); - - return 0; -} - -static void mmi_at_grip_action(void) -{ - char const * command_str0 = "AT*GRIP=2,5,2,3\r\n"; - //if (IsAtCmdSrvReady()) - cplog_printf("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, command_str0); - //MATSetConfIndCB(TEL_AT_CMD_ATP_6, MATResponseCallback_0); - ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str0, strlen(command_str0)); - - - char const * command_str1 = "AT*GRIP=2,5,2,5\r\n"; - cplog_printf("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, command_str1); - //MATSetConfIndCB(TEL_AT_CMD_ATP_6, MATResponseCallback_1); - ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str1, strlen(command_str1)); -} -#endif - -extern void dm_init(); -static void gui_main(void *param) -{ - int silent_reset = startup_silent_reset(); - board_init(); - mmi_init(); /* some API from mmi, such as from mci_audio.cpp, depends on it */ - board_sys_tick_init(5, lv_tick_inc); /* update tick every 5 ms */ - Hal_Init(); - -#if CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 - mfp_config((uint32_t *)bt_ldo_en_cfgs); - mfp_config((uint32_t *)hrm_ldo_en_cfgs); - //bt ldo en - gpio_set_direction(GPIO34, GPIO_OUT); - gpio_set_value(GPIO34, 1); - //hmr ldo en - gpio_set_direction(GPIO81, GPIO_OUT); - gpio_set_value(GPIO81, 1); - gpio_set_direction(GPIO84, GPIO_IN); - gpio_set_direction(GPIO32, GPIO_IN); -#if CONFIG_BOARD_SIMWARE_H81 - gpio_set_direction(GPIO18, GPIO_OUT); - gpio_set_value(GPIO18, 1); -#else - //2.4G UM3204 power - GuilinLite_Ldo_7_set_1_8(); - GuilinLite_Ldo_7_set(TRUE); -#endif -#endif - - if (isSysRestartByRdProduction() == 0) { - if(0 == silent_reset) { - show_poweron_logo(); //show logo if not silent reset - } -#if USE_LV_WATCH_DEMO != 0 - watch_power_on_req(); -#else - Ui_Phone_main(); -#endif - if(silent_reset) { - backlight_on_task = lv_task_create(backlight_task, 30, LV_TASK_PRIO_MID, NULL); - } - } else { - Ril_Init_Crane(0); - #if USE_CRANE_WATCH_KEYPAD - prmode_pm_init(); - #endif - } -//#if (USE_LV_WATCH_ALIPAY != 0) || (USE_LV_WATCH_SW_ALIPAY != 0) -// if(NULL == upay_init_task) { -// upay_init_task = lv_task_create(upayinit_task, 150, LV_TASK_PRIO_MID, NULL); -// } -//#endif - - app_sensor_task_init(); - - i2c_initialize(I2C_MASTER_CI2C1); - -#if USE_BT_SENSOR_HUB != 0 - hal_SensorHub_adaptor_init(); - SensorHub_reboot_cmd(); - Hal_Timer_Start(2000, SensorHub_init_timer_callback, NULL, FALSE); -#endif - -#if USE_GPS - hal_gps_adaptor_init(); -#endif - -#if USE_SI24RX - si24rx_init(); - //si24rx_test(); -#endif - -#if USE_CT1711 - Ct1711_my_init(); -#endif - -#if USE_MULTI_KEY - multi_key_mfp_init(); - -#endif - -#if USE_SOS_KEY - sos_key_mfp_init(); -#endif - -#if USE_MY_XMOTION - xMotion_my_init(); -#endif - -#if USE_GH3018 - gh3018_init(); -#endif -#if USE_HX3918 - Hx3918_Init(); -#endif -#if USE_FR8012HAQ - Fr8012haq_Init(); -#endif -#if USE_WMM300 - Wmm300_Init(); -#endif -#if USE_ACNT180 - hal_acnt180_init(); -#elif USE_ACNT117 - hal_acnt117_init(); -#endif - -#ifdef MMI_PROJECT_Z5_HA_K18 - mmi_at_grip_action(); -#endif - -#if USE_DS_DM - cplog_printf("dm_init()!!!!!!!!!\n"); - dm_init(); -#endif - is_phase1 = 0; - while(1) { - lv_task_handler(); - uos_sleep(1); /* 1 os tick == 5 ms */ - } - -} - -extern void set_sdcard_power_gpio(uint8_t num); - -#if CONFIG_BOARD_SIMWARE_W61_V2 -#define GPIO_EXT_PA GPIO34 -static const uint32_t extpa803_mfp_cfgs[] = { - MFP_REG(GPIO_34) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW| MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; -#elif CONFIG_BOARD_SIMWARE_W71 || CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 -#define GPIO_EXT_PA GPIO28 -static const uint32_t extpa803_mfp_cfgs[] = { - MFP_REG(GPIO_28) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW| MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; -#else -#define GPIO_EXT_PA GPIO75 -static const uint32_t extpa803_mfp_cfgs[] = { - MFP_REG(GPIO_75) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW| MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, - MFP_EOC /*End of configuration, must have */ -}; -#endif -static void speaker_extpa_init(void) -{ - gpio_set_direction(GPIO_EXT_PA, GPIO_OUT); - gpio_output_set(GPIO_EXT_PA, 0); - - mfp_config(extpa803_mfp_cfgs); - //cplog_printf("speaker_extpa_init \n"); -} -static void speaker_extpa_enable(uint32_t on) -{ - int i = 0; - volatile int j = 0; - cplog_printf("speaker_extpa_enable : %d\n", on); - if(0 == on) { - gpio_output_set(GPIO_EXT_PA, 0); - } else { - for (i = 0; i < on; ++i) { - gpio_output_set(GPIO_EXT_PA, 0); - lv_udelay(1); - gpio_output_set(GPIO_EXT_PA, 1); - lv_udelay(1); - } - } -} - -static uint8_t boot_flag = 0; - -uint8_t boot_flag_get(void) -{ - return boot_flag; -} - -void boot_flag_set(uint8_t value) -{ - pmic_user_defined_flags_set(value); -} - -int ui_init_phase1(void) -{ - extern void ui_log_init(void); - ui_log_init(); - - boot_flag = pmic_user_defined_flags_get(); - pmic_user_defined_flags_set(0); - - lv_init(); - lv_pm_init(); - is_phase1 = 1; - if (isSysRestartByRdProduction() == 0) { - timer_enable(); /* for mdelay */ - gui_init(); - timer_disable(); - } - - if(pmic_get_type() == PM_803) { - set_sdcard_power_gpio(70); - - speaker_extpa_init(); - AudioHAL_AifBindSpeakerPA_CB(speaker_extpa_enable); - } - return 0; -} - - -int ui_init_phase2(void) -{ -#ifdef __CHENG_DEBUG__ - extern void set_uart_dev_diag(void); - - set_uart_dev_diag(); -#endif - - if(lv_refr_vdb_is_flushing()) { - printf("Error: power on logo flush failed!!\n"); - } - uos_init(); -#if USE_LV_ROM_FS - lv_romfs_init(1); -#endif - //gui_task_id = uos_create_task(gui_main, NULL, 64, 0x4000, GUI_TASK_PRIORITY, "gui_task"); - gui_task_id = uos_create_task(gui_main, NULL, 64, 0x8000, GUI_TASK_PRIORITY, "gui_task"); - printf("gui task %d, queue id %d\n", gui_task_id, gui_task_id->nMailBoxId); - return 0; -} - -int test_backlight_on(void) -{ - printf("real test_backlight_on\n"); - if (lcd == NULL) { - printf("init LCD\n"); - gui_init(); - } - - lcd_backlight(2); - lcd_backlight_valid(); - - return 1; -} - -int test_backlight_off(void) -{ - static lv_task_t * suspend_task = NULL; -// extern Usb_PlugCallback Send_usb_status; -// Send_usb_status = NULL; - - watch_set_lcd_status(false); - if (NULL == suspend_task) { - suspend_task = lv_task_create(watch_suspend, 200, LV_TASK_PRIO_HIGH, (void *)WATCH_SUSPEND_KEY); - } - return 1; -} - -void test_gui_init(void) -{ - if (lcd == NULL) { - printf("init LCD\n"); - gui_init(); - } -} - -int test_watch_lcd(void) -{ - int i = 0; - - printf("real test_watch_lcd\n"); - if (lcd == NULL) { - printf("init LCD\n"); - gui_init(); - } - show_poweron_logo(); - - for (i = 0; i < ARRAY_SIZE(panels); ++i) { - unsigned panel_id = 0; - - if (panels[i]->readid(&panel_id) == 0) { - printf("LCD%d Read Display ID = 0x%X\n", i, panel_id); - //#ZC@20210616 skip - if (panel_id == 0x9a01 || panel_id == 0x858552) { - return 1; - } - } - } - - return 0; -} - -//set fotadm tcp server ip -char* get_fotadm_tcp_server_ip() -{ - return "sob-net-web-public-1256182135.cos.ap-chongqing.myqcloud.com"; -} -//set fotadm version -char* get_fotadm_version() -{ - return "K7.01"; -} -//set fota debug log -bool is_debug_fota() -{ - return false; -} -//get fota server port -int get_adups_tcp_server_port() -{ - return 80; -} -//get fota json path -char * get_fotadm_json_path(void) -{ - return "/otatest/update.json"; -} -// #ifdef __cplusplus -// extern "C" { - -// #endif -// #ifdef __cplusplus -// } -// #endif -static int sATPInd = TEL_AT_CMD_ATP_5; -//#include "framework/hal/hwtest/hwtest/hwtest.h" -char AT_read_data[200] = {0}; -int AT_read_data_len = 0; -void at_delay(uint32_t ms) -{ - uos_sleep(ms/5); - //DelayInUs(ms*1000); -} -static int HandleATitem32CARDIDCallback(TelAtParserID chnlId, const char* response, int size) -{ - // MATRspParseRet ret; - // MATReturnPara resp_return; - cplog_printf("HandleATResponseCallback!!!!!!!!!!!!!! \n"); - cplog_printf("SIMCardTest1: size:%d response = %s\n", size,response); - //ASSERT(chnlId == sATPInd); - if(AT_read_data_len + size>sizeof(AT_read_data)) - { - size = sizeof(AT_read_data)-AT_read_data_len; - } - memcpy(&AT_read_data[AT_read_data_len],response,size); - AT_read_data_len += size; - cplog_printf("SIMCardTest2: size:%d response = %s\n", size,response); - - return 0; -} -//#include "hop/telephony/atcmdsrv/inc/teldef.h" -//SendATCMDWaitResp(AT_channel, at_str, 150, "+EPIN",1,"+CME ERROR", resp_str, sizeof(resp_str)); -int item32_CARDID_write(char * data) -{ - int err=0; - char read_cmddata[201]={0}; - char cmdString[201] = {0}; - char *cmd_str ; - - at_delay(100); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - MATSetConfIndCB(sATPInd, HandleATitem32CARDIDCallback); - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - ATRecv(sATPInd, (void*)"AT+CFUN=0\r\n", strlen(cmd_str)); - cplog_printf("item32_CARDID_write1.2:sATPInd:%d \n",sATPInd); - int t_count = 70; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - { - cplog_printf("AT_read_data:%s",AT_read_data); - break; - } - - } - cplog_printf("item32_CARDID_write2:sATPInd:%d \n",sATPInd); - - //cmd_str = "AT*PROD=1\r\n"; - - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - ATRecv(sATPInd, (void*)"AT*PROD=1\r\n", strlen(cmd_str)); - t_count = 70; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - break; - } - - - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - ATRecv(sATPInd, (void*)"AT+CFUN=?\r\n", strlen(cmd_str)); - t_count = 70; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - break; - } - - snprintf(cmdString,200,"AT*MRD_ITEM32=W,CARDID,0101,12NOV2010,%s\r\n",data); - cplog_printf("item32_CARDID_write3:cmdString:%s \n",cmdString); - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - ATRecv(sATPInd, (void*)cmdString, strlen(cmdString)); - t_count = 70; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - break; - } - cplog_printf("t_count:%d",t_count); - - - cplog_printf("item32_CARDID_write4:sATPInd:%d \n",sATPInd); - //cmd_str = "AT*PROD=0\r\n"; - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - ATRecv(sATPInd, (void*)"AT*PROD=0\r\n", strlen(cmd_str)); - t_count = 70; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - break; - } - - - cplog_printf("item32_CARDID_write5:sATPInd:%d \n",sATPInd); - //cmd_str = "AT+CFUN=1\r\n"; - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); - ATRecv(sATPInd, (void*)"AT+CFUN=1\r\n", strlen(cmd_str)); - cplog_printf("item32_CARDID_write6:sATPInd:%d \n",sATPInd); - t_count = 70; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - break; - } - - -error: - - return err; -} -int tem32_CARDID_read(char * data,int data_MAX_len) -{ - int err=0; - - char *cmd_str = "AT*MRD_ITEM32=R, CARDID\r\n"; - cplog_printf("tem32_CARDID_read1:sATPInd:%d \n",sATPInd); - AT_read_data_len = 0; - memset(AT_read_data,0,sizeof(AT_read_data)); - - cplog_printf("tem32_CARDID_read1.1:sATPInd:%d \n",sATPInd); - MATSetConfIndCB(sATPInd, HandleATitem32CARDIDCallback); - cplog_printf("tem32_CARDID_read1.2:sATPInd:%d \n",sATPInd); - ATRecv(sATPInd, (void*)cmd_str, strlen(cmd_str)); - - int t_count = 100; - while (t_count--) - { - at_delay(5); - if(strstr(AT_read_data,"ok")) - break; - } - - cplog_printf("tem32_CARDID_read1:err:%d str:%s\n",err,AT_read_data); - if(AT_read_data == 0 ) - goto error; - char *data_tmp=AT_read_data; - int count_flag = 0; - while(*data_tmp) - { - if(*data_tmp == ',') - { - count_flag++; - if(count_flag>=3) - { - strncpy(data,data_tmp+1,data_MAX_len); - } - } - - data_tmp++; - } -error: - - return err; -} -#include "factory_mode.c" - - -void mmi_at_antenna_coupling_test_start(void) -{ - char const * command_str0 = "AT+CFUN=0\r\n"; - //if (IsAtCmdSrvReady()) - ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str0, strlen(command_str0)); - - char const * command_str1 = "AT+LTEPOWER=0,8,0\r\n"; - ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str1, strlen(command_str1)); -} - -void mmi_at_antenna_coupling_test_stop(void) -{ - char const * command_str0 = "AT+LTEPOWER=0,1,9\r\n"; - //if (IsAtCmdSrvReady()) - ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str0, strlen(command_str0)); - - char const * command_str1 = "AT+CFUN=1\r\n"; - ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str1, strlen(command_str1)); -} - - -#endif - +#if 1 +#include +#include "lvgl.h" +#include "lv_drivers/display/crane_lcdc.h" +#include "lv_drivers/display/st7789v_spi.h" +#include "lv_drivers/display/st7789v_mcu.h" +#include "lv_drivers/display/st7735s_spi.h" +#include "lv_drivers/display/st7567_spi.h" +#include "lv_drivers/display/rm69330_mipi.h" +#include "lv_drivers/display/icna3310_mipi.h" +#include "lv_drivers/display/co5300_mipi.h" +#include "lv_drivers/display/ili9806e_mipi.h" +#include "lv_drivers/display/gc9a01_spi.h" +#include "lv_drivers/indev/ft6x36.h" +#include "lv_drivers/indev/bl6133.h" +#include "lv_drivers/indev/stc820.h" +#include "lv_drivers/indev/tpfw.h" +#include "lv_drivers/indev/crane_keypadc.h" +#include "lv_drivers/indev/zinitix.h" +#include "lv_drivers/indev/CT1711.h" +#include "lv_drivers/indev/si24rx/si24rx.h" +#include "lv_drivers/indev/si24rx/si24rx_drv.h" +#include "lv_drivers/indev/my_xMotion.h" +#include "lv_drivers/common/backlight.h" +#include "lv_drivers/common/lv_pm.h" +#include "lv_drivers/common/i2c.h" +#include "board.h" +#include "ril/ril.h" +#include "lvgl/hal/hal.h" +#include "lv_drivers/indev/crane_evb_keypad.h" +#include "lvgl/src/lv_misc/lv_romfs.h" +#include "lv_drivers/display/st9a01_spi.h" +#include "lv_drivers/display/gc9c01_3_2_spi.h" +#include "lv_drivers/display/gc9307_spi.h" +#include "lv_drivers/display/st7789v2_spi.h" +#if USE_MULTI_KEY +#include "lv_drivers/indev/multi_key.h" +#endif +#if USE_GH3018 +#include "lv_drivers/indev/gh3018.h" +#endif +#if USE_HX3918 +#include "lv_drivers/indev/HX3918/hx3918.h" +#endif +#if USE_FR8012HAQ +#include "lv_drivers/indev/FR8012HAQ/fr8012haq.h" +#endif +#if USE_WMM300 +#include "lv_drivers/indev/WMM300/whale_algo.h" +#endif +#if USE_ACNT180 +#include "lv_drivers/indev/ACNT180.h" +#elif USE_ACNT117 +#include "lv_drivers/indev/ACNT117.h" +#endif +#if USE_SOS_KEY +#include "lv_drivers/indev/sos_key.h" +#endif +unsigned is_phase1 = 1; + +//Simware begin +extern void gpio_set_value(unsigned int gpio,unsigned int value); +#if USE_BT_SENSOR_HUB != 0 +extern int SensorHub_int_gpio_d2_ent_callback(void); +extern int SensorHub_int_gpio_d2_exit_callback(void); +extern void hal_SensorHub_adaptor_init(void); +#endif +//Simware end +#if USE_SDK_API +/* override SDK config */ +unsigned int g_asrlcd_framebuffer[0]; +unsigned char mmiPool[SDK_MMI_POOL_SIZE]; +const unsigned int mmiPoolSize = SDK_MMI_POOL_SIZE; +#endif + +#define GUI_TASK_PRIORITY 200 +TASK_HANDLE *gui_task_id; +/*supported panels */ +static struct crane_panel_t *panels[] = { +#if 1 +#if USE_LCD_PANEL_ST7735S_SPI_POC + &st7735s_spi, +#elif USE_LCD_PANEL_ST7567_SPI_4WIRE_1LANE_1IF + &st7567_spi, +#elif USE_LCD_PANEL_ST7789V_MCU + &st7789v_mcu, +#elif USE_LCD_PANEL_RM69330_MIPI + &rm69330_mipi, +#elif USE_LCD_PANEL_ICNA3310_MIPI + &icna3310_mipi, +#elif USE_LCD_PANEL_CO5300_MIPI + &co5300_mipi, +#elif USE_LCD_PANEL_ILI9806E_MIPI + &ili9806e_mipi, +//#else + //&st7789v_spi, +#endif +#endif + +#if USE_LCD_PANEL_GC9A01_SPI_WATCH + &gc9a01_spi, +#endif +#if USE_LCD_PANEL_ST9A01_4_1_SPI_POC + &st9a01_spi, +#endif +#if USE_LCD_PANEL_GC9C01_3_2_SPI_POC + &gc9c01_3_2_spi, +#endif +#if USE_LCD_PANEL_GC9307_4_1_SPI_POC + &gc9307_spi, +#endif +#if USE_LCD_PANEL_ST7789V2_SPI_WATCH + &st7789v2_spi, +#endif +}; + +#if USE_LCD_PANEL_ST7789V_SPI_WATCH +static uint32_t lcd_watch_mfp_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_21) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + MFP_EOC +}; + +static struct lcd_info_t lcd_info = { + .mfp = (uint32_t *)lcd_watch_mfp_cfgs, + .clk = 312000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_ST7789V_SPI_PHONE +static uint32_t lcd_mfp_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_21) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + MFP_REG(GPIO_27) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_69_TDS_DIO2) | MFP_AF0 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, + MFP_EOC +}; + +static struct lcd_info_t lcd_info = { + .mfp = (uint32_t *)lcd_mfp_cfgs, + .clk = 312000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_ST7789V_MCU +static uint32_t lcd_mfp_cfgs[] = { + MFP_REG(GPIO_22) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*CS0*/ + MFP_REG(GPIO_26) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*RST*/ + MFP_REG(GPIO_20) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB0*/ + MFP_REG(GPIO_31) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB1*/ + MFP_REG(GPIO_32) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB2*/ + MFP_REG(GPIO_121) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB3*/ + MFP_REG(GPIO_124) | MFP_AF3 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB4*/ + MFP_REG(GPIO_21) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB5*/ + MFP_REG(GPIO_27) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB6*/ + MFP_REG(GPIO_28) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DB7*/ + MFP_REG(GPIO_23) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*RDB*/ + MFP_REG(GPIO_24) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*WRB*/ +#if USE_LCD_MCU_DCX_GPIO + MFP_REG(GPIO_81) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DCX*/ +#else + MFP_REG(GPIO_SLAVE_RESET_OUT_N) | MFP_AF5 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*DCX*/ +#endif +#if LCD_TE_ENABLE + MFP_REG(GPIO_25) | MFP_AF6 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*TE*/ +#endif + MFP_EOC +}; + +struct lcd_info_t lcd_info = { + .mfp = (uint32_t *)lcd_mfp_cfgs, + .clk = 52000, /* 52000 */ +}; +#endif + + +#if USE_LCD_PANEL_ST7735S_SPI_POC +static uint32_t lcd_poc_mfp_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_27) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + MFP_EOC +}; + +static struct lcd_info_t lcd_info = { + .mfp = (uint32_t *)lcd_poc_mfp_cfgs, + .clk = 104000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_ST7567_SPI_4WIRE_1LANE_1IF +static uint32_t lcd_poc_mfp_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_21) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + //MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + MFP_EOC +}; + +static struct lcd_info_t lcd_info = { + .mfp = (uint32_t *)lcd_poc_mfp_cfgs, + .clk = 104000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_GC9C01_3_2_SPI_POC +static uint32_t lcd_watch_mfp_spi_3_2_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_21) | MFP_AF3 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + //MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + //MFP_REG(GPIO_27) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN1 */ + MFP_EOC +}; + +static struct lcd_info_t gc9c01_lcd_spi_3_2_info = +{ + .mfp = (uint32_t *)lcd_watch_mfp_spi_3_2_cfgs, + .clk = 312000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_ST9A01_4_1_SPI_POC || USE_LCD_PANEL_GC9307_4_1_SPI_POC || USE_LCD_PANEL_ST7789V2_SPI_WATCH + +static uint32_t lcd_poc_mfp_spi_4_1_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_21) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + MFP_EOC +}; +#endif +#if DRV_PROJECT_Z5_K7 || DRV_PROJECT_Z5_K7_EN || USE_LCD_PANEL_GC9A01_SPI_WATCH|| DRV_PROJECT_Z5_I7 || DRV_PROJECT_Z5_HA_K7 || DRV_PROJECT_Z5_Z11 || DRV_PROJECT_Z5_Z11_2 \ + || DRV_PROJECT_Z5_LT_K7 +static uint32_t lcd_poc_mfp_spi_3_2_cfgs[] = { + MFP_REG(GPIO_20) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DCLK */ + MFP_REG(GPIO_21) | MFP_AF3 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS1 */ + MFP_REG(GPIO_22) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_CS0 */ + //MFP_REG(GPIO_23) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DOUT */ + MFP_REG(GPIO_24) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN0 */ + MFP_REG(GPIO_25) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* VSYNC */ + MFP_REG(GPIO_26) | MFP_AF2 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SMPN_RST */ + //MFP_REG(GPIO_27) | MFP_AF0 | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_DRIVE_MEDIUM | MFP_LPM_EDGE_NONE, /* SPI_DIN1 */ + MFP_EOC +}; +#endif +#if USE_LCD_PANEL_GC9A01_SPI_WATCH +static struct lcd_info_t gc9a01_lcd_spi_3_2_info = +{ + .mfp = (uint32_t *)lcd_poc_mfp_spi_3_2_cfgs, + .clk = 312000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_ST9A01_4_1_SPI_POC +static struct lcd_info_t st9a01_lcd_spi_4_1_info = +{ + .mfp = (uint32_t *)lcd_poc_mfp_spi_4_1_cfgs, + .clk = 104000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_GC9307_4_1_SPI_POC +static struct lcd_info_t gc9307_lcd_spi_4_1_info = +{ + .mfp = (uint32_t *)lcd_poc_mfp_spi_4_1_cfgs, + .clk = 312000, /* 104000 */ +}; +#endif + +#if USE_LCD_PANEL_ST7789V2_SPI_WATCH +#if DRV_PROJECT_Z5_K6 +static struct lcd_info_t st7789v2_lcd_spi_4_1_info = +{ + .mfp = (uint32_t *)lcd_poc_mfp_spi_4_1_cfgs, + .clk = 312000, /* 104000 */ +}; +#elif DRV_PROJECT_Z5_K7 || DRV_PROJECT_Z5_K7_EN || DRV_PROJECT_Z5_I7 || DRV_PROJECT_Z5_HA_K7 || DRV_PROJECT_Z5_Z11 || DRV_PROJECT_Z5_Z11_2 \ + || DRV_PROJECT_Z5_LT_K7 +static struct lcd_info_t st7789v2_lcd_spi_3_2_info = +{ + .mfp = (uint32_t *)lcd_poc_mfp_spi_3_2_cfgs, + .clk = 312000, /* 104000 */ +}; +#endif +#endif + +#if USE_CRANE_LCD_MIPI +unsigned int lcd_mipi_mfp_cfgs[] = { + MFP_REG(GPIO_26) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*RST*/ + MFP_REG(GPIO_19) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_23) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, +#if LCD_TE_ENABLE + MFP_REG(GPIO_25) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*TE*/ +#endif +#if LCD_BACKLIGHT_ENABLE + MFP_REG(GPIO_31) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*pwm for backlight*/ + //MFP_REG(GPIO_31) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*config to gpio before pwm ready*/ +#endif + MFP_EOC +}; + + +static struct lcd_info_t lcd_info = { + .mfp = (uint32_t *)lcd_mipi_mfp_cfgs, +#if USE_CRANE_LCD_MIPI_CMD + .clk = 26000, +#else + .clk = 17300, +#endif +}; +#endif + +static struct lcd_info_t *lcd_info_detect[]= { +#if USE_CRANE_LCD_MIPI_CMD + &lcd_info, +#else + #if USE_LCD_PANEL_GC9A01_SPI_WATCH + &gc9a01_lcd_spi_3_2_info, + #endif + #if USE_LCD_PANEL_ST9A01_4_1_SPI_POC + &st9a01_lcd_spi_4_1_info, + #endif + #if USE_LCD_PANEL_GC9C01_3_2_SPI_POC + &gc9c01_lcd_spi_3_2_info, + #endif + #if USE_LCD_PANEL_GC9307_4_1_SPI_POC + &gc9307_lcd_spi_4_1_info, + #endif + #if USE_LCD_PANEL_ST7789V2_SPI_WATCH + #if DRV_PROJECT_Z5_K6 + &st7789v2_lcd_spi_4_1_info, + #elif DRV_PROJECT_Z5_K7 || DRV_PROJECT_Z5_K7_EN || DRV_PROJECT_Z5_Z12 || DRV_PROJECT_Z5_I7 || DRV_PROJECT_Z5_HA_K7 || DRV_PROJECT_Z5_DS_Z12XW_QCB || DRV_PROJECT_Z5_Z11 || DRV_PROJECT_Z5_Z11_2 \ + || DRV_PROJECT_Z5_LT_K7 + &st7789v2_lcd_spi_3_2_info, + #endif + #endif +#endif +}; + +static struct crane_panel_t *lcd = NULL; +static struct lcd_info_t * lcd_interface_info = NULL; + +#if USE_LCD_PANEL_ICNA3310_MIPI +unsigned int oled_power_mfp_cfgs[] = { + MFP_REG(GPIO_76) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /*power*/ + MFP_EOC +}; + +static void oled_power_set(unsigned char on) +{ + uint32_t *mfp; + + mfp = (uint32_t *)&oled_power_mfp_cfgs; + + mfp_config((uint32_t *)mfp); + gpio_set_direction(GPIO76, GPIO_OUT); + gpio_output_set(GPIO76, on); + printf("oled_power_set=%d\n",on); +} +#endif +static void lcdc_pwr_onoff(int on) +{ + int pm_type = pmic_get_type(); + + if (pm_type == PM_812) { // PM812 + if (on) { + /* enable ldo8 and set t0 2.8V */ + PM812_Ldo_8_set_2_8(); + PM812_Ldo_8_set(1); + } + else { + /* disable ldo8 */ + PM812_Ldo_8_set(0); + } + } + else if (pm_type == PM_813) { // PM813 + if (on) { + Ningbo_Ldo_1_set_2_8(); + Ningbo_Ldo_1_set(1); +#if USE_LCD_PANEL_ICNA3310_MIPI + oled_power_set(1); +#endif + } + else { + Ningbo_Ldo_1_set(0); +#if USE_LCD_PANEL_ICNA3310_MIPI + oled_power_set(0); +#endif + } + } + else if (pm_type == PM_802) { // PM802 + /* ldo is enabled by default */ + } + else if (pm_type == PM_803) { // PM803 + GuilinLite_Ldo_6_set_2_8(); + GuilinLite_Ldo_6_set(TRUE); + } + else { + printf("unknown PMIC, lcd_pwr_onoff failed.\n"); + } +} + +static struct crane_panel_t *lcd_init(void) +{ +#if 0 + int cnt, i; + struct crane_panel_t *p; + + + lcdc_pwr_onoff(1); + if (lcdc_init(&lcd_info) < 0) { + goto error; + } + + cnt = ARRAY_SIZE(panels); + + for (i = 0; i < cnt; i++) { + p = panels[i]; + if (p->probe(lcd_info.clk) == 0) { + return p; + } + } + +error: + return NULL; +#else + int cnt, i; + struct crane_panel_t *p; + + lcdc_pwr_onoff(1); + + cnt = ARRAY_SIZE(lcd_info_detect); + lv_udelay(1*1000*1000); + + for (i = 0; i < cnt; i++) + { + if (lcdc_init(lcd_info_detect[i]) < 0) + { + continue; + } + lcd_interface_info = lcd_info_detect[i]; + p = panels[i]; + //if restart by error,should call lcdc_reset_panel + if(startup_silent_reset()) + lcdc_reset_panel(); + if (p->probe((lcd_info_detect[i])->clk) == 0) + { + return p; + } + } + +#if 0 + //if detect fail, return first + lcd_interface_info = lcd_info_detect[0]; + return panels[0]; +#else + lcd_interface_info = NULL; + return NULL; +#endif +#endif +} + +void lcdc_resume(void) +{ +#if 0 + lcdc_init(&lcd_info); + if(lcd) lcd->probe(lcd_info.clk); +#else + if(lcd_interface_info) lcdc_init(lcd_interface_info); + if(lcd) lcd->probe(lcd_interface_info->clk); +#endif +} + +void lcd_idle_refresh(void) +{ + if(lcd && lcd->idle_flush) { + lcd->idle_flush(); + } +} +#if CONFIG_BOARD_SIMWARE_W61_V2 +extern void gpio_set_value(unsigned int gpio,unsigned int value); +#if CONFIG_BOARD_SIMWARE_W61_V2 +#define HAL_TP_LDO_EN GPIO_00 +#define HAL_TP_LDO_EN_GPIO GPIO0 +#endif +static const uint32_t touch_ldo_en_mfp_cfgs[]= +{ + MFP_REG(HAL_TP_LDO_EN) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, //TP LDO EN + MFP_EOC +}; +static void tp_power_onoff(bool on) +{ + //LDO EN PIN + gpio_set_direction(HAL_TP_LDO_EN_GPIO, GPIO_OUT); + if(on){ + gpio_set_value(HAL_TP_LDO_EN_GPIO, 1); + }else{ + gpio_set_value(HAL_TP_LDO_EN_GPIO, 0); + } +} +#endif + +#if USE_FT6X36 +static const uint32_t touch_mfp_cfgs[] = { + MFP_REG(GPIO_13) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_14) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; + +static const uint32_t touch_mfp_cfgs_3601s[] = { + MFP_REG(GPIO_121) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_124) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; + +static const struct ft6x36_info tp_info = { + .irq_pin = GPIO13, + .rst_pin = GPIO14, + .i2c_addr = 0x38, /* 7-bit i2c addr */ +}; + +static const struct ft6x36_info tp_info_3601s = { + .irq_pin = GPIO121, + .rst_pin = GPIO124, + .i2c_addr = 0x38, /* 7-bit i2c addr */ +}; + +static void tp_init_ft6x36(void) +{ + lv_indev_drv_t indev_tp_drv; + const struct ft6x36_info *tp; + uint32_t *mfp; + + if (isChip_3601S() || is_chip_3603()) { + mfp = (uint32_t *)&touch_mfp_cfgs_3601s; + tp = &tp_info_3601s; + } else { + mfp = (uint32_t *)&touch_mfp_cfgs; + tp = &tp_info; + } + + mfp_config((uint32_t *)mfp); + /* power is enabled in lcd_init */ + ft6x36_init(tp); + lv_indev_drv_init(&indev_tp_drv); + indev_tp_drv.type = LV_INDEV_TYPE_POINTER; + indev_tp_drv.read_cb = ft6x36_read; + lv_indev_drv_register(&indev_tp_drv); +} +#endif + +#if USE_BL6133 +static const uint32_t touch_bl6133_mfp_cfgs[] = { + MFP_REG(GPIO_82) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_83) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; + +static const struct bl6133_info tp_bl6133_info = { + .irq_pin = GPIO83, + .rst_pin = GPIO82, + .i2c_addr = 0x2d, /* 7-bit i2c addr */ +}; + +static int tp_init_bl6133(void) +{ + int ret = 0; + lv_indev_drv_t indev_tp_drv; + const struct bl6133_info *tp; + uint32_t *mfp; +//#if USE_W61_TP + int pm_type = pmic_get_type(); + if(pm_type == PM_813) + { + Ningbo_Ldo_9_set_3_3(); + Ningbo_Ldo_9_set(1); + } +//#endif + mfp = (uint32_t *)&touch_bl6133_mfp_cfgs; + tp = &tp_bl6133_info; + + mfp_config((uint32_t *)mfp); +#if BL6133_TP_FW_UPDATE + bl6133_firmware_update(); +#endif + + /* power is enabled in lcd_init */ + ret = bl6133_init(tp); + if(ret != 0){ + cplog_printf("bl6133 probe fail\n"); + return ret; + } + lv_indev_drv_init(&indev_tp_drv); + indev_tp_drv.type = LV_INDEV_TYPE_POINTER; + indev_tp_drv.read_cb = bl6133_read; + lv_indev_drv_register(&indev_tp_drv); + cplog_printf("tp_init_bl6133 ret=%d\n",ret); + return ret; +} +#endif + +#if USE_STC820 +static const uint32_t touch_stc820_mfp_cfgs[] = { + MFP_REG(GPIO_82) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_83) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; + +static const struct stc820_info tp_stc820_info = { + .irq_pin = GPIO83, + .rst_pin = GPIO82, + .i2c_addr = 0x15, /* 7-bit i2c addr */ +}; + +static int tp_init_stc820(void) +{ + int ret = 0; + lv_indev_drv_t indev_tp_drv; + const struct stc820_info *tp; + uint32_t *mfp; +//#if USE_W61_TP + int pm_type = pmic_get_type(); + if(pm_type == PM_813) + { + Ningbo_Ldo_9_set_3_3(); + Ningbo_Ldo_9_set(1); + } +//#endif + mfp = (uint32_t *)&touch_stc820_mfp_cfgs; + tp = &tp_stc820_info; + + mfp_config((uint32_t *)mfp); + + + set_info(tp); +#if STC820_TP_FW_UPDATE + ctp_hynitron_update(); +#endif +/* power is enabled in lcd_init */ + ret = stc820_init(tp); + if(ret != 0){ + cplog_printf("stc820 probe fail\n"); + return ret; + } + lv_indev_drv_init(&indev_tp_drv); + indev_tp_drv.type = LV_INDEV_TYPE_POINTER; + indev_tp_drv.read_cb = stc820_read; + lv_indev_drv_register(&indev_tp_drv); + cplog_printf("tp_init_stc820 ret=%d\n",ret); + return ret; +} +#endif + +#if USE_ZINITIX_TOUCH +static void tp_init_zinitix(void) +{ + lv_indev_drv_t indev_tp_drv; + + /* power is enabled in lcd_init */ + zinitix_init(); + lv_indev_drv_init(&indev_tp_drv); + indev_tp_drv.type = LV_INDEV_TYPE_POINTER; + indev_tp_drv.read_cb = zinitix_read; + lv_indev_drv_register(&indev_tp_drv); +} +#endif + +#if USE_CRANE_EVB_KEYPAD +static const uint32_t keypad_mfp_cfgs[] = { + MFP_REG(GPIO_00) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_01) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_02) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_03) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_04) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_05) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_06) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_07) | MFP_AF1 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_08) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_REG(GPIO_09) | MFP_AF2 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; + +lv_indev_t *keypad_dev; + +static uint32_t keypad_evb_cb(struct keypad_param *arg) +{ +#if 0 + if(arg->data.key == LV_KEY_END) { + if(arg->key_event == KEY_EVENT_CLICK) { + Hal_Lcd_Sleep(); + uint32_t wake_up_flag = Hal_Pm_Suspend(); + + printf("pm wake up, wake_up_flag 0x%08x ################\n", wake_up_flag); + if(wake_up_flag & PM_RESUME_ALL) { + Hal_Pm_Resume(); + Hal_Lcd_Wakeup(); + } + } + return KEY_HANDLE_OVER; + } +#endif + return KEY_HANDLE_CONT; +} + +static void keypad_init_evb(void) +{ + lv_indev_drv_t indev_kp_drv; + + mfp_config((uint32_t *)keypad_mfp_cfgs); + keypad_crane_evb_init(keypad_evb_cb); + + lv_indev_drv_init(&indev_kp_drv); + indev_kp_drv.type = LV_INDEV_TYPE_KEYPAD; + indev_kp_drv.read_cb = keypad_crane_evb_read; + keypad_dev = lv_indev_drv_register(&indev_kp_drv); +} +#endif + + +int pm_state_flag = -1; +static uint8_t pm_state = PM_ON; +#define OSA_SUSPEND 0xFFFFFFFF +static int sdk_c1_enter() +{ + if(pm_state == PM_ON) + return 1; + if(Hal_low_power_sleep_is_vetoed()) + return 1; + + return 0; +} + +static int sdk_c1_exit() +{ + return 0; +} + +static int sdk_d2_enter() +{ +#if USE_CRANE_KEYPADC + keypad_clear_wakup_interrupt(); +#endif + if(pm_state == PM_ON) { + return 1; + } + +#if USE_BT_SENSOR_HUB != 0 + SensorHub_int_gpio_d2_ent_callback(); +#endif + +#if USE_MY_XMOTION + xmotion_int_gpio_d2_ent_callback(); +#endif +#if USE_FR8012HAQ + + fr8012haq_int_gpio_d2_ent_callback(); +#endif +#if USE_MULTI_KEY + multi_key_d2_enter(); +#endif + + return 0; +} + +static int sdk_d2_exit(BOOL ExitFromD2) +{ +#if USE_BT_SENSOR_HUB != 0 + SensorHub_int_gpio_d2_exit_callback(); +#endif + +#if USE_MY_XMOTION + xmotion_int_gpio_d2_exit_callback(); +#endif +#if USE_FR8012HAQ + fr8012haq_int_gpio_d2_exit_callback(); +#endif +#if USE_MULTI_KEY + multi_key_d2_exit(); +#endif + + return 0; +} + +static int sdk_uiSuspend(void) +{ + if(pm_state == PM_ON) + return 1; + if(Hal_low_power_sleep_is_vetoed()) + return 1; + + return 0; +} + +void sys_pm_init(void) +{ + uart_printf("sys_pm_init~~\n"); + mmiD2CallbackRegister((UINT32)sdk_d2_enter, (UINT32)sdk_d2_exit); + mmiC1CallbackRegister((UINT32)sdk_c1_enter, (UINT32)sdk_c1_exit); + mmiStatusCallbackRegister((UINT32)sdk_uiSuspend); +} + +extern void pm_unlock(void); + +uint32_t sys_pm_set_state(int state) +{ + if(state == PM_ON) { + if(pm_state != state) { + board_sys_tick_start(); + pm_state = state; + } + + return 0; + } else { + if(pm_state != state) { + board_sys_tick_stop(); + mdelay(20); + pm_state = state; + } + + if(pm_state_flag == -1) { + pm_state_flag = uos_create_flag(); + } + + uint32_t flag = 0; + #if USE_ONKEY_HISR + extern int onkey_queue_empty(void); + if (!onkey_queue_empty()) { + flag = PM_RESUME_ONKEY; + uart_printf("gui resume: onkey queue NOT empty, onkey, flag: 0x%x ~~~ \n", flag); + pm_unlock(); + } else + #endif + { + uart_printf("gui suspend: %d ~~~ \n", pm_state_flag); + pm_unlock(); + if(uos_wait_flag(pm_state_flag, PM_RESUME_ALL, UOS_FLAG_OR_CLEAR, &flag, OSA_SUSPEND) == 0) { + uart_printf("gui resume: flag: 0x%x ~~~ \n", flag); + } + } + + if(pm_state_flag != -1) { + int tmp = pm_state_flag; + pm_state_flag = -1; + uos_delete_flag(tmp); + } + return flag; + } +} + +void sys_pm_wakeup(void) +{ + if(pm_state_flag!=-1) + uos_set_flag(pm_state_flag, PM_RESUME_UI, UOS_FLAG_OR); +} + +#if 1//simware add +void sys_pm_wakeup_no_lcd(void) +{ + if(pm_state_flag!=-1) + uos_set_flag(pm_state_flag, PM_RESUME_NO_LCD, UOS_FLAG_OR); +} +#endif + +#if USE_CRANE_EVB_KEYPAD +#include "lv_drivers/indev/crane_keypadc.h" + +void normal_key_wakeup(uint32_t key) +{ + if(pm_state_flag != -1) { + if(key == KP_PWR) { + uos_set_flag(pm_state_flag, PM_RESUME_ENDKEY, UOS_FLAG_OR); + } else { + uos_set_flag(pm_state_flag, PM_RESUME_NORMALKEY, UOS_FLAG_OR); + } + } +} + +void onkey_wakeup() +{ + if(pm_state_flag != -1) { + uos_set_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR); + } +} +#endif + +#if USE_CRANE_WATCH_KEYPAD +#include "lv_watch/lv_watch.h" +#include "lv_drivers/indev/crane_watch_keypad.h" +uint8_t restarted_flag = false; + +void onkey_wakeup(void) +{ + if(pm_state_flag != -1) { + uos_set_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR); + } +} + +static int prmode_enter_suspend = 0; + +static uint32_t prmode_suspend(void) +{ + uint32_t flag = 0; + + printf("prmode suspend pm_state = %d~~~ \n", pm_state); + board_sys_tick_stop(); + mdelay(20); + pm_state = PM_SUSPEND; + + if(pm_state_flag == -1) { + pm_state_flag = uos_create_flag(); + } + + if(uos_wait_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR_CLEAR, &flag, OSA_SUSPEND) == 0) { + uart_printf("prmode resume: flag: 0x%x, pm_state = %d~~~ \n", flag, pm_state); + if(pm_state_flag != -1) { + int tmp = pm_state_flag; + pm_state_flag = -1; + uos_delete_flag(tmp); + } + board_sys_tick_start(); + return flag; + } else { + printf("prmode_suspend: uos wait flag failed\n"); + board_sys_tick_start(); + } + + return 0; +} + +static void prmode_onkey_callback(void) +{ + int state = 0; + read_onkey(&state); + + if((state == ONKEY_PRESSED)) { + printf("onkey callback prmode: %d, pm_state = %d, pm_state_flag = %d\n", + state, pm_state, pm_state_flag); + if ((pm_state == PM_SUSPEND) && (pm_state_flag != -1)) { + printf("prmode resume\n"); + uos_set_flag(pm_state_flag, PM_RESUME_ONKEY, UOS_FLAG_OR); + pm_state = PM_ON; + } else if (pm_state == PM_ON){ + printf("prmode suspend\n"); + prmode_enter_suspend = 1; + } + } + +} + +static void prmode_task(lv_task_t *task) +{ + printf("lvgl prmode task\n"); + if (prmode_enter_suspend) { + prmode_enter_suspend = 0; + prmode_suspend(); + } +} + +static void prmode_pm_init(void) +{ + PM812_ONKEY_BIND_INTC(prmode_onkey_callback); + PM812_ONKEY_INTC_ENABLE(true); + lv_task_create(prmode_task, 1000, LV_TASK_PRIO_MID, NULL); +} + +int is_in_poweroff_chg_mode(void) +{ + int ret = 0; + HAL_POWERUP_REASON reason = Hal_Powerup_Get_Reason(); + + if ((HAL_POWERUP_BAT == reason)||(HAL_POWERUP_USB == reason)) { + if (restarted_flag == false) { + ret = 1; + } + } + + return ret; +} + +static void keypad_watch_cb(struct keypad_param *arg) +{ + static bool set_lcd_only = false; + + if(!watch_is_ready()) return; // in start procedure + + //printf("[@CHENG_DEBUG][%s][%d]: %d\n", __FUNCTION__, __LINE__, arg->data.key); + + if(arg->data.key == LV_KEY_END) + { + #ifdef MMI_PROJECT_Z5_HA_K18_NFC + if(true == mmi_k18_nfc_experience_screen_active()) + { + return; + } + #endif + + lv_obj_t * facau_obj = lv_watch_get_activity_obj(ACT_ID_FACTORY_MODE_AUTOTEST); + lv_obj_t * emht_obj = lv_watch_get_activity_obj(ACT_ID_ENGINEER_MODE_ITEM_HWT); + if(NULL != facau_obj) { + autotest_key_event(arg); + } else if(NULL != emht_obj) { + #if USE_LV_WATCH_ENGINEER_MODE!= 0 + hardware_testing_key_event(arg); + #endif + } else { + if(arg->key_event == KEY_EVENT_CLICK) { + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + if(set_lcd_only) { + set_lcd_only = false; + } else { + if(lv_watch_is_activity_one_level()) { + watch_suspend_by_key(); + } else { + lv_watch_go_home(); + } + } + } else if(arg->key_event == KEY_EVENT_LONG_PRESS) { + set_lcd_only = false; + // sos + if(1 != is_in_poweroff_chg_mode()) { + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + //sos_btn_action(NULL); + #ifdef __MMI_KEY_POWER_LONG_PRESS_SCREEN_SUPPORT__ + mmi_key_power_long_press_action(); + #endif + } + } else if(arg->key_event == KEY_EVENT_POWER_ON) { + set_lcd_only = false; + if(restarted_flag) return; + HAL_POWERUP_REASON reason = Hal_Powerup_Get_Reason(); + if(((HAL_POWERUP_BAT == reason)||(HAL_POWERUP_USB == reason))&&(0 != Hal_Battery_Get_Status())) { + // from power off charging to power up + restarted_flag = true; + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + watch_restart_req(); + } + } else if(arg->key_event == KEY_EVENT_PRESS) { + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + if(!watch_get_lcd_status()) { + watch_set_lcd_status(true); + set_lcd_only = true; + } + } + } + } + else if(arg->data.key == LV_KEY_ESC) + { + printf("[@CHENG_DEBUG][%s][%d]: \n", __FUNCTION__, __LINE__); + if(arg->key_event == KEY_EVENT_CLICK) { + lv_watch_go_back(); + } + } +} + +lv_indev_t *keypad_dev; + +static void keypad_init_watch(void) +{ + lv_indev_drv_t indev_kp_drv; + printf("keypad_init_watch\n"); + keypad_watch_init(keypad_watch_cb); + + lv_indev_drv_init(&indev_kp_drv); + indev_kp_drv.type = LV_INDEV_TYPE_KEYPAD; + indev_kp_drv.read_cb = keypad_watch_read; + keypad_dev = lv_indev_drv_register(&indev_kp_drv); +} +#endif + +#if USE_LV_PHONE != 0 +extern void phone_poweron_logo(void); +extern void Ui_Phone_main(void); +#endif + +static void show_poweron_logo(void) +{ + #if USE_LV_WATCH + watch_poweron_logo(); + #endif + + #if USE_LV_PHONE != 0 + phone_poweron_logo(); + #endif + + lv_udelay(60 * 1000); /* wait for the logo display complete */ + lcd_backlight(2); + lcd_backlight_valid(); +} + +static void gui_disp_wait(struct _disp_drv_t * disp_drv) +{ + (void)disp_drv; + uos_sleep(1); +} + +#if USE_LV_WATCH_REFR_MONITOR_CB +/** OPTIONAL: Called after every refresh cycle to tell the rendering and flushing time + the + * number of flushed pixels */ +static void refr_monitor_cb(struct _disp_drv_t * disp_drv, uint32_t time, uint32_t px) +{ + (void)disp_drv; + printf("t: %u, pixel: %u\n", (unsigned)time, (unsigned)px); +} +#endif + + + +static int gui_init(void) +{ + lcd = lcd_init(); + if (!lcd) { + printf("lcd init failed\n"); + //return -1; + } + /*Create a display buffer*/ + static lv_disp_buf_t disp_buf; + static lv_color_t buf1[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*A screen sized buffer*/ + static lv_color_t buf2[LV_HOR_RES_MAX * LV_VER_RES_MAX]; /*An other screen sized buffer*/ + //char *buf1 = lv_mem_aligned_alloc(LV_HOR_RES_MAX * LV_VER_RES_MAX * 2, 32); + //char *buf2 = lv_mem_aligned_alloc(LV_HOR_RES_MAX * LV_VER_RES_MAX * 2, 32); + lv_disp_buf_init(&disp_buf, buf1, buf2, LV_HOR_RES_MAX * LV_VER_RES_MAX); /*Initialize the display buffer*/ + + /*Create a display*/ + lv_disp_drv_t disp_drv; + lv_disp_drv_init(&disp_drv); /*Basic initialization*/ + disp_drv.buffer = &disp_buf; + disp_drv.hor_res = LV_HOR_RES_MAX; + disp_drv.ver_res = LV_VER_RES_MAX; + if(lcd) disp_drv.flush_cb = lcd->flush; + disp_drv.wait_cb = gui_disp_wait; +#if USE_LV_WATCH_REFR_MONITOR_CB + disp_drv.monitor_cb = refr_monitor_cb; +#endif + lcdc_set_disp(lv_disp_drv_register(&disp_drv)); + return 0; +} + +static void board_touch_init(void) +{ + static int tp_probe_state = -1; +#if CONFIG_BOARD_SIMWARE_W61_V2 + mfp_config((uint32_t *)touch_ldo_en_mfp_cfgs); + tp_power_onoff(1); +#elif CONFIG_BOARD_SIMWARE_W71 || CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 + int pm_type = pmic_get_type(); + + if (pm_type == PM_803) { + cplog_printf("board_touch_init 872\n"); + GuilinLite_Ldo_8_set_3_0(); + GuilinLite_Ldo_8_set(true); + } +#endif +#if USE_FT6X36 + tp_init_ft6x36(); +#endif +#if USE_BL6133 + if(tp_probe_state != 0) + tp_probe_state = tp_init_bl6133(); +#endif +#if USE_STC820 + if(tp_probe_state != 0) + tp_probe_state = tp_init_stc820(); +#endif +#if USE_ZINITIX_TOUCH + tp_init_zinitix(); +#endif + cplog_printf("tp_probe_state=%d\n",tp_probe_state); +} + +static int board_init(void) +{ + pmic_init(); + //setuartlogon(); + + board_touch_init(); + + if (isSysRestartByRdProduction() == 0) { +#if USE_CRANE_EVB_KEYPAD + keypad_init_evb(); +#endif +#if USE_CRANE_WATCH_KEYPAD + keypad_init_watch(); +#endif + } + + return 0; +} + +void invalidate_dcache_range(unsigned long start, unsigned long stop) +{ + arch_invalidate_cache_range(start, (stop-start)); +} + +char * gcvt(double value, int32_t ndigit, char * buf) +{ + unsigned idx = 0; + unsigned digi_cnt = 0; + if(value < 0){ + buf[0] = '-'; + value = -value; + idx ++; + } + + long int_part = (long)value; + double float_part = value - int_part; + snprintf(buf+idx, ndigit+1, "%ld", int_part); + digi_cnt = strlen(buf) - idx; + + if((digi_cnt >= ndigit) || (float_part < 0.0000000001)) + return buf; + + idx = strlen(buf); + buf[idx++] = '.'; + + while(digi_cnt < ndigit) { + int_part = (int)(float_part * 10); + float_part = float_part * 10 - int_part; + buf[idx++] = '0' + int_part; + digi_cnt ++; + if(float_part < 0.0000000001) { + break; + } + } + + buf[idx] = '\0'; + return buf; +} + +static lv_task_t * backlight_on_task; +static void backlight_task(lv_task_t * task) +{ + if(!lv_refr_vdb_is_flushing()) { + lcd_backlight_valid_for_silent_reset(); + lv_task_del(backlight_on_task); +#if USE_LV_WATCH_DEMO != 0 + watch_set_ready_state(true); +#endif + } +} + +//#if (USE_LV_WATCH_ALIPAY != 0) || (USE_LV_WATCH_SW_ALIPAY != 0) +//extern bool do_upay_init(void); +//static lv_task_t * upay_init_task = NULL; +//static void upayinit_task(lv_task_t * param) +//{ +// if(do_upay_init()) { +// lv_task_del(upay_init_task); +// upay_init_task = NULL; +// } +//} +//#endif + +static void mmi_init(void) +{ + FS_PowerOn(); +} + +#if CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 +const uint32_t bt_ldo_en_cfgs[] = { + MFP_REG(GPIO_34) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_HIGH | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, //bt chip en + MFP_EOC /*End of configuration, must have */ +}; + +const uint32_t hrm_ldo_en_cfgs[] = { + MFP_REG(GPIO_81) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* hrm vio en */ + MFP_REG(GPIO_84) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* hrm rst */ + MFP_REG(GPIO_32) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_NONE | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* hrm int */ +#if CONFIG_BOARD_SIMWARE_H81 + MFP_REG(GPIO_18) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW | MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, /* HRM_DCDC_EN */ +#endif + MFP_EOC /*End of configuration, must have */ +}; +#endif + +#if USE_BT_SENSOR_HUB != 0 +static void SensorHub_init_timer_callback(void* param) +{ + SensorHub_device_check_cmd(); + SensorHub_boot_bin_check_cmd(); +} +#endif + +#ifdef MMI_PROJECT_Z5_HA_K18 +static int MATResponseCallback_0(TelAtParserID chnlId, const char* response, int size) +{ + cplog_printf("[@CHENG_DEBUG][%s][%d]: chnlId=%d,size=%d\n", __FUNCTION__, __LINE__, chnlId, size); + cplog_printf("[@CHENG_DEBUG][%d]: response=%s\n", __LINE__, response); + +#if 0 + MATRspParseRet ret; + MATReturnPara resp_return; + + ret = MATHandleResponse(chnlId, response, size, &resp_return); + cplog_printf("[@CHENG_DEBUG][%s][%d]: ret=%d\n", __FUNCTION__, __LINE__, ret); + if (ret == MAT_RSP_PARSER_WAIT_FOR_TERMINAL) + { + return 0; + } + else if(ret == MAT_RSP_PARSER_OK) + { + //fatal_printf("SIMCardTest AT Response: resultCode = %d; cmd_type = %d; numItems = %d\n", + // resp_return.resultCode, resp_return.cmd_type, resp_return.numItems); + } + + MATConfIndFree(&resp_return); +#endif + + return 0; +} + +static int MATResponseCallback_1(TelAtParserID chnlId, const char* response, int size) +{ + cplog_printf("[@CHENG_DEBUG][%s][%d]: chnlId=%d,size=%d\n", __FUNCTION__, __LINE__, chnlId, size); + cplog_printf("[@CHENG_DEBUG][%d]: response=%s\n", __LINE__, response); + + return 0; +} + +static void mmi_at_grip_action(void) +{ + char const * command_str0 = "AT*GRIP=2,5,2,3\r\n"; + //if (IsAtCmdSrvReady()) + cplog_printf("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, command_str0); + //MATSetConfIndCB(TEL_AT_CMD_ATP_6, MATResponseCallback_0); + ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str0, strlen(command_str0)); + + + char const * command_str1 = "AT*GRIP=2,5,2,5\r\n"; + cplog_printf("[@CHENG_DEBUG][%s][%d]: %s\n", __FUNCTION__, __LINE__, command_str1); + //MATSetConfIndCB(TEL_AT_CMD_ATP_6, MATResponseCallback_1); + ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str1, strlen(command_str1)); +} +#endif + +extern void dm_init(); +static void gui_main(void *param) +{ + int silent_reset = startup_silent_reset(); + board_init(); + mmi_init(); /* some API from mmi, such as from mci_audio.cpp, depends on it */ + board_sys_tick_init(5, lv_tick_inc); /* update tick every 5 ms */ + Hal_Init(); + +#if CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 + mfp_config((uint32_t *)bt_ldo_en_cfgs); + mfp_config((uint32_t *)hrm_ldo_en_cfgs); + //bt ldo en + gpio_set_direction(GPIO34, GPIO_OUT); + gpio_set_value(GPIO34, 1); + //hmr ldo en + gpio_set_direction(GPIO81, GPIO_OUT); + gpio_set_value(GPIO81, 1); + gpio_set_direction(GPIO84, GPIO_IN); + gpio_set_direction(GPIO32, GPIO_IN); +#if CONFIG_BOARD_SIMWARE_H81 + gpio_set_direction(GPIO18, GPIO_OUT); + gpio_set_value(GPIO18, 1); +#else + //2.4G UM3204 power + GuilinLite_Ldo_7_set_1_8(); + GuilinLite_Ldo_7_set(TRUE); +#endif +#endif + + if (isSysRestartByRdProduction() == 0) { + if(0 == silent_reset) { + show_poweron_logo(); //show logo if not silent reset + } +#if USE_LV_WATCH_DEMO != 0 + watch_power_on_req(); +#else + Ui_Phone_main(); +#endif + if(silent_reset) { + backlight_on_task = lv_task_create(backlight_task, 30, LV_TASK_PRIO_MID, NULL); + } + } else { + Ril_Init_Crane(0); + #if USE_CRANE_WATCH_KEYPAD + prmode_pm_init(); + #endif + } +//#if (USE_LV_WATCH_ALIPAY != 0) || (USE_LV_WATCH_SW_ALIPAY != 0) +// if(NULL == upay_init_task) { +// upay_init_task = lv_task_create(upayinit_task, 150, LV_TASK_PRIO_MID, NULL); +// } +//#endif + + app_sensor_task_init(); + + i2c_initialize(I2C_MASTER_CI2C1); + +#if USE_BT_SENSOR_HUB != 0 + hal_SensorHub_adaptor_init(); + SensorHub_reboot_cmd(); + Hal_Timer_Start(2000, SensorHub_init_timer_callback, NULL, FALSE); +#endif + +#if USE_GPS + hal_gps_adaptor_init(); +#endif + +#if USE_SI24RX + si24rx_init(); + //si24rx_test(); +#endif + +#if USE_CT1711 + Ct1711_my_init(); +#endif + +#if USE_MULTI_KEY + multi_key_mfp_init(); + +#endif + +#if USE_SOS_KEY + sos_key_mfp_init(); +#endif + +#if USE_MY_XMOTION + xMotion_my_init(); +#endif + +#if USE_GH3018 + gh3018_init(); +#endif +#if USE_HX3918 + Hx3918_Init(); +#endif +#if USE_FR8012HAQ + Fr8012haq_Init(); +#endif +#if USE_WMM300 + Wmm300_Init(); +#endif +#if USE_ACNT180 + hal_acnt180_init(); +#elif USE_ACNT117 + hal_acnt117_init(); +#endif + +#ifdef MMI_PROJECT_Z5_HA_K18 + //mmi_at_grip_action(); +#endif + +#if USE_DS_DM + cplog_printf("dm_init()!!!!!!!!!\n"); + dm_init(); +#endif + is_phase1 = 0; + while(1) { + lv_task_handler(); + uos_sleep(1); /* 1 os tick == 5 ms */ + } + +} + +extern void set_sdcard_power_gpio(uint8_t num); + +#if CONFIG_BOARD_SIMWARE_W61_V2 +#define GPIO_EXT_PA GPIO34 +static const uint32_t extpa803_mfp_cfgs[] = { + MFP_REG(GPIO_34) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW| MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; +#elif CONFIG_BOARD_SIMWARE_W71 || CONFIG_BOARD_SIMWARE_A90 || CONFIG_BOARD_SIMWARE_A90SH || CONFIG_BOARD_SIMWARE_H81 +#define GPIO_EXT_PA GPIO28 +static const uint32_t extpa803_mfp_cfgs[] = { + MFP_REG(GPIO_28) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW| MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; +#else +#define GPIO_EXT_PA GPIO75 +static const uint32_t extpa803_mfp_cfgs[] = { + MFP_REG(GPIO_75) | MFP_AF0 | MFP_DRIVE_MEDIUM | MFP_PULL_LOW| MFP_SLEEP_DIR | MFP_LPM_EDGE_NONE, + MFP_EOC /*End of configuration, must have */ +}; +#endif +static void speaker_extpa_init(void) +{ + gpio_set_direction(GPIO_EXT_PA, GPIO_OUT); + gpio_output_set(GPIO_EXT_PA, 0); + + mfp_config(extpa803_mfp_cfgs); + //cplog_printf("speaker_extpa_init \n"); +} +static void speaker_extpa_enable(uint32_t on) +{ + int i = 0; + volatile int j = 0; + cplog_printf("speaker_extpa_enable : %d\n", on); + if(0 == on) { + gpio_output_set(GPIO_EXT_PA, 0); + } else { + for (i = 0; i < on; ++i) { + gpio_output_set(GPIO_EXT_PA, 0); + lv_udelay(1); + gpio_output_set(GPIO_EXT_PA, 1); + lv_udelay(1); + } + } +} + +static uint8_t boot_flag = 0; + +uint8_t boot_flag_get(void) +{ + return boot_flag; +} + +void boot_flag_set(uint8_t value) +{ + pmic_user_defined_flags_set(value); +} + +int ui_init_phase1(void) +{ + extern void ui_log_init(void); + ui_log_init(); + + boot_flag = pmic_user_defined_flags_get(); + pmic_user_defined_flags_set(0); + + lv_init(); + lv_pm_init(); + is_phase1 = 1; + if (isSysRestartByRdProduction() == 0) { + timer_enable(); /* for mdelay */ + gui_init(); + timer_disable(); + } + + if(pmic_get_type() == PM_803) { + set_sdcard_power_gpio(70); + + speaker_extpa_init(); + AudioHAL_AifBindSpeakerPA_CB(speaker_extpa_enable); + } + return 0; +} + + +int ui_init_phase2(void) +{ +#ifdef __CHENG_DEBUG__ + extern void set_uart_dev_diag(void); + + set_uart_dev_diag(); +#endif + + if(lv_refr_vdb_is_flushing()) { + printf("Error: power on logo flush failed!!\n"); + } + uos_init(); +#if USE_LV_ROM_FS + lv_romfs_init(1); +#endif + //gui_task_id = uos_create_task(gui_main, NULL, 64, 0x4000, GUI_TASK_PRIORITY, "gui_task"); + gui_task_id = uos_create_task(gui_main, NULL, 64, 0x8000, GUI_TASK_PRIORITY, "gui_task"); + printf("gui task %d, queue id %d\n", gui_task_id, gui_task_id->nMailBoxId); + return 0; +} + +int test_backlight_on(void) +{ + printf("real test_backlight_on\n"); + if (lcd == NULL) { + printf("init LCD\n"); + gui_init(); + } + + lcd_backlight(2); + lcd_backlight_valid(); + + return 1; +} + +int test_backlight_off(void) +{ + static lv_task_t * suspend_task = NULL; +// extern Usb_PlugCallback Send_usb_status; +// Send_usb_status = NULL; + + watch_set_lcd_status(false); + if (NULL == suspend_task) { + suspend_task = lv_task_create(watch_suspend, 200, LV_TASK_PRIO_HIGH, (void *)WATCH_SUSPEND_KEY); + } + return 1; +} + +void test_gui_init(void) +{ + if (lcd == NULL) { + printf("init LCD\n"); + gui_init(); + } +} + +int test_watch_lcd(void) +{ + int i = 0; + + printf("real test_watch_lcd\n"); + if (lcd == NULL) { + printf("init LCD\n"); + gui_init(); + } + show_poweron_logo(); + + for (i = 0; i < ARRAY_SIZE(panels); ++i) { + unsigned panel_id = 0; + + if (panels[i]->readid(&panel_id) == 0) { + printf("LCD%d Read Display ID = 0x%X\n", i, panel_id); + //#ZC@20210616 skip + if (panel_id == 0x9a01 || panel_id == 0x858552) { + return 1; + } + } + } + + return 0; +} + +//set fotadm tcp server ip +char* get_fotadm_tcp_server_ip() +{ + return "sob-net-web-public-1256182135.cos.ap-chongqing.myqcloud.com"; +} +//set fotadm version +char* get_fotadm_version() +{ + return "K7.01"; +} +//set fota debug log +bool is_debug_fota() +{ + return false; +} +//get fota server port +int get_adups_tcp_server_port() +{ + return 80; +} +//get fota json path +char * get_fotadm_json_path(void) +{ + return "/otatest/update.json"; +} +// #ifdef __cplusplus +// extern "C" { + +// #endif +// #ifdef __cplusplus +// } +// #endif +static int sATPInd = TEL_AT_CMD_ATP_5; +//#include "framework/hal/hwtest/hwtest/hwtest.h" +char AT_read_data[200] = {0}; +int AT_read_data_len = 0; +void at_delay(uint32_t ms) +{ + uos_sleep(ms/5); + //DelayInUs(ms*1000); +} +static int HandleATitem32CARDIDCallback(TelAtParserID chnlId, const char* response, int size) +{ + // MATRspParseRet ret; + // MATReturnPara resp_return; + cplog_printf("HandleATResponseCallback!!!!!!!!!!!!!! \n"); + cplog_printf("SIMCardTest1: size:%d response = %s\n", size,response); + //ASSERT(chnlId == sATPInd); + if(AT_read_data_len + size>sizeof(AT_read_data)) + { + size = sizeof(AT_read_data)-AT_read_data_len; + } + memcpy(&AT_read_data[AT_read_data_len],response,size); + AT_read_data_len += size; + cplog_printf("SIMCardTest2: size:%d response = %s\n", size,response); + + return 0; +} +//#include "hop/telephony/atcmdsrv/inc/teldef.h" +//SendATCMDWaitResp(AT_channel, at_str, 150, "+EPIN",1,"+CME ERROR", resp_str, sizeof(resp_str)); +int item32_CARDID_write(char * data) +{ + int err=0; + char read_cmddata[201]={0}; + char cmdString[201] = {0}; + char *cmd_str ; + + at_delay(100); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + MATSetConfIndCB(sATPInd, HandleATitem32CARDIDCallback); + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + ATRecv(sATPInd, (void*)"AT+CFUN=0\r\n", strlen(cmd_str)); + cplog_printf("item32_CARDID_write1.2:sATPInd:%d \n",sATPInd); + int t_count = 70; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + { + cplog_printf("AT_read_data:%s",AT_read_data); + break; + } + + } + cplog_printf("item32_CARDID_write2:sATPInd:%d \n",sATPInd); + + //cmd_str = "AT*PROD=1\r\n"; + + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + ATRecv(sATPInd, (void*)"AT*PROD=1\r\n", strlen(cmd_str)); + t_count = 70; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + break; + } + + + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + ATRecv(sATPInd, (void*)"AT+CFUN=?\r\n", strlen(cmd_str)); + t_count = 70; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + break; + } + + snprintf(cmdString,200,"AT*MRD_ITEM32=W,CARDID,0101,12NOV2010,%s\r\n",data); + cplog_printf("item32_CARDID_write3:cmdString:%s \n",cmdString); + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + ATRecv(sATPInd, (void*)cmdString, strlen(cmdString)); + t_count = 70; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + break; + } + cplog_printf("t_count:%d",t_count); + + + cplog_printf("item32_CARDID_write4:sATPInd:%d \n",sATPInd); + //cmd_str = "AT*PROD=0\r\n"; + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + ATRecv(sATPInd, (void*)"AT*PROD=0\r\n", strlen(cmd_str)); + t_count = 70; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + break; + } + + + cplog_printf("item32_CARDID_write5:sATPInd:%d \n",sATPInd); + //cmd_str = "AT+CFUN=1\r\n"; + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + cplog_printf("item32_CARDID_write:IsAtCmdSrvReady:%d \n",IsAtCmdSrvReady()); + ATRecv(sATPInd, (void*)"AT+CFUN=1\r\n", strlen(cmd_str)); + cplog_printf("item32_CARDID_write6:sATPInd:%d \n",sATPInd); + t_count = 70; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + break; + } + + +error: + + return err; +} +int tem32_CARDID_read(char * data,int data_MAX_len) +{ + int err=0; + + char *cmd_str = "AT*MRD_ITEM32=R, CARDID\r\n"; + cplog_printf("tem32_CARDID_read1:sATPInd:%d \n",sATPInd); + AT_read_data_len = 0; + memset(AT_read_data,0,sizeof(AT_read_data)); + + cplog_printf("tem32_CARDID_read1.1:sATPInd:%d \n",sATPInd); + MATSetConfIndCB(sATPInd, HandleATitem32CARDIDCallback); + cplog_printf("tem32_CARDID_read1.2:sATPInd:%d \n",sATPInd); + ATRecv(sATPInd, (void*)cmd_str, strlen(cmd_str)); + + int t_count = 100; + while (t_count--) + { + at_delay(5); + if(strstr(AT_read_data,"ok")) + break; + } + + cplog_printf("tem32_CARDID_read1:err:%d str:%s\n",err,AT_read_data); + if(AT_read_data == 0 ) + goto error; + char *data_tmp=AT_read_data; + int count_flag = 0; + while(*data_tmp) + { + if(*data_tmp == ',') + { + count_flag++; + if(count_flag>=3) + { + strncpy(data,data_tmp+1,data_MAX_len); + } + } + + data_tmp++; + } +error: + + return err; +} +#include "factory_mode.c" + + +void mmi_at_antenna_coupling_test_start(void) +{ + char const * command_str0 = "AT+CFUN=0\r\n"; + //if (IsAtCmdSrvReady()) + ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str0, strlen(command_str0)); + + char const * command_str1 = "AT+LTEPOWER=0,8,0\r\n"; + ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str1, strlen(command_str1)); +} + +void mmi_at_antenna_coupling_test_stop(void) +{ + char const * command_str0 = "AT+LTEPOWER=0,1,9\r\n"; + //if (IsAtCmdSrvReady()) + ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str0, strlen(command_str0)); + + char const * command_str1 = "AT+CFUN=1\r\n"; + ATRecv(TEL_AT_CMD_ATP_6, (void*)command_str1, strlen(command_str1)); +} + + +#endif +