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

Function CO_LSSmaster_switchStateSelectInitiate

305/CO_LSSmaster.c:172–212  ·  view source on GitHub ↗

* Helper function - initiate switch state */

Source from the content-addressed store, hash-verified

170 * Helper function - initiate switch state
171 */
172static CO_LSSmaster_return_t
173CO_LSSmaster_switchStateSelectInitiate(CO_LSSmaster_t* LSSmaster, CO_LSS_address_t* lssAddress) {
174 CO_LSSmaster_return_t ret;
175
176 if (lssAddress != NULL) {
177 /* switch state select specific using LSS address */
178 LSSmaster->state = CO_LSSmaster_STATE_CFG_SLECTIVE;
179 LSSmaster->command = CO_LSSmaster_COMMAND_SWITCH_STATE;
180 LSSmaster->timeoutTimer = 0;
181
182 CO_FLAG_CLEAR(LSSmaster->CANrxNew);
183 (void)memset(&LSSmaster->TXbuff->data[6], 0, sizeof(LSSmaster->TXbuff->data) - 6U);
184 LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL_VENDOR;
185 (void)CO_setUint32(&LSSmaster->TXbuff->data[1], CO_SWAP_32(lssAddress->identity.vendorID));
186 (void)CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
187 LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL_PRODUCT;
188 (void)CO_setUint32(&LSSmaster->TXbuff->data[1], CO_SWAP_32(lssAddress->identity.productCode));
189 (void)CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
190 LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL_REV;
191 (void)CO_setUint32(&LSSmaster->TXbuff->data[1], CO_SWAP_32(lssAddress->identity.revisionNumber));
192 (void)CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
193 LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_SEL_SERIAL;
194 (void)CO_setUint32(&LSSmaster->TXbuff->data[1], CO_SWAP_32(lssAddress->identity.serialNumber));
195 (void)CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
196
197 ret = CO_LSSmaster_WAIT_SLAVE;
198 } else {
199 /* switch state global */
200 LSSmaster->state = CO_LSSmaster_STATE_CFG_GLOBAL;
201
202 CO_FLAG_CLEAR(LSSmaster->CANrxNew);
203 LSSmaster->TXbuff->data[0] = CO_LSS_SWITCH_STATE_GLOBAL;
204 LSSmaster->TXbuff->data[1] = CO_LSS_STATE_CONFIGURATION;
205 (void)memset(&LSSmaster->TXbuff->data[2], 0, sizeof(LSSmaster->TXbuff->data) - 2U);
206 (void)CO_CANsend(LSSmaster->CANdevTx, LSSmaster->TXbuff);
207
208 /* This is non-confirmed service! */
209 ret = CO_LSSmaster_OK;
210 }
211 return ret;
212}
213
214/*
215 * Helper function - wait for confirmation

Callers 1

Calls 2

CO_setUint32Function · 0.85
CO_CANsendFunction · 0.85

Tested by

no test coverage detected