// // Created by xemon on 21.04.2022. // #ifndef XFCTRANSPORTPROTOCOLPROCESSORDEFINES_H #define XFCTRANSPORTPROTOCOLPROCESSORDEFINES_H #include #include "XfcProtProcessor.h" #include #include "stddef.h" ////Defines for read/write operations inside Packet Processor //#define XFC_CMD_TX_SET_CODE(CODE) *response->fields.id = CODE; #define XFC_CMD_TX_OVERFLOW() XfcArrayClear(response); return XFC_TRANSPORT_PROTOCOL_RESPONSE_RESULT_CMD_OVERFLOW; #define XFC_CMD_RX_CUTOFF() XfcArrayClear(response); return XFC_TRANSPORT_PROTOCOL_REQUEST_UNEXPECTEDLY_SHORT; #define XFC_CMD_TX_ADD_WITH_OVERFLOW_CHECK(DATA, LEN) \ if(XfcArrayAddBytes(response,DATA, LEN)!=LEN){ XFC_CMD_TX_OVERFLOW()}; #define XFC_CMD_RX_GET_WITH_CUTOFF_CHECK(DATA, LEN) \ if(XfcArrayGetBytesFront(request,DATA, LEN)!=LEN){ XFC_CMD_RX_CUTOFF()}; #define XFC_CMD_TX_ADD_STR(str) XFC_CMD_TX_ADD_WITH_OVERFLOW_CHECK((uint8_t*)str, sizeof(str)-1) #define XFC_CMD_TX_ADD_STROBJ(str) XFC_CMD_TX_ADD_WITH_OVERFLOW_CHECK(str->data, str->length) #define XFC_CMD_TX_ADD_RAW(obj) XFC_CMD_TX_ADD_WITH_OVERFLOW_CHECK((uint8_t*)&obj, sizeof(obj)) #define XFC_CMD_TX_ADD_ARR(arr, len) XFC_CMD_TX_ADD_WITH_OVERFLOW_CHECK((uint8_t*)arr, len) #define XFC_CMD_TX_ADD_STRLINK(str) XFC_CMD_TX_ADD_RAW( *(str).length) XFC_CMD_TX_ADD_ARR((str).data, *(str).length) #define XFC_CMD_TX_ADD_PSTR(str) {uint8_t len = sizeof(str)-1; XFC_CMD_TX_ADD_RAW(len); XFC_CMD_TX_ADD_STR(str);} #define XFC_CMD_RX_GET_STR(str) XFC_CMD_RX_GET_WITH_CUTOFF_CHECK((uint8_t*)str, sizeof(str)) #define XFC_CMD_RX_GET_RAW(obj) XFC_CMD_RX_GET_WITH_CUTOFF_CHECK((uint8_t*)&obj, sizeof(obj)) #define XFC_CMD_RX_GET_ARR(arr, len) XFC_CMD_RX_GET_WITH_CUTOFF_CHECK((uint8_t*)arr, len) //XFC_REQUEST_PROCESSOR_DIRECT #define XFC_REQPROC_DIR(CODE, METHOD) [CODE]={.id=CODE, .process=METHOD} #endif //XFCTRANSPORTPROTOCOLPROCESSORDEFINES_H