ESP32 signaal samplen

Hallo,
ik zoek een manier om een digitaal 433mhz signal te samplen en op te slaan in deze onderstaande variabele(1e venster) ik heb bestaande code van het samplen maar deze werkt alleen op de arduino mega. ik gebruik zelf een esp32, en op deze bordjes werkt het niet.
hieronder in het 2e venster de code welke werkt op een arduino

de minimale pulselengte is 40us
de samplerate is 30us


struct RawSignalStruct                                                          // Raw signal variabelen places in a struct
  {
  int  Number;                                                                  // Number of pulses, times two as every pulse has a mark and a space.
  byte Repeats;                                                                 // Number of re-transmits on transmit actions.
  byte Delay;                                                                   // Delay in ms. after transmit of a single RF pulse packet
  byte Multiply;                                                                // Pulses[] * Multiply is the real pulse time in microseconds 
  unsigned long Time;                                                           // Timestamp indicating when the signal was received (millis())
  byte Pulses[RAW_BUFFER_SIZE+2];                                               // Table with the measured pulses in microseconds divided by RawSignal.Multiply. (halves RAM usage)
                                                                                // First pulse is located in element 1. Element 0 is used for special purposes, like signalling the use of a specific plugin
} RawSignal={0,0,0,0,0,0L};



 uint8_t Fbit = digitalPinToBitMask(DataPin);
  uint8_t Fport = digitalPinToPort(DataPin);
  uint8_t FstateMask = (StateSignal ? Fbit : 0);

  if ((*portInputRegister(Fport) & Fbit) == FstateMask) {                       // Als er signaal is
    // Als het een herhalend signaal is, dan is de kans groot dat we binnen hele korte tijd weer in deze
    // routine terugkomen en dan midden in de volgende herhaling terecht komen. Daarom wordt er in dit
    // geval gewacht totdat de pulsen voorbij zijn en we met het capturen van data beginnen na een korte 
    // rust tussen de signalen.Op deze wijze wordt het aantal zinloze captures teruggebracht.
    if (RawSignal.Time) {                                                       //  Eerst een snelle check, want dit bevindt zich in een tijdkritisch deel...
      if (RawSignal.Repeats && (RawSignal.Time+SIGNAL_REPEAT_TIME)>millis()) { // ...want deze check duurt enkele micro's langer!
        PulseLength=micros()+SIGNAL_TIMEOUT*1000;                             // delay
        while ((RawSignal.Time+SIGNAL_REPEAT_TIME)>millis() && PulseLength>micros())
          if ((*portInputRegister(Fport) & Fbit) == FstateMask)
            PulseLength=micros()+SIGNAL_TIMEOUT*1000;
        while((RawSignal.Time+SIGNAL_REPEAT_TIME)>millis() &&  (*portInputRegister(Fport) & Fbit) != FstateMask);
      }
    }
    RawCodeLength=1;                                                            // Start at 1 for legacy reasons. Element 0 can be used to pass special i    formation like plugin number etc.
      Ftoggle=false;                  
    maxloops = (SIGNAL_TIMEOUT * LoopsPerMilli);  
    do{                                                                         // read the pulses in microseconds and place them in temporay buffer RawSignal
        numloops = 0;
      while (((*portInputRegister(Fport) & Fbit) == FstateMask) ^ Ftoggle)      // while() loop *A*
        if (numloops++ == maxloops) break;                                        // timeout 
      PulseLength=((numloops + Overhead)* 1000) / LoopsPerMilli;                // Contains pulslength in microseconds
      if (PulseLength<MIN_PULSE_LENGTH) break;                                  // Pulse length too short
      Ftoggle=!Ftoggle;    
      RawSignal.Pulses[RawCodeLength++]=PulseLength/(unsigned long)(RAWSIGNAL_SAMPLE_RATE); // store in RawSignal !!!! 
    } 
    while (RawCodeLength<RAW_BUFFER_SIZE && numloops<=maxloops);               // For as long as there is space in the buffer, no timeout etc.
    if (RawCodeLength>=MIN_RAW_PULSES) {
      RawSignal.Repeats=0;                                                      // no repeats
      RawSignal.Multiply=RAWSIGNAL_SAMPLE_RATE;                                 // sample size.
      RawSignal.Number=RawCodeLength-1;                                         // Number of received pulse times (pulsen *2)
      RawSignal.Pulses[RawSignal.Number+1]=0;                                   // Last element contains the timeout. 
      RawSignal.Time=millis();                                                  // Time the RF packet was received (to keep track of retransmits
      return true;
    } 
    else {
      RawSignal.Number=0;    
    }