MCPcopy Create free account
hub / github.com/CANopenNode/CANopenNode / CO_LSSmaster_swStateSelect

Function CO_LSSmaster_swStateSelect

305/CO_LSSmaster.c:238–267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

236}
237
238CO_LSSmaster_return_t
239CO_LSSmaster_swStateSelect(CO_LSSmaster_t* LSSmaster, uint32_t timeDifference_us, CO_LSS_address_t* lssAddress) {
240 CO_LSSmaster_return_t ret = CO_LSSmaster_INVALID_STATE;
241
242 if (LSSmaster == NULL) {
243 return CO_LSSmaster_ILLEGAL_ARGUMENT;
244 }
245
246 /* Initiate select */
247 if ((LSSmaster->state == CO_LSSmaster_STATE_WAITING) && (LSSmaster->command == CO_LSSmaster_COMMAND_WAITING)) {
248
249 ret = CO_LSSmaster_switchStateSelectInitiate(LSSmaster, lssAddress);
250 }
251 /* Wait for confirmation */
252 else if (LSSmaster->command == CO_LSSmaster_COMMAND_SWITCH_STATE) {
253 ret = CO_LSSmaster_switchStateSelectWait(LSSmaster, timeDifference_us);
254 } else { /* MISRA C 2004 14.10 */
255 }
256
257 if ((ret != CO_LSSmaster_INVALID_STATE) && (ret != CO_LSSmaster_WAIT_SLAVE)) {
258 /* finished */
259 LSSmaster->command = CO_LSSmaster_COMMAND_WAITING;
260 }
261 if (ret < CO_LSSmaster_OK) {
262 /* switching failed, go back to waiting */
263 LSSmaster->state = CO_LSSmaster_STATE_WAITING;
264 LSSmaster->command = CO_LSSmaster_COMMAND_WAITING;
265 }
266 return ret;
267}
268
269CO_LSSmaster_return_t
270CO_LSSmaster_swStateDeselect(CO_LSSmaster_t* LSSmaster) {

Callers 1

CO_gateway_ascii.cFile · 0.85

Tested by

no test coverage detected