ESOS32
ESOSOn32-bitProcessors
Files | Data Structures | Macros | Typedefs | Functions | Variables
ESOS_Task_Mail_Service

Files

file  esos_mail.h
 

Data Structures

struct  __stMAILBOX
 
struct  __stMAILMESSAGE
 

Macros

#define __MAIL_MSG_MAX_DATA_LEN   16
 
#define ESOS_MAILMESSAGE_STRING   0x0
 
#define ESOS_MAILMESSAGE_UINT8   0x1
 
#define ESOS_MAILMESSAGE_UINT16   0x2
 
#define ESOS_MAILMESSAGE_UINT32   0x4
 
#define ESOS_MAILMESSAGE_REQUEST_ACK   0x8
 
#define __MAIL_MSG_HEADER_LEN   (1+2+1+4)
 
#define __MAIL_MSG_MAX_LEN   (__MAIL_MSG_HEADER_LEN+__MAIL_MSG_MAX_DATA_LEN)
 
#define MAX_SIZE_TASK_MAILBOX   5*__MAIL_MSG_MAX_LEN
 
#define ESOS_TASK_HAS_MAIL(pstTask)
 
#define ESOS_TASK_IS_WAITING_MAIL_DELIVERY(TaskHandle)
 
#define ESOS_TASK_IVE_GOT_MAIL()
 
#define ESOS_TASK_WAIT_FOR_MAIL()
 
#define ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_AT_LEAST(pstTask, x)
 
#define ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_ROOM_MESSAGE(pstTask, pstMsg)
 
#define ESOS_TASK_MAILBOX_GET_AVAILABLE_LEN(pstTask)
 
#define ESOS_TASK_MAILBOX_GOT_EXACTLY_DATA_BYTES(pstTask, x)
 
#define ESOS_TASK_MAILBOX_GOT_AT_LEAST_DATA_BYTES(pstTask, x)
 
#define ESOS_TASK_FLUSH_TASK_MAILBOX(pstTask)
 
#define ESOS_TASK_SEND_MESSAGE(pst_ToTask, pst_Msg)   __esos_SendMailMessage((pst_ToTask),(pst_Msg))
 
#define ESOS_TASK_SEND_MESSAGE_WAIT_DELIVERY(pst_ToTask, pstMsg)   ESOS_TASK_WAIT_ON_DELIVERY((pst_ToTask), (pstMsg))
 
#define ESOS_TASK_WAIT_ON_DELIVERY(pst_ToTask, pstMsg)
 
#define ESOS_TASK_GET_NEXT_MESSAGE(pst_Msg)   __esos_ReadMailMessage(__pstSelf, (pst_Msg))
 
#define ESOS_TASK_GET_LAST_MESSAGE(pst_Msg)
 
#define ESOS_IS_TASK_SENDER(hTask, stMsg)   (hTask->u16_taskID==stMsg.u16_FromTaskID)
 
#define ESOS_SET_MSG_FLAGS(stMsg, flags)   stMsg.u8_flags=(flags)
 
#define ESOS_SET_MSG_FROMTASK(stMsg, pstFromTask)   stMsg.u16_FromTaskID=pstFromTask->u16_taskID
 
#define ESOS_SET_MSG_DATA_LENGTH(stMsg, len)   stMsg.u8_DataLength=(len)
 
#define ESOS_GET_MSG_FLAGS(stMsg)   (stMsg.u8_flags)
 
#define ESOS_GET_MSG_FROMTASK(stMsg)   (stMsg.u16_FromTaskID)
 
#define ESOS_GET_MSG_DATA_LENGTH(stMsg)   (stMsg.u8_DataLength)
 
#define ESOS_GET_MSG_POSTMARK(stMsg)   (stMsg.u32_Postmark)
 
#define ESOS_SET_PMSG_FLAGS(pstMsg, flags)   pstMsg->u8_flags=(flags)
 
#define ESOS_SET_PMSG_FROMTASK(pstMsg, pstFromTask)   pstMsg->u16_FromTaskID=pstFromTask->u16_taskID
 
#define ESOS_SET_PMSG_DATA_LENGTH(pstMsg, len)   pstMsg->u8_DataLength=(len)
 
#define ESOS_GET_PMSG_FLAGS(pstMsg)   (pstMsg->u8_flags)
 
#define ESOS_GET_PMSG_FROMTASK(pstMsg)   (pstMsg->u16_FromTaskID)
 
#define ESOS_GET_PMSG_DATA_LENGTH(pstMsg)   (pstMsg->u8_DataLength)
 
#define ESOS_GET_PMSG_POSTMARK(pstMsg)   (pstMsg->u32_Postmark)
 
#define ESOS_TASK_MAKE_MSG_EMPTY(stMsg)
 
#define ESOS_TASK_MAKE_MSG_UINT8(stMsg, u8x)
 
#define ESOS_TASK_MAKE_MSG_UINT8_X2(stMsg, u8x0, u8x1)
 
#define ESOS_TASK_MAKE_MSG_UINT8_X3(stMsg, u8x0, u8x1, u8x2)
 
#define ESOS_TASK_MAKE_MSG_UINT8_X4(stMsg, u8x0, u8x1, u8x2, u8x3)
 
#define ESOS_TASK_MAKE_MSG_AUINT8(stMsg, pau8x, len)
 
#define ESOS_TASK_MAKE_MSG_UINT16(stMsg, u16x)
 
#define ESOS_TASK_MAKE_MSG_UINT16_X2(stMsg, u16x0, u16x1)
 
#define ESOS_TASK_MAKE_MSG_UINT16_X3(stMsg, u16x0, u16x1, u16x2)
 
#define ESOS_TASK_MAKE_MSG_UINT16_X4(stMsg, u16x0, u16x1, u16x2, u16x3)
 
#define ESOS_TASK_MAKE_MSG_UINT32(stMsg, u32x)
 
#define ESOS_TASK_MAKE_MSG_UINT32_X2(stMsg, u32x0, u32x1)
 
#define PRINTF_MESSAGE(stMsg)
 
#define __esos_WriteMailboxUINT8(pstMB, u8x)   __esos_CB_WriteUINT8((pstMB)->pst_CBuffer, (u8x) )
 
#define __esos_ReadMailboxUINT8(pstMB, u8x)   __esos_CB_ReadUINT8((pstMB)->pst_CBuffer )
 

Typedefs

typedef struct __stMAILBOX MAILBOX
 
typedef struct __stMAILMESSAGE MAILMESSAGE
 

Functions

void __esos_InitMailbox (MAILBOX *pst_Mailbox, uint8_t *pau8_ptr)
 
void __esos_SendMailUint8 (struct stTask *pst_Task, MAILBOX *pst_Mailbox, uint8_t *pau8_data, uint8_t u8_len)
 
void __esos_ReadMailMessage (struct stTask *pst_Task, MAILMESSAGE *pst_Message)
 
void __esos_SendMailMessage (struct stTask *pst_RcvrTask, MAILMESSAGE *pst_Msg)
 

Variables

MAILBOX __astMailbox [MAX_NUM_USER_TASKS]
 
uint8_t __au8_MBData [MAX_NUM_USER_TASKS][MAX_SIZE_TASK_MAILBOX]
 
uint8_t __u8_esos_mail_routines_dummy_uint8
 

Detailed Description

Macro Definition Documentation

◆ __MAIL_MSG_MAX_DATA_LEN

#define __MAIL_MSG_MAX_DATA_LEN   16

structure to contain a mail message "envelope" – a set of descriptors about a mail message and the contents within

Definition at line 78 of file esos_mail.h.

◆ ESOS_TASK_FLUSH_TASK_MAILBOX

#define ESOS_TASK_FLUSH_TASK_MAILBOX (   pstTask)

Flushes the specified task's mailbox contents. All unread data in the mailbox will be lost.

Parameters
pstTaskpointer to task structure (ESOS_TASK_HANDLE) whose mailbox will be flushed
Note
Use this function only if you want to reset some task's mailbox back to its empty state.
Not really sure why any task would call this except possibly on its own mailbox, e.g. the argument pstTask would be __pstSelf.

Definition at line 228 of file esos_mail.h.

◆ ESOS_TASK_GET_LAST_MESSAGE

#define ESOS_TASK_GET_LAST_MESSAGE (   pst_Msg)
Value:
do { \
while ( ESOS_TASK_IVE_GOT_MAIL() ) { \
__esos_ReadMailMessage(__pstSelf, (pst_Msg) ); \
} \
}while(0)

Definition at line 244 of file esos_mail.h.

◆ ESOS_TASK_HAS_MAIL

#define ESOS_TASK_HAS_MAIL (   pstTask)

Determines if a task has mail ready to be read/consumed.

Parameters
pstTaskA pointer to the ESOS_TASK_HANDLE of the task being queried
See also
ESOS_TASK_GET_TASK_HANDLE

Definition at line 117 of file esos_mail.h.

◆ ESOS_TASK_IS_WAITING_MAIL_DELIVERY

#define ESOS_TASK_IS_WAITING_MAIL_DELIVERY (   TaskHandle)

Determines if a task is waiting on an acknowledgment from another task reading its mail... a.k.a. "signature confirmation" or "delivery confirmation"

Parameters
TaskHandleThe ESOS_TASK_HANDLE of the task being queried
See also
ESOS_TASK_GET_TASK_HANDLE

Definition at line 127 of file esos_mail.h.

◆ ESOS_TASK_IVE_GOT_MAIL

#define ESOS_TASK_IVE_GOT_MAIL ( )

Determines if the current task has mail to be read

Returns TRUE if the current task has mail ready to be read. else it returns FALSE.

See also
ESOS_TASK_HAS_MAIL

Definition at line 139 of file esos_mail.h.

◆ ESOS_TASK_MAILBOX_GET_AVAILABLE_LEN

#define ESOS_TASK_MAILBOX_GET_AVAILABLE_LEN (   pstTask)

Evaluates to the number of bytes available in the mailbox association with an arbitrary task pstTask

Parameters
pstTaskpointer to task structure
Return values
Nnumber of bytes available for writing in task's mailbox

Definition at line 189 of file esos_mail.h.

◆ ESOS_TASK_MAILBOX_GOT_AT_LEAST_DATA_BYTES

#define ESOS_TASK_MAILBOX_GOT_AT_LEAST_DATA_BYTES (   pstTask,
 
)

Evaluates to the booelan to determine if the specified task's mailbox has at least x bytes available for holding messages

Parameters
pstTaskpointer to task structure (ESOS_TASK_HANDLE)
xnumber of bytes to check for
Return values
TRUEif task's mailbox has x bytes or more
FALSEotherwise

Definition at line 214 of file esos_mail.h.

◆ ESOS_TASK_MAILBOX_GOT_EXACTLY_DATA_BYTES

#define ESOS_TASK_MAILBOX_GOT_EXACTLY_DATA_BYTES (   pstTask,
 
)

Evaluates to the booelan to determine if the specified task's mailbox has exactly x bytes available for holding messages

Parameters
pstTaskpointer to task structure (ESOS_TASK_HANDLE)
xnumber of bytes to check for
Return values
TRUEif task's mailbox has exactly x bytes
FALSEotherwise

Definition at line 201 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_AUINT8

#define ESOS_TASK_MAKE_MSG_AUINT8 (   stMsg,
  pau8x,
  len 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, len); \
for (__u8_esos_mail_routines_dummy_uint8=0; __u8_esos_mail_routines_dummy_uint8<len; __u8_esos_mail_routines_dummy_uint8++) { \
stMsg.au8_Contents[__u8_esos_mail_routines_dummy_uint8] = pau8x[__u8_esos_mail_routines_dummy_uint8]; \
} \
} while(0)

Definition at line 317 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_EMPTY

#define ESOS_TASK_MAKE_MSG_EMPTY (   stMsg)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 0); \
} while(0)

Definition at line 272 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT16

#define ESOS_TASK_MAKE_MSG_UINT16 (   stMsg,
  u16x 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 1); \
stMsg.au16_Contents[0] = (u16x); \
} while(0)

Definition at line 327 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT16_X2

#define ESOS_TASK_MAKE_MSG_UINT16_X2 (   stMsg,
  u16x0,
  u16x1 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 2); \
stMsg.au16_Contents[0] = (u16x0); \
stMsg.au16_Contents[1] = (u16x1); \
} while(0)

Definition at line 335 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT16_X3

#define ESOS_TASK_MAKE_MSG_UINT16_X3 (   stMsg,
  u16x0,
  u16x1,
  u16x2 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 3); \
stMsg.au16_Contents[0] = (u16x0); \
stMsg.au16_Contents[1] = (u16x1); \
stMsg.au16_Contents[2] = (u16x2); \
} while(0)

Definition at line 344 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT16_X4

#define ESOS_TASK_MAKE_MSG_UINT16_X4 (   stMsg,
  u16x0,
  u16x1,
  u16x2,
  u16x3 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 4); \
stMsg.au16_Contents[0] = (u16x0); \
stMsg.au16_Contents[1] = (u16x1); \
stMsg.au16_Contents[2] = (u16x2); \
stMsg.au16_Contents[3] = (u16x3); \
} while(0)

Definition at line 354 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT32

#define ESOS_TASK_MAKE_MSG_UINT32 (   stMsg,
  u32x 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT32); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 1); \
stMsg.au32_Contents[0] = (u32x); \
} while(0)

Definition at line 365 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT32_X2

#define ESOS_TASK_MAKE_MSG_UINT32_X2 (   stMsg,
  u32x0,
  u32x1 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT32); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 2); \
stMsg.au32_Contents[0] = (u32x0); \
stMsg.au32_Contents[1] = (u32x1); \
} while(0)

Definition at line 373 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT8

#define ESOS_TASK_MAKE_MSG_UINT8 (   stMsg,
  u8x 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 1); \
stMsg.au8_Contents[0] = (u8x); \
} while(0)

Definition at line 279 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT8_X2

#define ESOS_TASK_MAKE_MSG_UINT8_X2 (   stMsg,
  u8x0,
  u8x1 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 2); \
stMsg.au8_Contents[0] = (u8x0); \
stMsg.au8_Contents[1] = (u8x1); \
} while(0)

Definition at line 287 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT8_X3

#define ESOS_TASK_MAKE_MSG_UINT8_X3 (   stMsg,
  u8x0,
  u8x1,
  u8x2 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 3); \
stMsg.au8_Contents[0] = (u8x0); \
stMsg.au8_Contents[1] = (u8x1); \
stMsg.au8_Contents[2] = (u8x2); \
} while(0)

Definition at line 296 of file esos_mail.h.

◆ ESOS_TASK_MAKE_MSG_UINT8_X4

#define ESOS_TASK_MAKE_MSG_UINT8_X4 (   stMsg,
  u8x0,
  u8x1,
  u8x2,
  u8x3 
)
Value:
do{ \
ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8); \
ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \
ESOS_SET_MSG_DATA_LENGTH(stMsg, 4); \
stMsg.au8_Contents[0] = (u8x0); \
stMsg.au8_Contents[1] = (u8x1); \
stMsg.au8_Contents[2] = (u8x2); \
stMsg.au8_Contents[3] = (u8x3); \
} while(0)

Definition at line 306 of file esos_mail.h.

◆ ESOS_TASK_WAIT_FOR_MAIL

#define ESOS_TASK_WAIT_FOR_MAIL ( )

Blocks the current task until a mailbox message has arrived

This function blocks and waits until the task has a message in its mailbox.

Definition at line 148 of file esos_mail.h.

◆ ESOS_TASK_WAIT_ON_DELIVERY

#define ESOS_TASK_WAIT_ON_DELIVERY (   pst_ToTask,
  pstMsg 
)
Value:
do{ \
(pstMsg)->u8_flags |= ESOS_MAILMESSAGE_REQUEST_ACK; \
ESOS_TASK_SEND_MESSAGE((pst_ToTask),(pstMsg)); \
__ESOS_SET_TASK_MAILNACK_FLAG((__pstSelf)); \
ESOS_TASK_WAIT_WHILE( ESOS_TASK_IS_WAITING_MAIL_DELIVERY( __pstSelf ) ); \
} while(0)

Definition at line 234 of file esos_mail.h.

◆ ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_AT_LEAST

#define ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_AT_LEAST (   pstTask,
 
)

Block current task until the specified task's mailbox has at least x bytes available for holding messages

Parameters
pstTaskpointer to task structure (ESOS_TASK_HANDLE)
xnumber of bytes to check for
Return values
TRUEif task's mailbox has x bytes or more
FALSEotherwise

Definition at line 162 of file esos_mail.h.

◆ ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_ROOM_MESSAGE

#define ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_ROOM_MESSAGE (   pstTask,
  pstMsg 
)

Block the current task until the specified recipient task mailbox has room for the specified message

Parameters
pstTaskpointer to task structure (ESOS_TASK_HANDLE)
pstMsgmessage for which room must be found
Return values
TRUEif task's mailbox has x bytes or more;
FALSEotherwise
Todo:
BRAIN-DEAD implementation. needs to properly parse the message header and computer the data payload size. A bit harder than it first appears

Definition at line 178 of file esos_mail.h.

◆ PRINTF_MESSAGE

#define PRINTF_MESSAGE (   stMsg)
Value:
do{ \
printf("MESSAGE u8_flags = %02X\n",ESOS_GET_MSG_FLAGS(stMsg) ); \
printf(" u16_FromTaskID = %d\n",ESOS_GET_MSG_FROMTASK(stMsg) ); \
printf(" u8_DataLength = %d\n",ESOS_GET_MSG_DATA_LENGTH(stMsg) ); \
printf(" u32_PostMark = %d\n",ESOS_GET_MSG_POSTMARK(stMsg) ); \
printf(" first byte = %d\n",stMsg.au8_Contents[0]); \
} while(0)

Definition at line 383 of file esos_mail.h.

Typedef Documentation

◆ MAILBOX

typedef struct __stMAILBOX MAILBOX

structure to contain a set of descriptors about the buffers used to implement ESOS task mailboxes

Function Documentation

◆ __esos_SendMailUint8()

void __esos_SendMailUint8 ( struct stTask pst_Task,
MAILBOX pst_Mailbox,
uint8_t *  pau8_data,
uint8_t  u8_len 
)

Writes a mail message into some task's mailbox

Parameters
pst_Taskhandle tretval verNum Version number. Exact value and meaning depends on hardware
pst_MailboxPointer to struct instance of MAILBOX.
pau8_dataPointer to mail data to send.
u8_lenLocal instance of length of message.
ESOS_TASK_IS_WAITING_MAIL_DELIVERY
#define ESOS_TASK_IS_WAITING_MAIL_DELIVERY(TaskHandle)
Definition: esos_mail.h:127
ESOS_TASK_IVE_GOT_MAIL
#define ESOS_TASK_IVE_GOT_MAIL()
Definition: esos_mail.h:139