ESOS32
ESOSOn32-bitProcessors
esos_ecan.h
Go to the documentation of this file.
1 /*
2  * "Copyright (c) 2019 J. W. Bruce ("AUTHOR(S)")"
3  * All rights reserved.
4  * (J. W. Bruce, jwbruce_AT_tntech.edu, Tennessee Tech University)
5  *
6  * Permission to use, copy, modify, and distribute this software and its
7  * documentation for any purpose, without fee, and without written agreement is
8  * hereby granted, provided that the above copyright notice, the following
9  * two paragraphs and the authors appear in all copies of this software.
10  *
11  * IN NO EVENT SHALL THE "AUTHORS" BE LIABLE TO ANY PARTY FOR
12  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
13  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE "AUTHORS"
14  * HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15  *
16  * THE "AUTHORS" SPECIFICALLY DISCLAIMS ANY WARRANTIES,
17  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
18  * AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
19  * ON AN "AS IS" BASIS, AND THE "AUTHORS" HAS NO OBLIGATION TO
20  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS."
21  *
22  * Please maintain this header in its entirety when copying/modifying
23  * these files.
24  *
25  *
26  */
27 
38 #ifndef ESOS_ECAN_H
39 #define ESOS_ECAN_H
40 
41 /* I N C L U D E S **********************************************************/
42 #include "esos.h"
43 
44 /* D E F I N E S ************************************************************/
45 #define MAX_CANFACTORY_CLIENTS 32
46 #define DEFAULT_MSG_ID 0x7a0
47 #define DEBUG_MODE ESOS_USER_FLAG_F
48 
49 #define ENABLE_DEBUG_MODE() esos_SetUserFlag(DEBUG_MODE)
50 #define DISABLE_DEBUG_MODE() esos_ClearUserFlag(DEBUG_MODE)
51 #define CHECK_DEBUG_MODE_ENABLED() esos_IsUserFlagSet(DEBUG_MODE)
52 
53 #define TRUE 1
54 #define FALSE 0
55 
56 /* S T R U C T U R E S ******************************************************/
57 typedef enum {
58  MASKCONTROL_FIELD_NONZERO,
59  MASKCONTROL_EQUAL
60 } maskcontrol_t;
61 
62 typedef struct {
63  uint16_t u16_canID;
64  uint16_t u16_idMask;
65  maskcontrol_t m_idMaskControl;
66  uint8_t (*pf_task) (ESOS_TASK_HANDLE pst_Task);
67  //uint8_t(*pfn) (struct stTask *pst_Task);
68 } client_t;
69 
70 /* P U B L I C P R O T O T Y P E S *****************************************/
84 //void esos_ecan_send ( uint16_t u16_can_id, uint8_t *pu8_msg, uint8_t u8_len );
85 
86 #define ESOS_ECAN_SEND(u16_can_id,pu8_msg,u8_len) { \
87  do { \
88  ESOS_TASK_HANDLE __esos_ecan_hTask; \
89  MAILMESSAGE __esos_ecan_mailMsg; \
90  uint8_t __esos_mail_msgBuf[ sizeof( uint16_t ) + 8 * sizeof( uint8_t ) ]; \
91  __esos_ecan_hTask = esos_GetTaskHandle( CANFactory ); \
92  if ( ESOS_TASK_MAILBOX_GOT_AT_LEAST_DATA_BYTES( __esos_ecan_hTask, __MAIL_MSG_HEADER_LEN + sizeof( uint8_t ) * u8_len + sizeof( uint16_t ) ) ) { \
93  *( ( uint16_t* ) &__esos_mail_msgBuf[0] ) = u16_can_id; \
94  memcpy( &__esos_mail_msgBuf[ sizeof( uint16_t ) ], pu8_msg, u8_len ); \
95  ESOS_TASK_MAKE_MSG_AUINT8 ( __esos_ecan_mailMsg, __esos_mail_msgBuf, sizeof( uint8_t ) * u8_len + sizeof( uint16_t ) ); \
96  ESOS_TASK_SEND_MESSAGE( __esos_ecan_hTask, &__esos_ecan_mailMsg ); \
97  } \
98  } while ( 0 ); \
99  }
100 
128 void esos_ecan_canfactory_subscribe(ESOS_TASK_HANDLE pst_Task, uint16_t u16_can_id, uint16_t u16_mask, maskcontrol_t m_mask_control);
129 
144 void esos_ecan_canfactory_unsubscribe(uint8_t(*pst_Task) (ESOS_TASK_HANDLE), uint16_t u16_can_id, uint16_t u16_mask, maskcontrol_t m_mask_control);
145 
158 BOOL esos_ecan_mask_check (uint16_t u16_subscribed, uint16_t u16_recieved, uint16_t u16_mask);
159 
167 ESOS_USER_TASK ( CANFactory );
168 
169 #endif /* ESOS_ECAN_H */
ESOS_TASK_HANDLE
esos_ecan_canfactory_unsubscribe
void esos_ecan_canfactory_unsubscribe(uint8_t(*pst_Task)(ESOS_TASK_HANDLE), uint16_t u16_can_id, uint16_t u16_mask, maskcontrol_t m_mask_control)
esos_ecan_canfactory_subscribe
void esos_ecan_canfactory_subscribe(ESOS_TASK_HANDLE pst_Task, uint16_t u16_can_id, uint16_t u16_mask, maskcontrol_t m_mask_control)
esos.h
BOOL
enum _BOOL BOOL
ESOS_USER_TASK
ESOS_USER_TASK(CANFactory)
client_t
Definition: esos_ecan.h:62
esos_ecan_mask_check
BOOL esos_ecan_mask_check(uint16_t u16_subscribed, uint16_t u16_recieved, uint16_t u16_mask)