Now I paint the screen and call the function of the EVE_Bitmap
void SC_login_screen(uint8_t tag_val_scr)
{
#ifdef TFT_DEBUG
//ssp_err_t err, subclk_st;
//rtc_info_t rtc_info;
#endif
EVE_dl_begin2(CS5_TFT_FONDO_2, CS5_TFT_FONDO_1);
// EVE_Bitmap(g_bmp_info[CS5_LOGO_ARGUSA2], 1100u, 40u, 0u);
EVE_Text(255u, 255u, 255u, (uint8_t*)&"ARGUSA CONTROL DE ACCESOS", 0u, 32u, 0u, 210u, 40u); //0, 31, 0, 38, 20
EVE_Text(255u, 255u, 255u, (uint8_t*)&"INICIO DE SESION", 0u, 30u, 0u, 500u, 120u); //0u, 28u, 0u, 390u, 90u
EVE_Text(255u, 255u, 255u, (uint8_t*)&"Sistema de Control de Dispositivos de Paso y Control de Aforos", 0u, 23u, 0u, 350u, 190u); //0u, 21u, 0u, 160u, 130u
EVE_Text(255u, 255u, 255u, (uint8_t*)&"Por motivos de seguridad todas las acciones realizadas por el usuario quedaran registradas para su posible verificacion.", 0u, 23u, 0u, 130u, 230u); //0u, 21u, 0u, 30u, 150u
EVE_Text(255u, 255u, 255u, (uint8_t*)&"Usuario", 0u, 30u, 0u, 300u, 320u); //0u, 28u, 0u, 100u, 220u
EVE_Edit (TFT_EDIT_COLOR, TFT_EDIT_FOCUS_COLOR, TFT_EDIT_TEXT_COLOR, (g_focus == EDIT_USER_FOCUS), TAG_EDIT_USER, EDIT_TYPE_CHAR, (uint8_t*)&log_user, 28u, 0u, 570u, 330u, 300u, 22u);
EVE_Text (255u, 255u, 255u, (uint8_t*)&"Clave de Acceso", 0u, 30u, 0u, 300u, 370u);
EVE_Edit (TFT_EDIT_COLOR, TFT_EDIT_FOCUS_COLOR, TFT_EDIT_TEXT_COLOR, (g_focus == EDIT_PASS_FOCUS), TAG_EDIT_PASS, EDIT_TYPE_PASS, (uint8_t*)&log_password, 28u, 0u, 570u, 380u, 300u, 22u);
//EVE_Bitmap(g_bmp_info[CS5_ENT_BTN], 1000u, 340u, TFT_TAG_BT_ACCEPT);
EVE_Bitmap(g_bmp_info[CS5_ASTC_ENTER], 1000u, 340u, TFT_TAG_BT_ACCEPT);
#ifdef TFT_DEBUG
debug_dl_offset = EVE_mem_read16(REG_CMD_DL);
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "%i", debug_dl_offset);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 20u, 770u);
#endif
if(g_focus <= EDIT_LAST_FOCUS && tag_val_scr != 255)
EVE_Keyboard (TFT_BT_R, TFT_BT_G, TFT_BT_B, TFT_BT_REPOSO, TFT_BT_GR, TFT_BT_PULSADO, EDIT_FONT, tag_val_scr, TFT_KEYB_X, TFT_KEYB_Y, TFT_KEYB_W, TFT_KEYB_H, log_edit_type);
else
{
EVE_Text(255u, 255u, 255u, (uint8_t*)&"El usuario acepta las condiciones de uso de la licencia y se responsabiliza de los posibles fallos de funcionamiento", 0u, 23u, 0u, 150u, 460u);
EVE_Text(255u, 255u, 255u, (uint8_t*)&"de los dispositivos causados por la modificacion de los datos de los mismos.", 0u, 23u, 0u, 320u, 510u);
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "Version %02i.%02i", CONSOLE_VERSION, CONSOLE_SUB_VERSION);
EVE_Text (255u, 255u, 255u, (uint8_t*)&tft_buffer, tft_bf_count, 27u, EVE_OPT_CENTERY, 40u, 750u);
if (g_rtc_init == SSP_SUCCESS)
{
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "%i / %i / %i %02i : %02i ", g_system_time.tm_mday, (g_system_time.tm_mon + 1), (g_system_time.tm_year + 1900),
g_system_time.tm_hour, g_system_time.tm_min); //, g_system_time.tm_sec
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 1050u, 750u);
}
}
//#else
// SSP_PARAMETER_NOT_USED(tag_val_scr);
//err = g_rtc_clock.p_api->infoGet (g_rtc_clock.p_ctrl, &rtc_info);
//if (err != SSP_SUCCESS) CONSOLE_error_trap( 0, err, "Error RTC Info");
//subclk_st = g_cgc.p_api->clockCheck(CGC_CLOCK_SUBCLOCK);
//tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "RTC.- Init: %i calendarTimeGet %i ", g_rtc_init, g_rtc_get_err);
//EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 10u, 344u);
//tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "Source: %i Rtc Status: %i Subclock Status: %i SOSTP: %i", rtc_info.clock_source, rtc_info.status, subclk_st, R_SYSTEM->SOSCCR_b.SOSTP);
//EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 10u, 368u);
/*rtc_instance_ctrl_t * p_ctrl = (rtc_instance_ctrl_t *) g_rtc_clock.p_ctrl;
R_RTC_Type * p_rtc_reg = (R_RTC_Type *) p_ctrl->p_reg;
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "REG 1: AIE:%i CIE:%i PIE:%i RTCOS:%i PES:%i", p_rtc_reg->RCR1_b.AIE, p_rtc_reg->RCR1_b.CIE, p_rtc_reg->RCR1_b.PIE, p_rtc_reg->RCR1_b.RTCOS, p_rtc_reg->RCR1_b.PES);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 10u, 392u);
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "REG 2: START:%i RESET:%i ADJ30:%i RTCOE:%i AADJE:%i AADJP:%i HR24:%i CNTMD:%i",
p_rtc_reg->RCR2_b.START, p_rtc_reg->RCR2_b.RESET, p_rtc_reg->RCR2_b.ADJ30, p_rtc_reg->RCR2_b.RTCOE, p_rtc_reg->RCR2_b.AADJE, p_rtc_reg->RCR2_b.AADJP, p_rtc_reg->RCR2_b.HR24, p_rtc_reg->RCR2_b.CNTMD);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 10u, 416u);
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "REG 4: RCKSEL:%i", p_rtc_reg->RCR4_b.RCKSEL);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 10u, 440u);*/
/**
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 320u, 800u, 320u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 330u, 800u, 330u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 340u, 800u, 340u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 350u, 800u, 350u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 360u, 800u, 360u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 370u, 800u, 370u);
EVE_Line(EVE_ONLY, 255u, 255u, 255u, 1u, 0, 380u, 800u, 380u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 390u, 800u, 390u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 400u, 800u, 400u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 410u, 800u, 410u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 420u, 800u, 420u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 430u, 800u, 430u);
EVE_Line(EVE_ONLY, 0u, 0u, 0u, 1u, 0, 440u, 800u, 440u);
uint8_t r, g, b;
uint16_t x1, y1, x2, y2;
uint32_t last = ((rtc_error_dz + 100) > rtc_error_index) ? rtc_error_index : (rtc_error_dz + 100);
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "%li", rtc_error_dz);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 42u, 292u);
EVE_Bitmap( g_bmp_info[CS5_F_IZQUIERDA], 2u, 270u, TAG_IZDA);
EVE_Bitmap( g_bmp_info[CS5_F_DERECHA], 60u, 270u, TAG_DCHA);
for (uint32_t i = rtc_error_dz, p = 0; i < last; i++, p++)
{
if (rtc_delta_log > 40 || rtc_delta_log < (-40)) { r = 255u; g = 0u; b = 0u; }
else if (rtc_delta_log > 20 || rtc_delta_log < (-20)) { r = 255u; g = 255u; b = 0u; }
else { r = 0u; g = 255u; b = 0u; }
x1 = (uint16_t)(p * 8u);
x2 = (uint16_t)(x1 + 8u);
y1 = (i == 0) ? 380 : (uint16_t)((380 - rtc_delta_log[i-1]));
y2 = (uint16_t)(380 - rtc_delta_log);
EVE_Line(EVE_ONLY, r, g, b, 1u, x1, y1, x2, y2);
}
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "Tag %i Fecha: %i / %i / %i %02i : %02i : %02i ", tag_val_scr,
g_system_time.tm_mday, (g_system_time.tm_mon + 1), (g_system_time.tm_year + 1900), // SS Time: %i / %i"
g_system_time.tm_hour, g_system_time.tm_min, g_system_time.tm_sec); //, g_console_config.screensaver_time, g_screensaver_timeout);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 2u, 468u);
tft_bf_count = (uint16_t)sprintf ((char *)tft_buffer, "RTC.- CNT %li Hz %li Delta %i AdjustVal %i",
tft_rtc_error_correct.rtc_1_sec_via_gpt, (uint32_t)tft_rtc_error_correct.effective_freq, rtc_1_sec_sig_delta, tft_rtc_error_correct.rtc_adjust_value);
EVE_Text( 255u, 255u, 255u, tft_buffer, tft_bf_count, 27, EVE_OPT_CENTERY, 330u, 468u);
//if ((++debug_dot %2) == 0u)
// EVE_Dot(EVE_ONLY, 240u, 240u, 50u, 7u, 20u, 470u);
***/
//#endif
EVE_dl_end();
}
function EVE_BITMAP
void EVE_Bitmap(img_info_t bmp, uint16_t x, uint16_t y, uint8_t tag_id)
{
uint32_t stride;
uint16_t x_posicion;
eve_tft_dlOffset = EVE_mem_read16(REG_CMD_DL); // Verifica el espacio disponible en la memoria DL
if (bmp.format != EVE_PALETTED8 && (eve_tft_dlOffset + EVE_BMP_SIZE + EVE_TFT_END_SIZE) > EVE_RAM_DL_SIZE) {
eve_tft_error = SSP_ERR_OUT_OF_MEMORY;
return;
} else if (bmp.format == EVE_PALETTED8 && (eve_tft_dlOffset + EVE_BMP_PAL8_SIZE + EVE_TFT_END_SIZE) > EVE_RAM_DL_SIZE) {
eve_tft_error = SSP_ERR_OUT_OF_MEMORY;
return;
}
if (bmp.format != EVE_PALETTED8)
Wait4CoProFIFO_FreeSpace(EVE_BMP_SIZE); // Espera suficiente espacio en el FIFO
else
Wait4CoProFIFO_FreeSpace(EVE_BMP_PAL8_SIZE); // Para imágenes con paleta
_io_set_cs_lo; // Inicia la transacción SPI
EVE_address_for_write(EVE_RAM_CMD + eve_tft_cmdOffset); // Dirección para escribir el primer comando
eve_tft_txOffset = 0x0000;
if (eve_tft_r != 255u || eve_tft_g != 255u || eve_tft_b != 255u) {
EVE_add_cmd(COLOR_RGB(255u, 255u, 255u), 4u); // Establece el color blanco
eve_tft_r = 255u;
eve_tft_g = 255u;
eve_tft_b = 255u;
}
if (x == BMP_SCRSAVER_XY && y == BMP_SCRSAVER_XY)
EVE_add_cmd(CMD_SCREENSAVER, 4u); // Comando para activar el screensaver
EVE_add_cmd(BITMAP_HANDLE(BMP_HANDLE), 4u); // Define el manejador de la imagen
if (bmp.format == EVE_PALETTED4444 || bmp.format == EVE_PALETTED565 || bmp.format == EVE_PALETTED8) {
EVE_add_cmd(PALETTE_SOURCE(EVE_RAM_G + bmp.ram_g_add), 4u); // Dirección de la paleta
EVE_add_cmd(BITMAP_SOURCE(EVE_RAM_G + bmp.ram_g_add + BMP_PAL_SIZE), 4u); // Dirección de los datos del bitmap
} else {
EVE_add_cmd(BITMAP_SOURCE(EVE_RAM_G + bmp.ram_g_add), 4u); // Dirección de los datos del bitmap
}
if (bmp.format == EVE_RGB565 || bmp.format == EVE_ARGB4 || bmp.format == EVE_ARGB1555) {
stride = bmp.width * 2u;
} else if (bmp.format == EVE_L1) {
stride = bmp.width / 8u;
} else if (bmp.format == EVE_L2) {
stride = bmp.width / 4u;
} else if (bmp.format == EVE_L4) {
stride = bmp.width / 2u;
} else if (bmp.format == EVE_ASTC_8x8) {
stride = (bmp.width + 7) / 8 * 16; // Ancho en bloques de 8x8 (16 bytes por bloque)
} else if (bmp.format == EVE_ASTC_4x4) {
stride = (bmp.width + 3) / 4 * 8; // Ancho en bloques de 4x4 (8 bytes por bloque)
} else if (bmp.format == EVE_ASTC_5x5) {
stride = (bmp.width + 4) / 5 * 8; // Ancho en bloques de 5x5 (8 bytes por bloque)
} else if (bmp.format == EVE_ASTC_6x6) {
stride = (bmp.width + 5) / 6 * 8; // Ancho en bloques de 6x6 (8 bytes por bloque)
} else {
stride = bmp.width;
}
if (bmp.format == EVE_ASTC_4x4 || bmp.format == EVE_ASTC_5x5 || bmp.format == EVE_ASTC_6x6 || bmp.format == EVE_ASTC_8x8) {
EVE_add_cmd(BITMAP_LAYOUT(bmp.format, stride, (bmp.height + 7) /, 4u);
} else {
EVE_add_cmd(BITMAP_LAYOUT(bmp.format, stride, bmp.height), 4u);
}
EVE_add_cmd(BITMAP_SIZE(EVE_NEAREST, EVE_BORDER, EVE_BORDER, bmp.width, bmp.height), 4u); // Propiedades de la imagen
if (tag_id > 0u) {
EVE_add_cmd(TAG_MASK(1), 4u); // Habilitar tag
EVE_add_cmd(TAG(tag_id), 4u); // ID del tag
}
if (x > 1020 && x != BMP_SCRSAVER_XY) {
x_posicion = (x - 1020) * PIXEL_PRECISION;
EVE_add_cmd(VERTEX_TRANSLATE_X(x_posicion), 4u); // Desplazamos la imagen 160 píxeles en X
x = 1020;
}
if (bmp.format != EVE_PALETTED8)
{
EVE_add_cmd(BEGIN(EVE_BITMAPS), 4u); // Begin drawing bitmaps
if (x == BMP_SCRSAVER_XY && y == BMP_SCRSAVER_XY)
EVE_add_cmd(MACRO(0), 4u);
else
EVE_add_cmd(VERTEX2F((unsigned long)(x * PIXEL_PRECISION), (unsigned long)(y * PIXEL_PRECISION) ), 4u); // Top left point to print
EVE_add_cmd(END(), 4u);
}
else
{
EVE_add_cmd(SAVE_CONTEXT(), 4u);
EVE_add_cmd(BEGIN(EVE_BITMAPS), 4u); // Begin drawing bitmaps
EVE_add_cmd(BLEND_FUNC(EVE_ONE, EVE_ZERO), 4u);
//Draw Alpha channel
EVE_add_cmd(COLOR_MASK(0, 0, 0, 1), 4u);
EVE_add_cmd(PALETTE_SOURCE((bmp.ram_g_add + 3)), 4u);
if (x == BMP_SCRSAVER_XY && y == BMP_SCRSAVER_XY)
EVE_add_cmd(MACRO(0), 4u);
else
EVE_add_cmd(VERTEX2F((unsigned long)(x * PIXEL_PRECISION), (unsigned long)(y * PIXEL_PRECISION) ), 4u); // Top left point to print
//Draw Red channel
EVE_add_cmd(BLEND_FUNC(EVE_DST_ALPHA, EVE_ONE_MINUS_DST_ALPHA), 4u);
EVE_add_cmd(COLOR_MASK(1, 0, 0, 0), 4u);
EVE_add_cmd(PALETTE_SOURCE((bmp.ram_g_add + 2)), 4u);
if (x == BMP_SCRSAVER_XY && y == BMP_SCRSAVER_XY)
EVE_add_cmd(MACRO(0), 4u);
else
EVE_add_cmd(VERTEX2F((unsigned long)(x * PIXEL_PRECISION), (unsigned long)(y * PIXEL_PRECISION) ), 4u); // Top left point to print
//Draw Green channel
EVE_add_cmd(COLOR_MASK(0, 1, 0, 0), 4u);
EVE_add_cmd(PALETTE_SOURCE((bmp.ram_g_add + 1)), 4u);
if (x == BMP_SCRSAVER_XY && y == BMP_SCRSAVER_XY)
EVE_add_cmd(MACRO(0), 4u);
else
EVE_add_cmd(VERTEX2F((unsigned long)(x * PIXEL_PRECISION), (unsigned long)(y * PIXEL_PRECISION) ), 4u); // Top left point to print
//Draw Blue channel
EVE_add_cmd(COLOR_MASK(0, 0, 1, 0), 4u);
EVE_add_cmd(PALETTE_SOURCE(bmp.ram_g_add), 4u);
if (x == BMP_SCRSAVER_XY && y == BMP_SCRSAVER_XY)
EVE_add_cmd(MACRO(0), 4u);
else
EVE_add_cmd(VERTEX2F((unsigned long)(x * PIXEL_PRECISION), (unsigned long)(y * PIXEL_PRECISION) ), 4u); // Top left point to print
EVE_add_cmd(END(), 4u);
EVE_add_cmd(RESTORE_CONTEXT(), 4u);
}
/*
// Desplazar la imagen usando `VERTEX_TRANSLATE_X` para moverla a la posición 1180
// La coordenada 1180 está fuera del límite de 1020, por lo que aplicamos un desplazamiento de 160 píxeles.
if (x > 1020) {
x_posicion = (x - 1020) * PIXEL_PRECISION;
EVE_add_cmd(VERTEX_TRANSLATE_X(x_posicion), 4u); // Desplazamos la imagen 160 píxeles en X
x = 1020;
}
// Dibuja la imagen en la nueva posición (1180, y)
EVE_add_cmd(BEGIN(EVE_BITMAPS), 4u); // Comienza a dibujar el bitmap
EVE_add_cmd(VERTEX2F((unsigned long)(x * PIXEL_PRECISION), (unsigned long)(y * PIXEL_PRECISION)), 4u); // Coordenadas X=1180, Y=desired
EVE_add_cmd(END(), 4u); // Finaliza el comando de dibujo
*/
if (tag_id > 0u) {
EVE_add_cmd(TAG_MASK(0), 4u); // Desactiva el tag
}
EVE_add_cmd(VERTEX_TRANSLATE_X(0),4u);
EVE_spi_write(eve_tft_txOffset); // Envía los comandos
_io_set_cs_hi; // Finaliza la transacción SPI
EVE_mem_write16(REG_CMD_WRITE, eve_tft_cmdOffset); // Actualiza el puntero de escritura en la memoria DL
}
As I said it doesn't paint the images, I know it's a lot of code but could you tell me if I'm doing something wrong.
Thank you very much.
PS.- the images are ASTC_8x8 and it is a 88x72 image. I pass the .raw file that is generated from the several that it generates.