* Helper function - initiate switch state */
| 170 | * Helper function - initiate switch state |
| 171 | */ |
| 172 | static CO_LSSmaster_return_t |
| 173 | CO_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 |
no test coverage detected