62 typedef struct __stMAILBOX {
    64   struct stTask*    pst_Task;                         
    80 #define __MAIL_MSG_MAX_DATA_LEN   16    // can be no BIGGER than 16 bytes    82 typedef struct __stMAILMESSAGE {
    84   uint16_t                            u16_FromTaskID;     
    86   uint32_t                u32_Postmark;     
    97 #define ESOS_MAILMESSAGE_STRING         0x0    98 #define ESOS_MAILMESSAGE_UINT8          0x1    99 #define ESOS_MAILMESSAGE_UINT16         0x2   100 #define ESOS_MAILMESSAGE_UINT32         0x4   101 #define ESOS_MAILMESSAGE_REQUEST_ACK        0x8   104 #define __MAIL_MSG_HEADER_LEN     (1+2+1+4)   105 #define __MAIL_MSG_MAX_LEN      (__MAIL_MSG_HEADER_LEN+__MAIL_MSG_MAX_DATA_LEN)   108 #define MAX_SIZE_TASK_MAILBOX     5*__MAIL_MSG_MAX_LEN   119 #define ESOS_TASK_HAS_MAIL(pstTask)                     (__ESOS_CB_IS_NOT_EMPTY((pstTask)->pst_Mailbox->pst_CBuffer))   129 #define   ESOS_TASK_IS_WAITING_MAIL_DELIVERY(TaskHandle)             IS_BIT_SET_MASK((TaskHandle)->flags, __TASK_MAILNACK_MASK)   141 #define ESOS_TASK_IVE_GOT_MAIL()               ESOS_TASK_HAS_MAIL(__pstSelf)   150 #define ESOS_TASK_WAIT_FOR_MAIL()             ESOS_TASK_WAIT_UNTIL(ESOS_TASK_IVE_GOT_MAIL())   164 #define ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_AT_LEAST(pstTask, x)       ESOS_TASK_WAIT_UNTIL(ESOS_TASK_MAILBOX_GOT_AT_LEAST_DATA_BYTES((pstTask), ((x)+__MAIL_MSG_HEADER_LEN)))   180 #define ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_ROOM_MESSAGE(pstTask, pstMsg)       \   181              ESOS_TASK_WAIT_ON_TASKS_MAILBOX_HAS_AT_LEAST(pstTask, __MAIL_MSG_MAX_DATA_LEN )   191 #define ESOS_TASK_MAILBOX_GET_AVAILABLE_LEN(pstTask)        ((__ESOS_CB_GET_AVAILABLE((pstTask)->pst_Mailbox->pst_CBuffer))-__MAIL_MSG_HEADER_LEN)   203 #define ESOS_TASK_MAILBOX_GOT_EXACTLY_DATA_BYTES(pstTask,x)     (ESOS_TASK_MAILBOX_GET_AVAILABLE_LEN((pstTask)) == ((x)+__MAIL_MSG_HEADER_LEN))   216 #define ESOS_TASK_MAILBOX_GOT_AT_LEAST_DATA_BYTES(pstTask, x)   (ESOS_TASK_MAILBOX_GET_AVAILABLE_LEN((pstTask)) >= ((x)+__MAIL_MSG_HEADER_LEN))   230 #define ESOS_TASK_FLUSH_TASK_MAILBOX(pstTask)             __ESOS_CB_FLUSH((pstTask)->pst_Mailbox->pst_CBuffer)   232 #define ESOS_TASK_SEND_MESSAGE(pst_ToTask, pst_Msg)           __esos_SendMailMessage((pst_ToTask),(pst_Msg))   234 #define ESOS_TASK_WAIT_ON_DELIVERY(pst_ToTask, pstMsg)                               \   236             (pstMsg)->u8_flags |= ESOS_MAILMESSAGE_REQUEST_ACK;                             \   237       ESOS_TASK_SEND_MESSAGE((pst_ToTask),(pstMsg));                    \   238       __ESOS_SET_TASK_MAILNACK_FLAG((__pstSelf));                   \   239       ESOS_TASK_WAIT_WHILE( ESOS_TASK_IS_WAITING_MAIL_DELIVERY( __pstSelf ) );    \   242 #define ESOS_TASK_GET_NEXT_MESSAGE(pst_Msg)                           __esos_ReadMailMessage(__pstSelf, (pst_Msg))   244 #define ESOS_TASK_GET_LAST_MESSAGE(pst_Msg)                                 \   246             while ( ESOS_TASK_IVE_GOT_MAIL() ) {                            \   247                 __esos_ReadMailMessage(__pstSelf, (pst_Msg) );              \   254 #define ESOS_IS_TASK_SENDER(hTask, stMsg)               (hTask->u16_taskID==stMsg.u16_FromTaskID)   256 #define ESOS_SET_MSG_FLAGS(stMsg, flags)          stMsg.u8_flags=(flags)   257 #define ESOS_SET_MSG_FROMTASK(stMsg, pstFromTask)   stMsg.u16_FromTaskID=pstFromTask->u16_taskID   258 #define ESOS_SET_MSG_DATA_LENGTH(stMsg, len)      stMsg.u8_DataLength=(len)   259 #define ESOS_GET_MSG_FLAGS(stMsg)                 (stMsg.u8_flags)   260 #define ESOS_GET_MSG_FROMTASK(stMsg)              (stMsg.u16_FromTaskID)   261 #define ESOS_GET_MSG_DATA_LENGTH(stMsg)           (stMsg.u8_DataLength)   262 #define ESOS_GET_MSG_POSTMARK(stMsg)              (stMsg.u32_Postmark)   264 #define ESOS_SET_PMSG_FLAGS(pstMsg, flags)            pstMsg->u8_flags=(flags)   265 #define ESOS_SET_PMSG_FROMTASK(pstMsg, pstFromTask)   pstMsg->u16_FromTaskID=pstFromTask->u16_taskID   266 #define ESOS_SET_PMSG_DATA_LENGTH(pstMsg, len)      pstMsg->u8_DataLength=(len)   267 #define ESOS_GET_PMSG_FLAGS(pstMsg)                 (pstMsg->u8_flags)   268 #define ESOS_GET_PMSG_FROMTASK(pstMsg)              (pstMsg->u16_FromTaskID)   269 #define ESOS_GET_PMSG_DATA_LENGTH(pstMsg)           (pstMsg->u8_DataLength)   270 #define ESOS_GET_PMSG_POSTMARK(pstMsg)              (pstMsg->u32_Postmark)   272 #define ESOS_TASK_MAKE_MSG_EMPTY(stMsg)               \   274      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8);     \   275      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf);                     \   276      ESOS_SET_MSG_DATA_LENGTH(stMsg, 0);              \   279 #define ESOS_TASK_MAKE_MSG_UINT8(stMsg, u8x)                \   281      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8);     \   282      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   283      ESOS_SET_MSG_DATA_LENGTH(stMsg, 1);                    \   284      stMsg.au8_Contents[0] = (u8x);                           \   287 #define ESOS_TASK_MAKE_MSG_UINT8_X2(stMsg, u8x0, u8x1)      \   289      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8);     \   290      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   291      ESOS_SET_MSG_DATA_LENGTH(stMsg, 2);                    \   292      stMsg.au8_Contents[0] = (u8x0);                          \   293      stMsg.au8_Contents[1] = (u8x1);                          \   296 #define ESOS_TASK_MAKE_MSG_UINT8_X3(stMsg, u8x0, u8x1, u8x2)      \   298      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8);     \   299      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   300      ESOS_SET_MSG_DATA_LENGTH(stMsg, 3);                    \   301      stMsg.au8_Contents[0] = (u8x0);                          \   302      stMsg.au8_Contents[1] = (u8x1);                          \   303      stMsg.au8_Contents[2] = (u8x2);                          \   306 #define ESOS_TASK_MAKE_MSG_UINT8_X4(stMsg, u8x0, u8x1, u8x2, u8x3)      \   308      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8);     \   309      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   310      ESOS_SET_MSG_DATA_LENGTH(stMsg, 4);                    \   311      stMsg.au8_Contents[0] = (u8x0);                          \   312      stMsg.au8_Contents[1] = (u8x1);                          \   313      stMsg.au8_Contents[2] = (u8x2);                          \   314      stMsg.au8_Contents[3] = (u8x3);                          \   317 #define ESOS_TASK_MAKE_MSG_AUINT8(stMsg, pau8x, len)        \   319      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT8);     \   320      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   321      ESOS_SET_MSG_DATA_LENGTH(stMsg, len);                    \   322      for (__u8_esos_mail_routines_dummy_uint8=0; __u8_esos_mail_routines_dummy_uint8<len; __u8_esos_mail_routines_dummy_uint8++) {      \   323        stMsg.au8_Contents[__u8_esos_mail_routines_dummy_uint8] = pau8x[__u8_esos_mail_routines_dummy_uint8];                             \   327 #define ESOS_TASK_MAKE_MSG_UINT16(stMsg, u16x)              \   329      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16);      \   330      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   331      ESOS_SET_MSG_DATA_LENGTH(stMsg, 1);                    \   332      stMsg.au16_Contents[0] = (u16x);                         \   335 #define ESOS_TASK_MAKE_MSG_UINT16_X2(stMsg, u16x0, u16x1)   \   337      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16);      \   338      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   339      ESOS_SET_MSG_DATA_LENGTH(stMsg, 2);                    \   340      stMsg.au16_Contents[0] = (u16x0);                        \   341      stMsg.au16_Contents[1] = (u16x1);                        \   344 #define ESOS_TASK_MAKE_MSG_UINT16_X3(stMsg, u16x0, u16x1, u16x2)    \   346      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16);      \   347      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   348      ESOS_SET_MSG_DATA_LENGTH(stMsg, 3);                    \   349      stMsg.au16_Contents[0] = (u16x0);                        \   350      stMsg.au16_Contents[1] = (u16x1);                        \   351      stMsg.au16_Contents[2] = (u16x2);                        \   354 #define ESOS_TASK_MAKE_MSG_UINT16_X4(stMsg, u16x0, u16x1, u16x2, u16x3)   \   356      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT16);      \   357      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   358      ESOS_SET_MSG_DATA_LENGTH(stMsg, 4);                    \   359      stMsg.au16_Contents[0] = (u16x0);                        \   360      stMsg.au16_Contents[1] = (u16x1);                        \   361      stMsg.au16_Contents[2] = (u16x2);                        \   362      stMsg.au16_Contents[3] = (u16x3);                        \   365 #define ESOS_TASK_MAKE_MSG_UINT32(stMsg, u32x)              \   367      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT32);      \   368      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   369      ESOS_SET_MSG_DATA_LENGTH(stMsg, 1);                    \   370      stMsg.au32_Contents[0] = (u32x);                         \   373 #define ESOS_TASK_MAKE_MSG_UINT32_X2(stMsg, u32x0, u32x1)   \   375      ESOS_SET_MSG_FLAGS(stMsg, ESOS_MAILMESSAGE_UINT32);      \   376      ESOS_SET_MSG_FROMTASK(stMsg, __pstSelf); \   377      ESOS_SET_MSG_DATA_LENGTH(stMsg, 2);                    \   378      stMsg.au32_Contents[0] = (u32x0);                        \   379      stMsg.au32_Contents[1] = (u32x1);                        \   383 #define PRINTF_MESSAGE(stMsg)                             \   385     printf("MESSAGE u8_flags =            %02X\n",ESOS_GET_MSG_FLAGS(stMsg) );  \   386     printf("        u16_FromTaskID =      %d\n",ESOS_GET_MSG_FROMTASK(stMsg) ); \   387     printf("        u8_DataLength =       %d\n",ESOS_GET_MSG_DATA_LENGTH(stMsg) );  \   388     printf("        u32_PostMark =        %d\n",ESOS_GET_MSG_POSTMARK(stMsg) ); \   389     printf("          first byte  =       %d\n",stMsg.au8_Contents[0]); \   393 extern    MAILBOX         __astMailbox[MAX_NUM_USER_TASKS];
   394 extern    uint8_t         __au8_MBData[MAX_NUM_USER_TASKS][MAX_SIZE_TASK_MAILBOX];
   395 extern    uint8_t         __u8_esos_mail_routines_dummy_uint8;
   407 #define __esos_WriteMailboxUINT8(pstMB, u8x)          __esos_CB_WriteUINT8((pstMB)->pst_CBuffer, (u8x) )   410 #define __esos_ReadMailboxUINT8(pstMB, u8x)         __esos_CB_ReadUINT8((pstMB)->pst_CBuffer )   421 void __esos_ReadMailMessage(
struct stTask* pst_Task, MAILMESSAGE* pst_Message );
   422 void __esos_SendMailMessage(
struct stTask* pst_RcvrTask, MAILMESSAGE* pst_Msg );
   426 #endif    // ESOS_MAIL_H #define __MAIL_MSG_MAX_DATA_LEN
void __esos_SendMailUint8(struct stTask *pst_Task, MAILBOX *pst_Mailbox, uint8_t *pau8_data, uint8_t u8_len)
unsigned char uint8_t
An abbreviation for an 8-bit unsigned integer.