teste
Dependencies: mbed BSP_DISCO_F746NG FatFS
Diff: main.cpp
- Revision:
- 2:19c2835ce409
- Parent:
- 1:28e2f24b11b3
- Child:
- 3:d9c0b24b6f84
--- a/main.cpp Sat Feb 03 14:43:35 2018 +0000 +++ b/main.cpp Sun Feb 04 10:12:09 2018 +0000 @@ -12,11 +12,11 @@ #define SD_IN_BUFFER 0xC0140000 #define SD_OUT_BUFFER 0xC0280000 -FATFS SDFatFs; -FIL MyFile; +FATFS SDFatFs; +FIL MyFile; - + static void LCD_LL_ConvertFrameToARGB8888(void *pSrc, void *pDst); static void LCD_LL_ConvertFrameToRGB888(void *pSrc, void *pDst); @@ -25,12 +25,11 @@ Serial pc(USBTX, USBRX); uint32_t i = 0, image_width = 0, image_height = 0; -const char image_header[] = "P6\n# Generated by STM32\n272 480\n255\n"; +const char image_header[] = "P6\n# Generated by STM32\n480 272\n255\n"; char SDPath[4]; char text [40]; char c; - int main(void) { FRESULT res; @@ -45,17 +44,17 @@ BSP_LCD_DisplayOn(); FATFS_LinkDriver(&SD_Driver, SDPath); - + res = f_mount(&SDFatFs, (TCHAR const*)SDPath, 0); if(res!= FR_OK) pc.printf("Failed to mount SD\n"); - + res = f_open(&MyFile, "image.ppm", FA_READ); if(res!= FR_OK) pc.printf("Failed to open file\n"); - - while(1) { - + + // Read image header and get image size + while(res==FR_OK) { res = f_read(&MyFile, &c, 1, (UINT*)&bytesread); if (c!='#') line_cnt++; @@ -87,35 +86,53 @@ break; } - + if(image_width != 480 || image_height != 272) - pc.printf("Image size should be 272x480"); + pc.printf("Image size should be 480x272"); + + // Read image as 512 byte blocks + for(i = 0; i < image_width*image_width*3; i = i + 512) { + res = f_read(&MyFile, (uint8_t *)(SD_IN_BUFFER+i) , 512, (UINT*)&bytesread); + } - for(i = 0; i < image_width*image_width*3; i = i + 512) { - res = f_read(&MyFile, (void *)(SD_IN_BUFFER+i) , 512, (UINT*)&bytesread); + // Correct color order + for(i = 0; i < image_width*image_width*3; i = i + 3) { + c = *(char *)(SD_IN_BUFFER+i+2); + *(char *)(SD_IN_BUFFER+i+2)= *(char *)(SD_IN_BUFFER+i); + *(char *)(SD_IN_BUFFER+i) = c; } f_close(&MyFile); + // Print image on LCD LCD_LL_ConvertFrameToARGB8888((uint32_t *)(SD_IN_BUFFER), (uint32_t *)(FRAME_BUFFER)); + + + // Transfer image to a buffer + LCD_LL_ConvertFrameToRGB888((uint32_t *)(FRAME_BUFFER), (uint32_t *)(SD_OUT_BUFFER)); - - LCD_LL_ConvertFrameToRGB888((uint32_t *)(FRAME_BUFFER), (uint32_t *)(SD_OUT_BUFFER)); + // Correct color order + for(i = 0; i < image_width*image_width*3; i = i + 3) { + c = *(char *)(SD_OUT_BUFFER+i+2); + *(char *)(SD_OUT_BUFFER+i+2)= *(char *)(SD_OUT_BUFFER+i); + *(char *)(SD_OUT_BUFFER+i) = c; + } res = f_open(&MyFile, "image_ou.ppm", FA_CREATE_ALWAYS | FA_WRITE); if(res!= FR_OK) pc.printf("Failed to open file\n"); - - res = f_write(&MyFile, image_header, 15, &bytesread); + // Write image header + res = f_write(&MyFile, image_header, sizeof(image_header), &bytesread); if(res!= FR_OK) pc.printf("Failed to write file 1\n"); + // Write image as 512 byte blocks for(i = 0; i < 480*272*3; i = i + 512) { res = f_write(&MyFile, (uint8_t *)(SD_OUT_BUFFER+i), 512, &bytesread); if(res!= FR_OK) pc.printf("Failed to write file\n"); } - + pc.printf("Done!\n"); f_close(&MyFile); FATFS_UnLinkDriver(SDPath);