365 lines
11 KiB
C
365 lines
11 KiB
C
|
|
#include "Test.h"
|
||
|
|
#include "EPD_2in9_V2.h"
|
||
|
|
#include "ICNT86X.h"
|
||
|
|
#include "time.h"
|
||
|
|
|
||
|
|
extern ICNT86_Dev ICNT86_Dev_Now, ICNT86_Dev_Old;
|
||
|
|
extern int IIC_Address;
|
||
|
|
static pthread_t t1, t2;
|
||
|
|
UBYTE flag_2in9=1, dis_lock=1, dis_flag=1;
|
||
|
|
UBYTE *BlackImage, *BlackImage_ASYNC;
|
||
|
|
|
||
|
|
char *PhotoPath_S_2in9[10] = {"./pic/2in9/Photo_1_0.bmp",
|
||
|
|
"./pic/2in9/Photo_1_1.bmp", "./pic/2in9/Photo_1_2.bmp", "./pic/2in9/Photo_1_3.bmp", "./pic/2in9/Photo_1_4.bmp",
|
||
|
|
"./pic/2in9/Photo_1_5.bmp", "./pic/2in9/Photo_1_6.bmp", "./pic/2in9/Photo_1_7.bmp", "./pic/2in9/Photo_1_8.bmp",
|
||
|
|
"./pic/2in9/Photo_1_9.bmp",
|
||
|
|
};
|
||
|
|
char *PhotoPath_L_2in9[10] = {"./pic/2in9/Photo_2_0.bmp",
|
||
|
|
"./pic/2in9/Photo_2_1.bmp", "./pic/2in9/Photo_2_2.bmp", "./pic/2in9/Photo_2_3.bmp", "./pic/2in9/Photo_2_4.bmp",
|
||
|
|
"./pic/2in9/Photo_2_5.bmp", "./pic/2in9/Photo_2_6.bmp", "./pic/2in9/Photo_2_7.bmp", "./pic/2in9/Photo_2_8.bmp",
|
||
|
|
"./pic/2in9/Photo_2_9.bmp",
|
||
|
|
};
|
||
|
|
char *PagePath_2in9[4] = {"./pic/2in9/Menu.bmp", "./pic/2in9/White_board.bmp", "./pic/2in9/Photo_1.bmp", "./pic/2in9/Photo_2.bmp"};
|
||
|
|
|
||
|
|
|
||
|
|
void Handler_2in9(int signo)
|
||
|
|
{
|
||
|
|
//System Exit
|
||
|
|
printf("\r\nHandler_2in9:exit\r\n");
|
||
|
|
EPD_2IN9_V2_Sleep();
|
||
|
|
DEV_Delay_ms(1000);
|
||
|
|
flag_2in9 = 0;
|
||
|
|
pthread_join(t1, NULL);
|
||
|
|
pthread_join(t2, NULL);
|
||
|
|
DEV_ModuleExit();
|
||
|
|
exit(0);
|
||
|
|
}
|
||
|
|
|
||
|
|
void *pthread_irq_2in9(void *arg)
|
||
|
|
{
|
||
|
|
while(flag_2in9) {
|
||
|
|
if(DEV_Digital_Read(INT) == 0) {
|
||
|
|
ICNT86_Dev_Now.Touch = 1;
|
||
|
|
// printf("!");
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
ICNT86_Dev_Now.Touch = 0;
|
||
|
|
}
|
||
|
|
DEV_Delay_ms(0.01);
|
||
|
|
}
|
||
|
|
printf("thread1:exit\r\n");
|
||
|
|
pthread_exit(NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
void *pthread_dis_2in9(void *arg)
|
||
|
|
{
|
||
|
|
while(flag_2in9) {
|
||
|
|
if(dis_flag) {
|
||
|
|
dis_lock = 1;
|
||
|
|
EPD_2IN9_V2_Display_Partial(BlackImage_ASYNC);
|
||
|
|
dis_flag = 0;
|
||
|
|
dis_lock = 0;
|
||
|
|
printf("ASYNC display over, unlock \r\n");
|
||
|
|
}
|
||
|
|
else {
|
||
|
|
dis_lock = 0;
|
||
|
|
}
|
||
|
|
// DEV_Delay_ms(0.01);
|
||
|
|
}
|
||
|
|
|
||
|
|
printf("thread2:exit\r\n");
|
||
|
|
pthread_exit(NULL);
|
||
|
|
}
|
||
|
|
|
||
|
|
void Show_Photo_Small_2in9(UBYTE small)
|
||
|
|
{
|
||
|
|
for(UBYTE t=1; t<7; t++) {
|
||
|
|
// printf("t= %d , small= %d \r\n", t, small);
|
||
|
|
if(small*3+t > 9) // Max image is 9
|
||
|
|
GUI_ReadBmp(PhotoPath_S_2in9[0], (t-1)%3*98+2, (t-1)/3*48+2);
|
||
|
|
else {
|
||
|
|
// printf("x is %d, y is %d \r\n", (t-1)%3*98, (t-1)/3*48);
|
||
|
|
GUI_ReadBmp(PhotoPath_S_2in9[small*3+t], (t-1)%3*98+2, (t-1)/3*48+2);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void Show_Photo_Large_2in9(UBYTE large)
|
||
|
|
{
|
||
|
|
if(large > 9) // Max image is 9
|
||
|
|
GUI_ReadBmp(PhotoPath_L_2in9[0], 2, 2);
|
||
|
|
else
|
||
|
|
GUI_ReadBmp(PhotoPath_L_2in9[large], 2, 2);
|
||
|
|
}
|
||
|
|
|
||
|
|
void Get_Current_Time(PAINT_TIME *pTime)
|
||
|
|
{
|
||
|
|
time_t t;
|
||
|
|
struct tm *nowtime;
|
||
|
|
|
||
|
|
time(&t);
|
||
|
|
nowtime = localtime(&t);
|
||
|
|
|
||
|
|
pTime->Year = nowtime->tm_year + 1900;
|
||
|
|
pTime->Month = nowtime->tm_mon + 1;
|
||
|
|
pTime->Day = nowtime->tm_mday;
|
||
|
|
pTime->Hour = nowtime->tm_hour;
|
||
|
|
pTime->Min = nowtime->tm_min;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
int Test4gray_2in9(void)
|
||
|
|
{
|
||
|
|
EPD_2IN9_V2_Gray4_Init();
|
||
|
|
UWORD Imagesize = ((EPD_2IN9_V2_WIDTH % 4 == 0)? (EPD_2IN9_V2_WIDTH / 4 ): (EPD_2IN9_V2_WIDTH / 4 + 1)) * EPD_2IN9_V2_HEIGHT;
|
||
|
|
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
|
||
|
|
printf("Failed to apply for black memory...\r\n");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
Paint_NewImage(BlackImage, EPD_2IN9_V2_WIDTH, EPD_2IN9_V2_HEIGHT, 0, WHITE);
|
||
|
|
Paint_SetScale(4);
|
||
|
|
Paint_Clear(WHITE);
|
||
|
|
GUI_ReadBmp_4Gray("./pic/2in9/2in9_Scale.bmp", 0, 0);
|
||
|
|
EPD_2IN9_V2_4GrayDisplay(BlackImage);
|
||
|
|
DEV_Delay_ms(3000);
|
||
|
|
free(BlackImage);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
int TestCode_2in9(void)
|
||
|
|
{
|
||
|
|
IIC_Address = 0x48;
|
||
|
|
|
||
|
|
UDOUBLE i=0, j=0, k=0;
|
||
|
|
UBYTE Page=0, Photo_L=0, Photo_S=0;
|
||
|
|
UBYTE ReFlag=0, SelfFlag=0;
|
||
|
|
signal(SIGINT, Handler_2in9);
|
||
|
|
DEV_ModuleInit();
|
||
|
|
|
||
|
|
pthread_create(&t1, NULL, pthread_irq_2in9, NULL);
|
||
|
|
|
||
|
|
/*
|
||
|
|
Because the touch display requires a relatively fast refresh speed, the default
|
||
|
|
needs to use partial refresh, and four gray levels cannot be used in this mode.
|
||
|
|
Here, only four gray level picture refresh demonstration is used
|
||
|
|
*/
|
||
|
|
// Test4gray_2in9();
|
||
|
|
|
||
|
|
EPD_2IN9_V2_Init();
|
||
|
|
|
||
|
|
EPD_2IN9_V2_Clear();
|
||
|
|
|
||
|
|
ICNT_Init();
|
||
|
|
DEV_Delay_ms(100);
|
||
|
|
//Create a new image cache
|
||
|
|
UWORD Imagesize = ((EPD_2IN9_V2_WIDTH % 8 == 0)? (EPD_2IN9_V2_WIDTH / 8 ): (EPD_2IN9_V2_WIDTH / 8 + 1)) * EPD_2IN9_V2_HEIGHT;
|
||
|
|
if((BlackImage = (UBYTE *)malloc(Imagesize)) == NULL) {
|
||
|
|
printf("Failed to apply for black memory...\r\n");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
if((BlackImage_ASYNC = (UBYTE *)malloc(Imagesize)) == NULL) {
|
||
|
|
printf("Failed to apply for black memory...\r\n");
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
printf("Paint_NewImage\r\n");
|
||
|
|
Paint_NewImage(BlackImage, EPD_2IN9_V2_WIDTH, EPD_2IN9_V2_HEIGHT, 90, WHITE);
|
||
|
|
Paint_SelectImage(BlackImage);
|
||
|
|
Paint_Clear(WHITE);
|
||
|
|
GUI_ReadBmp("./pic/2in9/Menu.bmp", 0, 0);
|
||
|
|
|
||
|
|
PAINT_TIME sPaint_time, sPaint_time_f;
|
||
|
|
Get_Current_Time(&sPaint_time);
|
||
|
|
Get_Current_Time(&sPaint_time_f);
|
||
|
|
Paint_DrawTime(210, 45, &sPaint_time, &Font24, WHITE, WHITE);
|
||
|
|
Paint_DrawDate(212, 80, &sPaint_time, &Font12, WHITE, WHITE);
|
||
|
|
|
||
|
|
EPD_2IN9_V2_Display_Base(BlackImage);
|
||
|
|
memcpy(BlackImage_ASYNC, BlackImage, Imagesize);
|
||
|
|
pthread_create(&t2, NULL, pthread_dis_2in9, NULL);
|
||
|
|
while(1) {
|
||
|
|
// k++;
|
||
|
|
if(i > 30 || ReFlag == 1) {
|
||
|
|
if(Page == 0) {
|
||
|
|
Get_Current_Time(&sPaint_time);
|
||
|
|
Paint_ClearWindows(210, 40, 290, 100, BLACK);
|
||
|
|
Paint_DrawTime(212, 45, &sPaint_time, &Font24, WHITE, WHITE);
|
||
|
|
Paint_DrawDate(212, 80, &sPaint_time, &Font12, WHITE, WHITE);
|
||
|
|
}
|
||
|
|
|
||
|
|
if(Page == 1 && SelfFlag != 1 && dis_lock != 1) {
|
||
|
|
memcpy(BlackImage_ASYNC, BlackImage, Imagesize);
|
||
|
|
dis_flag = 1;
|
||
|
|
|
||
|
|
i = 0;
|
||
|
|
k = 0;
|
||
|
|
j++;
|
||
|
|
ReFlag = 0;
|
||
|
|
printf("*** Draw Refresh ***\r\n");
|
||
|
|
}
|
||
|
|
else if(!dis_lock){
|
||
|
|
EPD_2IN9_V2_Display_Partial_Wait(BlackImage);
|
||
|
|
|
||
|
|
i = 0;
|
||
|
|
k = 0;
|
||
|
|
j++;
|
||
|
|
ReFlag = 0;
|
||
|
|
printf("*** Touch Refresh ***\r\n");
|
||
|
|
}
|
||
|
|
}else if(k++>50000000 && i>0 && Page == 1) {
|
||
|
|
EPD_2IN9_V2_Display_Partial(BlackImage);
|
||
|
|
i = 0;
|
||
|
|
k = 0;
|
||
|
|
j++;
|
||
|
|
printf("*** Overtime Refresh ***\r\n");
|
||
|
|
}else if(j > 100 || SelfFlag) {
|
||
|
|
SelfFlag = 0;
|
||
|
|
j = 0;
|
||
|
|
EPD_2IN9_V2_Init();
|
||
|
|
EPD_2IN9_V2_Display_Base(BlackImage);
|
||
|
|
printf("--- Self Refresh ---\r\n");
|
||
|
|
}
|
||
|
|
|
||
|
|
if(Page == 0 && ReFlag == 0) { //main menu
|
||
|
|
Get_Current_Time(&sPaint_time_f);
|
||
|
|
if(sPaint_time_f.Min != sPaint_time.Min) {
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
if(ICNT_Scan()==1 || (ICNT86_Dev_Now.X[0] == ICNT86_Dev_Old.X[0] && ICNT86_Dev_Now.Y[0] == ICNT86_Dev_Old.Y[0])) { // No new touch
|
||
|
|
// printf("%d %d \r\n", j, SelfFlag);
|
||
|
|
// printf("No new touch \r\n");
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
|
||
|
|
if(ICNT86_Dev_Now.TouchCount) {
|
||
|
|
i++;
|
||
|
|
if(Page == 0 && ReFlag == 0) { //main menu
|
||
|
|
if(ICNT86_Dev_Now.X[0] > 119 && ICNT86_Dev_Now.X[0] < 152 && ICNT86_Dev_Now.Y[0] > 31 && ICNT86_Dev_Now.Y[0] < 96) {
|
||
|
|
printf("Photo ...\r\n");
|
||
|
|
Page = 2;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
Show_Photo_Small_2in9(Photo_S);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 39 && ICNT86_Dev_Now.X[0] < 80 && ICNT86_Dev_Now.Y[0] > 31 && ICNT86_Dev_Now.Y[0] < 96) {
|
||
|
|
printf("Draw ...\r\n");
|
||
|
|
Page = 1;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if(Page == 1 && ReFlag == 0) { //white board
|
||
|
|
// Paint_DrawPoint(ICNT86_Dev_Now.X[0], ICNT86_Dev_Now.Y[0], BLACK, ICNT86_Dev_Now.P[0]/8+1, DOT_STYLE_DFT);
|
||
|
|
Paint_DrawPoint(ICNT86_Dev_Now.X[0], ICNT86_Dev_Now.Y[0], BLACK, 3, DOT_STYLE_DFT);
|
||
|
|
|
||
|
|
if(ICNT86_Dev_Now.X[0] > 136 && ICNT86_Dev_Now.X[0] < 159 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Home ...\r\n");
|
||
|
|
Page = 0;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 266 && ICNT86_Dev_Now.X[0] < 289 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Clear ...\r\n");
|
||
|
|
Page = 1;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 5 && ICNT86_Dev_Now.X[0] < 27 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Refresh ...\r\n");
|
||
|
|
SelfFlag = 1;
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if(Page == 2 && ReFlag == 0) { //photo menu
|
||
|
|
if(ICNT86_Dev_Now.X[0] > 135 && ICNT86_Dev_Now.X[0] < 160 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Home ...\r\n");
|
||
|
|
Page = 0;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 203 && ICNT86_Dev_Now.X[0] < 224 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Next page ...\r\n");
|
||
|
|
Photo_S++;
|
||
|
|
if(Photo_S > 2) // 9 photos is a maximum of three pages
|
||
|
|
Photo_S=0;
|
||
|
|
ReFlag = 2;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 71 && ICNT86_Dev_Now.X[0] < 92 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Last page ...\r\n");
|
||
|
|
if(Photo_S == 0)
|
||
|
|
printf("Top page ...\r\n");
|
||
|
|
else {
|
||
|
|
Photo_S--;
|
||
|
|
ReFlag = 2;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 5 && ICNT86_Dev_Now.X[0] < 27 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Refresh ...\r\n");
|
||
|
|
SelfFlag = 1;
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 2 && ICNT86_Dev_Now.X[0] < 293 && ICNT86_Dev_Now.Y[0] > 2 && ICNT86_Dev_Now.Y[0] < 96 && ReFlag == 0) {
|
||
|
|
printf("Select photo ...\r\n");
|
||
|
|
Page = 3;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
Photo_L = ICNT86_Dev_Now.X[0]/96 + ICNT86_Dev_Now.Y[0]/48*3 + Photo_S*3 + 1;
|
||
|
|
Show_Photo_Large_2in9(Photo_L);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
if(ReFlag == 2) { // Refresh small photo
|
||
|
|
ReFlag = 1;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
Show_Photo_Small_2in9(Photo_S); // show small photo
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
if(Page == 3 && ReFlag == 0) { //view the photo
|
||
|
|
if(ICNT86_Dev_Now.X[0] > 268 && ICNT86_Dev_Now.X[0] < 289 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Photo menu ...\r\n");
|
||
|
|
Page = 2;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
Show_Photo_Small_2in9(Photo_S);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 203 && ICNT86_Dev_Now.X[0] < 224 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Next photo ...\r\n");
|
||
|
|
Photo_L++;
|
||
|
|
if(Photo_L > 9)
|
||
|
|
Photo_L=1;
|
||
|
|
ReFlag = 2;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 135 && ICNT86_Dev_Now.X[0] < 160 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Home ...\r\n");
|
||
|
|
Page = 0;
|
||
|
|
GUI_ReadBmp(PagePath_2in9[Page], 0, 0);
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 71 && ICNT86_Dev_Now.X[0] < 92 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Last page ...\r\n");
|
||
|
|
if(Photo_L == 1)
|
||
|
|
printf("Top photo ...\r\n");
|
||
|
|
else {
|
||
|
|
Photo_L--;
|
||
|
|
ReFlag = 2;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else if(ICNT86_Dev_Now.X[0] > 5 && ICNT86_Dev_Now.X[0] < 27 && ICNT86_Dev_Now.Y[0] > 101 && ICNT86_Dev_Now.Y[0] < 124) {
|
||
|
|
printf("Refresh photo ...\r\n");
|
||
|
|
SelfFlag = 1;
|
||
|
|
ReFlag = 1;
|
||
|
|
}
|
||
|
|
if(ReFlag == 2) { // Refresh large photo
|
||
|
|
ReFlag = 1;
|
||
|
|
Show_Photo_Large_2in9(Photo_L);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return 0;
|
||
|
|
}
|