linux下从spi中读取一张logo图片并显示

来源:互联网 发布:什么是数据保全 编辑:程序博客网 时间:2024/05/16 09:49

思路:将图片分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 inLCD_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);}

}

0 0
原创粉丝点击