Função callback MQTT. Posso usar mais de uma vez no mesmo programa?

#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>

// Update these with values suitable for your network.
byte mac[]    = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(172, 16, 0, 100);
IPAddress server(172, 16, 0, 2);

// Callback function header
void callback(char* topic, byte* payload, unsigned int length);

EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);

// Callback function
void callback(char* topic, byte* payload, unsigned int length) {
  // In order to republish this payload, a copy must be made
  // as the orignal payload buffer will be overwritten whilst
  // constructing the PUBLISH packet.

  // Allocate the correct amount of memory for the payload copy
  byte* p = (byte*)malloc(length);
  // Copy the payload to the new buffer
  memcpy(p,payload,length);
  client.publish("outTopic", p, length);
  // Free the memory
  free(p);
}

void setup()
{

  Ethernet.begin(mac, ip);
  if (client.connect("arduinoClient")) {
    client.publish("outTopic","hello world");
    client.subscribe("inTopic");
  }
}

void loop()
{
  client.loop();
}

Esse código refere-se à função callback utilizada no protocolo MQTT. Mais epecificamente na biblioteca
PubSubClient.h

Alguém pode me informar se é possível ter mais de um callback no mesmo programa?
Ou seja, um callback para cada tópico que eu desejar. Fiz um programa utilizando 2 callbacks, mas notei que somente o último declarado funcionou. Será que não que não existe essa possibilidade ou foi um erro meu?

Se é possível, podem me dar um exemplo?

Boas Apenas podes ter uma funçao de callback, o segredo é filtrares o topico que eventualmente tenhas subscrito e atuares de acordo com isso.Vejamos:

void callback(char* topic, byte* payload, unsigned int length) {
if (strcmp(topic,"pir1Status")==0)
  // whatever you want for this topic
}

No teu codigo subscreveste varios topicos:

    client.subscribe("topic1");
    client.subscribe("topic2");
    client.subscribe("topicX");
    client.subscribe("topicY");

Nota que o callback recebe como parametro um ponteiro para o topico logo dentro do callback consegues filtar e actuar usando algo :

void callback(char* topic, byte* payload, unsigned int length) {
  if (strcmp(topic,"topic1")==0){
    // Faz algo ..
  }

  if (strcmp(topic,"topic2")==0) {
     // Faz algo ..
  }

  if (strcmp(topic,"topicX")==0) {
     // Faz algo ..
  }  

  if (strcmp(topic,"topicY")==0) {
     // Faz algo ..
  }  
}

Espero que te ajude. Bons estudos

Entendi. Muito Obrigado Hugo.