- IPS200 display menu with real-time status and parameter settings - Camera image processing and line tracking - IMU attitude solution and PID control - WiFi SPI oscilloscope data transmission
990 lines
37 KiB
C
990 lines
37 KiB
C
/*********************************************************************************************************************
|
||
* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
|
||
* Copyright (c) 2022 SEEKFREE 逐飞科技
|
||
*
|
||
* 本文件是 TC264 开源库的一部分
|
||
*
|
||
* TC264 开源库 是免费软件
|
||
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
|
||
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
|
||
*
|
||
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
|
||
* 甚至没有隐含的适销性或适合特定用途的保证
|
||
* 更多细节请参见 GPL
|
||
*
|
||
* 您应该在收到本开源库的同时收到一份 GPL 的副本
|
||
* 如果没有,请参阅<https://www.gnu.org/licenses/>
|
||
*
|
||
* 额外注明:
|
||
* 本开源库使用 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_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_WAVEFORM_LINE ( 5 )
|
||
#define MAX_ID_IMAGE ( 5 )
|
||
#define MAX_ID_IMAGE_LINE ( 10 )
|
||
#define MAX_ID_IMAGE_RECTANGLE ( 5 )
|
||
#define MAX_ID_CONTAINER ( 20 )
|
||
|
||
ips200pro_information_struct ips200pro_information;
|
||
ips200pro_time_struct ips200pro_time;
|
||
|
||
static char ips200pro_printf_buffer[51];
|
||
|
||
static uint8 ips200pro_lebel_num = 0;
|
||
static uint8 ips200pro_table_num = 0;
|
||
static uint8 ips200pro_meter_num = 0;
|
||
static uint8 ips200pro_clock_num = 0;
|
||
static uint8 ips200pro_progress_bar_num = 0;
|
||
static uint8 ips200pro_waveform_num = 0;
|
||
static uint8 ips200pro_image_num = 0;
|
||
static uint8 ips200pro_container_num = 0;
|
||
static uint8 ips200pro_page_num = 0;
|
||
|
||
// 系统参数的子命令与屏幕组件的子命令
|
||
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_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;
|
||
|
||
if(MAX_ID_LABEL > ips200pro_lebel_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_lebel_num | (IPS200PRO_WIDGETS_LABEL << 8), x, y, width, height);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_lebel_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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;
|
||
if(MAX_ID_TABLE > ips200pro_table_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_table_num | (IPS200PRO_WIDGETS_TABLE << 8), x, y, row_num, col_num);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_table_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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;
|
||
if(MAX_ID_METER > ips200pro_meter_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_meter_num | (IPS200PRO_WIDGETS_METER << 8), x, y, size, style);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_meter_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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;
|
||
if(MAX_ID_CLOCK > ips200pro_clock_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_clock_num | (IPS200PRO_WIDGETS_CLOCK << 8), x, y, clock_size, clock_type);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_clock_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_clock_num | (IPS200PRO_WIDGETS_CLOCK << 8));
|
||
}
|
||
|
||
|
||
uint16 ips200pro_progress_bar_create(int16 x, int16 y, uint16 width, uint16 height)
|
||
{
|
||
uint8 return_state = 1;
|
||
if(MAX_ID_PROGRESS_BAR > ips200pro_progress_bar_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_progress_bar_num | (IPS200PRO_WIDGETS_BAR << 8), x, y, width, height);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_progress_bar_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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;
|
||
if(MAX_ID_WAVEFORM > ips200pro_waveform_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_waveform_num | (IPS200PRO_WIDGETS_WAVEFORM << 8), x, y, width, height);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_waveform_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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 = 1;
|
||
if(MAX_ID_WAVEFORM_LINE > line_id - 1)
|
||
{
|
||
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 = 1;
|
||
if(MAX_ID_WAVEFORM_LINE > line_id - 1)
|
||
{
|
||
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;
|
||
if(MAX_ID_IMAGE > ips200pro_image_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_image_num | (IPS200PRO_WIDGETS_IMAGE << 8), x, y, width, height);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_image_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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;
|
||
if(MAX_ID_CONTAINER > ips200pro_container_num)
|
||
{
|
||
return_state = ips200pro_create_widgets(++ips200pro_container_num | (IPS200PRO_WIDGETS_CONTAINER << 8), x, y, width, height);
|
||
if(1 == return_state)
|
||
{
|
||
ips200pro_container_num--;
|
||
}
|
||
}
|
||
return return_state == 1 ? 0 : (ips200pro_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);
|
||
|
||
ips200pro_lebel_num = 0;
|
||
ips200pro_table_num = 0;
|
||
ips200pro_meter_num = 0;
|
||
ips200pro_clock_num = 0;
|
||
ips200pro_progress_bar_num = 0;
|
||
ips200pro_waveform_num = 0;
|
||
ips200pro_image_num = 0;
|
||
ips200pro_container_num = 0;
|
||
ips200pro_page_num = 0;
|
||
|
||
// 某一些主板屏幕接口由于没有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;
|
||
}
|