| 
									
										
										
										
											2022-04-10 02:27:44 +02:00
										 |  |  | #include "../lib/Config/DEV_Config.h"
 | 
					
						
							|  |  |  | #include "example.h"
 | 
					
						
							|  |  |  | #include "../lib/GUI/GUI_BMPfile.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <math.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <stdlib.h>     //exit()
 | 
					
						
							|  |  |  | #include <signal.h>     //signal()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define USE_Normal_Demo false
 | 
					
						
							|  |  |  | #define SHOW_BMP true
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | UWORD VCOM = 2510; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | IT8951_Dev_Info Dev_Info; | 
					
						
							|  |  |  | UWORD Panel_Width; | 
					
						
							|  |  |  | UWORD Panel_Height; | 
					
						
							|  |  |  | UDOUBLE Init_Target_Memory_Addr; | 
					
						
							|  |  |  | int epd_mode = 0;	//0: no rotate, no mirror
 | 
					
						
							|  |  |  | 					//1: no rotate, horizontal mirror, for 10.3inch
 | 
					
						
							|  |  |  | 					//2: no totate, horizontal mirror, for 5.17inch
 | 
					
						
							|  |  |  | 					//3: no rotate, no mirror, isColor, for 6inch color
 | 
					
						
							|  |  |  | 					 | 
					
						
							|  |  |  | void  Handler(int signo){ | 
					
						
							|  |  |  |     Debug("\r\nHandler:exit\r\n"); | 
					
						
							|  |  |  |     if(Refresh_Frame_Buf != NULL){ | 
					
						
							|  |  |  |         free(Refresh_Frame_Buf); | 
					
						
							|  |  |  |         Debug("free Refresh_Frame_Buf\r\n"); | 
					
						
							|  |  |  |         Refresh_Frame_Buf = NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if(Panel_Frame_Buf != NULL){ | 
					
						
							|  |  |  |         free(Panel_Frame_Buf); | 
					
						
							|  |  |  |         Debug("free Panel_Frame_Buf\r\n"); | 
					
						
							|  |  |  |         Panel_Frame_Buf = NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if(Panel_Area_Frame_Buf != NULL){ | 
					
						
							|  |  |  |         free(Panel_Area_Frame_Buf); | 
					
						
							|  |  |  |         Debug("free Panel_Area_Frame_Buf\r\n"); | 
					
						
							|  |  |  |         Panel_Area_Frame_Buf = NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if(bmp_src_buf != NULL){ | 
					
						
							|  |  |  |         free(bmp_src_buf); | 
					
						
							|  |  |  |         Debug("free bmp_src_buf\r\n"); | 
					
						
							|  |  |  |         bmp_src_buf = NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if(bmp_dst_buf != NULL){ | 
					
						
							|  |  |  |         free(bmp_dst_buf); | 
					
						
							|  |  |  |         Debug("free bmp_dst_buf\r\n"); | 
					
						
							|  |  |  |         bmp_dst_buf = NULL; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Debug("Going to sleep\r\n"); | 
					
						
							|  |  |  |     EPD_IT8951_Sleep(); | 
					
						
							|  |  |  |     DEV_Module_Exit(); | 
					
						
							|  |  |  |     exit(0); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int main(int argc, char *argv[]) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     //Exception handling:ctrl + c
 | 
					
						
							|  |  |  |     signal(SIGINT, Handler); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-10 04:24:42 +02:00
										 |  |  |     if (argc != 4){ | 
					
						
							|  |  |  | 		Debug("Usage: sudo ./epd -2.51 0 bmp_filepath\r\n"); | 
					
						
							|  |  |  |         Debug("To use the test, please navigate to Inkycal/inkycal/display/drivers/parallel_drivers and then run\r\n"); | 
					
						
							|  |  |  |         Debug("Test: sudo ./epd -2.51 0 test\r\n"); | 
					
						
							| 
									
										
										
										
											2022-04-10 02:27:44 +02:00
										 |  |  |         exit(1); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //Init the BCM2835 Device
 | 
					
						
							|  |  |  |     if(DEV_Module_Init()!=0){ | 
					
						
							|  |  |  |         return -1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     double temp; | 
					
						
							|  |  |  |     sscanf(argv[1],"%lf",&temp); | 
					
						
							|  |  |  |     VCOM = (UWORD)(fabs(temp)*1000); | 
					
						
							|  |  |  |     Debug("VCOM value:%d\r\n", VCOM); | 
					
						
							|  |  |  | 	sscanf(argv[2],"%d",&epd_mode); | 
					
						
							|  |  |  |     Debug("Display mode:%d\r\n", epd_mode); | 
					
						
							|  |  |  |     Dev_Info = EPD_IT8951_Init(VCOM); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //get some important info from Dev_Info structure
 | 
					
						
							|  |  |  |     Panel_Width = Dev_Info.Panel_W; | 
					
						
							|  |  |  |     Panel_Height = Dev_Info.Panel_H; | 
					
						
							|  |  |  |     Init_Target_Memory_Addr = Dev_Info.Memory_Addr_L | (Dev_Info.Memory_Addr_H << 16); | 
					
						
							|  |  |  |     char* LUT_Version = (char*)Dev_Info.LUT_Version; | 
					
						
							|  |  |  |     if( strcmp(LUT_Version, "M641") == 0 ){ | 
					
						
							|  |  |  |         //6inch e-Paper HAT(800,600), 6inch HD e-Paper HAT(1448,1072), 6inch HD touch e-Paper HAT(1448,1072)
 | 
					
						
							|  |  |  |         A2_Mode = 4; | 
					
						
							|  |  |  |         Four_Byte_Align = true; | 
					
						
							|  |  |  |     }else if( strcmp(LUT_Version, "M841_TFAB512") == 0 ){ | 
					
						
							|  |  |  |         //Another firmware version for 6inch HD e-Paper HAT(1448,1072), 6inch HD touch e-Paper HAT(1448,1072)
 | 
					
						
							|  |  |  |         A2_Mode = 6; | 
					
						
							|  |  |  |         Four_Byte_Align = true; | 
					
						
							|  |  |  |     }else if( strcmp(LUT_Version, "M841") == 0 ){ | 
					
						
							|  |  |  |         //9.7inch e-Paper HAT(1200,825)
 | 
					
						
							|  |  |  |         A2_Mode = 6; | 
					
						
							|  |  |  |     }else if( strcmp(LUT_Version, "M841_TFA2812") == 0 ){ | 
					
						
							|  |  |  |         //7.8inch e-Paper HAT(1872,1404)
 | 
					
						
							|  |  |  |         A2_Mode = 6; | 
					
						
							|  |  |  |     }else if( strcmp(LUT_Version, "M841_TFA5210") == 0 ){ | 
					
						
							|  |  |  |         //10.3inch e-Paper HAT(1872,1404)
 | 
					
						
							|  |  |  |         A2_Mode = 6; | 
					
						
							|  |  |  |     }else{ | 
					
						
							|  |  |  |         //default set to 6 as A2 Mode
 | 
					
						
							|  |  |  |         A2_Mode = 6; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     Debug("A2 Mode:%d\r\n", A2_Mode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	EPD_IT8951_Clear_Refresh(Dev_Info, Init_Target_Memory_Addr, INIT_Mode); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #if(SHOW_BMP)
 | 
					
						
							|  |  |  |     //Show a bmp file
 | 
					
						
							|  |  |  |     //1bp use A2 mode by default, before used it, refresh the screen with WHITE
 | 
					
						
							| 
									
										
										
										
											2022-04-10 04:24:42 +02:00
										 |  |  |     Display_BMP_Example(Panel_Width, Panel_Height, Init_Target_Memory_Addr, BitsPerPixel_4, argv[3]); | 
					
						
							|  |  |  |     //EPD_IT8951_Clear_Refresh(Dev_Info, Init_Target_Memory_Addr, GC16_Mode);
 | 
					
						
							| 
									
										
										
										
											2022-04-10 02:27:44 +02:00
										 |  |  |      | 
					
						
							| 
									
										
										
										
											2022-04-10 04:24:42 +02:00
										 |  |  |     if( strcmp(argv[3], "test") == 0){ | 
					
						
							|  |  |  |         Debug("----RUNNING DISPLAY TEST----...hold on tight! \r\n"); | 
					
						
							|  |  |  |         char Path[30]; | 
					
						
							|  |  |  |         sprintf(Path,"./pic/%dx%d_0.bmp", Panel_Width, Panel_Height); | 
					
						
							|  |  |  |         Display_BMP_Example(Panel_Width, Panel_Height, Init_Target_Memory_Addr, BitsPerPixel_4, Path); | 
					
						
							|  |  |  |     }else{ | 
					
						
							|  |  |  |         Debug("Loading BMP File \r\n"); | 
					
						
							|  |  |  |         Display_BMP_Example(Panel_Width, Panel_Height, Init_Target_Memory_Addr, BitsPerPixel_4, argv[3]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |          | 
					
						
							| 
									
										
										
										
											2022-04-10 02:27:44 +02:00
										 |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-10 04:24:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-10 02:27:44 +02:00
										 |  |  |     //We recommended refresh the panel to white color before storing in the warehouse.
 | 
					
						
							| 
									
										
										
										
											2022-04-10 04:24:42 +02:00
										 |  |  |     // EPD_IT8951_Clear_Refresh(Dev_Info, Init_Target_Memory_Addr, INIT_Mode);
 | 
					
						
							| 
									
										
										
										
											2022-04-10 02:27:44 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     //EPD_IT8951_Standby();
 | 
					
						
							|  |  |  |     EPD_IT8951_Sleep(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     //In case RPI is transmitting image in no hold mode, which requires at most 10s
 | 
					
						
							|  |  |  |     DEV_Delay_ms(5000); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     DEV_Module_Exit(); | 
					
						
							|  |  |  |     return 0; | 
					
						
							|  |  |  | } |