Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. why when implement interrupt handler in qt give beolw error ? How to resolve it ?
Qt 6.12 LTS is out! See what's new in the release blog

why when implement interrupt handler in qt give beolw error ? How to resolve it ?

Scheduled Pinned Locked Moved Solved Mobile and Embedded
16 Posts 3 Posters 3.6k Views
  • 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.
  • JonBJ JonB

    @Qt-embedded-developer
    So what type is/what is your declaration of your gpo_handler?

    Q Offline
    Q Offline
    Qt embedded developer
    wrote on last edited by Qt embedded developer
    #3

    @JonB

    Declaration is

    void gpo_handler(void);
    

    And defination is

    void MainWindow::gpo_handler()
    {
    
           ST25DV_FIELD_STATUS fieldpresence;
    
             BSP_NFCTAG_GetRFField_Dyn(0, &fieldpresence );
       //printf("fielpresence enum = %d", fieldpresence);
             if( fieldpresence == ST25DV_FIELD_ON )
             {
                printf ("GPO handler: field is ON\r\n");
             }
             else
             {
    
                printf ("GPO handler: field is OFF\r\n");
             }
    
             uint8_t itstatus;
    
            // if( GPO_Activated == 1 )
            // {
               //GPO_Activated = 0;
    
               ST25_RETRY(BSP_NFCTAG_ReadITSTStatus_Dyn(0, &itstatus ));
    
               if( (itstatus & ST25DV_ITSTS_DYN_FIELDFALLING_MASK) == ST25DV_ITSTS_DYN_RFWRITE_MASK )
               {
                 printf("RF write");
               }
               else
                   printf(" %x",(itstatus & ST25DV_ITSTS_DYN_FIELDFALLING_MASK));
           //}
    
    
    
    }
    
    
    JonBJ 1 Reply Last reply
    0
    • Q Qt embedded developer

      @JonB

      Declaration is

      void gpo_handler(void);
      

      And defination is

      void MainWindow::gpo_handler()
      {
      
             ST25DV_FIELD_STATUS fieldpresence;
      
               BSP_NFCTAG_GetRFField_Dyn(0, &fieldpresence );
         //printf("fielpresence enum = %d", fieldpresence);
               if( fieldpresence == ST25DV_FIELD_ON )
               {
                  printf ("GPO handler: field is ON\r\n");
               }
               else
               {
      
                  printf ("GPO handler: field is OFF\r\n");
               }
      
               uint8_t itstatus;
      
              // if( GPO_Activated == 1 )
              // {
                 //GPO_Activated = 0;
      
                 ST25_RETRY(BSP_NFCTAG_ReadITSTStatus_Dyn(0, &itstatus ));
      
                 if( (itstatus & ST25DV_ITSTS_DYN_FIELDFALLING_MASK) == ST25DV_ITSTS_DYN_RFWRITE_MASK )
                 {
                   printf("RF write");
                 }
                 else
                     printf(" %x",(itstatus & ST25DV_ITSTS_DYN_FIELDFALLING_MASK));
             //}
      
      
      
      }
      
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by JonB
      #4

      @Qt-embedded-developer
      So doesn't the error message tell you exactly it wants &MainWindow::gpo_handler?

      P.S.

      void gpo_handler(void);

      That's C-ish. C++ is happy with void gpo_handler();.

      Q 1 Reply Last reply
      1
      • JonBJ JonB

        @Qt-embedded-developer
        So doesn't the error message tell you exactly it wants &MainWindow::gpo_handler?

        P.S.

        void gpo_handler(void);

        That's C-ish. C++ is happy with void gpo_handler();.

        Q Offline
        Q Offline
        Qt embedded developer
        wrote on last edited by
        #5

        @JonB

        first error resolved but 2nd error still come

        error: cannot convert 'void (MainWindow::)()' to 'interrupt_handler_t {aka void ()()}' for argument '1' to 'int32_t ST25DV_GPO_interrupt_init(interrupt_handler_t)'
        while(ST25DV_GPO_interrupt_init(&gpo_handler) != NFCTAG_OK);

        jsulmJ 1 Reply Last reply
        0
        • Q Qt embedded developer

          @JonB

          first error resolved but 2nd error still come

          error: cannot convert 'void (MainWindow::)()' to 'interrupt_handler_t {aka void ()()}' for argument '1' to 'int32_t ST25DV_GPO_interrupt_init(interrupt_handler_t)'
          while(ST25DV_GPO_interrupt_init(&gpo_handler) != NFCTAG_OK);

          jsulmJ Offline
          jsulmJ Offline
          jsulm
          Lifetime Qt Champion
          wrote on last edited by
          #6

          @Qt-embedded-developer It looks like the interrupt handler takes an int32_t parameter.
          Check the interrupt_handler_t data type.

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          JonBJ Q 2 Replies Last reply
          0
          • jsulmJ jsulm

            @Qt-embedded-developer It looks like the interrupt handler takes an int32_t parameter.
            Check the interrupt_handler_t data type.

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #7

            @jsulm
            From the error message (aka void ()()) and from looking at definitions of interrupt_handler_t on the web I do not think that is so. It seems to be

            typedef void @far (*interrupt_handler_t)(void);
            

            This is beyond my expertise of C++ now, but is there a problem with passing a C++ member function here??

            jsulmJ 1 Reply Last reply
            0
            • JonBJ JonB

              @jsulm
              From the error message (aka void ()()) and from looking at definitions of interrupt_handler_t on the web I do not think that is so. It seems to be

              typedef void @far (*interrupt_handler_t)(void);
              

              This is beyond my expertise of C++ now, but is there a problem with passing a C++ member function here??

              jsulmJ Offline
              jsulmJ Offline
              jsulm
              Lifetime Qt Champion
              wrote on last edited by
              #8

              @JonB @Qt-embedded-developer I don't think a method can be used here as interrupt handler. @Qt-embedded-developer use a normal function and call your MainWindow there (also, it is strange that MainWindow handles interrupts).

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • jsulmJ jsulm

                @Qt-embedded-developer It looks like the interrupt handler takes an int32_t parameter.
                Check the interrupt_handler_t data type.

                Q Offline
                Q Offline
                Qt embedded developer
                wrote on last edited by
                #9

                @jsulm said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                interrupt_handler_t

                This 3 thing is related to your question and my 2nd error.

                1] in source.h
                static interrupt_handler_t interrupt_handler;

                2] in source.c
                typedef void (*interrupt_handler_t)(void) ;

                3] in source.c

                int32_t ST25DV_GPO_interrupt_init(interrupt_handler_t fh)
                {
                    pthread_t intr_thread;
                    struct sched_param params;
                    int ret;
                
                    if(fh == NULL)
                    {
                        fprintf(stderr,"Handler is not set\r\n");
                        return ERR_PARAM;
                    }
                    interrupt_handler = fh;
                
                    /* create a pthread to poll for interrupt */
                    ret = pthread_create(&intr_thread, NULL, ST25DV_GPO_pthread_func, NULL);
                    if (ret) {
                        fprintf(stderr, "Error: poll thread creation %d\r\n", ret);
                        return ERR_IO;
                    }
                
                    /* Assign highest priority to polling thread */
                    params.sched_priority = sched_get_priority_max(SCHED_FIFO);
                    ret = pthread_setschedparam(intr_thread, SCHED_FIFO, &params);
                    if (ret) {
                        fprintf(stderr,"Error: assigning high priority to polling thread\r\n");
                        return ERR_IO;
                    }
                
                    return ERR_NONE;
                }
                
                jsulmJ 1 Reply Last reply
                0
                • Q Qt embedded developer

                  @jsulm said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                  interrupt_handler_t

                  This 3 thing is related to your question and my 2nd error.

                  1] in source.h
                  static interrupt_handler_t interrupt_handler;

                  2] in source.c
                  typedef void (*interrupt_handler_t)(void) ;

                  3] in source.c

                  int32_t ST25DV_GPO_interrupt_init(interrupt_handler_t fh)
                  {
                      pthread_t intr_thread;
                      struct sched_param params;
                      int ret;
                  
                      if(fh == NULL)
                      {
                          fprintf(stderr,"Handler is not set\r\n");
                          return ERR_PARAM;
                      }
                      interrupt_handler = fh;
                  
                      /* create a pthread to poll for interrupt */
                      ret = pthread_create(&intr_thread, NULL, ST25DV_GPO_pthread_func, NULL);
                      if (ret) {
                          fprintf(stderr, "Error: poll thread creation %d\r\n", ret);
                          return ERR_IO;
                      }
                  
                      /* Assign highest priority to polling thread */
                      params.sched_priority = sched_get_priority_max(SCHED_FIFO);
                      ret = pthread_setschedparam(intr_thread, SCHED_FIFO, &params);
                      if (ret) {
                          fprintf(stderr,"Error: assigning high priority to polling thread\r\n");
                          return ERR_IO;
                      }
                  
                      return ERR_NONE;
                  }
                  
                  jsulmJ Offline
                  jsulmJ Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on last edited by
                  #10

                  @Qt-embedded-developer said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                  typedef void (*interrupt_handler_t)(void) ;

                  This is a function pointer type, not a pointer to a method, so you can't use a method as interrupt handler. Use a normal function.

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  JonBJ 1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @Qt-embedded-developer said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                    typedef void (*interrupt_handler_t)(void) ;

                    This is a function pointer type, not a pointer to a method, so you can't use a method as interrupt handler. Use a normal function.

                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by JonB
                    #11

                    @jsulm said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                    This is a function pointer type, not a pointer to a method

                    This is kind of what I thought/asked you.

                    I am not familiar with this distinction between "a function pointer type" versus "a pointer to a method". Could you explain, or point me to a description, please?

                    EDIT
                    Ah, is this to do with class (non-static) method will need an instance and of course that is not appropriate here?

                    jsulmJ 2 Replies Last reply
                    0
                    • JonBJ JonB

                      @jsulm said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                      This is a function pointer type, not a pointer to a method

                      This is kind of what I thought/asked you.

                      I am not familiar with this distinction between "a function pointer type" versus "a pointer to a method". Could you explain, or point me to a description, please?

                      EDIT
                      Ah, is this to do with class (non-static) method will need an instance and of course that is not appropriate here?

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by jsulm
                      #12

                      @JonB Well, method pointers are funny:

                      typedef void (MainWindow::*MethodPointer)();
                      MethodPointer p = &MainWindow::doSomething;
                      // Calling
                      (this->*p)();
                      

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      JonBJ 1 Reply Last reply
                      0
                      • JonBJ JonB

                        @jsulm said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                        This is a function pointer type, not a pointer to a method

                        This is kind of what I thought/asked you.

                        I am not familiar with this distinction between "a function pointer type" versus "a pointer to a method". Could you explain, or point me to a description, please?

                        EDIT
                        Ah, is this to do with class (non-static) method will need an instance and of course that is not appropriate here?

                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #13

                        @JonB said in why when implement interrupt handler in qt give beolw error ? How to resolve it ?:

                        Ah, is this to do with class (non-static) method will need an instance and of course that is not appropriate here?

                        Yes, you need an instance.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        1 Reply Last reply
                        0
                        • jsulmJ jsulm

                          @JonB Well, method pointers are funny:

                          typedef void (MainWindow::*MethodPointer)();
                          MethodPointer p = &MainWindow::doSomething;
                          // Calling
                          (this->*p)();
                          
                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by JonB
                          #14

                          @jsulm
                          I did a Google and came up with https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types

                          Is the type of “pointer-to-member-function” different from “pointer-to-function”?
                          Yep.

                          Consider the following function:

                          int f(char a, float b);
                          The type of this function is different depending on whether it is an ordinary function or a non-static member function of some class:

                          Its type is “int ()(char,float)” if an ordinary function
                          Its type is “int (Fred::
                          )(char,float)” if a non-static member function of class Fred
                          Note: if it’s a static member function of class Fred, its type is the same as if it were an ordinary function: “int (*)(char,float)”.

                          Separately:

                          Yes, you need an instance.

                          Yes, that's kind of a different issue, in that it's not going to work anyway for the OP. But I was concentrating on the compiler error message.

                          Q 1 Reply Last reply
                          0
                          • JonBJ JonB

                            @jsulm
                            I did a Google and came up with https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types

                            Is the type of “pointer-to-member-function” different from “pointer-to-function”?
                            Yep.

                            Consider the following function:

                            int f(char a, float b);
                            The type of this function is different depending on whether it is an ordinary function or a non-static member function of some class:

                            Its type is “int ()(char,float)” if an ordinary function
                            Its type is “int (Fred::
                            )(char,float)” if a non-static member function of class Fred
                            Note: if it’s a static member function of class Fred, its type is the same as if it were an ordinary function: “int (*)(char,float)”.

                            Separately:

                            Yes, you need an instance.

                            Yes, that's kind of a different issue, in that it's not going to work anyway for the OP. But I was concentrating on the compiler error message.

                            Q Offline
                            Q Offline
                            Qt embedded developer
                            wrote on last edited by
                            #15

                            @JonB So How to implement the interrupt handler for any i2c device using qt ?

                            jsulmJ 1 Reply Last reply
                            0
                            • Q Qt embedded developer

                              @JonB So How to implement the interrupt handler for any i2c device using qt ?

                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #16

                              @Qt-embedded-developer Use a normal function as interrupt handler, not a method in a class. In that function you can then call methods of your class if you need to do so.

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              1 Reply Last reply
                              1

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt
                              • Unsolved