luckfox-pico-sdk/sysdrv/source/mcu/rt-thread/applications/pcba_test/main_page.c
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

493 lines
14 KiB
C

/*
* Copyright: Copyright (c) 2020 Fuzhou Rockchip Electronic Co.,Ltd
*
* License: SPDX-License-Identifier: Apache-2.0
*
* @Author: Chad.ma
* @Date: 2020-05-15 15:59:11
* @Company: Rockchip
* @LastEditTime: 2020-06-16 15:21:24
* @LastEditors: Do not edit
* @Description:
*/
#include "pcba_app.h"
#include "pcba_public.h"
#include "main_page.h"
#include "screen_test_page.h"
#include "key_test_page.h"
#include "record_test_page.h"
#include "phospk_test_page.h"
#include "emmc_test_page.h"
#include "rtc_test_page.h"
#include "temperate_test_page.h"
#include "battery_test_page.h"
#include "wifi_test_page.h"
#include "bt_test_page.h"
#include "result_page.h"
#define DBG_SECTION_NAME "PCBA_MAINPAGE"
#define DBG_LEVEL DBG_LOG
#include "rtdbg.h"
char g_result_info[ITEM_MAX][8];
/* release btn style */
lv_style_t style_tv_btn_rel;
/* press btn style */
lv_style_t style_tv_btn_pr;
static lv_obj_t *index_page = NULL;
static lv_obj_t *divide_line = NULL;
static lv_obj_t *company_label = NULL;
static lv_obj_t *platform_label = NULL;
static lv_obj_t * arc_point = NULL;
struct pcba_test_item_st
{
int item;
lv_obj_t *item_btn;
const char* btn_label;
lv_event_cb_t btn_cb;
};
static void screen_test_cb(lv_obj_t * obj, lv_event_t event);
static void key_test_cb(lv_obj_t * obj, lv_event_t event);
static void record_test_cb(lv_obj_t * obj, lv_event_t event);
static void phospk_test_cb(lv_obj_t * obj, lv_event_t event);
static void emmc_test_cb(lv_obj_t * obj, lv_event_t event);
static void batt_test_cb(lv_obj_t * obj, lv_event_t event);
static void temp_test_cb(lv_obj_t * obj, lv_event_t event);
static void rtc_test_cb(lv_obj_t * obj, lv_event_t event);
static void wifi_test_cb(lv_obj_t * obj, lv_event_t event);
static void bt_test_cb(lv_obj_t * obj, lv_event_t event);
static void result_btn_cb(lv_obj_t * obj, lv_event_t event);
struct pcba_test_item_st g_pcba_items[ITEM_MAX] =
{
{ITEM_SCREEN, NULL, "screen test", screen_test_cb},
{ITEM_KEY, NULL, "key test", key_test_cb },
{ITEM_RECORD, NULL, "record test", record_test_cb},
{ITEM_PHO_SPK, NULL, "phospk test", phospk_test_cb},
{ITEM_EMMC, NULL, "emmc test", emmc_test_cb },
{ITEM_BATTERY, NULL, "batt test", batt_test_cb },
{ITEM_TEMP, NULL, "temp test", temp_test_cb },
{ITEM_RTC, NULL, "rtc test", rtc_test_cb },
{ITEM_WIFI, NULL, "wifi test", wifi_test_cb },
{ITEM_BT, NULL, "bt test", bt_test_cb },
{ITEM_RESULT, NULL, "result", result_btn_cb },
};
const char *pcba_test_item_str[ITEM_MAX] =
{
"Screen Test",
"Key Test",
"Record Test",
"Pho_Spk Test",
"eMMC Test",
"Battery Test",
"Temperate Test",
"Rtc Test",
"Wifi Test",
"BT Test",
"PCBA Statistics",
};
static void set_buttn_globe_sylte(void)
{
/* release btn style */
lv_style_copy(&style_tv_btn_rel, &lv_style_btn_rel);
style_tv_btn_rel.body.opa = LV_OPA_70;
style_tv_btn_rel.body.border.width = 0;
style_tv_btn_rel.body.radius = 0;
/* press btn style */
lv_style_copy(&style_tv_btn_pr, &lv_style_btn_pr);
style_tv_btn_pr.body.radius = 0;
style_tv_btn_pr.body.opa = LV_OPA_50;
style_tv_btn_pr.body.main_color = LV_COLOR_WHITE;
style_tv_btn_pr.body.grad_color = LV_COLOR_WHITE;
style_tv_btn_pr.body.border.width = 0;
style_tv_btn_pr.text.color = LV_COLOR_GRAY;
}
static rt_err_t draw_divide_line(void)
{
static lv_point_t line_points[] = {{0, STATE_BAR_H - 1}, {STATE_BAR_W, STATE_BAR_H - 1}};
static lv_style_t style_line;
lv_style_copy(&style_line, &lv_style_plain);
style_line.line.color = LV_COLOR_NAVY;
style_line.line.width = 1;
style_line.body.main_color = LV_COLOR_BLACK;
style_line.body.grad_color = LV_COLOR_BLACK;
lv_line_set_points(divide_line, line_points, 2);
lv_line_set_style(divide_line, 0, &style_line);
lv_obj_align(divide_line, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
lv_obj_invalidate(divide_line);
return RT_EOK;
}
static void screen_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked SCREEN TEST");
LOG_D(">>>>> SCREEN TEST PAGE Enter..");
index_page_deinit();
screen_page_init(0);
}
}
static void key_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked KEY TEST");
LOG_D(">>>>> KEY TEST PAGE Enter..");
index_page_deinit();
key_page_init(0);
}
}
static void record_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked RECORD TEST");
LOG_D(">>>>> RECORD TEST PAGE Enter..");
index_page_deinit();
record_page_init(0);
}
}
static void phospk_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked PHONE_SPEAK TEST");
LOG_D(">>>>> PHONE_SPEAK TEST PAGE Enter..");
index_page_deinit();
phospk_page_init(0);
}
}
static void emmc_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked EMMC TEST");
LOG_D(">>>>> EMMC TEST PAGE Enter..");
index_page_deinit();
emmc_page_init(0);
}
}
static void batt_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked BATTERY TEST");
LOG_D(">>>>> BATTERY TEST PAGE Enter..");
index_page_deinit();
batt_page_init(0);
}
}
static void rtc_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked RTC TEST");
LOG_D(">>>>> RTC TEST PAGE Enter..");
index_page_deinit();
rtc_page_init(0);
}
}
static void temp_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked TEMPERATE TEST");
LOG_D(">>>>> TEMPERATE TEST PAGE Enter..");
index_page_deinit();
temp_page_init(0);
}
}
static void wifi_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked WIFI TEST");
LOG_D(">>>>> WIFI TEST PAGE Enter..");
index_page_deinit();
wifi_page_init(0);
}
}
static void bt_test_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked BT TEST");
LOG_D(">>>>> BT TEST PAGE Enter..");
index_page_deinit();
bt_page_init(0);
}
}
void draw_test_item_buttons()
{
int i = -1;
for (i = ITEM_SCREEN; i < ITEM_RESULT; i++)
{
g_pcba_items[i].item_btn = lv_btn_create(index_page, NULL);
lv_obj_set_event_cb(g_pcba_items[i].item_btn, g_pcba_items[i].btn_cb);
lv_obj_set_size(g_pcba_items[i].item_btn, BTN_W, BTN_H);
lv_btn_set_style(g_pcba_items[i].item_btn, LV_BTN_STYLE_PR, &style_tv_btn_pr);
lv_btn_set_style(g_pcba_items[i].item_btn, LV_BTN_STYLE_REL, &style_tv_btn_rel);
if (i % 2 == 0)
lv_obj_set_pos(g_pcba_items[i].item_btn, 2, TITLE_STR_H + (BTN_H + BTN_Y_GAP) * (i / 2));
//lv_obj_align(g_pcba_items[i].item_btn, NULL, LV_ALIGN_IN_TOP_LEFT, BTN_X_GAP, TITLE_STR_H + (BTN_H* i + BTN_Y_GAP));
else
//lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, -40);
lv_obj_set_pos(g_pcba_items[i].item_btn, BTN_W + BTN_X_GAP + 5, TITLE_STR_H + (BTN_H + BTN_Y_GAP) * (i / 2));
lv_obj_t * label;
label = lv_label_create(g_pcba_items[i].item_btn, NULL);
lv_label_set_text(label, g_pcba_items[i].btn_label);
lv_obj_set_style(label, &label_style_font16);
}
}
static lv_obj_t* rst_btn;
static int g_item_index = 0;
/*
void draw_arc_position(int position)
{
int arc_x = 0;
int arc_y = 0;
LOG_D("%s Enter", __func__);
static lv_style_t style;
if (arc_point == NULL)
{
LOG_D("%s Create new arc point", __func__);
lv_style_copy(&style, &lv_style_plain);
style.line.color = LV_COLOR_RED;
style.line.width = 5;
arc_point = lv_arc_create(index_page, NULL);
lv_obj_set_size(arc_point, 10, 10);
lv_arc_set_angles(arc_point, 0, 360);
lv_arc_set_style(arc_point, LV_ARC_STYLE_MAIN, &style);
lv_obj_invalidate(index_page);
}
if (position != ITEM_RESULT)
{
if (position % 2 == 0)
{
arc_x = BTN_W - 2;
arc_y = TITLE_STR_H + BTN_H + (BTN_H + BTN_Y_GAP) * (position / 2) - 5;
}
else
{
arc_x = SCREEN_W - 10;
arc_y = TITLE_STR_H + BTN_H + (BTN_H + BTN_Y_GAP) * (position / 2) - 5;
}
}
else if (position == ITEM_RESULT)
{
arc_x = (SCREEN_W / 3) * 2;
arc_y = SCREEN_H - 10;
}
LOG_D("arc point x : %d, y: %d", arc_x, arc_y);
lv_obj_set_pos(arc_point, arc_x, arc_y);
}
*/
static void result_btn_cb(lv_obj_t * obj, lv_event_t event)
{
if (event == LV_EVENT_CLICKED)
{
LOG_D("Clicked PCBA TEST RESULT");
LOG_D(">>>>> PCBA TEST result page Enter..");
index_page_deinit();
result_page_init(0);
}
}
static lv_obj_t* rst_btn;
static void draw_result_button(void)
{
int btn_w = SCREEN_W / 3;
lv_obj_t * label;
/* RESULT button */
rst_btn = lv_btn_create(index_page, NULL);
g_pcba_items[ITEM_RESULT].item_btn = rst_btn;
lv_obj_set_event_cb(rst_btn, result_btn_cb);
lv_obj_set_size(rst_btn, btn_w, BTN_H);
//lv_obj_set_pos(rst_btn, btn_w * 2, SCREEN_H - BTN_H);
lv_obj_align(rst_btn, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0/*SCREEN_H - BTN_H*/);
static lv_style_t style_btn_rel;
lv_style_copy(&style_btn_rel, &lv_style_btn_rel);
style_btn_rel.body.opa = LV_OPA_70;
style_btn_rel.body.border.width = 0;
style_btn_rel.body.radius = 0;
static lv_style_t style_btn_pr;
lv_style_copy(&style_btn_pr, &lv_style_btn_pr);
style_btn_pr.body.radius = 0;
style_btn_pr.body.opa = LV_OPA_50;
style_btn_pr.body.main_color = LV_COLOR_WHITE;
style_btn_pr.body.grad_color = LV_COLOR_WHITE;
style_btn_pr.body.border.width = 0;
style_btn_pr.text.color = LV_COLOR_GRAY;
lv_btn_set_style(rst_btn, LV_BTN_STYLE_PR, &style_btn_pr);
lv_btn_set_style(rst_btn, LV_BTN_STYLE_REL, &style_btn_rel);
label = lv_label_create(rst_btn, NULL);
lv_label_set_recolor(label, true);
lv_label_set_text(label, "#0000ff RESULT#");
lv_obj_set_style(label, &label_style_font16);
}
/**
* @description: pcba main page init
* @param {int page}
* @return: none
*/
void index_page_init(int p_page)
{
rt_int16_t y = 0;
if (!index_page)
{
index_page = lv_obj_create(lv_scr_act(), NULL);
lv_obj_set_size(index_page, SCREEN_W, SCREEN_H);
lv_obj_set_style(index_page, &page_pcba_style);
//lv_obj_align(index_page, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);
lv_obj_invalidate(index_page);
divide_line = lv_line_create(index_page, NULL);
company_label = lv_label_create(index_page, NULL);
// y = LABEL_Y_START + LABEL_Y_GAP;
lv_label_set_long_mode(company_label, LV_LABEL_LONG_SROLL_CIRC);
lv_label_set_align(company_label, LV_LABEL_ALIGN_CENTER);
lv_obj_set_size(company_label, LABEL_W, LABEL_H);
lv_obj_align(company_label, NULL, LV_ALIGN_IN_TOP_MID, 0, y);
lv_label_set_text(company_label, "Rockchip Co.,Ltd.");
platform_label = lv_label_create(index_page, NULL);
y = LABEL_H;
lv_label_set_long_mode(platform_label, LV_LABEL_LONG_SROLL_CIRC);
lv_label_set_align(platform_label, LV_LABEL_ALIGN_CENTER);
lv_label_set_recolor(platform_label, true);
lv_obj_set_size(platform_label, LABEL_W, LABEL_H);
lv_obj_align(platform_label, NULL, LV_ALIGN_IN_TOP_MID, 0, y);
lv_label_set_text(platform_label, "#00ff00 RK2108 PCBA Test #");
}
set_buttn_globe_sylte();
draw_divide_line();
draw_test_item_buttons();
// draw_arc_position(g_item_index);
draw_result_button();
lv_btn_set_state(g_pcba_items[g_item_index].item_btn, LV_BTN_STATE_PR);
}
/**
* @description:
* @param {type}
* @return:
*/
void index_page_deinit(void)
{
if (index_page)
{
LOG_D("%s start", __func__);
/* this function will delete children too */
lv_obj_del(index_page);
index_page = NULL;
arc_point = NULL;
}
}
void index_page_key(size_t type, size_t value)
{
if (type == TYPE_KEY_PRESS)
{
switch (value)
{
case KEY_SELECT:
LOG_D("KEY SELECT");
if ((g_item_index + 2) == MENU_RECORD_TEST_PAGE)
{
if (rootfs_check())
goto NO_ROOTFS;
pcba_player_stop();
}
display_pcba_page(g_item_index + 2) ;
break;
case KEY_UP:
LOG_D("KEY UP");
lv_btn_set_state(g_pcba_items[g_item_index].item_btn, LV_BTN_STATE_REL);
--g_item_index;
LOG_D("g_item_index = %d", g_item_index);
if (g_item_index < ITEM_SCREEN)
g_item_index = ITEM_MAX - 1;
// draw_arc_position(g_item_index);
lv_btn_set_state(g_pcba_items[g_item_index].item_btn, LV_BTN_STATE_PR);
break;
case KEY_DOWN:
LOG_D("KEY Down");
lv_btn_set_state(g_pcba_items[g_item_index].item_btn, LV_BTN_STATE_REL);
++g_item_index;
LOG_D("g_item_index = %d", g_item_index);
if (g_item_index >= ITEM_MAX)
g_item_index = 0;
// draw_arc_position(g_item_index);
lv_btn_set_state(g_pcba_items[g_item_index].item_btn, LV_BTN_STATE_PR);
break;
default:
break;
}
}
return;
NO_ROOTFS:
LOG_E("No rootfs, please check");
}
void index_page_refresh(size_t type, size_t value)
{
}