diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,10 +94,12 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
#include "zf_device_mt9v03x.h"
+#include "zf_device_mt9v03x2.h"
#include "zf_device_oled.h"
#include "zf_device_ov7725.h"
#include "zf_device_scc8660.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c
index 797854f..be622d1 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c
@@ -43,7 +43,7 @@
// 函数简介 全局中断使能
// 参数说明 void
// 返回参数 void
-// 使用示例 interrupt_global_enable(1);
+// 使用示例 interrupt_global_enable(0);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
void interrupt_global_enable (uint32 primask)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.c
index b02109a..9fb5671 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.c
@@ -40,8 +40,10 @@
#include "zf_driver_dma.h"
#include "zf_driver_exti.h"
#include "zf_device_mt9v03x.h"
+#include "zf_device_mt9v03x2.h"
#include "zf_device_ov7725.h"
#include "zf_device_scc8660.h"
+#include "isr_config.h"
#include "zf_device_camera.h"
@@ -132,7 +134,8 @@ uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_siz
destination_addr,
OV7725_PCLK_PIN,
EXTI_TRIGGER_FALLING,
- image_size);
+ image_size,
+ DMA_INT_PRIO);
exti_init(OV7725_VSYNC_PIN, EXTI_TRIGGER_FALLING); //初始化场中断,并设置为下降沿触发中断
break;
case CAMERA_GRAYSCALE: // 总钻风
@@ -144,11 +147,27 @@ uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_siz
source_addr,
destination_addr,
MT9V03X_PCLK_PIN,
- EXTI_TRIGGER_RISING,
- image_size); // 如果超频到300M 倒数第二个参数请设置为FALLING
+ EXTI_TRIGGER_FALLING,
+ image_size,
+ DMA_INT_PRIO); // 如果超频到300M 倒数第二个参数请设置为FALLING
exti_init(MT9V03X_VSYNC_PIN, EXTI_TRIGGER_FALLING); // 初始化场中断,并设置为下降沿触发中断
break;
+ case CAMERA_GRAYSCALE2: // 总钻风
+ for(num = 0; num < 8; num ++)
+ {
+ gpio_init((gpio_pin_enum)(MT9V03X2_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
+ }
+ link_list_num = dma_init(MT9V03X2_DMA_CH,
+ source_addr,
+ destination_addr,
+ MT9V03X2_PCLK_PIN,
+ EXTI_TRIGGER_FALLING,
+ image_size,
+ DMA_INT_PRIO); // 如果超频到300M 倒数第二个参数请设置为FALLING
+
+ exti_init(MT9V03X2_VSYNC_PIN, EXTI_TRIGGER_FALLING); // 初始化场中断,并设置为下降沿触发中断
+ break;
case CAMERA_COLOR: // 凌瞳
for(num=0; num<8; num++)
{
@@ -160,12 +179,100 @@ uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_siz
destination_addr,
SCC8660_PCLK_PIN,
EXTI_TRIGGER_RISING,
- image_size); // 如果超频到300M 倒数第二个参数请设置为FALLING
+ image_size,
+ DMA_INT_PRIO); // 如果超频到300M 倒数第二个参数请设置为FALLING
exti_init(SCC8660_VSYNC_PIN, EXTI_TRIGGER_FALLING); // 初始化场中断,并设置为下降沿触发中断
break;
default:
break;
}
+
+
+ return link_list_num;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 摄像头2采集初始化
+// 参数说明 image_size 图像的大小
+// @return void
+// 参数说明 image_size 图像的大小
+// 参数说明 data_addr 数据来源外设地址
+// 参数说明 buffer_addr 图像缓冲区地址
+// @return void
+// Sample usage: camera_init_2();
+//-------------------------------------------------------------------------------------------------------------------
+uint8 camera_init_2 (uint8 *source_addr, uint8 *destination_addr, uint32 image_size)
+{
+ uint8 num;
+ uint8 link_list_num;
+ switch(camera_type_2)
+ {
+ case CAMERA_BIN_IIC: // IIC 小钻风
+ case CAMERA_BIN_UART: // UART 小钻风
+ for(num = 0; num < 8; num ++)
+ {
+ gpio_init((gpio_pin_enum)(OV7725_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
+ }
+ link_list_num = dma_init_2(OV7725_DMA_CH,
+ source_addr,
+ destination_addr,
+ OV7725_PCLK_PIN,
+ EXTI_TRIGGER_FALLING,
+ image_size,
+ DMA_INT_PRIO_2);
+ exti_init(OV7725_VSYNC_PIN, EXTI_TRIGGER_FALLING); //初始化场中断,并设置为下降沿触发中断
+ break;
+ case CAMERA_GRAYSCALE: // 总钻风
+ for(num = 0; num < 8; num ++)
+ {
+ gpio_init((gpio_pin_enum)(MT9V03X_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
+ }
+ link_list_num = dma_init_2(MT9V03X_DMA_CH,
+ source_addr,
+ destination_addr,
+ MT9V03X_PCLK_PIN,
+ EXTI_TRIGGER_FALLING,
+ image_size,
+ DMA_INT_PRIO_2); // 如果超频到300M 倒数第二个参数请设置为FALLING
+
+ exti_init(MT9V03X_VSYNC_PIN, EXTI_TRIGGER_FALLING); // 初始化场中断,并设置为下降沿触发中断
+ break;
+ case CAMERA_GRAYSCALE2: // 总钻风
+ for(num = 0; num < 8; num ++)
+ {
+ gpio_init((gpio_pin_enum)(MT9V03X2_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
+ }
+ link_list_num = dma_init_2(MT9V03X2_DMA_CH,
+ source_addr,
+ destination_addr,
+ MT9V03X2_PCLK_PIN,
+ EXTI_TRIGGER_FALLING,
+ image_size,
+ DMA_INT_PRIO_2); // 如果超频到300M 倒数第二个参数请设置为FALLING
+
+ exti_init(MT9V03X2_VSYNC_PIN, EXTI_TRIGGER_FALLING); // 初始化场中断,并设置为下降沿触发中断
+ break;
+ case CAMERA_COLOR: // 凌瞳
+ for(num=0; num<8; num++)
+ {
+ gpio_init((gpio_pin_enum)(SCC8660_DATA_PIN + num), GPI, GPIO_LOW, GPI_FLOATING_IN);
+ }
+
+ link_list_num = dma_init_2(SCC8660_DMA_CH,
+ source_addr,
+ destination_addr,
+ SCC8660_PCLK_PIN,
+ EXTI_TRIGGER_RISING,
+ image_size,
+ DMA_INT_PRIO_2); // 如果超频到300M 倒数第二个参数请设置为FALLING
+
+ exti_init(SCC8660_VSYNC_PIN, EXTI_TRIGGER_FALLING); // 初始化场中断,并设置为下降沿触发中断
+ break;
+ default:
+ break;
+ }
+
return link_list_num;
}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.h
index 1793222..913df16 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_camera.h
@@ -53,6 +53,7 @@ void camera_binary_image_decompression (const uint8 *data1, uint8 *data2, uint3
void camera_send_image (uart_index_enum uartn, const uint8 *image_addr, uint32 image_size); // 摄像头图像发送至上位机查看图像
void camera_fifo_init (void); // 摄像头串口 FIFO 初始化
uint8 camera_init (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头采集初始化
+uint8 camera_init_2 (uint8 *source_addr, uint8 *destination_addr, uint32 image_size); // 摄像头2采集初始化
//=================================================摄像头公共库 基础函数================================================
#endif
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h
index 4bcf970..60a51dd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -30,15 +30,14 @@
*
* 修改记录
* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
+* 2025-04-28 JKS first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
* ------------------------------------
* 模块管脚 单片机管脚
-* TXD 查看 zf_device_mt9v03x.h 中 MT9V03X_COF_UART_TX 宏定义
-* RXD 查看 zf_device_mt9v03x.h 中 MT9V03X_COF_UART_RX 宏定义
+* TXD 查看 zf_device_mt9v03x.h 中 MT9V03X_COF_IIC_SCL 宏定义
+* RXD 查看 zf_device_mt9v03x.h 中 MT9V03X_COF_IIC_SDA 宏定义
* PCLK 查看 zf_device_mt9v03x.h 中 MT9V03X_PCLK_PIN 宏定义
* VSY 查看 zf_device_mt9v03x.h 中 MT9V03X_VSYNC_PIN 宏定义
* D0-D7 查看 zf_device_mt9v03x.h 中 MT9V03X_DATA_PIN 宏定义 从该定义开始的连续八个引脚
@@ -55,20 +54,15 @@
#include "zf_device_type.h"
//================================================定义 MT9V03X 基本配置================================================
-#define MT9V03X_COF_UART (UART_1) // 配置摄像头所使用到的串口
-#define MT9V03X_COF_BAUR (9600) // 总钻风配置串口波特率
-#define MT9V03X_COF_UART_TX (UART1_RX_P02_3) // 总钻风 UART-TX 引脚 要接在单片机 RX 上
-#define MT9V03X_COF_UART_RX (UART1_TX_P02_2) // 总钻风 UART-RX 引脚 要接在单片机 TX 上
-
#define MT9V03X_COF_IIC_DELAY (800) // 总钻风 IIC 延时
-#define MT9V03X_COF_IIC_SCL (P02_3) // 总钻风 IIC-SCL 引脚
-#define MT9V03X_COF_IIC_SDA (P02_2) // 总钻风 IIC-SDA 引脚
+#define MT9V03X_COF_IIC_SCL (P33_13) // 总钻风 IIC-SCL 引脚
+#define MT9V03X_COF_IIC_SDA (P32_4) // 总钻风 IIC-SDA 引脚
-#define MT9V03X_DMA_CH (IfxDma_ChannelId_5)
+#define MT9V03X_DMA_CH (IfxDma_ChannelId_7)
-#define MT9V03X_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define MT9V03X_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define MT9V03X_VSYNC_PIN (ERU_CH3_REQ6_P02_0) // 场中断引脚
+#define MT9V03X_VSYNC_PIN (ERU_CH4_REQ8_P33_7) // 场中断引脚
#define MT9V03X_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 P00_0-P00_7
#define MT9V03X_DATA_ADD (get_port_in_addr(MT9V03X_DATA_PIN))
@@ -134,15 +128,14 @@ typedef enum
//================================================声明 MT9V03X 全局变量================================================
extern vuint8 mt9v03x_finish_flag; // 一场图像采集完成标志位
-extern uint8 mt9v03x_image[MT9V03X_H][MT9V03X_W]; // 图像数据存储数组
+extern uint8 mt9v03x_image[MT9V03X_H][MT9V03X_W]; // 图像数据存储数组
+extern int16 mt9v03x_dma_run_flag;
+extern uint8 mt9v03x_init_flag;
//================================================声明 MT9V03X 全局变量================================================
//================================================声明 MT9V03X 基础函数================================================
-uint16 mt9v03x_get_version (void); // 获取摄像头固件版本
-uint8 mt9v03x_set_exposure_time (uint16 light); // 单独设置摄像头曝光时间
-uint8 mt9v03x_set_reg (uint8 addr, uint16 data); // 对摄像头内部寄存器进行写操作
-uint8 mt9v03x_init (void); // MT9V03X 摄像头初始化
+uint8 mt9v03x_init (void); // MT9V03X 摄像头初始化
//================================================声明 MT9V03X 基础函数================================================
#endif
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c
index 8a0aa59..29e943c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c
@@ -58,6 +58,7 @@
#include "zf_driver_uart.h"
#include "zf_device_camera.h"
#include "zf_device_type.h"
+#include "isr_config.h"
#include "zf_device_ov7725.h"
vuint8 ov7725_finish_flag = 0;
@@ -342,7 +343,8 @@ static void ov7725_vsync_handler(void)
ov7725_image_binary[0],
OV7725_PCLK_PIN,
EXTI_TRIGGER_RISING,
- OV7725_IMAGE_SIZE);
+ OV7725_IMAGE_SIZE,
+ DMA_INT_PRIO);
dma_enable(OV7725_DMA_CH);
}
else
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c
index 306d459..d9ae5a9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c
@@ -60,7 +60,7 @@
#include "zf_device_camera.h"
#include "zf_device_type.h"
#include "zf_device_config.h"
-
+#include "isr_config.h"
#include "zf_device_scc8660.h"
vuint8 scc8660_finish_flag = 0; // 一场图像采集完成标志位
@@ -498,7 +498,8 @@ static void scc8660_vsync_handler(void)
(uint8 *)scc8660_image[0],
SCC8660_PCLK_PIN,
EXTI_TRIGGER_RISING,
- SCC8660_IMAGE_SIZE);
+ SCC8660_IMAGE_SIZE,
+ DMA_INT_PRIO);
dma_enable(SCC8660_DMA_CH);
}
else
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.c
index 6973f9e..08ff4bb 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.c
@@ -44,6 +44,13 @@ callback_function camera_uart_handler = type_default_callback;
callback_function camera_vsync_handler = type_default_callback; // 场中断函数指针,根据初始化时设置的函数进行跳转
callback_function camera_dma_handler = type_default_callback; // DMA完成中断函数指针,根据初始化时设置的函数进行跳转
+
+camera_type_enum camera_type_2 = NO_CAMERE; // 摄像头类型变量
+callback_function camera_uart_handler_2 = type_default_callback; // 串口通讯中断函数指针,根据初始化时设置的函数进行跳转
+callback_function camera_vsync_handler_2 = type_default_callback; // 场中断函数指针,根据初始化时设置的函数进行跳转
+callback_function camera_dma_handler_2 = type_default_callback; // DMA完成中断函数指针,根据初始化时设置的函数进行跳转
+
+
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
@@ -79,6 +86,25 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
camera_dma_handler = ((dma_callback == NULL) ? (type_default_callback) : (dma_callback));
}
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置摄像头2类型
+// 参数说明 type_set 选定的摄像头类型
+// 参数说明 vsync_callback 设备的场中断回调函数
+// 参数说明 dma_callback 设备的 DMA 完成中断回调函数
+// 参数说明 uart_callback 设备的串口回调函数
+// 返回参数 void
+// 使用示例 set_camera_type_2(CAMERA_GRAYSCALE);
+// 备注信息 一般由各摄像头初始化内部调用
+//-------------------------------------------------------------------------------------------------------------------
+void set_camera_type_2 (camera_type_enum type_set, callback_function vsync_callback, callback_function dma_callback, callback_function uart_callback)
+{
+ camera_type_2 = type_set;
+ camera_uart_handler_2 = ((uart_callback == NULL) ? (type_default_callback) : (uart_callback));
+ camera_vsync_handler_2 = ((vsync_callback == NULL) ? (type_default_callback) : (vsync_callback));
+ camera_dma_handler_2 = ((dma_callback == NULL) ? (type_default_callback) : (dma_callback));
+
+}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 设置无线模块类型
// 参数说明 type_set 选定的无线模块类型
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.h
index 8a57e72..c284072 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_type.h
@@ -47,6 +47,7 @@ typedef enum
CAMERA_BIN_IIC, // 小钻风 IIC 版本
CAMERA_BIN_UART, // 小钻风 UART 版本
CAMERA_GRAYSCALE, // 总钻风
+ CAMERA_GRAYSCALE2, // 总钻风2
CAMERA_COLOR, // 凌瞳
}camera_type_enum;
@@ -81,6 +82,12 @@ extern callback_function camera_vsync_handler;
extern callback_function camera_uart_handler; // 串口通讯中断函数指针,根据初始化时设置的函数进行跳转
extern callback_function wireless_module_spi_handler; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
+extern camera_type_enum camera_type_2; // 摄像头类型变量
+extern callback_function camera_uart_handler_2; // 串口通讯中断函数指针,根据初始化时设置的函数进行跳转
+extern callback_function camera_vsync_handler_2; // 场中断函数指针,根据初始化时设置的函数进行跳转
+extern callback_function camera_dma_handler_2; // DMA完成中断函数指针,根据初始化时设置的函数进行跳转
+
+
extern tof_type_enum tof_type; // ToF 模块 类型
extern callback_function tof_module_exti_handler; // ToF 模块 INT 更新中断
//===========================================声明 回调函数指针及外设 类型==============================================
@@ -88,6 +95,7 @@ extern callback_function tof_module_exti_handler;
//=============================================声明 中断回调 基础函数================================================
void set_camera_type (camera_type_enum type_set, callback_function vsync_callback, callback_function dma_callback, callback_function uart_callback);
+void set_camera_type_2 (camera_type_enum type_set, callback_function vsync_callback, callback_function dma_callback, callback_function uart_callback);
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback);
void set_tof_type (tof_type_enum type_set, callback_function exti_callback);
//=============================================声明 中断回调 基础函数================================================
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c
index 1cd2037..a8f0073 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c
@@ -47,13 +47,16 @@ typedef struct
#if(0 == DMA_INT_SERVICE)
#pragma section all "cpu0_dsram"
-IFX_ALIGN(256) DMA_LINK dma_link_list;
#elif(1 == DMA_INT_SERVICE)
#pragma section all "cpu1_dsram"
-IFX_ALIGN(256) DMA_LINK dma_link_list;
#endif
+
+IFX_ALIGN(256) DMA_LINK dma_link_list;
+IFX_ALIGN(256) DMA_LINK dma_link_list_2;
+
+
#pragma section all restore
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 dma初始化
@@ -67,7 +70,7 @@ IFX_ALIGN(256) DMA_LINK dma_link_list;
// 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count)
+uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count, uint8 isr_prio)
{
IfxDma_Dma_Channel dmaChn;
@@ -118,7 +121,9 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
{
cfg.shadowControl = IfxDma_ChannelShadow_linkedList;
cfg.operationMode = IfxDma_ChannelOperationMode_continuous;
+
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list.linked_list[1]);
+
}
cfg.requestMode = IfxDma_ChannelRequestMode_oneTransferPerRequest;
@@ -134,7 +139,9 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
cfg.channelId = (IfxDma_ChannelId)dma_ch;
cfg.hardwareRequestEnabled = FALSE;
cfg.channelInterruptEnabled = TRUE;
- cfg.channelInterruptPriority = DMA_INT_PRIO;
+ cfg.channelInterruptPriority = isr_prio;
+
+
cfg.channelInterruptTypeOfService = DMA_INT_SERVICE;
@@ -153,25 +160,162 @@ uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_
cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i);
if(i == (list_num - 1))
{
+
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[0]);
}
else
{
+
cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list.linked_list[i+1]);
}
cfg.transferCount = (uint16)single_channel_dma_count;
+
IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list.linked_list[i], &cfg);
i++;
}
}
- IfxDma_Dma_getSrcPointer(&dma_link_list.channel)->B.CLRR = 1;
+
+
+ IfxDma_Dma_getSrcPointer(&dma_link_list.channel)->B.CLRR = 1;
+
+
return list_num;
}
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 dma2初始化
+// 参数说明 dma_ch 选择DMA通道
+// 参数说明 source_addr 设置源地址
+// 参数说明 destination_addr 设置目的地址
+// 参数说明 exti_pin 设置触发的eru通道
+// 参数说明 trigger 设置触发方式
+// 参数说明 dma_count 设置dma搬移次数
+// 返回参数 uint8
+// 使用示例 dma_init(MT9V03X_DMA_CH, MT9V03X_DATA_ADD, mt9v03x_image[0], MT9V03X_PCLK_PIN, EXTI_TRIGGER_RISING, MT9V03X_IMAGE_SIZE);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 dma_init_2 (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum exti_pin, exti_trigger_enum trigger, uint32 dma_count, uint8 isr_prio)
+{
+ IfxDma_Dma_Channel dmaChn;
+
+ exti_init(exti_pin, trigger); // eru触发DMA通道号 在eru文件中设置eru的优先级,即为触发的通道
+
+ IfxDma_Dma_Config dmaConfig;
+ IfxDma_Dma_initModuleConfig(&dmaConfig, &MODULE_DMA);
+
+ IfxDma_Dma dma;
+ IfxDma_Dma_initModule(&dma, &dmaConfig);
+
+ IfxDma_Dma_ChannelConfig cfg;
+ IfxDma_Dma_initChannelConfig(&cfg, &dma);
+
+ uint8 list_num, i;
+ uint32 single_channel_dma_count;
+
+ zf_assert(!(dma_count % 8)); // 传输次数必须为8的倍数
+
+
+ list_num = 1;
+ single_channel_dma_count = dma_count / list_num;
+ if(16384 < single_channel_dma_count)
+ {
+ while(TRUE)
+ {
+ single_channel_dma_count = dma_count / list_num;
+ if((single_channel_dma_count <= 16384) && !(dma_count % list_num))
+ {
+ break;
+ }
+ list_num++;
+ if(list_num > 10)
+ {
+ zf_assert(FALSE);
+ }
+ }
+ }
+
+
+ if(1 == list_num)
+ {
+ cfg.shadowControl = IfxDma_ChannelShadow_none;
+ cfg.operationMode = IfxDma_ChannelOperationMode_single;
+ cfg.shadowAddress = 0;
+ }
+ else
+ {
+ cfg.shadowControl = IfxDma_ChannelShadow_linkedList;
+ cfg.operationMode = IfxDma_ChannelOperationMode_continuous;
+
+ cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (unsigned)&dma_link_list_2.linked_list[1]);
+
+ }
+
+ cfg.requestMode = IfxDma_ChannelRequestMode_oneTransferPerRequest;
+ cfg.moveSize = IfxDma_ChannelMoveSize_8bit;
+ cfg.busPriority = IfxDma_ChannelBusPriority_high;
+
+ cfg.sourceAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), source_addr);
+ cfg.sourceAddressCircularRange = IfxDma_ChannelIncrementCircular_none;
+ cfg.sourceCircularBufferEnabled = TRUE;
+
+ cfg.destinationAddressIncrementStep = IfxDma_ChannelIncrementStep_1;
+
+ cfg.channelId = (IfxDma_ChannelId)dma_ch;
+ cfg.hardwareRequestEnabled = FALSE;
+ cfg.channelInterruptEnabled = TRUE;
+ cfg.channelInterruptPriority = isr_prio;
+
+
+ cfg.channelInterruptTypeOfService = DMA_INT_SERVICE_2 ;
+
+
+
+ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr);
+
+ cfg.transferCount = (uint16)single_channel_dma_count;
+
+ IfxDma_Dma_initChannel(&dmaChn, &cfg);
+
+ if(1 < list_num)
+ {
+ i = 0;
+ while(i < list_num)
+ {
+ cfg.destinationAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), destination_addr + single_channel_dma_count * i);
+ if(i == (list_num - 1))
+ {
+
+ cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list_2.linked_list[0]);
+
+
+ }
+ else
+ {
+
+
+ cfg.shadowAddress = IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (uint32)&dma_link_list_2.linked_list[i+1]);
+
+
+
+ }
+ cfg.transferCount = (uint16)single_channel_dma_count;
+
+ IfxDma_Dma_initLinkedListEntry((void *)&dma_link_list_2.linked_list[i], &cfg);
+
+
+ i++;
+ }
+ }
+
+ IfxDma_Dma_getSrcPointer(&dma_link_list_2.channel)->B.CLRR = 1;
+
+ return list_num;
+}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 dma 传输禁止
// 参数说明 ch 选择 dma 通道 (详见 zf_driver_dma.h 中枚举 dma_channel_enum 定义)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h
index d398875..2ebe2fc 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h
@@ -45,7 +45,8 @@
#define dma_set_destination(dma_ch, destination_addr) (IfxDma_setChannelDestinationAddress(&MODULE_DMA, (dma_ch), (void *)IFXCPU_GLB_ADDR_DSPR(IfxCpu_getCoreId(), (destination_addr))))
//====================================================DMA 基础函数====================================================
-uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count);
+uint8 dma_init (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count, uint8 isr_prio);
+uint8 dma_init_2 (IfxDma_ChannelId dma_ch, uint8 *source_addr, uint8 *destination_addr, exti_pin_enum eru_pin, exti_trigger_enum trigger, uint32 dma_count, uint8 isr_prio);
void dma_disable (IfxDma_ChannelId dma_ch);
void dma_enable (IfxDma_ChannelId dma_ch);
//====================================================DMA 基础函数====================================================
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 83225b1..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "使用双摄的情况下 帧率会降低3倍,所以需要设置帧率*3"
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c
index 44b6778..06930e8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -107,7 +107,6 @@ static void mt9v03x_vsync_handler(void)
return ;
}
- gpio_set_level(P21_2, 0);
mt9v03x_dma_int_num = 0;
if(mt9v03x_dma_init_flag )
{
@@ -168,7 +167,6 @@ static void mt9v03x_dma_handler(void)
mt9v03x_dma_run_flag = 0;
mt9v03x2_dma_run_flag = 1;
-
dma_disable(MT9V03X_DMA_CH);
}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x2.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x2.h
index 2647def..46c5262 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x2.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x2.h
@@ -80,7 +80,7 @@
// 如果自动曝光开启 EXP_TIME命令设置自动曝光时间的上限
// 一般情况是不需要开启自动曝光设置 如果遇到光线非常不均匀的情况可以尝试设置自动曝光,增加图像稳定性
#define MT9V03X2_EXP_TIME_DEF ( 512 ) // 曝光时间 摄像头收到后会自动计算出最大曝光时间,如果设置过大则设置为计算出来的最大曝光值
-#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS
+#define MT9V03X2_FPS_DEF ( 50 ) // 图像帧率 摄像头收到后会自动计算出最大FPS,如果过大则设置为计算出来的最大FPS "
#define MT9V03X2_LR_OFFSET_DEF ( 0 ) // 图像左右偏移量 正值 右偏移 负值 左偏移 列为188 376 752时无法设置偏移
// 摄像头收偏移数据后会自动计算最大偏移,如果超出则设置计算出来的最大偏移
#define MT9V03X2_UD_OFFSET_DEF ( 0 ) // 图像上下偏移量 正值 上偏移 负值 下偏移 行为120 240 480时无法设置偏移
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/Example_dual_camera/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Example/Example_dual_camera/Motherboard_Demo.7z b/Example/Example_dual_camera/Motherboard_Demo.7z
index 4d402e9..3446567 100644
Binary files a/Example/Example_dual_camera/Motherboard_Demo.7z and b/Example/Example_dual_camera/Motherboard_Demo.7z differ
diff --git a/Example/Example_dual_camera/~$銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx b/Example/Example_dual_camera/~$銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx
new file mode 100644
index 0000000..6d84e85
Binary files /dev/null and b/Example/Example_dual_camera/~$銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx differ
diff --git a/Example/Example_dual_camera/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx b/Example/Example_dual_camera/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx
index c2ef786..fb0d899 100644
Binary files a/Example/Example_dual_camera/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx and b/Example/Example_dual_camera/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx differ
diff --git a/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E01_gpio_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E02_uart_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E03_adc_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E04_pwm_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E05_pit_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E06_exit_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E07_encoder_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E08_eeprom_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E09_timer_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E13_dual_core_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.c b/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.h b/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Example/Example_general/Coreboard_Demo/E15_fft_demo/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Example/Example_general/Motherboard_Demo.7z b/Example/Example_general/Motherboard_Demo.7z
index 2db4521..c50a997 100644
Binary files a/Example/Example_general/Motherboard_Demo.7z and b/Example/Example_general/Motherboard_Demo.7z differ
diff --git a/Example/Example_general/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx b/Example/Example_general/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx
index d9aac4d..a588da5 100644
Binary files a/Example/Example_general/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx and b/Example/Example_general/銆愬繀璇汇戜緥绋嬪姛鑳借鏄.xlsx differ
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
index 62ea9a8..81f17ae 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h
index d549fa4..202c992 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h
@@ -67,7 +67,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1A_XS_PIN (P20_10)
+#define DL1A_XS_PIN (P20_2)
#define DL1A_INT_ENABLE ( 1 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1A_INT_ENABLE
#define DL1A_INT_PIN (ERU_CH1_REQ10_P14_3)
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h
index 89d2bf6..c9f480c 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h
@@ -65,7 +65,7 @@
#error "暂不支持硬件IIC通讯"
#endif
-#define DL1B_XS_PIN ( P20_10 )
+#define DL1B_XS_PIN ( P20_2 )
#define DL1B_INT_ENABLE ( 0 ) // 是否启用 INT 引脚 启用则会自动更新数据
#if DL1B_INT_ENABLE
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h
index d653742..ffd0dc9 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h
@@ -60,15 +60,15 @@
#define OV7725_COF_UART_RX (UART1_TX_P02_2) // 小钻风 UART-RX 引脚 要接在单片机 TX 上
#define OV7725_COF_IIC_DELAY (640 ) // 小钻风 IIC 延时
-#define OV7725_COF_IIC_SCL (P02_3) // 小钻风 IIC-SCL 引脚
-#define OV7725_COF_IIC_SDA (P02_2) // 小钻风 IIC-SDA 引脚
+#define OV7725_COF_IIC_SCL (P33_13) // 小钻风 IIC-SCL 引脚
+#define OV7725_COF_IIC_SDA (P32_4) // 小钻风 IIC-SDA 引脚
-#define OV7725_DMA_CH (IfxDma_ChannelId_5) // ERU触发DMA通道禁止随意修改
+#define OV7725_DMA_CH (IfxDma_ChannelId_7) // ERU触发DMA通道禁止随意修改
-#define OV7725_PCLK_PIN (ERU_CH2_REQ14_P02_1) // GPIO触发TIM引脚禁止随意修改
+#define OV7725_PCLK_PIN (ERU_CH1_REQ10_P14_3) // GPIO触发TIM引脚禁止随意修改
-#define OV7725_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
-#define OV7725_VSYNC_PORT_PIN (P02_0 ) // 场中断引脚
+#define OV7725_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
+#define OV7725_VSYNC_PORT_PIN (P33_7 ) // 场中断引脚
#define OV7725_DATA_PIN (P00_0 ) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define OV7725_DATA_ADD get_port_in_addr(OV7725_DATA_PIN)
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
index 98c5364..5a944d8 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
@@ -60,12 +60,12 @@
#define SCC8660_COF_UART_RX (UART1_TX_P02_2) // 凌瞳 UART-RX 引脚 要接在单片机 TX 上
#define SCC8660_COF_IIC_DELAY (800) // 凌瞳 IIC 延时
-#define SCC8660_COF_IIC_SCL (P02_3) // 凌瞳 IIC-SCL 引脚
-#define SCC8660_COF_IIC_SDA (P02_2) // 凌瞳 IIC-SDA 引脚
+#define SCC8660_COF_IIC_SCL (P33_13) // 凌瞳 IIC-SCL 引脚
+#define SCC8660_COF_IIC_SDA (P32_4) // 凌瞳 IIC-SDA 引脚
-#define SCC8660_DMA_CH (IfxDma_ChannelId_5)
-#define SCC8660_PCLK_PIN (ERU_CH2_REQ14_P02_1) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
-#define SCC8660_VSYNC_PIN (ERU_CH3_REQ6_P02_0 ) // 场中断引脚
+#define SCC8660_DMA_CH (IfxDma_ChannelId_7)
+#define SCC8660_PCLK_PIN (ERU_CH1_REQ10_P14_3) // PCLK 触发信号 TIM_ETR 引脚禁止随意修改
+#define SCC8660_VSYNC_PIN (ERU_CH4_REQ8_P33_7 ) // 场中断引脚
#define SCC8660_DATA_PIN (P00_0) // 数据引脚 这里是 只能是 GPIOx0 或者 GPIOx8 开始 连续八个引脚例如 F0-F7
#define SCC8660_DATA_ADD (get_port_in_addr(SCC8660_DATA_PIN))
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
index 0f392ff..deb44d5 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
@@ -57,7 +57,7 @@
#define WIFI_UART_TX_PIN (UART2_RX_P10_6) // 连接 WIFI 模块 TX
#define WIFI_UART_RX_PIN (UART2_TX_P10_5) // 连接 WIFI 模块 RX
#define WIFI_UART_BAUD (115200) // 模块工作波特率
-#define WIFI_UART_RTS_PIN (P10_2) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
+#define WIFI_UART_RTS_PIN (P33_8) // 定义流控位引脚 指示当前模块是否可以接受数据 0-可以继续接收 1-不可以继续接收
#define WIFI_UART_HARDWARE_RST (1) // 定义是否使用硬件复位引脚 0-使用软件复位 1-使用硬件 RST
#if WIFI_UART_HARDWARE_RST // 建议使用硬件复位引脚 否则容易出现单片机复位后无法正常初始化模块
#define WIFI_UART_RST_PIN (P11_6) // 定义硬件复位引脚
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h
index 1697e12..5295fbd 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_dual_camera_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h
@@ -55,7 +55,7 @@
#define WIRELESS_UART_BUAD_RATE (115200) // 无线串口对应使用的串口波特率
#define WIRELESS_UART_TX_PIN (UART2_RX_P10_6) // 无线串口对应模块的 TX 要接到单片机的 RX
#define WIRELESS_UART_RX_PIN (UART2_TX_P10_5) // 无线串口对应模块的 RX 要接到单片机的 TX
-#define WIRELESS_UART_RTS_PIN (P10_2) // 无线串口对应模块的 RTS 引脚
+#define WIRELESS_UART_RTS_PIN (P33_8) // 无线串口对应模块的 RTS 引脚
//====================================================自动波特率====================================================
// 注意事项1:无线转串口模块版本是V2.0以下的是无法开启自动波特率的。
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
index 0bcee5a..27b7965 100644
--- a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
@@ -94,6 +94,7 @@
#include "zf_device_imu963ra.h"
#include "zf_device_ips114.h"
#include "zf_device_ips200.h"
+#include "zf_device_ips200pro.h"
#include "zf_device_key.h"
#include "zf_device_menc15a.h"
#include "zf_device_mpu6050.h"
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.c b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.c
new file mode 100644
index 0000000..80aa146
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.c
@@ -0,0 +1,995 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "zf_common_debug.h"
+#include "zf_common_function.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_soft_spi.h"
+#include "zf_driver_spi.h"
+#include "zf_device_type.h"
+#include "zf_device_config.h"
+#include "zf_device_ips200pro.h"
+
+#define IPS200PRO_SPI_LENGTH ( 4096 ) // 每次SPI通讯最大长度 不可修改
+
+// 不可修改
+#define MAX_ID_PAGE ( 30 )
+#define MAX_ID_LABEL ( 50 )
+#define MAX_ID_TABLE ( 20 )
+#define MAX_ID_METER ( 10 )
+#define MAX_ID_CLOCK ( 1 )
+#define MAX_ID_PROGRESS_BAR ( 20 )
+#define MAX_ID_CALENDAR ( 1 )
+#define MAX_ID_WAVEFORM ( 5 )
+#define MAX_ID_IMAGE ( 5 )
+#define MAX_ID_IMAGE_LINE ( 10 )
+#define MAX_ID_IMAGE_RECTANGLE ( 5 )
+
+ips200pro_information_struct ips200pro_information;
+ips200pro_time_struct ips200pro_time;
+static uint8 ips200pro_page_num = 0;
+static char ips200pro_printf_buffer[51];
+typedef enum
+{
+ IPS200PRO_PARAMETER_SET = 0x01, // 设置系统参数命令
+ IPS200PRO_PARAMETER_GET, // 获取系统参数命令
+ IPS200PRO_WIDGETS_PAGE = 0x10, // 页面组件
+ IPS200PRO_WIDGETS_LABEL, // 文本标签组件
+ IPS200PRO_WIDGETS_TABLE, // 表格组件
+ IPS200PRO_WIDGETS_METER, // 仪表组件
+ IPS200PRO_WIDGETS_CLOCK, // 时钟组件
+ IPS200PRO_WIDGETS_BAR, // 进度条组件
+ IPS200PRO_WIDGETS_CALENDAR, // 日历组件
+ IPS200PRO_WIDGETS_WAVEFORM, // 波形组件
+ IPS200PRO_WIDGETS_IMAGE, // 图像组件
+ IPS200PRO_WIDGETS_CONTAINER, // 容器组件
+ IPS200PRO_WIDGETS_MAX, // 占位使用
+}ips200pro_command1_enum;
+
+// 系统参数的子命令与屏幕组件的子命令
+typedef enum
+{
+ // 可读可写的参数
+ IPS200PRO_SYSTEM_DATE = 0x01,// 系统日期
+ IPS200PRO_SYSTEM_TIME, // 系统时间
+ IPS200PRO_SYSTEM_PARENT, // 父对象
+ IPS200PRO_SYSTEM_CODED_FORMAT, // 编码格式
+ IPS200PRO_SYSTEM_BACKLIGHT, // 背光亮度
+ IPS200PRO_SYSTEM_DIRECTION, // 屏幕显示方向
+ IPS200PRO_SYSTEM_CRC_STATE, // CRC使能状态
+ IPS200PRO_SYSTEM_FONT_SIZE, // 全局字体
+ SCREEN_SYSTEM_OPTIMIZE, // 优化 目前仅针对图像进行优化(默认优化开启)
+ IPS200PRO_SYSTEM_THEME, // 系统主题
+ IPS200PRO_SYSTEM_SET_MAX, // 占位使用
+
+ // 仅可读的参数
+ IPS200PRO_SYSTEM_INFORMATION = 0x10, // 屏幕ID编号、分辨率、固件版本
+ IPS200PRO_SYSTEM_FREE_STACK, // 系统空闲栈大小
+ IPS200PRO_SYSTEM_GET_MAX, // 占位使用
+
+ // 通用操作命令
+ IPS200PRO_COMMON_CREATE = 0x01, // 组件创建
+ IPS200PRO_COMMON_DELETE, // 组件删除
+ IPS200PRO_COMMON_FONT_SIZE, // 组件字体大小
+ IPS200PRO_COMMON_COLOR, // 组件颜色
+ IPS200PRO_COMMON_VALUE, // 组件数值 不同组件数据类型不同
+ IPS200PRO_COMMON_POSITION, // 组件位置
+ IPS200PRO_COMMON_HIDDEN, // 组件隐藏
+ IPS200PRO_COMMON_MAX, // 占位
+
+ // PAGE组件专用命令
+ IPS200PRO_PAGE_SWITCH = 0x10, // 切换页面
+ IPS200PRO_PAGE_TITLE, // 设置页面标题显示位置与宽度
+ IPS200PRO_PAGE_MAX,
+
+ // LABEL组件专用命令
+ IPS200PRO_LABEL_LONG_MODE = 0x10, // 长文本模式
+ IPS200PRO_LABEL_MAX,
+
+ // TABLE组件专用命令
+ IPS200PRO_TABLE_COL_WIDTH = 0x10, // 表格列宽度设置 行高由屏幕自动调整,无法设置
+ IPS200PRO_TABLE_SELECT, // 表格中单元格选中
+ IPS200PRO_TABLE_MAX,
+
+ // WAVEFORM组件专用命令
+ IPS200PRO_WAVEFORM_LINE_STATE = 0x10, // 隐藏指定线条
+ IPS200PRO_WAVEFORM_LINE_TYPE, // 设置组件中线条的类型
+ IPS200PRO_WAVEFORM_CLEAR, // 将所有数据清空
+ IPS200PRO_WAVEFORM_MAX,
+
+ // IMAGE组件专用命令
+ IPS200PRO_IMAGE_DRAW_LINE = 0x10, // 图像画线
+ IPS200PRO_IMAGE_DRAW_RECTANGLE, // 图像画框
+ IPS200PRO_IMAGE_MAX,
+}ips200pro_command2_enum;
+
+
+// 这里使用宏定义的方式,目的是为了避免使用匿名结构体,导致部分IDE无法在线调试的时候查看匿名结构体的数据
+#define IPS200PRO_HEADER \
+ uint8 command1; /* 命令1 */ \
+ uint8 command2; /* 命令2 */ \
+ uint8 check_crc8; /* CRC校验、默认未启用 */ \
+ uint8 widgets_id; /* ID编号 */ \
+ uint32 length /* 数据包长度 */ \
+
+typedef struct
+{
+ IPS200PRO_HEADER;
+}ips200pro_header_struct;
+
+// 数据拆分联合体
+typedef union
+{
+ int8 int8_data[2]; // 有符号字节数据
+ uint8 uint8_data[2]; // 无符号字节数据
+ int16 int16_data; // 有符号半字数据
+ uint16 uint16_data; // 无符号半字数据
+}data_split_union;
+
+
+// 通用结构体
+#define IPS200PRO_COMMON_STRUCT(name, num) \
+ struct common_packet\
+ {\
+ IPS200PRO_HEADER; \
+ data_split_union data[num]; \
+ }name;
+
+#define ips200pro_write_8bit_data_spi_array(data, len) (spi_write_8bit_array(IPS200PRO_SPI_INDEX, (data), (len)))
+#define ips200pro_transfer_8bit_data_spi_array(tx_data, rx_data, len) (spi_transfer_8bit(IPS200PRO_SPI_INDEX, (tx_data), (rx_data), (len)))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕等待函数
+// 参数说明 wait_time 等待时间
+// 返回参数 uint8 1:超时退出 0:未超时
+// 使用示例
+// 备注信息 内部使用,用户无需关心
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 ips200pro_wait_idle (uint32 wait_time)
+{
+ wait_time = wait_time * 100;
+
+ while(0 == gpio_get_level(IPS200PRO_INT_PIN) && (0 != wait_time))
+ {
+ func_soft_delay(1000);
+ wait_time--;
+ }
+ return (!wait_time);
+}
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+static uint8 ips200pro_calculate_crc8(uint8 *data, uint32 length)
+{
+ uint8 i, crc = 0;
+ while(length--)
+ {
+ crc ^= *data++;
+ for (i = 0; i < 8; i++)
+ {
+ crc = (crc & 0x80) ? ((crc << 1) ^ 0x07) : (crc <<= 1);
+ }
+ }
+ return crc;
+}
+#endif
+
+uint8 ips200pro_send_buffer(const void *buffer, uint32 length, uint32 time_out, uint8 end_flag)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_write_8bit_data_spi_array((const uint8 *)buffer, length);
+ if(1 == end_flag)
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return_state = 0;
+ }
+ return return_state;
+}
+
+
+uint8 ips200pro_receive_buffer(void *buffer, uint32 length, uint32 time_out)
+{
+ uint8 return_state = 1;
+
+ if( ((0 == time_out) || (0 == ips200pro_wait_idle(time_out))) // 等待未超时
+ && (IPS200PRO_SPI_LENGTH >= length) // 数据量未超过限制
+ && (NULL != buffer)) // 指针不为空
+ {
+ gpio_low(IPS200PRO_CS_PIN);
+ ips200pro_transfer_8bit_data_spi_array((const uint8 *)buffer, (uint8 *)buffer, length);
+ gpio_high(IPS200PRO_CS_PIN);
+ return_state = 0;
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_write_packet(ips200pro_command1_enum command1, ips200pro_command2_enum command2, uint8 widgets_id, ips200pro_header_struct *temp, uint32 length, const void *buffer, uint32 buffer_length)
+{
+ uint8 return_state = 1;
+
+ temp->command1 = command1;
+ temp->command2 = command2;
+ temp->widgets_id = widgets_id;
+ temp->length = length + buffer_length;
+#if(1 == IPS200PRO_CRC_ENABLE)
+ temp->check_crc8 = 0;
+ temp->check_crc8 = ips200pro_calculate_crc8((uint8 *)temp, length);
+#endif
+
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, NULL == buffer);
+ if((0 == return_state) && (NULL != buffer) && (0 != buffer_length))
+ {
+ return_state = ips200pro_send_buffer(buffer, buffer_length, 0, 1);
+ }
+ else
+ {
+ gpio_high(IPS200PRO_CS_PIN);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_read_parameter(ips200pro_command2_enum command2, ips200pro_header_struct *temp, uint8 length)
+{
+ uint8 return_state;
+
+ temp->command1 = IPS200PRO_PARAMETER_GET;
+ temp->command2 = command2;
+ temp->length = length;
+ // 发送命令
+ return_state = ips200pro_send_buffer(temp, length, IPS200PRO_WAIT_TIME, 1);
+ // 读取数据
+ temp->command1 = 0x00;
+ return_state = ips200pro_receive_buffer(temp, length, IPS200PRO_WAIT_TIME);
+ //*parameter = temp.data[0].uint8_data[0];
+ return return_state;
+}
+
+uint8 ips200pro_set_date(uint16 year, uint8 month, uint8 day)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = day;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_time(uint8 hour, uint8 minute, uint8 second)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = hour;
+ temp.data[0].uint8_data[1] = minute;
+ temp.data[1].uint8_data[0] = second;
+ temp.data[1].uint8_data[1] = 0;
+
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_TIME, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_parent(uint16 child_id, uint16 parent_id)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint8_data[0] = (uint8)child_id;
+ temp.data[0].uint8_data[1] = child_id >> 8;
+ temp.data[1].uint8_data[0] = (uint8)parent_id;
+ temp.data[1].uint8_data[1] = parent_id >> 8;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_PARENT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_format(ips200pro_format_enum format)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = format;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CODED_FORMAT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_backlight(uint8 backlight)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = backlight;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_BACKLIGHT, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_direction(ips200pro_display_direction_enum dir)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = dir;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_DIRECTION, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_crc_state(uint8 crc_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = crc_state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_CRC_STATE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_default_font(ips200pro_font_size_enum font)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = font;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, IPS200PRO_SYSTEM_FONT_SIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_optimize(uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint8_data[0] = state;
+ return_state = ips200pro_write_packet(IPS200PRO_PARAMETER_SET, SCREEN_SYSTEM_OPTIMIZE, 0, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_get_date(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_DATE, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->year, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_time(ips200pro_time_struct *time)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_TIME, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ memcpy(&time->hour, &(temp.data[0]), 4);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_information(ips200pro_information_struct *information)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_INFORMATION, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ information->version_major = temp.widgets_id; // 主版本
+ memcpy(&information->id, &(temp.data[0]), 8);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_get_free_stack_size(uint32 *stack_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ return_state = ips200pro_read_parameter(IPS200PRO_SYSTEM_FREE_STACK, (ips200pro_header_struct *)&temp, sizeof(temp));
+ if(0 == return_state)
+ {
+ *stack_size = *((uint32 *)&temp.data[0]);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_create_widgets(uint16 widgets_id, int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ temp.data[2].uint16_data = width;
+ temp.data[3].uint16_data = height;
+
+ if(ips200pro_page_num || (IPS200PRO_WIDGETS_PAGE == (widgets_id >> 8)))
+ {
+ // 只有在页面已经创建后,才允许创建其他组件
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_CREATE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+
+ return return_state;
+}
+
+uint8 ips200pro_delete_widgets(uint16 widgets_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_DELETE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_font(uint16 widgets_id, ips200pro_font_size_enum font_size)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = font_size;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_FONT_SIZE, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_color(uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = color_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_COLOR, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_position(uint16 widgets_id, int16 x, int16 y)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].int16_data = x;
+ temp.data[1].int16_data = y;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_POSITION, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_set_hidden(uint16 widgets_id, uint8 state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = state;
+ return_state = ips200pro_write_packet(widgets_id >> 8, IPS200PRO_COMMON_HIDDEN, (uint8)widgets_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_page_create(char *str)
+{
+ uint8 return_state = 1;
+
+ if(MAX_ID_PAGE > ips200pro_page_num)
+ {
+ return_state = ips200pro_create_widgets(++ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8), 0, 0, 0, 0);
+ if(1 == return_state)
+ {
+ ips200pro_page_num--;
+ }
+ else if(NULL != str)
+ {
+ return_state = ips200pro_page_set_title_name(ips200pro_page_num, str);
+ }
+ }
+ return return_state == 1 ? 0 : (ips200pro_page_num | (IPS200PRO_WIDGETS_PAGE << 8));
+}
+
+uint8 ips200pro_page_switch(uint16 page_id, ips200pro_page_animations_enum anim_en)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = anim_en;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_SWITCH, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_page_hidden(uint16 page_id, uint8 state)
+{
+ uint8 return_state;
+ if(0 == page_id)
+ {
+ page_id = 0 | (IPS200PRO_WIDGETS_PAGE << 8);
+ }
+ return_state = ips200pro_set_hidden(page_id, state);
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_name(uint16 page_id, char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_COMMON_VALUE, (uint8)page_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, strlen(str));
+ return return_state;
+}
+
+uint8 ips200pro_page_set_title_position_width(ips200pro_title_position_enum title_position, uint8 title_width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = title_position;
+ temp.data[1].uint16_data = title_width;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_PAGE, IPS200PRO_PAGE_TITLE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_label_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 lebel_num = 0;
+
+ if(MAX_ID_LABEL > lebel_num)
+ {
+ return_state = ips200pro_create_widgets(++lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ lebel_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (lebel_num | (IPS200PRO_WIDGETS_LABEL << 8));
+}
+
+uint8 ips200pro_label_printf(uint16 label_id, const char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ ips200pro_header_struct temp;
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ temp.length = strlen(str);
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_COMMON_VALUE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), str, temp.length);
+
+ return return_state;
+}
+
+uint8 ips200pro_label_mode(uint16 label_id, ips200pro_label_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_LABEL, IPS200PRO_LABEL_LONG_MODE, (uint8)label_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+
+uint16 ips200pro_table_create(int16 x, int16 y, uint16 row_num, uint16 col_num)
+{
+ uint8 return_state = 1;
+ static uint8 table_num = 0;
+ if(MAX_ID_TABLE > table_num)
+ {
+ return_state = ips200pro_create_widgets(++table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
+ if(1 == return_state)
+ {
+ table_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (table_num | (IPS200PRO_WIDGETS_TABLE << 8));
+}
+
+uint8 ips200pro_table_cell_printf(uint16 table_id, uint8 row, uint8 col, char *format, ...)
+{
+ int32 str_length;
+ va_list arg;
+ va_start(arg, format);
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ str_length = vsnprintf(ips200pro_printf_buffer, sizeof(ips200pro_printf_buffer) - 1, format, arg);
+ if(0 <= str_length)
+ {
+ temp.length = (uint32)str_length;
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_COMMON_VALUE, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), ips200pro_printf_buffer, temp.length);
+ }
+ va_end(arg);
+
+ return return_state;
+}
+
+
+uint8 ips200pro_table_set_col_width(uint16 table_id, uint8 col, uint16 width)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_COL_WIDTH, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_table_select(uint16 table_id, uint8 row, uint8 col)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = row;
+ temp.data[1].uint16_data = col;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_TABLE, IPS200PRO_TABLE_SELECT, (uint8)table_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_meter_create(int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style)
+{
+ uint8 return_state = 1;
+ static uint8 meter_num = 0;
+ if(MAX_ID_METER > meter_num)
+ {
+ return_state = ips200pro_create_widgets(++meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
+ if(1 == return_state)
+ {
+ meter_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (meter_num | (IPS200PRO_WIDGETS_METER << 8));
+}
+
+uint8 ips200pro_meter_set_value(uint16 meter_id, int16 value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].int16_data = value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_METER, IPS200PRO_COMMON_VALUE, (uint8)meter_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_clock_create(int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type)
+{
+ uint8 return_state = 1;
+ static uint8 clock_num = 0;
+ if(MAX_ID_CLOCK > clock_num)
+ {
+ return_state = ips200pro_create_widgets(++clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
+ if(1 == return_state)
+ {
+ clock_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
+}
+
+
+uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 progress_bar_num = 0;
+ if(MAX_ID_PROGRESS_BAR > progress_bar_num)
+ {
+ return_state = ips200pro_create_widgets(++progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ progress_bar_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8));
+}
+
+uint8 ips200pro_progress_bar_set_value(uint16 progress_bar_id, uint8 start_value, uint8 end_value)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = start_value;
+ temp.data[1].uint16_data = end_value;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_BAR, IPS200PRO_COMMON_VALUE, (uint8)progress_bar_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_calendar_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state;
+ // 只能创建一个日历控件
+ return_state = ips200pro_create_widgets(1 | (IPS200PRO_WIDGETS_CALENDAR << 8), x, y, width, height);
+ return return_state == 1 ? 0 : (1 | (IPS200PRO_WIDGETS_CALENDAR << 8));
+}
+
+uint8 ips200pro_calendar_display(uint16 year, uint8 month, ips200pro_calendar_mode_enum mode)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = year;
+ temp.data[1].uint8_data[0] = month;
+ temp.data[1].uint8_data[1] = mode;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CALENDAR, IPS200PRO_COMMON_VALUE, 1, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_waveform_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 waveform_num = 0;
+ if(MAX_ID_WAVEFORM > waveform_num)
+ {
+ return_state = ips200pro_create_widgets(++waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ waveform_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8));
+}
+
+uint8 ips200pro_waveform_add_value(uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_COMMON_VALUE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), data, length * 2);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_state(uint16 waveform_id, uint16 line_id, uint16 line_state)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = line_id;
+ temp.data[1].uint16_data = line_state;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_STATE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_line_type(uint16 waveform_id, uint8 line_type)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 1);
+
+ temp.data[0].uint16_data = line_type;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_LINE_TYPE, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint8 ips200pro_waveform_clear(uint16 waveform_id)
+{
+ uint8 return_state;
+ ips200pro_header_struct temp;
+
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_WAVEFORM, IPS200PRO_WAVEFORM_CLEAR, (uint8)waveform_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_image_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 image_num = 0;
+ if(MAX_ID_IMAGE > image_num)
+ {
+ return_state = ips200pro_create_widgets(++image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ image_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (image_num | (IPS200PRO_WIDGETS_IMAGE << 8));
+}
+
+uint8 ips200pro_image_display(uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold)
+{
+ uint8 return_state = 0;
+ uint16 send_length;
+ uint32 image_size;
+ uint8 const *image_data;
+ IPS200PRO_COMMON_STRUCT(temp, 4);
+
+ image_data = (uint8 *)image;
+ image_size = width * height * (IMAGE_RGB565 == image_type ? 2 : 1);
+ // 任意条件满足,则表示不需要发送图像数据,仅通知屏幕更新边线或矩形
+ if((NULL == image) || (!width) || (!height) || (IMAGE_NULL == image_type))
+ {
+ temp.data[0].uint16_data = 0;
+ temp.data[1].uint16_data = 0;
+ temp.data[2].uint8_data[1] = IMAGE_NULL;
+ }
+ else
+ {
+ temp.data[0].uint16_data = width;
+ temp.data[1].uint16_data = height;
+ temp.data[2].uint8_data[1] = image_type;
+ }
+ temp.data[2].uint8_data[0] = 1; // 图像开始传输标志位
+ temp.data[3].uint16_data = threshold;
+
+ do
+ {
+ // 计算本次传输字节数
+ send_length = image_size > (IPS200PRO_SPI_LENGTH - sizeof(temp)) ? (IPS200PRO_SPI_LENGTH - sizeof(temp)) : (uint16)image_size;
+ return_state += ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_COMMON_VALUE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), image_data, send_length);
+ image_data += send_length;
+ image_size -= send_length;
+ temp.data[2].uint8_data[0] = 0;
+ }while(image_size);
+
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_line(uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ if(MAX_ID_IMAGE_LINE >= line_id)
+ {
+ temp.length = data_type * line_length * 2 + sizeof(temp);
+ temp.data[0].uint8_data[0] = line_id;
+ temp.data[0].uint8_data[1] = data_type;
+ temp.data[1].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_LINE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), line_data, data_type * line_length * 2);
+ }
+ return return_state;
+}
+
+uint8 ips200pro_image_draw_rectangle(uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color)
+{
+ uint8 return_state = 1;
+ IPS200PRO_COMMON_STRUCT(temp, 6);
+ if(MAX_ID_IMAGE_RECTANGLE >= rectangle_id)
+ {
+ temp.data[0].uint16_data = rectangle_id;
+ temp.data[1].int16_data = x;
+ temp.data[2].int16_data = y;
+ temp.data[3].uint16_data = rectangle_width;
+ temp.data[4].uint16_data = rectangle_height;
+ temp.data[5].uint16_data = color;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_IMAGE, IPS200PRO_IMAGE_DRAW_RECTANGLE, (uint8)image_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ }
+ return return_state;
+}
+
+uint16 ips200pro_container_create(int16 x, int16 y, uint16 width, uint16 height)
+{
+ uint8 return_state = 1;
+ static uint8 container_num = 0;
+ if(MAX_ID_IMAGE_RECTANGLE > container_num)
+ {
+ return_state = ips200pro_create_widgets(++container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
+ if(1 == return_state)
+ {
+ container_num--;
+ }
+ }
+ return return_state == 1 ? 0 : (container_num | (IPS200PRO_WIDGETS_CONTAINER << 8));
+}
+
+uint8 ips200pro_container_radius(uint16 container_id, uint16 border_width, uint16 radius)
+{
+ uint8 return_state;
+ IPS200PRO_COMMON_STRUCT(temp, 2);
+
+ temp.data[0].uint16_data = border_width;
+ temp.data[1].uint16_data = radius;
+ return_state = ips200pro_write_packet(IPS200PRO_WIDGETS_CONTAINER, IPS200PRO_COMMON_VALUE, (uint8)container_id, (ips200pro_header_struct *)&temp, sizeof(temp), NULL, 0);
+ return return_state;
+}
+
+uint16 ips200pro_init(char *str, ips200pro_title_position_enum title_position, uint8 title_size)
+{
+ uint16 page_id = 0;
+ spi_init(IPS200PRO_SPI_INDEX, SPI_MODE0, IPS200PRO_SPI_SPEED, IPS200PRO_CLK_PIN, IPS200PRO_MOSI_PIN, IPS200PRO_MISO_PIN, SPI_CS_NULL);
+ gpio_init(IPS200PRO_RST_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ gpio_init(IPS200PRO_CS_PIN, GPO, GPIO_HIGH, GPO_PUSH_PULL);
+ // 将屏幕应答引脚修改为上拉,这样即使屏幕在使用过程中被拔掉也不会导致程序卡主
+ gpio_init(IPS200PRO_INT_PIN, GPI, GPIO_HIGH, GPI_PULL_UP);
+
+ gpio_set_level(IPS200PRO_RST_PIN, 0);
+ system_delay_ms(5);
+ gpio_set_level(IPS200PRO_RST_PIN, 1);
+ system_delay_ms(20);
+
+ // 某一些主板屏幕接口由于没有MISO引脚,所以无法读取屏幕信息
+ // ips200pro_get_information(&ips200pro_information);
+ // ips200pro_get_time(&ips200pro_time);
+
+ // 设置时间会立即生效,因此并不建议在初始化中调用时间设置函数,如果在初始化中调用就会导致每次上电之后时间都会还原
+ // ips200pro_set_time(15, 54, 30);
+
+ // 特别注意、特别注意、特别注意
+ // 设置页面标题显示位置以及标题宽度,需要注意仅在创建页面之前调用才能生效
+ // 特别注意、特别注意、特别注意
+ ips200pro_page_set_title_position_width(title_position, title_size);
+ ips200pro_set_format(IPS200PRO_DEFAULT_FORMAT);
+ ips200pro_set_default_font(IPS200PRO_DEFAULT_FONT_SIZE);
+ ips200pro_set_optimize(IPS200PRO_DEFAULT_OPTIMIZE);
+ // 设置默认参数并创建一个页面
+ if(NULL != str)
+ {
+ page_id = ips200pro_page_create(str); // 创建一个页面
+ }
+
+#if(1 == IPS200PRO_CRC_ENABLE)
+ ips200pro_set_crc_state(1); // 使能CRC模式增强抗干扰能力,但是需要消耗主控一部分算力做CRC计算
+#endif
+
+ return page_id;
+}
diff --git a/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.h b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.h
new file mode 100644
index 0000000..149aa20
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/Seekfree_TC264_general_Opensource_Library/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200pro.h
@@ -0,0 +1,788 @@
+
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_ips200pro
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.10.2
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2025-05-15 seekfree first version
+********************************************************************************************************************/
+/********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* // SPI 串口 SPI 两寸屏 硬件引脚
+* SCL 查看 zf_device_ips200pro.h 中 IPS200PRO_SCL_PIN_SPI 宏定义
+* SDA 查看 zf_device_ips200pro.h 中 IPS200PRO_SDA_PIN_SPI 宏定义
+* RST 查看 zf_device_ips200pro.h 中 IPS200PRO_RST_PIN_SPI 宏定义
+* DC 查看 zf_device_ips200pro.h 中 IPS200PRO_DC_PIN_SPI 宏定义
+* CS 查看 zf_device_ips200pro.h 中 IPS200PRO_CS_PIN_SPI 宏定义
+* BLk 查看 zf_device_ips200pro.h 中 IPS200PRO_BLk_PIN_SPI 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* 最大分辨率 320 * 240
+* ------------------------------------
+********************************************************************************************************************/
+#ifndef _zf_device_ips200pro_h_
+#define _zf_device_ips200pro_h_
+
+#include "zf_common_typedef.h"
+
+#define IPS200PRO_SPI_SPEED ( 40*1000*1000 ) // 硬件 SPI 速率
+#define IPS200PRO_SPI_INDEX ( SPI_2 ) // 硬件 SPI 号
+#define IPS200PRO_CLK_PIN ( SPI2_SCLK_P15_3 ) // 硬件 SPI SCK 引脚
+#define IPS200PRO_MOSI_PIN ( SPI2_MOSI_P15_5 ) // 硬件 SPI MOSI 引脚
+#define IPS200PRO_MISO_PIN ( SPI2_MISO_P15_4 ) // 硬件 SPI MISO 引脚 TFT没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
+#define IPS200PRO_RST_PIN ( P15_1 ) // 液晶复位引脚定义
+#define IPS200PRO_INT_PIN ( P15_0 ) // 液晶命令位引脚定义
+#define IPS200PRO_CS_PIN ( P15_2 ) // CS 片选引脚
+
+#define IPS200PRO_WAIT_TIME ( 900 ) // 通讯等待时长,内部是软件延时,因此这里没有时间单位
+#define IPS200PRO_CRC_ENABLE ( 0 ) // 0:关闭CRC模式(通常关闭即可) 1:使能CRC模式,在传输的数据包中加入CRC校验,能提高屏幕的抗干扰的能力
+#define IPS200PRO_DEFAULT_FORMAT (IPS200PRO_FORMAT_GBK) // 默认编码格式,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_FONT_SIZE ( FONT_SIZE_16 ) // 默认指定大小,会在初始化屏幕的时候进行设置
+#define IPS200PRO_DEFAULT_OPTIMIZE ( 1 ) // 0:关闭优化 1:开启优化,默认开启优化,会在初始化屏幕的时候进行设置
+
+// RGB888转RGB565宏定义
+#define IPS200PRO_RGB888_TO_RGB565(r8, g8, b8) ((((r8 >> 3) & 0x1FU) << 11) | (((g8 >> 2) & 0x3FU) << 5) | ((b8 >> 3) & 0x1FU))
+
+typedef enum
+{
+ // 仅16、20、24号字体支持中文显示,其余字体仅支持英文显示
+ FONT_SIZE_12,
+ FONT_SIZE_14,
+ FONT_SIZE_16, // 16字体支持中文显示
+ FONT_SIZE_18,
+ FONT_SIZE_20, // 20字体支持中文显示
+ FONT_SIZE_22,
+ FONT_SIZE_24, // 24字体支持中文显示
+ FONT_SIZE_26,
+ FONT_SIZE_28,
+ FONT_SIZE_30,
+ FONT_SIZE_32,
+ FONT_SIZE_34,
+ FONT_SIZE_36,
+ FONT_SIZE_40,
+}ips200pro_font_size_enum;
+
+typedef enum
+{
+ COLOR_FOREGROUND, // 前景色
+ COLOR_BACKGROUND, // 背景色 除IMAGE组件不支持其他都支持
+ COLOR_BORDER, // 组件边线颜色 支持组件有LABEL TABLE METER CLOCK CALENDAR CONTAINER
+
+ // 专用指令
+ COLOR_PAGE_SELECTED_TEXT, // 选中页面后的标题文字颜色
+ COLOR_PAGE_SELECTED_BG, // 选中页面后的标题背景颜色
+
+ COLOR_TABLE_SELECTED_BG, // 表格选中后的颜色
+
+ COLOR_MRTER_INDICATOR, // 仪表组件的指针颜色
+ COLOR_MRTER_TICKS, // 仪表组件刻度颜色
+
+ COLOR_CLOCK_HOUR, // 圆形时钟时针颜色
+ COLOR_CLOCK_MINUTE, // 圆形时钟分针颜色
+ COLOR_CLOCK_SECOND, // 圆形时钟秒针颜色
+ COLOR_CLOCK_TICKS, // 圆形时钟组件刻度颜色
+
+ COLOR_CALENDAR_YEAR, // 年份颜色
+ COLOR_CALENDAR_WEEK, // 星期颜色
+ COLOR_CALENDAR_TODAY, // 今日颜色
+}ips200pro_widgets_color_type_enum;
+
+typedef enum
+{
+ PAGE_ANIM_OFF, // 页面切换时关闭动画效果
+ PAGE_ANIM_ON, // 页面切换时开启动画效果
+}ips200pro_page_animations_enum;
+
+typedef enum
+{
+ LABEL_AUTO, // 当宽度无法显示全部内容时,会自动换行显示
+ LABEL_DOT, // 当无法全部显示的时候,末尾右下角显示...
+ LABEL_SCROLL, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向左右或者上下滚动显示,水平滚动优先
+ LABEL_SCROLL_CIRCULAR, // 当宽度无法显示全部内容时水平滚动显示,当高度无法显示全部内容时垂直滚动显示,只按照一个方向循环滚动显示,水平滚动优先
+ LABEL_CLIP, // 将无法显示的内容裁剪掉
+}ips200pro_label_mode_enum;
+
+typedef enum
+{
+ IPS200PRO_PORTRAIT = 0x01, // 竖屏模式
+ IPS200PRO_PORTRAIT_180 = 0x02, // 竖屏模式 旋转180
+ IPS200PRO_CROSSWISE = 0x03, // 横屏模式
+ IPS200PRO_CROSSWISE_180 = 0x04, // 横屏模式 旋转180
+}ips200pro_display_direction_enum;
+
+typedef enum
+{
+ IPS200PRO_TITLE_LEFT = 0x00, // 页面标题显示在左侧 如果不需要显示标题,则将标题高度设置为0即可
+ IPS200PRO_TITLE_RIGHT = 0x01, // 页面标题显示在右侧
+ IPS200PRO_TITLE_TOP = 0x02, // 页面标题显示在上侧
+ IPS200PRO_TITLE_BOTTOM = 0x03, // 页面标题显示在底侧
+}ips200pro_title_position_enum;
+
+typedef enum
+{
+ IPS200PRO_CALENDAR_CHINESE = 0x01, // 日历使用中文显示 仅16、20、24号字体支持中文显示
+ IPS200PRO_CALENDAR_ENGLISH = 0x02, // 日历使用英文显示
+}ips200pro_calendar_mode_enum;
+
+typedef enum
+{
+ IMAGE_NULL = 0x00, // 图像为空,用于纯边线显示
+ IMAGE_GRAYSCALE = 0x03, // 灰度 总钻风、小钻风解压后的图像使用此枚举定义
+ IMAGE_RGB565, // RGB565彩色 凌瞳使用此枚举定义
+}ips200pro_image_type_enum;
+
+typedef enum
+{
+ IMAGE_LINE_TYPE_UINT8 = 0x01, // 线条数据是8位类型
+ IMAGE_LINE_TYPE_UINT16 = 0x02, // 线条数据是16位类型
+}ips200pro_image_line_type_enum;
+
+typedef enum
+{
+ IPS200PRO_FORMAT_GBK = 0x01, // GBK编码,开源库默认的文件都是GBK编码
+ IPS200PRO_FORMAT_UTF8 = 0x02, // UTF-8编码
+}ips200pro_format_enum;
+
+typedef enum
+{
+ METER_ANGLE = 0x01, // 角度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+ METER_SPEED, // 速度指示仪表,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_meter_style_enum;
+
+typedef enum
+{
+ CLOCK_DIGITAL = 0x01, // 数字时钟,可设置字体、背景、边线的颜色
+ CLOCK_ANALOG, // 指针时钟,可设置字体、背景、边线、刻度、指针的颜色
+}ips200pro_clock_style_enum;
+
+// 图像叠加线条 uint8类型的线条结构体
+typedef struct
+{
+ uint8 x; // 点的横坐标
+ uint8 y; // 点的纵坐标
+}ips200pro_image_line_uint8_struct;
+
+// 图像叠加线条 uint16类型的线条结构体
+typedef struct
+{
+ uint16 x; // 点的横坐标
+ uint16 y; // 点的纵坐标
+}ips200pro_image_line_uint16_struct;
+
+typedef struct
+{
+ uint16 id; // 屏幕ID编号
+ uint16 width; // 屏幕最大显示宽度
+ uint16 height; // 屏幕最大显示高度
+ uint8 version_major; // 固件版本-主版本
+ uint8 version_middle; // 固件版本-中版本
+ uint8 version_micro; // 固件版本-微版本
+}ips200pro_information_struct;
+
+typedef struct
+{
+ uint16 year; // 年
+ uint8 month; // 月
+ uint8 day; // 日
+ uint8 hour; // 时
+ uint8 minute; // 分
+ uint8 second; // 秒
+ uint8 week; // 星期
+}ips200pro_time_struct;
+
+extern ips200pro_information_struct ips200pro_information;
+extern ips200pro_time_struct ips200pro_time;
+
+//------------------------------------功能函数一览表-------------------------------------------
+
+//------------------------------------系统功能函数-------------------------------------------
+// uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day); // 设置系统日期
+// uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second); // 设置系统时间
+// uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id); // 设置组件父对象
+// uint8 ips200pro_set_format (ips200pro_format_enum format); // 设置汉字编码格式
+// uint8 ips200pro_set_backlight (uint8 backlight); // 设置屏幕背光亮度
+// uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir); // 设置屏幕显示方向
+// uint8 ips200pro_set_default_font (ips200pro_font_size_enum font); // 设置默认字体大小
+// uint8 ips200pro_set_optimize (uint8 state) // 设置优化(默认是开启的)
+//
+// uint8 ips200pro_get_date (ips200pro_time_struct *time); // 获取系统日期
+// uint8 ips200pro_get_time (ips200pro_time_struct *time); // 获取系统时间
+// uint8 ips200pro_get_information (ips200pro_information_struct *information); // 获取系统信息
+// uint8 ips200pro_get_free_stack_size (uint32 *stack_size); // 获取系统空闲栈大小
+
+//-----------------------------------通用函数接口-------------------------------------------
+// uint8 ips200pro_delete_widgets (uint16 widgets_id); // 删除组件
+// uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size); // 设置组件的字体
+// uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color); // 设置组件颜色
+// uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y); // 设置组件位置
+// uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state); // 设置组件隐藏
+
+//-----------------------------------PAGE页面操作接口-------------------------------------------
+// uint16 ips200pro_page_create (char *str); // 页面创建
+// uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en); // 页面切换
+// uint8 ips200pro_page_hidden (uint16 page_id, uint8 state) // 页面隐藏
+// uint8 ips200pro_page_set_title_name (uint16 page_id, char *str); // 页面标题设置
+
+//-----------------------------------文本标签操作接口-------------------------------------------
+// uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height); // 文本标签创建
+// uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...); // 文本标签内容设置
+// uint8 ips200pro_label_show_string (uint16 label_id, const char *str) // 文本标签字符串显示
+// uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode); // 文本标签模式设置
+
+//-----------------------------------表格TABLE操作接口-------------------------------------------
+// uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num); // 表格创建
+// uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...); // 表格单元格内容设置
+// uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width); // 表格列宽度设置
+// uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col); // 单元格选中
+
+//-----------------------------------仪表指示器操作接口-------------------------------------------
+// uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style); // 仪表创建
+// uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value); // 仪表数值设置
+
+//-----------------------------------时钟操作接口-------------------------------------------
+// uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type) // 时钟创建
+
+//-----------------------------------进度条操作接口-------------------------------------------
+// uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height); // 进度条创建
+// uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value); // 进度条数值设置
+
+//-----------------------------------日历操作接口-------------------------------------------
+// uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height); // 日历创建
+// uint8 ips200pro_calendar_display (uint16 year, uint8 month, uint8 ips200pro_calendar_mode_enum); // 日历显示设置
+
+//-----------------------------------波形图操作接口-------------------------------------------
+// uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height); // 波形图创建
+// uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color); // 波形图添加数据
+// uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state); // 波形图线条状态设置
+// uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type); // 波形图线条类型设置
+// uint8 ips200pro_waveform_clear (uint16 waveform_id); // 波形图数据清空
+
+//-----------------------------------图像操作接口-------------------------------------------
+// uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height); // 图像组件创建
+// uint8 ips200pro_image_display (image_id, *image, width, height, image_type, threshold); // 图像数据更新
+// uint8 ips200pro_image_draw_line (image_id, line_id, *line_data, line_length, data_type, color); // 图像上画线 先发送ips200pro_image_draw_line再发送ips200pro_image_display
+// uint8 ips200pro_image_draw_rectangle (image_id, rectangle_id, x, y, rectangle_width, rectangle_height, color); // 图像上画框 先发送ips200pro_image_draw_rectangle再发送ips200pro_image_display
+
+//-----------------------------------容器操作接口-------------------------------------------
+// uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height); // 容器组件创建
+// uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius); // 设置容器的边线宽度与圆角半径
+
+//-----------------------------------屏幕初始化-------------------------------------------
+// uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size); // 屏幕初始化
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统日期
+// 参数说明 year 年
+// 参数说明 month 月
+// 参数说明 day 日
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_date(2024, 10, 31); // 2024年10月31日
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_date (uint16 year, uint8 month, uint8 day);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置系统时间
+// 参数说明 hour 时 24小时制(仅支持24小时制)
+// 参数说明 minute 分
+// 参数说明 second 秒
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_time(13, 19, 15); // 13点19分15秒
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_time (uint8 hour, uint8 minute, uint8 second);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件父对象
+// 参数说明 child_id 子组件ID
+// 参数说明 parent_id 父组件ID
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_parent(1, label_id, container_id); // 将label显示到容器上 设置后label的坐标原点为容器的左上角,不再是屏幕的左上角,并且超出容器范围的内容不会进行显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_parent (uint16 child_id, uint16 parent_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置中文编码格式
+// 参数说明 format 中文编码格式
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_format(IPS200PRO_FORMAT_GBK); // 将ID为1的表格显示在ID为2的页面上
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_format (ips200pro_format_enum format);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置背光亮度
+// 参数说明 backlight 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_backlight (uint8 backlight);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置屏幕显示方向
+// 参数说明 dir 亮度1-255
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_backlight(100); // 背光亮度设置为100
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_direction (ips200pro_display_direction_enum dir);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置默认字体大小
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_default_font(FONT_SIZE_20); // 将默认字体设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_default_font (ips200pro_font_size_enum font);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置优化(默认为开启状态)
+// 参数说明 font 默认字体大小
+// 返回参数 uint8 状态 0:关闭优化 1:开启优化
+// 使用示例 ips200pro_set_optimize(1); // 开启优化
+// 备注说明 目前仅针对图像进行优化,当开启优化时,发送图像给屏幕进行显示,如果屏幕正在显示上次的图像,则本次图像直接丢弃,这样避免用户等待指令响应完成,从而尽量避免用户程序等待的问题
+// 如果关闭优化,则等待上次图像显示完成之后,再处理新的图像
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_optimize (uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统日期
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_date(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_date (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统时间
+// 参数说明 *time 保存时间的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_time(&ips200pro_time); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_time (ips200pro_time_struct *time);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取空闲栈大小
+// 参数说明 *information 保存系统信息的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_information(&ips200pro_information); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_information (ips200pro_information_struct *information);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取系统信息
+// 参数说明 *stack_size 保存空闲栈大小的指针
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_get_free_stack_size(&stack_size); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_get_free_stack_size (uint32 *stack_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 删除组件
+// 参数说明 widgets_id 组件的编号
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_delete_widgets(widgets_id); // 将选中的组件删除
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_delete_widgets (uint16 widgets_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置组件字体大小
+// 参数说明 widgets_id 组件的编号
+// 参数说明 font_size 字体大小(仅16 20 24号字体支持中文显示)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_font(widgets_id, FONT_SIZE_20); // 将选中的组件字体大小设置为20号
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_font (uint16 widgets_id, ips200pro_font_size_enum font_size);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件颜色设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 color_type 颜色类型
+// 参数说明 color RGB565数值
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_color(widgets_id, COLOR_BORDER, RGB565_RED); // 将选中的组件边线颜色设置为红色
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_color (uint16 widgets_id, ips200pro_widgets_color_type_enum color_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件位置设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_position(widgets_id, 10, 10); // 将选中的组件起始坐标设置为10,10
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_position (uint16 widgets_id, int16 x, int16 y);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 组件隐藏设置
+// 参数说明 widgets_id 组件的编号
+// 参数说明 state 0:取消隐藏 1:将组件隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_set_hidden(widgets_id, 1); // 将选中的组件隐藏显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_set_hidden (uint16 widgets_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建页面
+// 参数说明 *str 页面名称 不需要名称可以直接填写 ""
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 page1_id = ips200pro_page_create("Test"); // 创建一个名称为Test的页面
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_page_create (char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 切换页面
+// 参数说明 page_id 页面ID
+// 参数说明 anim_en 动画使能
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_switch(page_id, PAGE_ANIM_ON); // 切换到选中的页面进行显示 开启动画效果
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_switch (uint16 page_id, ips200pro_page_animations_enum anim_en);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 隐藏页面
+// 参数说明 page_id 页面ID
+// 参数说明 state 隐藏状态 1:将页面隐藏 0:取消隐藏
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_hidden(page_id, 1); // 将选中的页面隐藏
+// 注意事项 ID设置为0,则表示对所有的页面同时进行设置
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_hidden (uint16 page_id, uint8 state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置页面名称
+// 参数说明 page_id 页面ID
+// 参数说明 *str 页面名称
+// 返回参数 uint8 状态 0:设置成功 1:设置失败
+// 使用示例 ips200pro_page_set_title_name(page_id, "Test"); // 将选中的页面,名称设置为Test
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_page_set_title_name (uint16 page_id, char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建文本标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 label_id = ips200pro_label_create(0, 0, 50, 20); // 创建一个文本标签 左上角坐标0,0 宽度50 高度20
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_label_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签格式化并显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_printf (uint16 label_id, const char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 文本标签字符串显示
+// 参数说明 label_id 文本标签ID
+// 参数说明 *str 字符串首地址
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_show_string(label_id, “This is a test”);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_show_string(uint16 label_id, const char *str);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置文本标签长文本模式
+// 参数说明 label_id 文本标签ID
+// 参数说明 mode 长文本模式,当文本超过组件可显示范围时的处理方式
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_mode(label_id, "tset=%d", test);
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_label_mode (uint16 label_id, ips200pro_label_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建表格标签
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 row_num 表格行数量
+// 参数说明 col_num 表格列数量
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_table_create(0, 0, 5, 4); // 创建5行4列表格 左上角坐标0,0,如需调整宽度使用ips200pro_table_set_col_width函数单独调整
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_table_create (int16 x, int16 y, uint16 row_num, uint16 col_num);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 单元格格式化并显示
+// 参数说明 table_id 表格ID
+// 参数说明 row 单元格所在行 行号从1开始
+// 参数说明 col 单元格所在列 列号从1开始
+// 参数说明 *format 字符串
+// 参数说明 ... 可变参数列表,方法与printf相同
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_label_printf(table_id, 1, 1, "tset=%d", test); // 格式化字符串,并显示在表格的第一行 第一列(即左上角的单元格)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_cell_printf (uint16 table_id, uint8 row, uint8 col, char *format, ...);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置表格列宽度
+// 参数说明 table_id 表格ID
+// 参数说明 col 需要调整的列号 列号从1开始
+// 参数说明 width 列宽度(以像素为单位)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_set_col_width(table_id, 1, 20); // 将选中的表格 的第一列(即最左侧的一列)宽度设置为20
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_set_col_width (uint16 table_id, uint8 col, uint16 width);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 表格选中
+// 参数说明 table_id 表格ID
+// 参数说明 row 需要选中的行号 行号从1开始
+// 参数说明 col 需要选中的列号 列号从1开始
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_table_select(table_id, 1, 2); // 将选中的表格 的第一行、第一列(即最左上角)选中
+// 备注说明 选中整列:指定col row设置为0x00 选中整行:指定row col设置为0x00 取消选中row col都设置为0x00
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_table_select (uint16 table_id, uint8 row, uint8 col);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建仪表指示器
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 size 仪表直径(以像素为单位)
+// 参数说明 style 仪表样式
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 table2_id = ips200pro_meter_create(0, 0, 60, 1); // 1:角度指示器 2:速度指示器
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_meter_create (int16 x, int16 y, uint16 size, ips200pro_meter_style_enum style);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 仪表指示器数值设置
+// 参数说明 meter_id 仪表ID
+// 参数说明 value 数值 角度类型数值范围0-360 速度类型设置范围0-100
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_meter_set_value(meter_id, 50); // 将选中的仪表数值设置为50
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_meter_set_value (uint16 meter_id, int16 value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建时钟
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 clock_size 时钟大小,数字时钟时:表示字体大小,可设置范围查看ips200pro_font_size_enum枚举体
+// 指针时钟:表示时钟的直径,最小设置为80,最大240
+// 参数说明 clock_type 时钟类型查看ips200pro_clock_style_enum枚举定义
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 clock2_id = ips200pro_clock_create(0, 0, 150, CLOCK_ANALOG); //
+// 备注说明 当宽度与高度一致时,时钟为圆形指针时钟,否则为数字时钟
+// 备注说明 如果需要修改时间,使用ips200pro_set_time函数修改
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_clock_create (int16 x, int16 y, uint16 clock_size, ips200pro_clock_style_enum clock_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建进度条
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 bar2_id = ips200pro_progress_bar_create(0, 0, 60, 10); //
+// 备注说明 当宽度与高度一致时,为圆形进度条,否为长条形进度条
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_progress_bar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 进度条数值设置
+// 参数说明 progress_bar_id 进度条ID
+// 参数说明 start_value 开始数值
+// 参数说明 end_value 结束数值
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_progress_bar_set_value(progress_bar_id, 10, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_progress_bar_set_value (uint16 progress_bar_id, uint8 start_value, uint8 end_value);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建日历
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_calendar_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_calendar_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 日历显示设置
+// 参数说明 year 需要显示的年份 如果填写0则显示当前日期的月份
+// 参数说明 month 需要显示的月份 如果填写0则显示当前日期的月份
+// 参数说明 mode 显示模式 中文显示(仅16、20、24号字体支持中文显示)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_calendar_display(2036, 1, IPS200PRO_CALENDAR_CHINESE); // 日历显示2036年1月份 中文显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_calendar_display (uint16 year, uint8 month, ips200pro_calendar_mode_enum mode);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建波形图
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_waveform_create(0, 0, 200, 200); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_waveform_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图添加点
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID ID从1开始
+// 参数说明 *data 增加的点数据地址
+// 参数说明 length 增加的点数量
+// 参数说明 color 点颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_add_value(1, 1, &point[0], 10, RGB565_RED); //
+// 备注说明 波形图显示的点数量上限为组件宽度,当收到的点数量超过组件宽度时优先显示最近收到的点数据
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_add_value (uint16 waveform_id, uint8 line_id, const uint16 *data, uint16 length, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条状态
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加5条线条
+// 参数说明 line_state 0:隐藏线条 1:显示线条
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_state(waveform_id, 1, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_state (uint16 waveform_id, uint16 line_id, uint16 line_state);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置波形图线条类型
+// 参数说明 waveform_id 波形图组件ID
+// 参数说明 line_type 线条类型 0:散点图(点与点之间没有连线) 1:(所有的点连成一条线)
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_line_type(waveform_id, 0); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_line_type (uint16 waveform_id, uint8 line_type);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 波形图清除数据(即清空显示)
+// 参数说明 waveform_id 波形图组件ID
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_waveform_clear(waveform_id); //
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_waveform_clear (uint16 waveform_id);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建图像组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_image_create(0, 0, 188, 120); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_image_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像显示
+// 参数说明 image_id 图像组件ID
+// 参数说明 *image 图像地址 NULL则不发送图像,仅通知屏幕更新边线或矩形
+// 参数说明 width 图像宽度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 height 图像高度 0则不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 image_type 图像类型 总钻风:IMAGE_GRAYSCALE 凌瞳:IMAGE_RGB565 小钻风:需要自行解压后选择IMAGE_GRAYSCALE IMAGE_NULL:不发送图像数据,仅通知屏幕更新边线或矩形
+// 参数说明 threshold 二值化阈值 仅在IMAGE_GRAYSCALE(灰度)模式下有效 0:不启用二值化 其他:启用二值化
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_display(image_id, mt9v03x_image[0], 188, 120, IMAGE_GRAYSCALE, 0); //
+// 备注说明 如果图像宽度、高度与组件的宽度、高度不一致,则会自动缩放,但是缩放会导致屏幕性能下降,从而可能导致显示帧率下降
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_display (uint16 image_id, const void *image, uint16 width, uint16 height, ips200pro_image_type_enum image_type, uint8 threshold);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加线条
+// 参数说明 image_id 图像组件ID
+// 参数说明 line_id 线条ID 从1开始 最多支持叠加10条线条
+// 参数说明 *line_data 线条数据地址 只能使用ips200pro_image_line_uint8_struct或者ips200pro_image_line_uint16_struct类型
+// 参数说明 line_length 线条长度
+// 参数说明 data_type 线条的数据类型 8为类型与16为类型
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_line(image_id, 1, line, 120, IMAGE_LINE_TYPE_UINT8, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现线条叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_line (uint16 image_id, uint8 line_id, void *line_data, uint16 line_length, ips200pro_image_line_type_enum data_type, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 图像叠加矩形框
+// 参数说明 image_id 图像组件ID
+// 参数说明 rectangle_id 矩形框ID 从1开始 最多支持叠加5个矩形框
+// 参数说明 x 矩形框左上角横坐标
+// 参数说明 y 矩形框左上角纵坐标
+// 参数说明 rectangle_width 矩形宽度
+// 参数说明 rectangle_height 矩形高度
+// 参数说明 color 线条颜色
+// 返回参数 uint8 状态 0:成功 1:失败
+// 使用示例 ips200pro_image_draw_rectangle(image_id, 1, 10, 10, 20, 30, RGB565_RED); //
+// 备注说明 务必在ips200pro_image_display调用函数之前 调用本函数才能实现矩形框叠加显示
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_image_draw_rectangle (uint16 image_id, uint8 rectangle_id, int16 x, int16 y, uint16 rectangle_width, uint16 rectangle_height, uint16 color);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 创建容器组件
+// 参数说明 x 左上角横轴坐标(以像素为单位)
+// 参数说明 y 左上角纵轴坐标(以像素为单位)
+// 参数说明 width 组件的宽度
+// 参数说明 height 组件的高度
+// 返回参数 uint16 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 uint16 test_id = ips200pro_container_create(0, 0, 60, 60); //
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_container_create (int16 x, int16 y, uint16 width, uint16 height);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 设置容器圆角半径
+// 参数说明 container_id 容器的ID
+// 参数说明 border_width 容器周围边线宽度
+// 参数说明 radius 容器圆角半径
+// 返回参数 uint8 状态 0:创建失败 其他:创建成功,同时返回的数值表示此PAGE的ID
+// 使用示例 ips200pro_container_radius(container_id, 1, 10); // 将选择的容器 线条宽度设置为1,圆角半径设置为10
+// 注意事项 如果容器为宽度高度相同,圆角半径是高度的一半,则最终容易为圆形
+//-------------------------------------------------------------------------------------------------------------------
+uint8 ips200pro_container_radius (uint16 container_id, uint16 border_width, uint16 radius);
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 屏幕初始化
+// 参数说明 str 页面标题名称 NULL:不创建页面 不为空:则创建一个页面,并将此字符串设置为页面名称
+// 参数说明 title_position 标题显示的位置
+// 参数说明 title_size 标题大小 如果不需要标题设置为0即可
+// 返回参数 uint16 页面ID
+// 使用示例 ips200pro_init("测试", IPS200PRO_TITLE_BOTTOM, 30); // 初始化屏幕并创建一个标题为测试的页面、标题显示在底部、标题宽度为30
+//-------------------------------------------------------------------------------------------------------------------
+uint16 ips200pro_init (char *str, ips200pro_title_position_enum title_position, uint8 title_size);
+
+
+
+#endif
+