| 1 | /*-----------------------------------------------------------------------------
|
|---|
| 2 | cal.h -- CAN Application Layer CAL
|
|---|
| 3 |
|
|---|
| 4 | Copyright (c) 1994 JANZ Computer AG
|
|---|
| 5 | All Rights Reserved
|
|---|
| 6 |
|
|---|
| 7 | Created 94/10/11 by Soenke Hansen
|
|---|
| 8 | Version 1.9 of 98/07/31
|
|---|
| 9 |
|
|---|
| 10 | CALO: CAN Application Layer Object
|
|---|
| 11 |
|
|---|
| 12 | CALO's receive CAN messages. Using only the identifier and the RTR bit
|
|---|
| 13 | of a CAN message CAL forwards a message to the appropriate CALO.
|
|---|
| 14 | CALO's are either waiting on an event (e.g., CAN message, timer, user
|
|---|
| 15 | request) or are ready to do work. The latter objects are maintained on a
|
|---|
| 16 | queue until they have finished their work.
|
|---|
| 17 |
|
|---|
| 18 | Prototypes of functions defined in cal.c.
|
|---|
| 19 |
|
|---|
| 20 | -----------------------------------------------------------------------------*/
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 | #ifndef cal_DEFINED
|
|---|
| 24 | #define cal_DEFINED
|
|---|
| 25 |
|
|---|
| 26 | #ifdef __cplusplus
|
|---|
| 27 | extern "C" {
|
|---|
| 28 | #endif
|
|---|
| 29 |
|
|---|
| 30 | #include "defs.h"
|
|---|
| 31 | #include "msg.h"
|
|---|
| 32 |
|
|---|
| 33 |
|
|---|
| 34 | #ifdef FIRMWARE
|
|---|
| 35 | /* CAN Application Layer Object */
|
|---|
| 36 | struct calo {
|
|---|
| 37 | WORD_t id; /* identifier (handle) of object */
|
|---|
| 38 | WORD_t head; /* head of CAN messages received */
|
|---|
| 39 | OBJECT obj; /* object specific data */
|
|---|
| 40 | void (*mhdl)(); /* CAL handler for received message */
|
|---|
| 41 | struct calo *nxtrx; /* next on rx id hash queue */
|
|---|
| 42 | struct calo *nxtcal; /* next on CAL id hash queue */
|
|---|
| 43 | };
|
|---|
| 44 |
|
|---|
| 45 | #define NIL_CALO (struct calo *)0
|
|---|
| 46 |
|
|---|
| 47 | /* Identifiers (handles) of CAL objects -- not to be confused with
|
|---|
| 48 | CAN message Ids -- are 11 bit numbers. Ids of requests issued to
|
|---|
| 49 | ICANOS are 16 bit words with the lower bits equal to the
|
|---|
| 50 | Id of the requesting CAL Object. CALID_MASK is used in retrieving
|
|---|
| 51 | the CAL Object Id from the request Id. */
|
|---|
| 52 | #define CALID_MASK 0x07ff
|
|---|
| 53 |
|
|---|
| 54 | /* Nil CAN message head (descriptor) */
|
|---|
| 55 | #define NIL_CAN_HEAD 0xffff /* invalid descriptor */
|
|---|
| 56 |
|
|---|
| 57 | #endif /* FIRMWARE */
|
|---|
| 58 |
|
|---|
| 59 | /* CAN Identifiers used by CAL (cf. CiA/DS204-1, Annex I) */
|
|---|
| 60 | #define ID_START_STOP 0 /* Node Start, Stop, Disconnect */
|
|---|
| 61 | #define ID_CMS_NIL 0 /* invalid CMS Id */
|
|---|
| 62 | #define ID_CMS_MIN 1 /* range of CMS */
|
|---|
| 63 | #define ID_CMS_MAX 1760 /* identifiers */
|
|---|
| 64 | #define ID_GUARD_NIL 0 /* invalid guard Id */
|
|---|
| 65 | #define ID_GUARD_MIN 1761 /* range of guarding */
|
|---|
| 66 | #define ID_GUARD_MAX 2015 /* identifiers */
|
|---|
| 67 | #define ID_LMT_S 2020 /* from LMT Slave */
|
|---|
| 68 | #define ID_LMT_M 2021 /* from LMT Master */
|
|---|
| 69 | #define ID_NMT_IDENTIFY 2022 /* Identify Node Protocol */
|
|---|
| 70 | #define ID_DBT_S 2023 /* from DBT Slave */
|
|---|
| 71 | #define ID_DBT_M 2024 /* from DBT Master */
|
|---|
| 72 | #define ID_NMT_S 2025 /* from NMT Slave */
|
|---|
| 73 | #define ID_NMT_M 2026 /* from NMT Master */
|
|---|
| 74 | #define ID_SELFTEST 2027 /* for module selftest */
|
|---|
| 75 | #define ID_MIN 0 /* range of identifiers */
|
|---|
| 76 | #define ID_MAX 2031 /* controlled by CiA */
|
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 | /*--------- Prototypes of CAL User Functions -------------------------------*/
|
|---|
| 80 |
|
|---|
| 81 | #ifdef FIRMWARE
|
|---|
| 82 |
|
|---|
| 83 | /* Initialize CAL */
|
|---|
| 84 | extern void InitCal(
|
|---|
| 85 | WORD_t, /* req. clock period */
|
|---|
| 86 | WORD_t, /* bus timing */
|
|---|
| 87 | WORD_t, /* timeout interval */
|
|---|
| 88 | void (*)(), /* user handler for NMT Slave ind/con */
|
|---|
| 89 | void (*)(), /* user handler for DBT Slave ind/con */
|
|---|
| 90 | void (*)() /* user handler for LMT Slave ind/con */
|
|---|
| 91 | );
|
|---|
| 92 |
|
|---|
| 93 | /* Free the resources held by CAL */
|
|---|
| 94 | extern void DeleteCal(void);
|
|---|
| 95 |
|
|---|
| 96 | /* Execute CAL */
|
|---|
| 97 | extern void RunCal(void);
|
|---|
| 98 |
|
|---|
| 99 | /*--------- Enable/Disable Remote Services ---------------------------------*/
|
|---|
| 100 |
|
|---|
| 101 | #define EnableCAN() buson_bcan()
|
|---|
| 102 | #define DisableCAN() busoff_bcan()
|
|---|
| 103 |
|
|---|
| 104 | /*--------- Prototypes of CAL internal functions ---------------------------*/
|
|---|
| 105 |
|
|---|
| 106 | /* Create a CAL object. */
|
|---|
| 107 | extern struct calo *NewCalO(void);
|
|---|
| 108 |
|
|---|
| 109 | /* Delete a CAL object. */
|
|---|
| 110 | extern void DeleteCalO(struct calo *);
|
|---|
| 111 |
|
|---|
| 112 | /* Get a CAL object by its Id (handle). */
|
|---|
| 113 | extern struct calo *GetCalO(WORD_t);
|
|---|
| 114 |
|
|---|
| 115 | /* Assign CAN message head to a CAL Object */
|
|---|
| 116 | extern int AssignCalO(struct calo *, WORD_t);
|
|---|
| 117 |
|
|---|
| 118 | /* Unassign CAN message head from a CAL Object */
|
|---|
| 119 | extern void UnassignCalO(struct calo *);
|
|---|
| 120 |
|
|---|
| 121 | #endif /* FIRMWARE */
|
|---|
| 122 |
|
|---|
| 123 | #ifdef __cplusplus
|
|---|
| 124 | }
|
|---|
| 125 | #endif
|
|---|
| 126 |
|
|---|
| 127 | #endif /* !cal_DEFINED */
|
|---|