equal
deleted
inserted
replaced
37 #include "canfestival.h" |
37 #include "canfestival.h" |
38 |
38 |
39 |
39 |
40 |
40 |
41 UNS32 OnNumberOfErrorsUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex); |
41 UNS32 OnNumberOfErrorsUpdate(CO_Data* d, const indextable * unsused_indextable, UNS8 unsused_bSubindex); |
42 UNS8 sendEMCY(CO_Data* d, UNS32 cob_id, UNS16 errCode, UNS8 errRegister); |
42 UNS8 sendEMCY(CO_Data* d, UNS16 errCode, UNS8 errRegister); |
43 |
43 |
44 |
44 |
45 /*! This is called when Index 0x1003 is updated. |
45 /*! This is called when Index 0x1003 is updated. |
46 ** |
46 ** |
47 ** |
47 ** |
92 ** @param d |
92 ** @param d |
93 ** @param cob_id |
93 ** @param cob_id |
94 ** |
94 ** |
95 ** @return |
95 ** @return |
96 **/ |
96 **/ |
97 UNS8 sendEMCY(CO_Data* d, UNS32 cob_id, UNS16 errCode, UNS8 errRegister) |
97 UNS8 sendEMCY(CO_Data* d, UNS16 errCode, UNS8 errRegister) |
98 { |
98 { |
99 Message m; |
99 Message m; |
100 |
100 |
101 MSG_WAR(0x3051, "sendEMCY", 0); |
101 MSG_WAR(0x3051, "sendEMCY", 0); |
102 |
102 |
103 m.cob_id.w = cob_id ; |
103 m.cob_id.w = *d->error_cobid; |
104 m.rtr = NOT_A_REQUEST; |
104 m.rtr = NOT_A_REQUEST; |
105 m.len = 8; |
105 m.len = 8; |
106 m.data[0] = errCode & 0xFF; /* LSB */ |
106 m.data[0] = errCode & 0xFF; /* LSB */ |
107 m.data[1] = (errCode >> 8) & 0xFF; /* MSB */ |
107 m.data[1] = (errCode >> 8) & 0xFF; /* MSB */ |
108 m.data[2] = errRegister; |
108 m.data[2] = errRegister; |
168 *(d->error_first_element) = errCode | ((UNS32)addInfo << 16); |
168 *(d->error_first_element) = errCode | ((UNS32)addInfo << 16); |
169 if(*d->error_number < d->error_history_size) ++(*d->error_number); |
169 if(*d->error_number < d->error_history_size) ++(*d->error_number); |
170 |
170 |
171 /* send EMCY message */ |
171 /* send EMCY message */ |
172 if (d->CurrentCommunicationState.csEmergency) |
172 if (d->CurrentCommunicationState.csEmergency) |
173 return sendEMCY(d, *d->bDeviceNodeId + 0x080, errCode, *d->error_register); |
173 return sendEMCY(d, errCode, *d->error_register); |
174 else return 1; |
174 else return 1; |
175 } |
175 } |
176 |
176 |
177 /*! Deletes error errCode. Also clears corresponding bits in Error register (1001h) |
177 /*! Deletes error errCode. Also clears corresponding bits in Error register (1001h) |
178 ** |
178 ** |
206 if(anyActiveError == 0) |
206 if(anyActiveError == 0) |
207 { |
207 { |
208 d->error_state = Error_free; |
208 d->error_state = Error_free; |
209 /* send a EMCY message with code "Error Reset or No Error" */ |
209 /* send a EMCY message with code "Error Reset or No Error" */ |
210 if (d->CurrentCommunicationState.csEmergency) |
210 if (d->CurrentCommunicationState.csEmergency) |
211 sendEMCY(d, *d->bDeviceNodeId + 0x080, 0x0000, 0x00); |
211 sendEMCY(d, 0x0000, 0x00); |
212 } |
212 } |
213 *d->error_register = errRegister_tmp; |
213 *d->error_register = errRegister_tmp; |
214 } |
214 } |
215 else |
215 else |
216 MSG_WAR(0x3054, "recovered error was not active", 0); |
216 MSG_WAR(0x3054, "recovered error was not active", 0); |