serialEvent в новом классе

ich
Offline
Зарегистрирован: 10.06.2012

Здравствуйте. У меня имеется вот такой класс:

class Arscom : public HardwareSerial {
public:
  Arscom() : HardwareSerial(Serial){}
  void welcome();
  void setMouseEvent(void (*f)(byte, byte, byte));
  void setQuickEvent(void (*f)(byte*, int));
private:
  void (*mouseEvent)(byte, byte, byte);
  void (*quickEvent)(byte*, int);
};

как мне теперь добавить в мой класс функцию serialEvent? Я хочу чтобы мой класс сам реагировал на события от сериала.

Чтото вроде такого:

void serialEvent() {
  if(Serial.available()){
    welcome();
  }
}

Но я прекрасно знаю что так недзя, нужен объект Arscom для вызывания функции welcome().

Еслия я дапишу так: 

Arscom::serialEvent() {
  if(this->available()){
    this->welcome();
  }
}

то эта функция становится моей, т.е. объекта Arscom не будит вызвана в случае события.

Как мне быть?

ich
Offline
Зарегистрирован: 10.06.2012

Сам задал, сам отвечу. Не канает такое, функцию serialEvent нелзя запихать в свой класс.

Единственная возможнасть спрятать это всё, это создать статичекий объект Arscom в нём создать функцию каторая будит обрабатыватся в serialEvent.

Примкрно так:

#include "Arscom.h"

Arscom comm = Arscom::getInstance();

...
...
...

void setup()  
{
  comm.begin(115200);
  comm.welcome();
  comm.setInvalidEvent(invalidPack);
  comm.setMouseEvent(mousePackEvent);
  comm.setQuickEvent(quickPackEvent);
  comm.setStreamEvent(streamPackEvent);
}

void loop(){}

void serialEvent() {
  comm.onSerialEvent();
}

Только serialEvent не в стартовом классе а например в Arscom.cpp за приделом класса.