Kenji Arai / Mbed OS DISCO-F769NI_several_example

Dependencies:   BD_SD_DISCO_F769NI BSP_DISCO_F769NI LCD_DISCO_F769NI TS_DISCO_F769NI USBHost_F769NI

Committer:
kenjiArai
Date:
Wed Aug 07 05:39:01 2019 +0000
Revision:
3:35ac9ee7d2d6
1st trial revision (Not finalized yet)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 3:35ac9ee7d2d6 1 /*
kenjiArai 3:35ac9ee7d2d6 2 * Mbed function
kenjiArai 3:35ac9ee7d2d6 3 *
kenjiArai 3:35ac9ee7d2d6 4 * Created: July 30th, 2019
kenjiArai 3:35ac9ee7d2d6 5 * Revised: July 30th, 2019
kenjiArai 3:35ac9ee7d2d6 6 */
kenjiArai 3:35ac9ee7d2d6 7
kenjiArai 3:35ac9ee7d2d6 8 /*
kenjiArai 3:35ac9ee7d2d6 9 https://os.mbed.com/users/Lightsource/code/DISCO-F746NG_BMP_FROM_SDCARD/
kenjiArai 3:35ac9ee7d2d6 10 https://www.gimp.org/downloads/
kenjiArai 3:35ac9ee7d2d6 11 https://os.mbed.com/questions/69098/how-can-I-load-an-image-to-screen/#answer14107
kenjiArai 3:35ac9ee7d2d6 12 */
kenjiArai 3:35ac9ee7d2d6 13
kenjiArai 3:35ac9ee7d2d6 14 //#include "select_program.h"
kenjiArai 3:35ac9ee7d2d6 15 #if defined(NIOI_SENSOR) || defined(EXAMPLE_10_BITMAP)
kenjiArai 3:35ac9ee7d2d6 16
kenjiArai 3:35ac9ee7d2d6 17 // Include --------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 18 #include "mbed.h"
kenjiArai 3:35ac9ee7d2d6 19 #include "FATFileSystem.h"
kenjiArai 3:35ac9ee7d2d6 20 #include "LCD_DISCO_F769NI.h"
kenjiArai 3:35ac9ee7d2d6 21 #include "stm32f769i_discovery_lcd.h"
kenjiArai 3:35ac9ee7d2d6 22
kenjiArai 3:35ac9ee7d2d6 23 // Definition -----------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 24
kenjiArai 3:35ac9ee7d2d6 25 // Constructor ----------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 26 extern Serial pc;
kenjiArai 3:35ac9ee7d2d6 27 extern FATFileSystem fs;
kenjiArai 3:35ac9ee7d2d6 28 extern LCD_DISCO_F769NI lcd;
kenjiArai 3:35ac9ee7d2d6 29
kenjiArai 3:35ac9ee7d2d6 30 // RAM ------------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 31
kenjiArai 3:35ac9ee7d2d6 32 // ROM / Constant data --------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 33
kenjiArai 3:35ac9ee7d2d6 34 // Function prototypes --------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 35 //extern void drawImage(const char * name, uint16_t x, uint16_t y);
kenjiArai 3:35ac9ee7d2d6 36 //extern void draw_bitmap(uint8_t *Name_BMP, uint32_t Xpos, uint32_t Ypos);
kenjiArai 3:35ac9ee7d2d6 37
kenjiArai 3:35ac9ee7d2d6 38
kenjiArai 3:35ac9ee7d2d6 39 //------------------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 40 // Control Program
kenjiArai 3:35ac9ee7d2d6 41 //------------------------------------------------------------------------------
kenjiArai 3:35ac9ee7d2d6 42 #if 0
kenjiArai 3:35ac9ee7d2d6 43 void draw_bitmap(uint8_t *Name_BMP, uint32_t Xpos, uint32_t Ypos)
kenjiArai 3:35ac9ee7d2d6 44 {
kenjiArai 3:35ac9ee7d2d6 45 uint32_t index = 0, width = 0, height = 0, bit_pixel = 0;
kenjiArai 3:35ac9ee7d2d6 46 uint32_t address;
kenjiArai 3:35ac9ee7d2d6 47 uint32_t input_color_mode = 0;
kenjiArai 3:35ac9ee7d2d6 48 char filename[50];
kenjiArai 3:35ac9ee7d2d6 49 int i, fileSize;
kenjiArai 3:35ac9ee7d2d6 50 char * buffer;
kenjiArai 3:35ac9ee7d2d6 51
kenjiArai 3:35ac9ee7d2d6 52 i=0;
kenjiArai 3:35ac9ee7d2d6 53 while (*Name_BMP!='\0') {
kenjiArai 3:35ac9ee7d2d6 54 filename[i++]=*Name_BMP++;
kenjiArai 3:35ac9ee7d2d6 55 }
kenjiArai 3:35ac9ee7d2d6 56
kenjiArai 3:35ac9ee7d2d6 57 filename[i] = 0;
kenjiArai 3:35ac9ee7d2d6 58 FILE *Image = fopen((const char *)&filename[0], "rb"); // open the bmp file
kenjiArai 3:35ac9ee7d2d6 59
kenjiArai 3:35ac9ee7d2d6 60 // obtain file size:
kenjiArai 3:35ac9ee7d2d6 61 fseek (Image, 0, SEEK_END);
kenjiArai 3:35ac9ee7d2d6 62 fileSize = ftell (Image);
kenjiArai 3:35ac9ee7d2d6 63 rewind (Image);
kenjiArai 3:35ac9ee7d2d6 64
kenjiArai 3:35ac9ee7d2d6 65 // allocate memory to contain the whole file:
kenjiArai 3:35ac9ee7d2d6 66 buffer = (char*) malloc (sizeof(char)*fileSize/2);
kenjiArai 3:35ac9ee7d2d6 67
kenjiArai 3:35ac9ee7d2d6 68 // copy the file into the buffer:
kenjiArai 3:35ac9ee7d2d6 69 fseek (Image, 0, SEEK_SET ); // set SD file data start position
kenjiArai 3:35ac9ee7d2d6 70 fread (buffer,1,fileSize,Image);
kenjiArai 3:35ac9ee7d2d6 71 fclose (Image);
kenjiArai 3:35ac9ee7d2d6 72
kenjiArai 3:35ac9ee7d2d6 73 /* Get bitmap data address offset */
kenjiArai 3:35ac9ee7d2d6 74 index = *(__IO uint16_t *) (buffer + 10);
kenjiArai 3:35ac9ee7d2d6 75 index |= (*(__IO uint16_t *) (buffer + 12)) << 16;
kenjiArai 3:35ac9ee7d2d6 76
kenjiArai 3:35ac9ee7d2d6 77 /* Read bitmap width */
kenjiArai 3:35ac9ee7d2d6 78 width = *(uint16_t *) (buffer + 18);
kenjiArai 3:35ac9ee7d2d6 79 width |= (*(uint16_t *) (buffer + 20)) << 16;
kenjiArai 3:35ac9ee7d2d6 80
kenjiArai 3:35ac9ee7d2d6 81 /* Read bitmap height */
kenjiArai 3:35ac9ee7d2d6 82 height = *(uint16_t *) (buffer + 22);
kenjiArai 3:35ac9ee7d2d6 83 height |= (*(uint16_t *) (buffer + 24)) << 16;
kenjiArai 3:35ac9ee7d2d6 84
kenjiArai 3:35ac9ee7d2d6 85 /* Read bit/pixel */
kenjiArai 3:35ac9ee7d2d6 86 bit_pixel = *(uint16_t *) (buffer + 28);
kenjiArai 3:35ac9ee7d2d6 87
kenjiArai 3:35ac9ee7d2d6 88 /* Set the address */
kenjiArai 3:35ac9ee7d2d6 89 //address = hLtdcHandler.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4));
kenjiArai 3:35ac9ee7d2d6 90 address = hltdc_discovery.LayerCfg[ActiveLayer].FBStartAdress + (((BSP_LCD_GetXSize()*Ypos) + Xpos)*(4));
kenjiArai 3:35ac9ee7d2d6 91
kenjiArai 3:35ac9ee7d2d6 92 /* Get the layer pixel format */
kenjiArai 3:35ac9ee7d2d6 93 if ((bit_pixel/8) == 4) {
kenjiArai 3:35ac9ee7d2d6 94 input_color_mode = CM_ARGB8888;
kenjiArai 3:35ac9ee7d2d6 95 } else if ((bit_pixel/8) == 2) {
kenjiArai 3:35ac9ee7d2d6 96 input_color_mode = CM_RGB565;
kenjiArai 3:35ac9ee7d2d6 97 } else {
kenjiArai 3:35ac9ee7d2d6 98 input_color_mode = CM_RGB888;
kenjiArai 3:35ac9ee7d2d6 99 }
kenjiArai 3:35ac9ee7d2d6 100
kenjiArai 3:35ac9ee7d2d6 101 /* Bypass the bitmap header */
kenjiArai 3:35ac9ee7d2d6 102 buffer += (index + (width * (height - 1) * (bit_pixel/8)));
kenjiArai 3:35ac9ee7d2d6 103
kenjiArai 3:35ac9ee7d2d6 104 /* Convert picture to ARGB8888 pixel format */
kenjiArai 3:35ac9ee7d2d6 105 for(index=0; index < height; index++) {
kenjiArai 3:35ac9ee7d2d6 106 /* Pixel format conversion */
kenjiArai 3:35ac9ee7d2d6 107 LL_ConvertLineToARGB8888((uint32_t *)buffer, (uint32_t *)address, width, input_color_mode);
kenjiArai 3:35ac9ee7d2d6 108
kenjiArai 3:35ac9ee7d2d6 109 /* Increment the source and destination buffers */
kenjiArai 3:35ac9ee7d2d6 110 address+= (BSP_LCD_GetXSize()*4);
kenjiArai 3:35ac9ee7d2d6 111 buffer -= width*(bit_pixel/8);
kenjiArai 3:35ac9ee7d2d6 112 }
kenjiArai 3:35ac9ee7d2d6 113 free (buffer);
kenjiArai 3:35ac9ee7d2d6 114 }
kenjiArai 3:35ac9ee7d2d6 115 #endif
kenjiArai 3:35ac9ee7d2d6 116 #if 1
kenjiArai 3:35ac9ee7d2d6 117 void drawImage(const char * name, uint16_t x, uint16_t y)
kenjiArai 3:35ac9ee7d2d6 118 {
kenjiArai 3:35ac9ee7d2d6 119 int fileSize;
kenjiArai 3:35ac9ee7d2d6 120 char * buffer;
kenjiArai 3:35ac9ee7d2d6 121
kenjiArai 3:35ac9ee7d2d6 122 FILE *image = fopen(name, "rb"); // open the bmp file
kenjiArai 3:35ac9ee7d2d6 123 if (image == 0) {
kenjiArai 3:35ac9ee7d2d6 124 pc.printf("%s is not found in the disk\r\n", name);
kenjiArai 3:35ac9ee7d2d6 125 return;
kenjiArai 3:35ac9ee7d2d6 126 }
kenjiArai 3:35ac9ee7d2d6 127 //obtain file size:
kenjiArai 3:35ac9ee7d2d6 128 fseek (image, 0, SEEK_END);
kenjiArai 3:35ac9ee7d2d6 129 fileSize = ftell (image);
kenjiArai 3:35ac9ee7d2d6 130 rewind (image);
kenjiArai 3:35ac9ee7d2d6 131
kenjiArai 3:35ac9ee7d2d6 132 // allocate memory to contain the whole file:
kenjiArai 3:35ac9ee7d2d6 133 buffer = (char*) malloc (sizeof(char)*fileSize);
kenjiArai 3:35ac9ee7d2d6 134 // copy the file into the buffer:
kenjiArai 3:35ac9ee7d2d6 135 fseek (image, 0, SEEK_SET );
kenjiArai 3:35ac9ee7d2d6 136 // set SD file data start position
kenjiArai 3:35ac9ee7d2d6 137 fread (buffer,1,fileSize,image);
kenjiArai 3:35ac9ee7d2d6 138 fclose (image);
kenjiArai 3:35ac9ee7d2d6 139
kenjiArai 3:35ac9ee7d2d6 140 //Draw image
kenjiArai 3:35ac9ee7d2d6 141 lcd.DrawBitmap(x,y,(uint8_t *)buffer);
kenjiArai 3:35ac9ee7d2d6 142 //Free allocated memory
kenjiArai 3:35ac9ee7d2d6 143 free (buffer);
kenjiArai 3:35ac9ee7d2d6 144 }
kenjiArai 3:35ac9ee7d2d6 145 #endif
kenjiArai 3:35ac9ee7d2d6 146 #endif