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 +