| 308 | #endif |
| 309 | |
| 310 | CO_SDO_return_t |
| 311 | CO_SDOclient_setup(CO_SDOclient_t* SDO_C, uint32_t COB_IDClientToServer, uint32_t COB_IDServerToClient, |
| 312 | uint8_t nodeIDOfTheSDOServer) { |
| 313 | /* verify parameters */ |
| 314 | if (SDO_C == NULL) { |
| 315 | return CO_SDO_RT_wrongArguments; |
| 316 | } |
| 317 | |
| 318 | /* Configure object variables */ |
| 319 | SDO_C->state = CO_SDO_ST_IDLE; |
| 320 | CO_FLAG_CLEAR(SDO_C->CANrxNew); |
| 321 | SDO_C->nodeIDOfTheSDOServer = nodeIDOfTheSDOServer; |
| 322 | |
| 323 | #if ((CO_CONFIG_SDO_CLI)&CO_CONFIG_FLAG_OD_DYNAMIC) != 0 |
| 324 | /* proceed only, if parameters change */ |
| 325 | if ((COB_IDClientToServer == SDO_C->COB_IDClientToServer) |
| 326 | && (COB_IDServerToClient == SDO_C->COB_IDServerToClient)) { |
| 327 | return CO_SDO_RT_ok_communicationEnd; |
| 328 | } |
| 329 | /* store variables */ |
| 330 | SDO_C->COB_IDClientToServer = COB_IDClientToServer; |
| 331 | SDO_C->COB_IDServerToClient = COB_IDServerToClient; |
| 332 | #endif |
| 333 | |
| 334 | /* verify valid bit */ |
| 335 | uint16_t CanIdC2S = ((COB_IDClientToServer & 0x80000000UL) == 0U) ? (uint16_t)(COB_IDClientToServer & 0x7FFU) : 0U; |
| 336 | uint16_t CanIdS2C = ((COB_IDServerToClient & 0x80000000UL) == 0U) ? (uint16_t)(COB_IDServerToClient & 0x7FFU) : 0U; |
| 337 | if ((CanIdC2S != 0U) && (CanIdS2C != 0U)) { |
| 338 | SDO_C->valid = true; |
| 339 | } else { |
| 340 | CanIdC2S = 0; |
| 341 | CanIdS2C = 0; |
| 342 | SDO_C->valid = false; |
| 343 | } |
| 344 | |
| 345 | /* configure SDO client CAN reception */ |
| 346 | CO_ReturnError_t ret = CO_CANrxBufferInit(SDO_C->CANdevRx, SDO_C->CANdevRxIdx, CanIdS2C, 0x7FF, false, (void*)SDO_C, |
| 347 | CO_SDOclient_receive); |
| 348 | |
| 349 | /* configure SDO client CAN transmission */ |
| 350 | SDO_C->CANtxBuff = CO_CANtxBufferInit(SDO_C->CANdevTx, SDO_C->CANdevTxIdx, CanIdC2S, false, 8, false); |
| 351 | |
| 352 | if ((ret != CO_ERROR_NO) || (SDO_C->CANtxBuff == NULL)) { |
| 353 | SDO_C->valid = false; |
| 354 | return CO_SDO_RT_wrongArguments; |
| 355 | } |
| 356 | |
| 357 | return CO_SDO_RT_ok_communicationEnd; |
| 358 | } |
| 359 | |
| 360 | /****************************************************************************** |
| 361 | * DOWNLOAD * |
no test coverage detected