/* * Title: ArduinoComIF.h * Author: Marco Modè * Last version: 24/09/2021 * Project: ESBO-DS * * @ brief: Used to initialize the communication Interface (USB connector, serial port) and * to perform the 4 periodical function described in the DeviceCommunicationIF * (child of DeviceCommunicationIF). * In this case sendMessage, getSendSuccess and requestReceiveMessage are * just returning RETURN_OK. * @ details: The ArduinoComIF is instantiated in the generic factory. * @ ingroup: mission/DeviceHandler *------------------------------------------------------------------------------------------------------------------- * */ #ifndef MISSION_DEVICEHANDLER_ARDUINOCOMIF_H_ #define MISSION_DEVICEHANDLER_ARDUINOCOMIF_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include // Linux headers #include // Contains file controls like O_RDWR #include // Error integer and strerror() function #include // Contains POSIX terminal control definitions #include // write(), read(), close() class ArduinoComIF: public DeviceCommunicationIF, public SystemObject { public: ArduinoComIF(object_id_t objectId); virtual ~ArduinoComIF(); // DeviceCommunicationIF inherited functions. ReturnValue_t initializeInterface(CookieIF *cookie) override; ReturnValue_t sendMessage(CookieIF *cookie, const uint8_t *sendData, size_t sendLen) override; ReturnValue_t getSendSuccess(CookieIF *cookie) override; ReturnValue_t requestReceiveMessage(CookieIF *cookie, size_t requestLen) override; ReturnValue_t readReceivedMessage(CookieIF *cookie, uint8_t **buffer, size_t *size) override; protected: /* The buffer array to store the data read are initialized. * The whole data packet to be read is 2580 bytes, the limit for one reading (VMAX) is 255 bytes. * In order to avoid problems during the acquisition of data in the framework, the buffer is set to * be 3 times the needed dimension: 7740 bytes. * Exploiting then some control loop, the beginning of a full and complete buffer is identified. * Since the acquisition limit for one reading is of 255 bytes, as mentioned above, * the reading is divided in 31 separate stages which employ 31 different buffer array. * At the end these 31 arrays are concatenated in the main buffer array read_buf. */ uint8_t read_buf[7740]; // 7740 bytes from SPC serial output // Intermediate buffers (limit for one single read call is 255 bytes) uint8_t read_buf1[255]; uint8_t read_buf2[255]; uint8_t read_buf3[255]; uint8_t read_buf4[255]; uint8_t read_buf5[255]; uint8_t read_buf6[255]; uint8_t read_buf7[255]; uint8_t read_buf8[255]; uint8_t read_buf9[255]; uint8_t read_buf10[255]; uint8_t read_buf11[255]; uint8_t read_buf12[255]; uint8_t read_buf13[255]; uint8_t read_buf14[255]; uint8_t read_buf15[255]; uint8_t read_buf16[255]; uint8_t read_buf17[255]; uint8_t read_buf18[255]; uint8_t read_buf19[255]; uint8_t read_buf20[255]; uint8_t read_buf21[255]; uint8_t read_buf22[255]; uint8_t read_buf23[255]; uint8_t read_buf24[255]; uint8_t read_buf25[255]; uint8_t read_buf26[255]; uint8_t read_buf27[255]; uint8_t read_buf28[255]; uint8_t read_buf29[255]; uint8_t read_buf30[255]; uint8_t read_buf31[90]; }; #endif /* MISSION_DEVICEHANDLER_ARDUINOCOMIF_H_ */