µGUI

μGUI

wpid-20150110_195355.jpgwpid-20150316_212829.jpg

Video_lowres

Open Source GUI module
for embedded systems

NEWS Approve and Reply

Date Event
06.08.17 Website moved to a new host. Further updates are in progress
13.9.15 Forum added for discussions 🙂
22.3.15 µGUI is now available on GitHub: https://github.com/achimdoebler/UGUI

What is μGUI

µGUI is a free and open source graphic library for embedded systems. It is platform-independent and can be easily ported to almost any microcontroller system. As long as the display is capable of showing graphics, µGUI is not restricted to a certain display technology. Therefore, display technologies such as LCD, TFT, E-Paper, LED or OLED are supported. The whole module consists of two files: ugui.c and ugui.h.

μGUI Features

  • μGUI supports any color, grayscale or monochrome display
  • μGUI supports any display resolution
  • μGUI supports multiple different displays
  • μGUI supports any touch screen technology (e.g. AR, PCAP)
  • μGUI supports windows and objects (e.g. button, textbox)
  • 16 different fonts available
  • integrated and free scalable system console
  • basic geometric functions (e.g. line, circle, frame etc.)
  • can be easily ported to almost any microcontroller system
  • no risky dynamic memory allocation required

μGUI Requirements
μGUI is platform-independent, so there is no need to use a certain embedded
system. In order to use μGUI, only two requirements are necessary:

  • a C-function which is able to control pixels of the target display.
  • integer types for the target platform have to be adjusted in ugui.h.

Example Projects
Various example projects can be found on my YouTube channel:
http://www.youtube.com/playlist?list=PLn9k3eL_sqV1Y1FwUu0qFC6u7m6rQe9_V

User Examples

PSoC5 example by Andres Navas

ToDo List
The following features are on my ToDo list:

  • Demo files for different platforms
  • Mouse support
  • Touchscreen support
  • Window support
  • Objects
  • Multi-Layer support
  • Support for hardware acceleration
  • Alpha channel support
  • Anti-Aliasing
  • Center String function

Support

I've spent a lot of time writing µGUI. If you like this project, please support it!

Feel free to…

  • report bugs
  • send suggestions for upcoming features
  • share µGUI
  • send me pictures of your application using µGUI
  • help me to keep this project alive: Donate 1€
 

 

 

Download

Reference Guide

Download 2.10 MB 72749 downloads

 

Latest version:

µGUI v0.3

Download 650.26 KB 97623 downloads

Older versions:

µGUI v0.2

Download 319.80 KB 32781 downloads

µGUI v0.1

Download 211.61 KB 31601 downloads

 

Example Projects

STM32F429 Discovery

Download 601.49 KB 54153 downloads

 

Companies Using µGUI

529 thoughts on “µGUI

  1. Hello, 

    Seems interesting UGUI. However for example for the controller ST7586S have any examples of LCD functions to associate with UGUI? If you have made and canst send to me … 

    regards 
    Vitor Aquino

    • Hi Vitor,

      I hope this helps!

      //#define H_BYTE_CNT      80       // 240×160
      #define H_BYTE_CNT      43       // 128×160

      unsigned char display_buff[H_BYTE_CNT*160];

      void st7586s_pset(UG_S16 x, UG_S16 y, UG_COLOR c)
      {
         unsigned int pos;
         unsigned char b;

         switch( x%3 )
         {
            case 2: b = 0x03; break;
            case 1: b = 0x81; break;
            case 0: b = 0xC0; break;
         }

         pos = (x / 3) + y * H_BYTE_CNT;

         if ( !c )
         {
            display_buff[ pos ] |= b;
         }
         else
         {
            display_buff[ pos ] &= ~b;
         }
      }

      void st7586s_update(void)
      {
         unsigned int i;
         send_cmd( 0x2C );
         for(i=0; i    {
            send_data( display_buff[i] );
         }
      }

      • Hello,

        Thanks for the extensive library. I see you already used a ST7586S in one of your videos demonstrations. I have a similar display but it draws 2 pixel per byte and not 3 pixel as the datasheet . Can you help me with this ? below is the initialization code i used

            // Display OFF
            GLCD_Command( 0x28);
            
            // Delay 50 ms
            //currentTime = G_SystemTime1ms;
            //while(!(IsTimeUp(&currentTime, 50)));
            delay(80);
            
            // Vop = B9h
            GLCD_Command(0xC0);
            GLCD_Data(0x45);
            GLCD_Data(0x01);
            
            // BIAS = 1/14
            GLCD_Command(0xC3);
            GLCD_Data(0x00);
            
            // Booster = x8
            GLCD_Command(0xC4); 
            GLCD_Data(0x07);
            
            // Enable Analog Circuit
            GLCD_Command(0xD0); 
            GLCD_Data(0x1D);
            
            // N-Line = 0
            GLCD_Command(0xB5); 
            GLCD_Data(0x00);
            
            // Monochrome Mode
            GLCD_Command(0x39);
            
            // Enable DDRAM Interface
            GLCD_Command(0x3A); 
            GLCD_Data(0x02);
            
            // Scan Direction Setting
            GLCD_Command(0x36); 
            GLCD_Data(0x00);       //COM:C160–C1   SEG: SEG384-SEG1
            
            // Duty Setting
            GLCD_Command(0xB0); 
            GLCD_Data(0x9F);
            
        //    // Partial Display
        //    #ifdef PARTIAL_DISP
        //    GLCD_Command(0xB40);
        //    GLCD_Data(A0);
        //    GLCD_Command(0x30); // Partial Display Area = COM0 ~ COM119
        //    GLCD_DATA(0x00);
        //    GLCD_DATA(0x00);
        //    GLCD_Data(0x00);
        //    GLCD_Data(0x77);
        //    #endif
            
            // Display Inversion 
            GLCD_Command(0x20); // OFF
            
            // Column Address Setting
            GLCD_Command(0x2A); 
            GLCD_Data(0x00); // SEG0 -> SEG384
            GLCD_Data(0x00);
            GLCD_Data(0x00);
            GLCD_Data(0x7F);
            // Row Address Setting
            GLCD_Command(0x2B); 
            GLCD_Data(0x00); // COM0 -> COM160
            GLCD_Data(0x00);
            GLCD_Data(0x00);
            GLCD_Data(0x9F);

        • Hi Mesbah,

          I’m quite sure that there is something wrong with your mapping.

          Have you selected monochrome mode or grayscale mode?

          Maybe page 18/19 of the datasheet helps you?

          Which display do you use?

          BR,

          Achim

          • Hi Andrey, yes! In order to use this feature you have to use a “read – modify – write” pset function which reads data from the display, changes it and writes it back to the display. BR Achim

          • Hi! I have the same problem with the pixels. Could you show me a example about the use of the "Read Modify Write" function to write 3 pixels per byte?. I did not understand this command on the datasheet. When this command is enabled, is it necessary to do the algorithm on the diagram at page 37 of the datasheet every time when i want write data to the display? Or is it only necessary one time on the initialization process?
            I hope that you can help me.

            Thanks!
            Best Regards Emmanuel

    • Hello Achim Doble!
      I need display driver support for 3.2″ TFT display with inbuilt ILI9341 driver. It is 16 bit parellel mode

      We need to draw .BMP file while application is running. If you provide your mail id or whatsapp number I can share you more details about my requirements.. We are ready to pay for your services!! WA: +91 9787231007

    • Hi Jack,

      µGUI does not officially support Arduino so far.

      To be honest: I presume that it runs on Arduino without any problem, but I have not tested it 🙂

      I’ll keep you updated regarding Arduino-related examples.

      BR,

      Achim

  2. Can you provide code for the dsPic33 with the SSD1322 driver?  That is the exact setup I am trying to run for a project of mine.  I am using the Blue Display.  Thank you so much!!!!

        • First of all you have to connect the TFT DPI Interface to the PIC. Then initialize the internal DPI Interface of the PIC. After that you only have to write a Pset-function to use uGUI. Hope this helps! By the way: which hardware platform do you use? BR Achim

  3. Another significant improvement to the framework would be adding events from windows (you seem to do this according to a TODO comment in the code). If one want to extend window look he/she needs something like OnRender event to draw when window is updated.

  4. Thanks for posting this.

    I really like the design of your code. I was able to get it up and running on a PSOC5 with no problems on a 128×64 newhaven display in so little time I was surprised!

    Have you thought about how to implement screen rotation? I am wondering how to change to portrait from landscape on my display (at compile time, not run time)
    thanks, Cris

    • Hi Cris,

      thanks for the commendation!

      It is very easy to realize screen rotation:

      Rotation:

       

      Your display has 128×64 pixels, right?

      Just pretend it has 64×128, use UG_Init(…64,128…) and you get a rotation by 90 degree. Of course you have to swap x and y INSIDE your pset function.

      Flip the screen:

      In order to flip the screen horizontally and/or vertically just use the following trick at the beginning of your pset function:

      x = 127 – x; // Flip the screen horizontally

      y = 63 – y; // Flip the screen vertically

      BR,

      Achim

       

       

       

  5. Hello Achim,

    I was wondering if you could please provide some example code interfacing with the Raspberry Pi and 1.5" OLED – SSD1351.

    Thanks!

      • Hi!

        I'm also interested in getting a 1.5" OLED SSD1351 running on a Raspberry Pi 2 Model B. In fact, I want to run 3 displays from that Pi (without exhausting the GPIO either–it'll be running 3 sensors too).

        I have some resources where I work, but any other help you can give would be much appreciated!

        Cheers,
        Spencer

        • Hi Spencer!
          Interesting project – please share some more details on the forum!
          I would use SPI for all OLEDs. µGUI is ideally suited to handle all of them in parallel!
          At the forum you will find an example for the SSD1351!
          BR, Achim

  6. Hello,

    At first i would like to congratulate you for this great library/project. I tested it in the STM32F429 Discovery and liked a lot. So, I would ask if you are interested in creating an adaptation layer for an event manager based on RTOS services. I beleive that through RTOS semaphores, queues and timers it is possible to better manage the CPU resources. I started myself a GUI event handler, as you can see here:

    https://www.youtube.com/watch?v=B2LuqMpjoIU

    The code is available here:

    https://brtos.googlecode.com/files/BRTOS_STM32F4x_GUI.rar

    However, i´m not a great GUI designer. I just have a RTOS project and i would like to disseminate the use of such a great tool for embedded software development. Even, i developed a demo based in your code using RTOS services. Doing that i realized a excessive CPU usage for the touch screen reading (like 10%). I just raised the I2C clock to 250khz, droping the CPU usage for less than 1%.

    If you are interested, i can send you my modified project in order to you evaluate if its possible to implement such event handler mechanism.

    I wish you all the best,

    Best regards,

    Gustavo Denardin

  7. Hello Achim,

    Nice work with the library.

    I see on the youtube channel that you used it with 7 inch tft (both uGUI and STemWin). Is there a chance to share the source code ?

    I've got a problem with the refresh rate. Some times a flicker line appear on the middle of the screen. The flicker will occurs rarely if I lower the PCLK to 16MHz, but it still appears.

    Thanks,

    Alin

  8. First, I want to thank you for this library. I've used 0.2 version successfully with an OLED with SSD1322 controller on PIC32. Are the window and button functions work on OLED? I haven't had success with the example code.

  9. void UG_WaitForUpdate( void )
    {
       gui->state |= UG_SATUS_WAIT_FOR_UPDATE;
       while ( (volatile UG_U8)gui->state & UG_SATUS_WAIT_FOR_UPDATE )
            {
                if(gui->touch.state == 1)
                    return;
                osDelay(50);
            };
    }

  10. Hi  Achim,
    before everything i want to thank you so much for the outstanding library!

    I'm using an "ER-TFT070-4" from BuyDisplay 7" with OTA7001A Driver, no init code, just a DPI interface to be used with LTDC interface.
    Starting with your example of uGFX 3.0 on Stm32f429-Discovery (embd LCD removed) i have changed only screen dimensions to the ltdc.h in order to make it all work and so on it's a really good result.

    [code] 

    #define  THS                     10
    #define  THB                     20
    #define  THD                     800
    #define  THF                     10
    #define  TVS                     2
    #define  TVB                     2
    #define  TVD                     480
    #define  TVF                     4

    [/code]

    The problem is that i don't understand what THB, THS, THF, TVS, TVB, TVF means and what i have to use in order to optimize a little bit my code.. can you suggest me about that, or maybe a "programmers note" where it's all explained? 
    Thank you so much, and sorry but i'm nearly new to program things with this complexity.

    Davide 

    PS. if you want i can send you my entire project, i'm aslo using Coocox IDE!!

    • Hi Davide, I’m glad that you like uGUI 🙂
      Yes, please send me the project. I’ll reply with some informations regarding DPI. Best regards, Achim

  11. Hi Achim,

    I am from Taiwan.

    I am a college student.

    So,My English is poor.sorry.

    Your Library is my best tutorial.  Thank you.

    I have some question about images.

    1.If i want to use an images for  a button.

    How could i do?

    or

    2.Can i put an images on the button?? 

    • Hi Chen,

      I’m glad that you like µGUI.

      Unfortunately pictures inside buttons are not supported by µGUI v0.3 🙁

      µGUI v0.4 will be able to do that!

      BR, Achim

  12. Hi

     

    Very nice project!

     

    I am having trouble setting the STM32F429 (discovery) to use a larger display.

    Can you please send me your initialization code of your 800×480 display?

    Thanks

    nimi

  13. Hi. This looks very nice

    I see you have a driver for the 1.54 OLED SSD1305Z 126×64 Mono as per your UTube demo

    Would you mind sharing the Init Driver commands for this display So I can try out your Library

    Thanks

    Brett

     

  14. Hello Achim
    Can I use ugui with STM32F4-Discovery + ssd1963 fsmc module? I have ssd1963 library. I can run the screen but do not know how I could combine seamlessly with ugui. Can you help with this?

  15. Hi there i am after a oled display for a pure evoke flow radio and have been told it is a       pmo 19301 and is 2.7" diagonaly my question is do you know where i can buy one of these units.

    Regards Phil

     

  16. Hi Achim

    Nice job on the uGUI! I'm currently experimenting with it, I had an stm32f429 discovery board so could start right away with your example project in CoIDE.

    I drew a window because I need some buttons. However I also need some rectangles so I drew 2 of them with the intention to draw them on top of my main window. This clearly does not work… What I try to do is have 2  measured values shown in those rectangles (voltage and current), all on top of the window.

    So I need a window, with buttons to push but also 2 areas on the window to show some measured values. Can you give me a hint how to do it or do you have somewhere an example?

    Cheers!

    Dennis

      • Could you possibly put all of your example PSET function up on GIT with the source code.

        I am specifically looking for the ST75256 driver (there is a youtube video of this) and the uc1618T (I haven't seen any support for this chipset).

        Thank you for your efforts, they are appreciated.

  17. Hi

    I was wondering if I can use this library to get SSD1322 work with xmegaA3AU ? Can you help with some sample code, that would be great! Looking forward to your reply.

    Cheers

    • Hi Shree,

      I have added a example pset function for the SSD1322 driver on my forum!

      Please use a correct initialization sequence for your display!

      BR,

      Achim

  18. Dear Sir,

    We are using Tiny6410 stamp module. It is restricted to using only friendlyarm display. We need to interface resistive touchscreen display of 5 inch & 7 inch of our choice. Please give steps how we can use your library.

    Thank you.

  19. Hi achim,

    i really wonder about  your gui. it is very simple to use. i want to draw a image on my lcd. i also done by using your library with given example image. now i want to convert image to header file. can you suggest any software to do  that.

  20. Hi  Achim,

    I have a small display with no touchscreen. However I want to use windows with GUI buttons and use up/down buttons (physical buttons) to select GUI buttons on the screen (and use an enter button to simulate pressing a GUI button). Is it possible to do this with ugui, to select GUI buttons and generate GUI button clicks programmatically without toutchscreen?

    Regards,

    Jan

    • Hi Jan, yes this is possible. Just implement a fake touch function, which returns coordinates which are inside the area of a button. That’s it 🙂
      BR Achim

  21. hello! thanks for the hardwork! 😀

    well, this is my first time using STM. i'm using stm32f407 by the way. i really want to use ugui with my stm and ssd1289. do you have any project example that i can use as refrence? it would be really helpful. thanks!

  22. Dear Sir

    I need to use your UGUI with ATMEGA AVR & 7" ER-TFT070-4 TFT LCD in 16it parallel mode.

    Kindly share any example so that i can use your Ugui with my compiler. I am using CodevisionAVR.

    Thanks for your cooperation.

    Regards

     

    • Hi Ahmed, currently I don’t have any example for Codevision. Please have a look at my example projects. It should be quite easy to port them to your platform. BR Achim

  23. Hi Achim!

    Super nice library. It's very well coded and easy to use. I've began developing on it a couple of days ago and will probably go with your library for the rest of my project.

    I've noticed that drawing bitmaps could easily be accerelerated with a hardware driver for controllers like the SEPS525:

    1) Prepare peripherals for data transfer.

    2) Setup X start, Y start, X end and Y end according to the bitmap size and position.

    3) Use a pointer to the bitmap array and increment the pointer after each color sent.

    This allows you to write the whole bitmap in one shot with all the right colors (you don't have to write it pixel by pixel).

    With this in mind, I believe it would be fairly easy to add a supported hardware driver to be used by the drapBMP() function.

    Cheers!

    • Hi Jonathan.
      thank you very much for the feedback! Good idea! There will be some more new acceleration functions available in 0.4…Please post your project at the forum!
      BR Achim

  24. Hi!

    First of all – great job!

    And thank you for making it free 🙂

    I've set it up on an STM32L100RCT6 with an 128×64 glcd, and everything works like a charm, except the UG_DrawLine() function, which seems to always draw a falling line, no matter how the arguments are arranged 🙁
    This:

    UG_DrawLine(10,60,120,20,C_BLACK);  //falling line 60->20
    UG_DrawLine(10,10,120,50,C_BLACK);  //rising line 10->50 (but is falling)

    produces two prallel lines, while they should intersect.
    Is there something I'm doing wrong, or it just doesn't work this way?
    Best Regards, and thank you in advance.

    Krzysztof
     

     

    • Hi Krzysztof, thanks for the feedback. I’m glad that you like ugui. Please post your source code on the forum. I will have a look at it. In general it should work! Best regards, Achim

      • Hi Achim, 

        I'we find a bug. 
        if ( x2 < x1 )
           {
              n = x2;
              x2 = x1;
              x1 = n;
           }
           if ( y2 < y1 )
           {
              n = y2;
              y2 = y1;
              y1 = n;
           }
        These conditions swaps the endpoints of a line.
        [x1y1,x2y2]=>[x2y1,x1y2]      [x1y1,x2y2]=>[x1y2,x2y1]

        Best regards, Ondrej

  25. Hi.

    Any chance this could be ported to the Teensy (3.2) with the ILI9341?

    I could probably give it a go to see if I can get it working, but unsure how to do this exaclty as it's a bit out reach for me at the moment.

    Looks awesome!

    Good work 😀

  26. Hello, I am using your ugui. I use Psoc5 communicate with LCD TFT lil9341. Some funtion as UG DrawLine(), UG DrawArc()…run good on LCD. but some funtion about window not run on LCD. I dont understand about them. Examble funtion: UG WindowShow() {

       if ( wnd != NULL )
       {
          /* Force an update, even if this is the active window! */
          wnd->state |= WND_STATE_VISIBLE | WND_STATE_UPDATE;
          wnd->state &= ~WND_STATE_REDRAW_TITLE;
          gui->next_window = wnd;
          return UG_RESULT_OK;
       }
       return UG_RESULT_FAIL;

    }

    I dont see them send data for LCD from microchip.

     

  27. Hello Achim Döbler, thank you very much for your library, how can i used your libary with st75256 controler ? do i need to write first the driver ? can you help me please about that ?

    Thank you very much i'm waiting your help.

  28. Achime,

    Just want to thank you for your effort and great framework that is easy to use but also very powerful. I am using it extensivly on STM32F429I-DISC1 board.

    Thanks,

    Momcilo

  29. Hello,

    I see you have a youtube video of a 256×64 PM OLED 5.5\” GREEN | SSD1322 | 8080 / 68xx / SPI using a dsPIC33 controller. I what to do the same with a PIC32. Can you send me the code and schematic? I am currently using the MikroC complier, 

     Thanks in advance…..

  30. Hi, thanks for the library, but my buttons have no surrounding box.  Can you tell me if there is a method I should call?  Or is it something else?

  31. Hello, Thanks for the great library, i'am actually using uGUI to design my application. i just want ask you some question, the interface i am going to design is composed mainly with 3 parts :

    1-High Right corner : shows the battery level.

    2- High Left corner : Time and date 

    3- In the middle : the main Menu, a dynamic Menu for configuration and showing the app features. 

    My idea was to use an image to draw the battery level in the right corner, but here, i find that to use UG_ImageCreate i have to create a window at first and then attach the image, the library don't provide  a much easier function to draw an image in coordiantes (x,y), for me using windows is for managing dynamic things, things that are hidden and shown again in Runtime in fact I will use windows to manage tha main menu . I'am very interseted to know your opinion here 

    thanks in advance

    • The only way to do that is to remove folowing code from the UG_DrawLine function:

         if ( x2 < x1 )
         {
            n = x2;
            x2 = x1;
            x1 = n;
         }
         if ( y2 < y1 )
         {
            n = y2;
            y2 = y1;
            y1 = n;
         }

      Is there any particular reason to keep this code?

  32. Hi, is there any library for driving SSD1322 based oled's for STM32F4 or some sample code? I need it to drive one of those OLED's for my custom PC project ;)

  33. We are using uGui Library with BuyDisplays ER-TFT050-3 800×480 with OTA7001A LCD controller and STM32F4 platform .

    We are facing some flickering issues with current code. We think that the problem is with LTDC peripheral and SD-RAM configuration.

    Please see if there is any reference code or information available for this combination. Please share.

     

  34. Great library! Unbelievably quick time to get it up and running on my Cypress PSoC4.  Any chance you're planning on or are working on variable width fonts?

    • uGUI actually supports variable width fonts via the "widths" array though there are no variable width fonts included with uGUI out the chute.

  35. Dear Achim

    You have done a wonderfull work – keep up the good work

    Do you have a working driver for the SH1122G? as shown in your Youtube channel

    Can you please provide source code?

    Thank you

    Bobi

     

     

     

     

  36. Hello. Just found your library the other day. Love it due to the ease of porting and simplicity. Will likely never return to my old graphics library.

    I just can't figure out how to make two windows show, and get one inactive and one active. Could you please respond here or email me?

    Thank you,

    Mark

  37. Hi Achim,

                  I am completely new to this embedded system.

    I am trying to build a system that display the surrounding temperature in C or F , the user can select using a touch sensitive display.

    Components i am using is MAX31855 thermocople for temperature sensing. I have a Raspberry Pi 2 Model B at home i'm using.

    I have a C program to sense temperature from this chip. which i got from Github.

     

    I want a 3.5 to 5 inch touch display with hdmi connectivity so that i can use GPIO pins later in future for other purpose.

     

    I am getting confused as to how to proceed with this small project of mine.

     

    Which display to select? How to proceed with GUI programming using UGUI? I saw the reference guide but i'm totally new to this i'm getting extermely confused.

    could you please put up a demo video or  a new page on the your website for beginners like me.

     

    Thanks & Regards,

    Santhosh

  38. Hi,

    I am using this GLCD(240×160) using st7586S driver. I have interfaced it via 4 wire SPI interface.

    I am able to init the GLCD and able to run command All Pixel ON, All Pixel OFF. but when i am writing data to DDRAM i am not abl to get anything on the display could you please help.

     

    my code is following:

    void glcdInit(void)
    {
        delay(DELAY_1MS*5);
        SETBIT(GPIOF, 6); // Chip select high
        
        SETBIT(GPIOA, 12); // RESET high
        delay(DELAY_1MS*5);
        
        CLRBIT(GPIOA, 12); // RESET low
        delay(DELAY_1MS*10);
        
        SETBIT(GPIOA, 12); // RESET high
        delay(DELAY_50MS*4); // >120msec
        
        glcdSendbyte(COMMAND, 0x11); // Sleep Out
        glcdSendbyte(COMMAND, 0x28); // Display OFF
        delay(DELAY_50MS);
        
        glcdSendbyte(COMMAND, 0xC0); // Vop = B9h
        glcdSendbyte(DATA,0x45);
        glcdSendbyte(DATA,0x01);
        glcdSendbyte(COMMAND, 0xC3); // BIAS = 1/14
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(COMMAND, 0xC4); // Booster = x8
        glcdSendbyte(DATA,0x07);

    // as per driver datasheet
    //    glcdSendbyte(COMMAND, 0xC0); // Vop = B9h
    //    glcdSendbyte(DATA,0xB9);
    //    glcdSendbyte(DATA,0x00);
    //    glcdSendbyte(COMMAND, 0xC3); // BIAS = 1/14
    //    glcdSendbyte(DATA,0x05);
    //    glcdSendbyte(COMMAND, 0xC4); // Booster = x8
    //    glcdSendbyte(DATA,0x07);
        
        glcdSendbyte(COMMAND, 0xD0); // Enable Analog Circuit
        glcdSendbyte(DATA,0x1D);
            glcdSendbyte(COMMAND, 0xB5); // N-Line = 0
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(COMMAND, 0x39); // Monochrome Mode
        glcdSendbyte(COMMAND, 0x3A); // Enable DDRAM Interface
        glcdSendbyte(DATA,0x02);
        glcdSendbyte(COMMAND, 0x36); // Scan Direction Setting
        glcdSendbyte(DATA,0x00);   //COM:C160–C1   SEG: SEG384-SEG1
        glcdSendbyte(COMMAND, 0xB0); // Duty Setting
        glcdSendbyte(DATA,0x9F);

    //    glcdSendbyte(COMMAND, 0xB4); // Partial display
    //    glcdSendbyte(DATA,0x9F);
    //    glcdSendbyte(COMMAND, 0x30); // Partial display Area COM0-119
    //    glcdSendbyte(DATA,0x00);
    //    glcdSendbyte(DATA,0x00);
    //    glcdSendbyte(DATA,0x00);
    //    glcdSendbyte(DATA,0x77);
        
        glcdSendbyte(COMMAND, 0x20); // Display Inversion OFF
        glcdSendbyte(COMMAND, 0x2A); // Column Address Setting
        glcdSendbyte(DATA,0x00); // SEG0 -> SEG384
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(DATA,0x7F);
        
        glcdSendbyte(COMMAND, 0x2B); // Row Address Setting
        glcdSendbyte(DATA,0x00); // COM0 -> COM160
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(DATA,0x9F);    
        
        glcdSendbyte(COMMAND, 0x29); // Display ON
        
    }

    void glcdSendbyte(unsigned char byteType, unsigned char data)
    {
        unsigned char count = 0;
        
        // pin for selecting command or data
        if(byteType == COMMAND)
            {
                CLRBIT(GPIOA, 9);
            }        
        else
            {
                SETBIT(GPIOA, 9);
            }

            CLRBIT(GPIOF, 6); // Chip select low
        for(count = 0; count < 8; count++)
        {
            if(data & (0x80 >> count))
            {
                SETBIT(GPIOA, 11);//DATA
            }
            else
            {
                CLRBIT(GPIOA, 11);//DATA
            }
            SETBIT(GPIOA, 10);//SCK
            delay(10);//2.5uSec
            CLRBIT(GPIOA, 10);//SCK
            delay(10);//2.5uSec
        }          
            SETBIT(GPIOF, 6); // Chip select high
            delay(1600);//1000uSec
    }

    void display_address(unsigned char  x,unsigned char  y)
    {

        glcdSendbyte(COMMAND, 0x2A); // Column Address Setting
        glcdSendbyte(DATA, 0x00); // SEG0 -> SEG240
        glcdSendbyte(DATA, x+8);// SEG8*3=24
        glcdSendbyte(DATA,0x00);
        glcdSendbyte(DATA, 0x7f); // SEG128*3=384  seg x(dont use)  seg n  seg n
        
        glcdSendbyte(COMMAND, 0x2B); // Row Address Setting
        glcdSendbyte(DATA,0x00); // COM0 -> COM160
        glcdSendbyte(DATA, y);
        glcdSendbyte(DATA, 0x00);
        glcdSendbyte(DATA, 0x9F);      

    }

    void display_black(void)  //all  display
    {
      unsigned int i,j;
           glcdSendbyte(COMMAND, 0x2C);
      for(i=0;i<160;i++)
         {       
            for(j=0;j<120;j++)        //1byte data or 2 dot  120*2=240dot
            {
                glcdSendbyte(DATA, 0xFF);

            }
         }
    }

     

     

    Main function calls are like following:

            glcdInit();
            while(1)
            {
              
              display_address(0,0);
                delay(DELAY_50MS);
                display_black();
                delay(DELAY_50MS);

    }

    could you please help in pointing out where i am doing wrong?

    Regards/Pallav

     

    • Dear Pallav,

      sorry, but I don’t have the time to review your code right now. The only thing you need to do is to be able to toggle a single bit inside the display memory. After that the PSET-function will do the job.

      BR Achim

  39. Dear Achim Döbler;

    It's a nice work and thanks for sharing.

    I'd like to ask that is it possible to use uGUI with one of the Atmega ARM based MPUs that is AT91SAM9x35. It has own LCD controller and library but i did not figure out how to connect uGUI with this controller. 

    I'll be glad if you have an idea or suggestion on this issue.

    Regards,

    jS

  40. I use pic32mz with ili9341 and I would take advantage dma to accelerate.
    I am not able to exploit the DMA module, how can I do?
    I can have an example already tested?

  41. Hello Achim ,

    the GUI looks very nice and its look  easy to implement it!

    Is the Projekt still allive ?

    I am searching for a library for my home project  and  my question is:  It is useful to start with when the project seems to go on nothing more ?

    Best regards,

    Peter

     

     

  42. Hello, i have one problem, 

     if( ((UG_RESULT(*)(UG_S16 x1, UG_S16 y1, UG_S16 x2, UG_S16 y2, UG_COLOR c))gui …

    number of arguments passed to function "indirect" does not match functions prototype ,in hardware acceleration. I just pass the library to my project with pic32

    Some help or support?

    thanks.

    • Hi Tom,

      well, this depends on your display. The GRAM must be located either in the display or in the MCU. You can use µGUI in both cases.

      BR Achim

  43. First, I would like to thank you for making this library available and, most importantly, the pdf for each function.
    Libraries for lcds, we have many online, more documented are few.
    However I noticed in the compilation that there were significant changes between the documentation and the v0.30 library in UGUI-master, to the point that the compilation after some adjustments in the example "uGui_STM32F429_Discovery" was running fine, and compilation with substitution by the files UGUI-master, have made so many mistakes that you want to be able to track.
    Whatever is possible, you could update your example with the files in UGUI-master, but keep the previous one so that you can understand the changes.

    Thank you very much in advance.

    Ib

    • To be able to help the recurring error is:
      "
      Description Resource Path Location Type
      #include nested too deeply STM32F429_Disco_uGUI line 1x… C / C ++ Problem
      "

    • Hi Ivan,

      thanks a lot for the positive feedback.

      I need to do some updates regarding GitHub.

      Will get back to you regarding this!

      BR Achim

  44. Hi, I'm trying to setup an ST75256 based LCD display to a Raspberry Pi as 240×160 X-Windows active display. Is this possible and can you help me please?

    Regards,

    Martin

  45. Hi Achim,

    Very nice project. I've got an OLED display with SSD1322 controller and I was wondering if I can use your uGUI library on my STM32F407 connected to the LCD via the 8080 parallel interface through the FSMC peripheral. 

    Thanks,

    Marcos

  46. Pingback: Google

  47. Pingback: Kaufen Sie einen echten registrierten Führerschein

  48. Pingback: how to use rechargeable rabbit vibrators

  49. Pingback: g-spot vibrator

  50. Pingback: suction cup dildos

  51. Pingback: anal sex toy

  52. Pingback: buy real uk driving licence

  53. Pingback: 1listless

  54. Pingback: винтажные обложки

  55. Pingback: BROMAZEPAM 6 MG

  56. Pingback: canada sex toys

  57. Pingback: top vibrators for women

  58. Pingback: silicone vibrators

  59. Pingback: keltec 22

  60. Pingback: mossberg 930 jm pro for sale

  61. Pingback: beretta apx for sale

  62. Pingback: mossberg mvp patrol

  63. Pingback: krt cart

  64. Pingback: vape carts

  65. Pingback: cleaning products with gamma-butyrolactone

  66. Pingback: asic eth miners for sale

  67. Pingback: krt disposable

  68. Pingback: gbl

  69. Pingback: Buy Synthetic Weed Online

  70. Pingback: vibrator review

  71. Pingback: Hi-Point carbine

  72. Pingback: adult toys

  73. Pingback: Mt Kilimanjaro Trek

  74. Pingback: bitcoin api wallet

  75. Pingback: credit card to bitcoin

  76. Pingback: Buy Marijuana Online

  77. Pingback: reddit sex toys

  78. Pingback: https://processbuild48083.wixsite.com/sdehnkys

  79. Pingback: Buy Oxycodone online

  80. Pingback: kel tec sub 2000

  81. Pingback: vvc for purchage

  82. Pingback: junk car removal

  83. Pingback: meritroyalbet

  84. Pingback: meritking

  85. Pingback: madridbet

  86. Pingback: meritroyalbet

  87. Pingback: meritroyalbet

  88. Pingback: elexusbet

  89. Pingback: meritroyalbet

  90. Pingback: mortgage interest rates

  91. Pingback: Glock 17c for sale

  92. Pingback: glock 43x

  93. Pingback: สมัคร lottovip

  94. Pingback: THC Oil for Sale

  95. Pingback: baymavi

  96. Pingback: baymavi

  97. Pingback: browning hi power grips

  98. Pingback: tombala siteleri

  99. Pingback: Buy dmt vape carts online Sydney Australia

  100. Pingback: best fleshlight alternatives

  101. Pingback: настенные котлы

  102. Pingback: best wand massager

  103. Pingback: rechargeable vibrator

  104. Pingback: child porn

  105. Pingback: meritking

  106. Pingback: eurocasino

  107. Pingback: child porn

  108. Pingback: tiktok video down

  109. Pingback: elexusbet

  110. Pingback: trcasino

  111. Pingback: Desert eagle for sale

  112. Pingback: laptop hilfe jona

  113. Pingback: canadian pharmacies shipping to usa

  114. Pingback: PS5 Digital for Sale

  115. hi i am planning on using th uGUI for the ST7529 driver using MSP430. Can you please share the example for how to define the pset function ?

  116. Pingback: steyr aug a3 m1

  117. Pingback: fulgurite for sale

  118. Pingback: Glock 23

  119. Pingback: how to massage a huge dildo with balls

  120. Pingback: купить котел газовый

  121. Pingback: bitcoin walet and card

  122. Pingback: canada sex toys online

  123. Pingback: glo carts fake

  124. Pingback: donapetrona

  125. Pingback: free app download

  126. Pingback: full apps download

  127. Pingback: apps download for windows 7

  128. Pingback: MINE FULL TRADER

  129. Pingback: free apps download for windows 10

  130. Pingback: games for pc download

  131. Pingback: refle

  132. Pingback: cz bren 2 for sale

  133. Pingback: Herbal Incense Near me

  134. Pingback: Herbal Incense

  135. Pingback: masturbation tips

  136. Pingback: clitoral stimulator

  137. Pingback: madridbet giriş

  138. Pingback: glock 28

  139. Pingback: Uganda safari tour

  140. Pingback: Glock 23 Gen 5 for sale

  141. Pingback: Uganda safari tour

  142. Pingback: Uganda safari tours

  143. Pingback: it hilfe pfäffikon

  144. Pingback: www.canadianpharmacyking.com

  145. Pingback: canadian business

  146. Pingback: Cake carts

  147. Pingback: scrap car pickup

  148. Pingback: BERETTA 3032 TOMCAT FOR SALE

  149. Pingback: CZ Shadow 2

  150. Pingback: Weed Delivery

  151. Pingback: madritbet

  152. Pingback: meritroyalbet

  153. Pingback: eurocasino

  154. Pingback: eurocasino

  155. Pingback: eurocasino

  156. Pingback: eurocasino

  157. Pingback: eurocasino

  158. Pingback: eurocasino

  159. Pingback: penis sleeve

  160. Pingback: Eatery Nanaimo

  161. Pingback: computer fernwartung rüti

  162. Pingback: us stock market

  163. Pingback: carrefour

  164. Pingback: Anxiety pills for sale

  165. Pingback: scrap car removal

  166. Pingback: escorts Delhi

  167. Pingback: thrusting rabbit vibrator

  168. Pingback: penis enlarger pump

  169. Pingback: visit podcast

  170. Pingback: cryptocurrency virtual card

  171. Pingback: meritroyalbet giriş

  172. Pingback: Latest News

  173. Pingback: how to last longer in bed

  174. Pingback: Pinball machines for sale

  175. Pingback: shroom bars

  176. Pingback: mazhor4sezon

  177. Pingback: Platinum haupia

  178. Pingback: Bubblegum Haupia Strain

  179. Pingback: Haupia strain

  180. Pingback: Bubble hash

  181. Pingback: Moroccan hash

  182. Pingback: Litto

  183. Pingback: Bubble hash

  184. Pingback: Need Auto Loan? - All Bad Credit Loan

  185. Pingback: psy-

  186. Pingback: projectio

  187. Pingback: moskva psiholog online

  188. Pingback: slovar po psihoanalizu laplansh

  189. Pingback: psy online

  190. Pingback: Gz92uNNH

  191. Pingback: do-posle-psihologa

  192. Pingback: uels ukrain

  193. Pingback: eurocasino

  194. Pingback: bahis siteleri

  195. Pingback: DPTPtNqS

  196. Pingback: qQ8KZZE6

  197. Pingback: D6tuzANh

  198. Pingback: http://bit.ly/odna-film

  199. Pingback: https://ria.ru/20100906/272903623.html

  200. Pingback: SHKALA TONOV

  201. Pingback: Øêàëà òîíîâ

  202. Pingback: russianmanagement.com

  203. Pingback: chelovek-iz-90-h

  204. Pingback: 3Hk12Bl

  205. Pingback: 3NOZC44

  206. Pingback: 01211

  207. Pingback: tor-lyubov-i-grom

  208. Pingback: film-tor-2022

  209. Pingback: hd-tor-2022

  210. Pingback: hdorg2.ru

  211. Pingback: JXNhGmmt

  212. Pingback: Psikholog

  213. Pingback: netstate.ru

  214. Pingback: https://bit.ly/psikholog-muzhchina-onlayn

  215. Pingback: meritroyalbet

  216. Pingback: 2reiterate

  217. Pingback: Link

  218. Pingback: tor-lyubov-i-grom.ru

  219. Pingback: psy

  220. Pingback: chelovek soznaniye mozg

  221. Pingback: bit.ly

  222. Pingback: cleantalkorg2.ru

  223. Pingback: bucha killings

  224. Pingback: War in Ukraine

  225. Pingback: Ukraine

  226. Pingback: Ukraine news – live

  227. Pingback: The Latest Ukraine News

  228. Pingback: site

  229. Pingback: stats

  230. Pingback: Ukraine-war

  231. Pingback: movies

  232. Pingback: gidonline

  233. Pingback: mir dikogo zapada 4 sezon 4 seriya

  234. Pingback: web

  235. Pingback: film.8filmov.ru

  236. Pingback: video

  237. Pingback: film

  238. Pingback: Chat Online

  239. Pingback: My Site

  240. Pingback: Discord

  241. Pingback: Amazing Site

  242. Pingback: Fantasy MMORPG

  243. Pingback: Browser MMORPG

  244. Pingback: Browser MMORPG

  245. Pingback: Fantasy MMORPG

  246. Pingback: Browser MMORPG

  247. Pingback: Fantasy MMORPG

  248. Pingback: Browser MMORPG

  249. Pingback: Fantasy MMORPG

  250. Pingback: Browser MMORPG

  251. Pingback: Fantasy MMORPG

  252. Pingback: Fantasy MMORPG

  253. Pingback: Browser MMORPG

  254. Pingback: Browser MMORPG

  255. Pingback: Browser MMORPG

  256. Pingback: Fantasy MMORPG

  257. Pingback: liusia-8-seriiaonlain

  258. Pingback: Ugui | The Wasabies - 'Ү-Гүй' M/V (Official Music Video) 상위 85개 답변 - Da.taphoamini.com

  259. Pingback: smotret-polnyj-film-smotret-v-khoroshem-kachestve

  260. Pingback: Fantasy MMORPG

  261. Pingback: Fantasy MMORPG

  262. Pingback: Free WebHosting

  263. Pingback: filmgoda.ru

  264. Pingback: rodnoe-kino-ru

  265. Pingback: confeitofilm

  266. Pingback: stat.netstate.ru

  267. Pingback: Fantasy MMORPG

  268. Pingback: Skidson

  269. Pingback: AQW

  270. Pingback: sY5am

  271. Pingback: AQW

  272. Pingback: Dom drakona

  273. Pingback: JGXldbkj

  274. Pingback: aOuSjapt

  275. Pingback: Browser MMORPG

  276. Pingback: ìûøëåíèå

  277. Pingback: psikholog moskva

  278. Pingback: A片

  279. Pingback: AQWorlds

  280. Pingback: Usik Dzhoshua 2 2022

  281. Pingback: AQWorlds

  282. Pingback: porno}

  283. Pingback: AQW

  284. Pingback: Dim Drakona 2022

  285. Pingback: My Site

  286. Pingback: TwnE4zl6

  287. Pingback: Как избавиться от тревоги

  288. Pingback: как избавиться от тревоги и навязчивых мыслей

  289. Pingback: как избавиться от тревоги и страха

  290. Pingback: как избавиться от тревоги и навязчивых мыслей

  291. Pingback: psy 3CtwvjS

  292. Pingback: AQW

  293. Pingback: meriking

  294. Pingback: Browser MMORPG

  295. Pingback: reduslim opinioni

  296. Pingback: reduslim prezzo in farmacia

  297. Pingback: reduslim

  298. Pingback: reduslim farmacia

  299. Pingback: reduslim prezzo in farmacia

  300. Pingback: AQW

  301. Pingback: как избавиться от тревоги и страха

  302. Pingback: как избавиться от тревоги

  303. Pingback: Reduslim para adelgazar

  304. Pingback: Reduslim Precio en la farmacia

  305. Pingback: lalochesia

  306. Pingback: как избавиться от тревоги и навязчивых мыслей

  307. Pingback: как избавиться от тревоги и стресса

  308. Pingback: как избавиться от тревоги и навязчивых мыслей

  309. Pingback: film onlinee

  310. Pingback: programma peredach na segodnya

  311. Pingback: как избавиться от тревоги

  312. Pingback: как избавиться от тревоги и навязчивых мыслей

  313. Pingback: psycholog-v-moskve.ru

  314. Pingback: psycholog-moskva.ru

  315. Pingback: 3qAIwwN

  316. Pingback: video-2

  317. Pingback: sezons.store

  318. Pingback: socionika-eniostyle.ru

  319. Pingback: psy-news.ru

  320. Pingback: как избавиться от тревоги и страха

  321. Pingback: как избавиться от тревоги

  322. Pingback: как избавиться от тревоги

  323. Pingback: как избавиться от тревоги и навязчивых мыслей

  324. Pingback: как избавиться от тревоги и стресса

  325. Pingback: 000-1

  326. Pingback: 3SoTS32

  327. Pingback: 3DGofO7

  328. Pingback: как избавиться от тревоги самостоятельно таблетки

  329. Pingback: как избавиться от тревоги депрессии страха беспокойств самостоятельно

  330. Pingback: wwwi.odnoklassniki-film.ru

  331. Pingback: Как избавиться от страха и чувства тревоги, беспокойства без причины и стресса

  332. Pingback: Reduslim precio Comprar en farmacias españolas (original, sitio oficial)

  333. Pingback: Reduslim precio en farmacias españolas original, sitio oficial

  334. Pingback: Reduslim precio Comprar farmacias original, sitio oficial

  335. Pingback: Reduslim precio Comprar linea en farmacias españolas original, sitio oficial

  336. Pingback: Как избавиться от чувства страха и тревоги, беспокойства без причины, от стресса и навязчивых мыслей самостоятельно

  337. Pingback: rftrip.ru

  338. Pingback: madridbet

  339. Pingback: Mejores precios en España Comprar linea (original, sitio oficial)

  340. Pingback: Как избавиться от чувства страха и тревоги, беспокойства без причины, от стресса и навязчивых мыслей самостоятельно

  341. Pingback: Miglior prezzo Italia Comprare online (originale, sito ufficiale)

  342. Pingback: Miglior prezzo Italia Comprare online (originale, sito ufficiale)

  343. Pingback: https://bitbin.it/bn1QAiBO/

  344. Pingback: https://bitbin.it/JI5X9Xvu/

  345. Pingback: dolpsy.ru

  346. Pingback: https://clck.ru/32JaEo

  347. Pingback: zamazingo1

  348. Pingback: как избавиться от чувства вины

  349. Pingback: как избавиться от чувства вины

  350. Pingback: как избавиться от чувства вины

  351. Pingback: как избавиться от чувства вины и стыда

  352. Pingback: как избавиться от чувства вины

  353. Pingback: как избавиться от чувства вины

  354. Pingback: как избавиться от чувства вины

  355. Pingback: как избавиться от чувства вины

  356. Pingback: как избавиться от чувства вины

  357. Pingback: как избавиться от чувства вины

  358. Pingback: как избавиться от чувства вины

  359. Pingback: как избавиться от чувства вины

  360. Pingback: как избавиться от чувства вины

  361. Pingback: https://bit.ly/arestovich-arestovich-official-video

  362. Pingback: kin0shki.ru

  363. Pingback: 3o9cpydyue4s8.ru

  364. Pingback: mb588.ru

  365. Pingback: How to buy a prescription drug without a prescription?

  366. Pingback: How to buy a prescription drug without a prescription?

  367. Pingback: How to buy a prescription drug without a prescription?

  368. Pingback: How to buy a prescription drug without a prescription?

  369. Pingback: How to buy a prescription drug without a prescription?

  370. Pingback: How to buy a prescription drug without a prescription?

  371. Pingback: How to buy a prescription drug without a prescription?

  372. Pingback: How to buy a prescription drug without a prescription?

  373. Pingback: How to buy a prescription drug without a prescription?

  374. Pingback: How to buy a prescription drug without a prescription?

  375. Pingback: history-of-ukraine.ru news ukraine

  376. Pingback: How to buy a prescription drug without a prescription?

  377. Pingback: Where will they sell pills without a prescription with delivery?

  378. Pingback: Where do you sell pills without a prescription with delivery?

  379. Pingback: Where can I go to buy pills without a prescription?

  380. Pingback: Coupons for the purchase of drugs without a prescription

  381. Pingback: Promo code for the purchase of drugs, you can buy without a prescription

  382. Pingback: Sale of drugs, you can buy without a prescription

  383. Pingback: newsukraine.ru

  384. Pingback: как избавиться от чувства вины

  385. Pingback: meritking

  386. Pingback: edu-design.ru

  387. Pingback: tftl.ru

  388. Pingback: Buy Atarax online

  389. Pingback: Get Atarax 10 mg, 25 mg cheap online

  390. Pingback: Safe to Buy Atarax Without a Prescription

  391. Pingback: Safe to Buy Atarax Without a Prescription

  392. Pingback: Cheap buy Atarax online

  393. Pingback: Safe to Buy Atarax Without a Prescription

  394. Pingback: Get Atarax 10 mg, 25 mg cheap online

  395. Pingback: Buy Atarax 10 mg, 25 mg online

  396. Pingback: Buy Atarax 10 mg, 25 mg online

  397. Pingback: Buy Atarax 10 mg, 25 mg online

  398. Pingback: Buy Atarax 10 mg, 25 mg online

  399. Pingback: Buy Atarax 10 mg, 25 mg online

  400. Pingback: Atarax drug for mental health buy online or pharmacy

  401. Pingback: Atarax drug for mental health buy online or pharmacy

  402. Pingback: Atarax drug for mental health buy online or pharmacy

  403. Pingback: Atarax drug for mental health buy online or pharmacy

  404. Pingback: brutv

  405. Pingback: site 2023

  406. Pingback: grandpashabet

  407. Pingback: https://bit.ly/3Esup4r

  408. Pingback: sitestats01

  409. Pingback: 1c789.ru

  410. Pingback: cttdu.ru

  411. Pingback: 1703

  412. Pingback: hdserial2023.ru

  413. Pingback: viagra vs cialis vs levitra

  414. Pingback: serialhd2023.ru

  415. Pingback: matchonline2022.ru

  416. Pingback: µGUI v0.3 | Example Project | STM32F429 Discovery | CooCox - VeryCleverHome

  417. Pingback: bit.ly/3OEzOZR

  418. Pingback: bit.ly/3gGFqGq

  419. Pingback: bit.ly/3ARFdXA

  420. Pingback: bit.ly/3ig2UT5

  421. Pingback: bit.ly/3GQNK0J

  422. Pingback: Grandpashabet

  423. Pingback: grandpashabet

  424. Pingback: bep5w0Df

  425. Pingback: www

  426. Pingback: icf

  427. Pingback: 24hours-news

  428. Pingback: rusnewsweek

  429. Pingback: uluro-ado

Leave a Reply