Files
QDAC-firmware/app/page/cw_page_ui_widget.c

231 lines
8.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "cw_page_ui_widget.h"
#include "zf_common_headfile.h"
#include "gl_data.h"
/**
* @brief 绘制光标
*
* @param Curser_In 当前光标位置
* @param Curser_Last_In 上一时刻光标位置
*/
void Print_Curser(uint8_t Curser_In, uint8_t Curser_Last_In)
{
// ips200_show_string(0, Curser_Last_In * 18, " ");
// ips200_show_string(0, Curser_In * 18, ">");
for (uint8_t i = 0; i < 160; i++) {
ips200_draw_point(10 + i, Curser_Last_In * 18 + 19, IPS200_DEFAULT_BGCOLOR);
// system_delay_us(200);
}
ips200_draw_rect(10, Curser_Last_In * 18 + 19, 170, Curser_Last_In * 18 + 19, IPS200_DEFAULT_BGCOLOR);
for (uint8_t i = 0; i < 160; i++) {
ips200_draw_point(10 + i, Curser_In * 18 + 19, RGB565_PURPLE);
system_delay_ms(1);
}
}
/**
* @brief 打印菜单项
*
*/
void Print_Menu(const ITEM *item, uint8_t item_sum)
{
for (uint8_t i = 0; i < item_sum; i++) {
ips200_show_string(8, i * 18 + 16, item[i].text);
}
}
/**
* @brief 打印数值项
*
*/
void Print_Value(const ITEM *item, uint8_t item_sum)
{
// for (uint8_t i = 0; i < item_sum; i++) {
// switch (Param_Data[item[i].data_tag].type) {
// case EINT8:
// ips200_show_int(128, i + 1,
// *((int8_t *)Param_Data[item[i].data_tag].p_data), 5);
// break;
// case EINT16:
// ips200_show_int(128, i + 1,
// *((int16_t *)Param_Data[item[i].data_tag].p_data), 5);
// break;
// case EINT32:
// ips200_show_int(128, i + 1,
// *((int32_t *)Param_Data[item[i].data_tag].p_data), 5);
// break;
// case EUINT8:
// ips200_show_int(128, i + 1,
// *((uint8_t *)Param_Data[item[i].data_tag].p_data), 5);
// break;
// case EUINT16:
// ips200_show_int(128, i + 1,
// *((uint16_t *)Param_Data[item[i].data_tag].p_data), 5);
// break;
// case EUINT32:
// ips200_show_int(128, i + 1,
// *((uint32_t *)Param_Data[item[i].data_tag].p_data), 5);
// case EFLOAT:
// ips200_show_float(128, i + 1,
// *((float *)Param_Data[item[i].data_tag].p_data), 5, 2);
// break;
// default:
// break;
// }
// }
}
/**
* @brief
*
* @param item_num
* @param dir
*/
void Set_Vaule(ITEM *item, uint8_t item_num, float step)
{
// if (EFLOAT == Param_Data[item[item_num].data_tag].type) { // 待修改变量为浮点
// *((float *)Param_Data[item[item_num].data_tag].p_data) += step;
// ips200_show_float(128, item_num + 1,
// *((float *)Param_Data[item[item_num].data_tag].p_data), 6,
// 2);
// return;
// }
// if (0 < step &&
// 1 > step) { // 避免步进值小于 1 时截尾为 0不知道为啥 ceil 函数不可用
// step = 1;
// } else if (0 > step && -1 < step) {
// step = -1;
// }
// switch (Param_Data[item[item_num].data_tag].type) {
// case EINT8:
// *((int8_t *)Param_Data[item[item_num].data_tag].p_data) += (int8_t)step;
// ips200_show_int(128, item_num + 1,
// *((int8_t *)Param_Data[item[item_num].data_tag].p_data), 5);
// break;
// case EINT16:
// *((int16_t *)Param_Data[item[item_num].data_tag].p_data) += (int16_t)step;
// ips200_show_int(128, item_num + 1,
// *((int16_t *)Param_Data[item[item_num].data_tag].p_data), 5);
// break;
// case EINT32:
// *((int32_t *)Param_Data[item[item_num].data_tag].p_data) += (int32_t)step;
// ips200_show_int(128, item_num + 1,
// *((int32_t *)Param_Data[item[item_num].data_tag].p_data), 5);
// break;
// case EUINT8:
// *((uint8_t *)Param_Data[item[item_num].data_tag].p_data) += (uint8_t)step;
// ips200_show_int(128, item_num + 1,
// *((uint8_t *)Param_Data[item[item_num].data_tag].p_data), 5);
// break;
// case EUINT16:
// *((uint16_t *)Param_Data[item[item_num].data_tag].p_data) += (uint16_t)step;
// ips200_show_int(128, item_num + 1,
// *((uint16_t *)Param_Data[item[item_num].data_tag].p_data), 5);
// break;
// case EUINT32:
// *((uint32_t *)Param_Data[item[item_num].data_tag].p_data) += (uint32_t)step;
// ips200_show_int(128, item_num + 1,
// *((uint32_t *)Param_Data[item[item_num].data_tag].p_data), 5);
// break;
// default:
// break;
// }
}
void Show_Marked_Image(void)
{
#define IMAGE_DISPLAY_WIDTH (230U)
#define IMAGE_DISPLAY_HEIGHT (146U)
#define START_X ((240U - IMAGE_DISPLAY_WIDTH) / 2U)
#define START_Y (16U)
float horizontal_zoom_rate = ((float)(IMAGE_DISPLAY_WIDTH)) / ((float)(MT9V03X_W));
float vertical_zoom_rate = ((float)(IMAGE_DISPLAY_HEIGHT)) / ((float)(MT9V03X_H));
ips200_show_gray_image(START_X, START_Y, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, IMAGE_DISPLAY_WIDTH, IMAGE_DISPLAY_HEIGHT, 0);
ips200_draw_frame(START_X - 3, START_Y - 3, START_X + IMAGE_DISPLAY_WIDTH + 2, START_Y + IMAGE_DISPLAY_HEIGHT + 2, 2, RGB565_BLUE);
// 确认边线数组在显示前不会清空
for (uint i = 0; i < PT_MAXLEN; i++) {
uint16_t l_x = START_X + (uint16_t)((float)pts_inv_r[i][1] * horizontal_zoom_rate);
uint16_t l_y = START_Y + (uint16_t)((float)pts_inv_r[i][0] * vertical_zoom_rate);
uint16_t r_x = START_X + (uint16_t)((float)pts_inv_l[i][1] * horizontal_zoom_rate);
uint16_t r_y = START_Y + (uint16_t)((float)pts_inv_l[i][0] * vertical_zoom_rate);
uint16_t mid_x_l = START_X + (uint16_t)(mid_left[i][1] * horizontal_zoom_rate);
uint16_t mix_y_l = START_Y + (uint16_t)(mid_left[i][0] * vertical_zoom_rate);
uint16_t mid_x_r = START_X + (uint16_t)(mid_right[i][1] * horizontal_zoom_rate);
uint16_t mix_y_r = START_Y + (uint16_t)(mid_right[i][0] * vertical_zoom_rate);
ips200_draw_rect(l_x, l_y, l_x + 2, l_y, RGB565_RED);
ips200_draw_rect(r_x - 2, r_y, r_x, r_y, RGB565_BLUE);
ips200_draw_rect(mid_x_l, mix_y_l, mid_x_l + 2, mix_y_l, RGB565_BLACK);
ips200_draw_rect(mid_x_r, mix_y_r, mid_x_r + 2, mix_y_r, RGB565_BLUE);
// ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// ips200_draw_point(START_X + (uint16_t)((float)pts_right[i][1] * horizontal_zoom_rate) - 1, START_Y + (uint16_t)((float)pts_right[i][0] * vertical_zoom_rate), RGB565_GREEN);
// ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate), START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
// ips200_draw_point(START_X + (uint16_t)((float)pts_left[i][1] * horizontal_zoom_rate) + 1, START_Y + (uint16_t)((float)pts_left[i][0] * vertical_zoom_rate), RGB565_YELLOW);
}
#undef IMAGE_DISPLAY_WIDTH
#undef START_X
#undef START_Y
}
uint16_t rgb_gradient(uint16_t i)
{
#define STEP1 (32.0f / 33.0f)
#define STEP2 (64.0f / 33.0f)
static uint16_t color = 0;
static uint16_t i_last;
static float r = 32;
static float g = 0;
static float b = 0;
uint8_t r_h = 0;
uint8_t g_h = 0;
uint8_t b_h = 0;
if (i == i_last) {
return color;
}
if (i < 33) {
if (0 == i) {
r = 32;
g = 0;
b = 0;
}
r = r - STEP1;
g = g + STEP2;
b = 0;
} else if (i > 33) {
if (i < 67) {
r = 0;
g = g - STEP2;
b = b + STEP1;
} else {
r = r + STEP1;
g = 0;
b = b - STEP1;
}
}
color = 0;
r_h = (uint8_t)r;
g_h = (uint8_t)g;
b_h = (uint8_t)b;
printf("%d - r:%d, g:%d, b:%d\r\n", i, r_h, g_h, b_h);
color |= (r_h & 0x1F) << 11;
color |= (g_h & 0x3F) << 5;
color |= (b_h & 0x1F);
i_last = i;
return color;
#undef STEP1
#undef STEP2
}