Casting a struct member between uint8_t and char, with regard to serial transfer
You're actually falling into a common problem with pointers in structs.

This structure:

struct SEND_DATA_STRUCTURE
{
  int blinks;
  int pause;

  uint8_t *data;
};


contains three values: blinks, pause and a pointer to the data.

uint8_t *data;


That doesn't contain the data. That only contains the address that the data is stored at in memory.  When you transfer the struct it's that address that you are sending - then when the other end tries to print it all it can do is look at the address it's been told about and try and print whatever is in there - and that is complete garbage.

Instead of storing a pointer to the data you need to store the actual data itself. That means that you need to decide upon a maximum size for that data and pre-allocate the memory within the struct:

#define DATA_SIZE 40

struct SEND_DATA_STRUCTURE
{
  int blinks;
  int pause;

  uint8_t data[DATA_SIZE];
};


Now in order to get the data into that struct you need to fill that array with your payload. For strings the simplest way is:

strncpy((char *)mydata.data, payload, DATA_SIZE);


That will copy up to DATA_SIZE characters from payload into mydata.data.

Note that if payload contains more than DATA_SIZE-1 characters the data in mydata.data will not be NULL terminated. You can get round that by forcing NULL termination:

mydata.data[DATA_SIZE-1] = 0;




In your revised code your payload size is too big. The way the EasyTransfer library works is it has a single byte for the size of the payload. Your total payload size is PAYLOAD_SIZE + 2 ints - that is 255 + 2 + 2 = 259 bytes.  Placed into a single byte that gets truncated to 3. That means you are actually transferring one and a half integers and nothing else.

You need to ensure that your entire struct never exceeds 255 bytes. So you can have a maximum size of data, once you have taken your two integers into account (assuming 16-bit integers on an 8-bit Arduino), of 251 bytes.