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