| 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 */ | 
|---|