思路:将图片分size/256bytes次读出来,读写函数是底层spi驱动提供的接口
UINT8* spi_read_shutdownlogo(void)
{
int spi_fd;
char spi_addr[4];
int freq = 12000000;
UINT32 addr;
UINT32 i;
UINT8* rdbuffer1=NULL;
UINT32 loop_num;
spi_fd = open("/dev/spi",O_RDWR);
if(spi_fd<0){
printf("Can't open [/dev/spi0]\n");
return 0;
}
ioctl(spi_fd, SPI_IOCTL_SET_CHANNEL, 0); //Set SPI CS0
ioctl(spi_fd, SPI_IOCTL_SET_FREQ, freq);
ioctl(spi_fd, SPI_IOCTL_SET_DMA, 0);
printf("============ENABLE==SPI============\n");
rdbuffer1=gpChunkMemAlloc(1020*1024);
if (!rdbuffer1)
{
printf("Cannot malloc memory buffer.\n");
close(spi_fd);
goto exit;
}
addr=spi_header_check();
loop_num=1020*4;
for(i=0;i
if 0
strcat(file_path, "POWER_OFF_LOGO.JPG");
printf("open file %s\n",file_path);
fb1.pData = fb;
fb1.validRect.x = 0;
fb1.validRect.y = 0;
fb1.validRect.width = resolution.width;
fb1.validRect.height=resolution.height;
Gdjpegdecode(file_path, &fb1, resolution.width,resolution.height,&resolution, 0);
dispFlip(hDisp);
if(dv_set.display_mode == SP_DISP_OUTPUT_LCD)
{
LCD_Backlight_Set(1);
}
else
rdbuffer=gpChunkMemAlloc(1020*1024);
if(rdbuffer<0)
{
printf("malloc error!!!!\n");
return 0;
}
rdbuffer=spi_read_shutdownlogo();
/* for (int y = 0; y
endif
Play_Key_sound(SOUND_POWER_OFF);
ap_state_config_store();
if ENABLE_AUTO_REBOOT
Gsensor_Set_Int_Level(1); //
endif
sleep(1);
LCD_Backlight_Set(0);
sleep(1);
while(1)
{
if(dv_set.power_off == 1)
{
printf("wait sound end or pic show \n");
// if(setting_config_get(SET_GSENSOR1)!=0)
{
Gsensor_parking_mode(setting_config_get(SET_GSENSOR1));
Gsensor_parking_mode_int_read();
}
break;
}
usleep(10000);
}
//if(dv_set.usb_detect != 1)
kill(getppid(), SIGUSR1);
Power_Off_Set();
LED_Set(NORMAL_LED,0);
Enable_Sensor_Power(0);
//USB plug in
LCD_Backlight_Set(0);
LED_Set(IR_LED,0);
LED_Set(MUTE_ON,0);
dispDestroy(hDisp);
PLL_ctl_en(pllhd, 1, 0);
dv_set.power_off = 2;
while(1)
{
Power_Off_Set();
printf("have power off, release power key!\n");
if(power_off == 3||power_off == 0)
{
printf("sleep 2s!\n");
sleep(2);
printf("~~~~~~~start watchdog\n");
printf("power on!\n");
fd = open("/dev/watchdog",0);
if(fd<0) {
printf("car recoder open watchdog fail!\n");
}
ioctl(fd,WDIOC_SETTIMEROUT,0); //set timeout 0s
ioctl(fd,WDIOC_CTRL,1); //enable watchdog
close(fd);
kill(getppid(), SIGUSR1);
}
usleep(100);
}
}