/ * @brief * Wrapper function of send command to Ethernet device * * @details * * @note * * @param[in] cmd * Command index * * @param[in] addr * Register address * * @param[in/out] data * Pointer to the buffer of register value * * @return * Error code ******************************************************************************/
| 203 | * Error code |
| 204 | ******************************************************************************/ |
| 205 | static rt_err_t efm_eth_sendCmd( |
| 206 | rt_uint8_t cmd, |
| 207 | rt_uint8_t addr, |
| 208 | rt_uint8_t *data) |
| 209 | { |
| 210 | rt_err_t ret; |
| 211 | |
| 212 | eth_debug("ETH: Send command %x (%x %x)\n", cmd, addr, *data); |
| 213 | do |
| 214 | { |
| 215 | /* Change bank */ |
| 216 | if(((addr & BANK_MASK) != ethBank) && ((addr < EIE) || (addr > ECON1))) |
| 217 | { |
| 218 | rt_uint8_t temp; |
| 219 | |
| 220 | if ((ret = efm_eth_cmd(ENC28J60_READ_CTRL_REG, ECON1, &temp)) != RT_EOK) |
| 221 | { |
| 222 | break; |
| 223 | } |
| 224 | temp &= 0xFC; |
| 225 | ethBank = (addr & BANK_MASK); |
| 226 | temp |= ethBank >> BANK_SHIFT; |
| 227 | if ((ret = efm_eth_cmd(ENC28J60_WRITE_CTRL_REG, ECON1, &temp)) != RT_EOK) |
| 228 | { |
| 229 | break; |
| 230 | } |
| 231 | } |
| 232 | /* Send command */ |
| 233 | ret = efm_eth_cmd(cmd, addr, data); |
| 234 | } while(0); |
| 235 | |
| 236 | return ret; |
| 237 | } |
| 238 | |
| 239 | /***************************************************************************//** |
| 240 | * @brief |
no test coverage detected