Recalbox Forum

    • Register
    • Login
    • Search
    • Recent
    • Tags
    • recalbox.com
    • Gitlab repository
    • Documentation
    • Discord

    Compilation GCC, hyperpixel4 Square & Pi4 RB7.2.2 :)

    Manettes/GPIO/Encodeurs
    compilation gcc hyperpixel4 square pi4 rb7.2.2
    2
    3
    547
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Jearon
      Jearon last edited by

      Bonjour la communauté 🙂
      Dans l'espoir de faire tourner un ecran Pimoroni hyperpixel4 Square (4 pouces format carré & différent du rectangulaire 800*480) sur mon Pi4 comme déjà fait sur mon très satisfaisant mais humble Pi3, je recherche des pistes pour solutionner mon problème.
      Ce post fait écho à quelques précédents... mais reste différent des précédents de par la nature de l'écran, de ses fichiers pilotes et de la carte Raspberry de riche 😄

      Pour info, fichiers nécessaires sur mon ancien PI3 équipé de hyperpixel4 Square:
      - Modifications config.txt du Pi3:

      # custom config
      [all]
      #dtoverlay=vc4-fkms-v3d
      
      # Parametres de l'ecran LCD HyperPixel4 carre
      
      # Rotation ecran port vers le haut
      dtoverlay=hyperpixel4:rotate
      display_rotate=1
      
      overscan_left=0
      overscan_right=0
      overscan_top=0
      overscan_bottom=0
      framebuffer_width=720
      framebuffer_height=720
      enable_dpi_lcd=1
      display_default_lcd=1
      dpi_group=2
      dpi_mode=87
      dpi_output_format=0x7f226
      hdmi_timings=720 0 15 15 15 720 0 10 10 10 0 0 0 60 0 35113500 6
       
      dtparam=i2c_arm=off
      dtparam=spi=off
      
      

      - Fichiers à installer sur Pi3:
      hyperpixel4.dtbo;
      hyperpixel4-init;
      et
      S15hyperpixel (à créer pour RecalBox ci dessous):

      #!/bin/sh
      if [ -f  /usr/bin/hyperpixel4-init ]; then
          (  /usr/bin/hyperpixel4-init ) &
      fi
      

      A présent sur le Pi4!
      Dans le principe je devrais utiliser quelques fichiers propres à mon application Pi4 et liés à l'hyperpixel4 Square :

      • config.txt (à modifier dans l'idée du Pi3);
      • hyperpixel4.dtbo ;
      • S15hyperpixel identique au précédent sur Pi3 répondant au fichier..
      • hyperpixel4-init.c
      
      #include <bcm2835.h>
      #include <stdio.h>
      
      #define CLK RPI_V2_GPIO_P1_13 // BCM 27
      #define MOSI RPI_V2_GPIO_P1_37 // BCM 26
      #define CS RPI_V2_GPIO_P1_12 // BCM 18
      #define DELAY 100 // clock pulse time in microseconds
      #define WAIT 120 // wait time in milliseconds
      
      #define PIN RPI_V2_GPIO_P1_35
      
      // bcm2835_delayMicroseconds()
      
      int32_t commands[] = {
          0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x101, 0x008, 0x110,
          0x021, 0x109, 0x030, 0x102, 0x031, 0x100, 0x040, 0x110,
          0x041, 0x155, 0x042, 0x102, 0x043, 0x109, 0x044, 0x107,
          0x050, 0x178, 0x051, 0x178, 0x052, 0x100, 0x053, 0x16d,
          0x060, 0x107, 0x061, 0x100, 0x062, 0x108, 0x063, 0x100,
          0x0a0, 0x100, 0x0a1, 0x107, 0x0a2, 0x10c, 0x0a3, 0x10b,
          0x0a4, 0x103, 0x0a5, 0x107, 0x0a6, 0x106, 0x0a7, 0x104,
          0x0a8, 0x108, 0x0a9, 0x10c, 0x0aa, 0x113, 0x0ab, 0x106,
          0x0ac, 0x10d, 0x0ad, 0x119, 0x0ae, 0x110, 0x0af, 0x100,
          0x0c0, 0x100, 0x0c1, 0x107, 0x0c2, 0x10c, 0x0c3, 0x10b,
          0x0c4, 0x103, 0x0c5, 0x107, 0x0c6, 0x107, 0x0c7, 0x104,
          0x0c8, 0x108, 0x0c9, 0x10c, 0x0ca, 0x113, 0x0cb, 0x106,
          0x0cc, 0x10d, 0x0cd, 0x118, 0x0ce, 0x110, 0x0cf, 0x100,
          0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x106, 0x000, 0x120,
          0x001, 0x10a, 0x002, 0x100, 0x003, 0x100, 0x004, 0x101,
          0x005, 0x101, 0x006, 0x198, 0x007, 0x106, 0x008, 0x101,
          0x009, 0x180, 0x00a, 0x100, 0x00b, 0x100, 0x00c, 0x101,
          0x00d, 0x101, 0x00e, 0x100, 0x00f, 0x100, 0x010, 0x1f0,
          0x011, 0x1f4, 0x012, 0x101, 0x013, 0x100, 0x014, 0x100,
          0x015, 0x1c0, 0x016, 0x108, 0x017, 0x100, 0x018, 0x100,
          0x019, 0x100, 0x01a, 0x100, 0x01b, 0x100, 0x01c, 0x100,
          0x01d, 0x100, 0x020, 0x101, 0x021, 0x123, 0x022, 0x145,
          0x023, 0x167, 0x024, 0x101, 0x025, 0x123, 0x026, 0x145,
          0x027, 0x167, 0x030, 0x111, 0x031, 0x111, 0x032, 0x100,
          0x033, 0x1ee, 0x034, 0x1ff, 0x035, 0x1bb, 0x036, 0x1aa,
          0x037, 0x1dd, 0x038, 0x1cc, 0x039, 0x166, 0x03a, 0x177,
          0x03b, 0x122, 0x03c, 0x122, 0x03d, 0x122, 0x03e, 0x122,
          0x03f, 0x122, 0x040, 0x122, 0x052, 0x110, 0x053, 0x110,
          0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x107, 0x018, 0x11d,
          0x017, 0x122, 0x002, 0x177, 0x026, 0x1b2, 0x0e1, 0x179,
          0x0ff, 0x1ff, 0x198, 0x106, 0x104, 0x100, 0x03a, 0x160,
          0x035, 0x100, 0x011, 0x100,    -1, 0x029, 0x100,    -1
      };
      
      void setup_pins(void)
      {
          bcm2835_gpio_fsel(CLK, BCM2835_GPIO_FSEL_OUTP);
          bcm2835_gpio_fsel(MOSI, BCM2835_GPIO_FSEL_OUTP);
          bcm2835_gpio_fsel(CS, BCM2835_GPIO_FSEL_OUTP);
          bcm2835_gpio_write(CS, HIGH);
      }
      
      
      void cleanup_pins(void)
      {
          // Return the touch interrupt pin to a usable state
          bcm2835_gpio_fsel(CLK, BCM2835_GPIO_FSEL_INPT);
          bcm2835_gpio_set_pud(CLK, BCM2835_GPIO_PUD_OFF);
      }
      
      void send_bits(uint16_t data, uint16_t count){
          int x;
          int mask = 1 << (count-1);
          for(x = 0; x < count; x++){
              bcm2835_gpio_write(MOSI, (data & mask) > 0);
              data <<= 1;
      
              bcm2835_gpio_write(CLK, LOW);
              bcm2835_delayMicroseconds(DELAY);
              bcm2835_gpio_write(CLK, HIGH);
              bcm2835_delayMicroseconds(DELAY);
          }
          bcm2835_gpio_write(MOSI, LOW);
      }
      
      void write(uint16_t command){
          bcm2835_gpio_write(CS, LOW);
          send_bits(command, 9);
          bcm2835_gpio_write(CS, HIGH);
      }
      
      void setup_lcd(void){
          int count = sizeof(commands) / sizeof(int32_t);
          int x;
          for(x = 0; x < count; x++){
              int32_t command = commands[x];
              if(command == -1){
                  bcm2835_delay(WAIT);
                  continue;
              }
              write((uint16_t)command);
          }
      }
      
      int main(int argc, char **argv)
      {
          if (!bcm2835_init())
            return 1;
      
          setup_pins();
          setup_lcd();
      
          cleanup_pins();
          bcm2835_close();
          return 0;
      }
      
      
      

      C'est ici que j'ai un certain doute... Car celui du Pi3 est compilé pour son exploitation.
      Sur Pi4 il est en langage de programmation...

      En fouillant dans le répertoire d'installation du RapPiOS j'ai trouvé quelques informations pour justement compiler ce fichier:

      gcc -o hyperpixel4-init -static hyperpixel4-init.c -lbcm2835
      

      J'ai tenté sous windows une compilation mais il semble que l'on doive avoir une référence au GPIO via "-lbcm2835" de la ligne de commande. Donc nécessité de passer sur une compilation sous Pi4 me semble-t-il.

      MES QUESTIONS:

      • pouvez-vous me renseigner sur la nature des commandes "-static" et "-lbcm2835"?
      • Si vous avez les compétences serait-il possible de m'aider dans la compilation du fichier? ... que je mettrai à disposition 🙂

      Merci !

      RPi3 B + boîtier Nespicase + et Recalbox 9 - Manette Xbox360 filaire + clavier Rii mini i24T + noname type Snes

      1 Reply Last reply Reply Quote 0
      • Cyril92
        Cyril92 last edited by Cyril92

        Salut @Jearon,

        Oula tu es parti bien loin il me semble, et sans grandes connaissances.
        Je n'ai pas la solution pour toi, ce qui est sûr c'est qu'il faut que tu compiles ton programme avec un compilateur pour proc arm. Si tu as essayé sous windows sans le cross compilateur adequat ça ne marchera jamais.
        Je ne suis pas sûr non plus que tu puisses prendre les programmes du pi3 pour les passer sur pi4, je pense qu'il y a eu des changements notamment sur la gestion des écrans. et je pense qu'ils sont différents physiquement sur ce point.
        il vaudrait mieux essayer d'aller chercher du côté du site de l'hyperpixel4 pour trouver des infos des développeurs.

        System : Raspberry Pi 3b /Pi 4b
        Box : NespiCase (Pi3b) / Nespi4case (Pi4b 2Go)
        Peripheral devices : SSD Samsung 970 Evo 1To
        1 Manette 8bitdo SN30 pro+
        1 Manette compatible PS3 Shanwan
        Je teste la 8.0-Beta1

        Jearon 1 Reply Last reply Reply Quote 0
        • Jearon
          Jearon @Cyril92 last edited by

          @cyril92 merci pour ta réponse.
          Certes j'ai un manque flagrant de connaissances notamment pour la compilation. J'ai voulu avancer sans connaître... c'est pour cette raison que j'en appelle à l'attention de bonnes âmes du forum... pour guider ou faire pour moi au pire 🙂

          Concernant mon premier écran hyperpixel4 800x480 je l'ai remballé et mis en vente au profit de sa version carré 720x720 qui concrétise un projet portable pi3 en espérant que par ce post j'arrive à le faire évoluer au pi4.
          Je reste lucide pour les fichiers propres à chaque écran et à chaque modèle de Pi.
          Je ne me suis pas étendu sur ma démarche en amont, mais j'ai au préalable installé l'écran sur Pi3 puis Pi4 et récupéré chaque répertoires d'installation contenant lesdits fichiers, rangé distinctement et soigneusement sur mon pc pour ne pas mélanger les configuration Pi3 Pi4 entre elles 🙂

          J'ai donc un fichier hyperpixel-init.c qui n'est pour l'heure pas au même format que son pendan Pi3.
          J'ai du mal à admettre que l'écran ne peut fonctionner hors RaspiOs et je voudrais essayer d'éclaircir ce dernier point avant d'enterrer ma version portable Pi4 😞

          Pour finir... j'ai traîné sur le github officiel et lu moult forum sur le sujet hyperpixel4 square et pi4... mon avenir s'assombrit mais je ne désespère pas 🙂

          RPi3 B + boîtier Nespicase + et Recalbox 9 - Manette Xbox360 filaire + clavier Rii mini i24T + noname type Snes

          1 Reply Last reply Reply Quote 0
          • Locked by  admin admin 
          • First post
            Last post

          Want to support us ?

          79
          Online

          99.7k
          Users

          28.1k
          Topics

          187.1k
          Posts

          Copyright © 2021 recalbox.com