50 lines
887 B
C
50 lines
887 B
C
|
/*
|
||
|
* Copyright (c) 2022 Thomas Stranger
|
||
|
*
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
#include <device.h>
|
||
|
#include <sys/crc.h>
|
||
|
#include <zephyr/types.h>
|
||
|
#include <drivers/w1.h>
|
||
|
|
||
|
|
||
|
int z_impl_w1_read_block(const struct device *dev, uint8_t *buffer, size_t len)
|
||
|
{
|
||
|
const struct w1_driver_api *api = dev->api;
|
||
|
int ret;
|
||
|
|
||
|
if (api->read_block != NULL) {
|
||
|
return api->read_block(dev, buffer, len);
|
||
|
}
|
||
|
for (int i = 0; i < len; ++i) {
|
||
|
ret = w1_read_byte(dev);
|
||
|
if (ret < 0) {
|
||
|
return ret;
|
||
|
}
|
||
|
buffer[i] = ret;
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int z_impl_w1_write_block(const struct device *dev, const uint8_t *buffer,
|
||
|
size_t len)
|
||
|
{
|
||
|
const struct w1_driver_api *api = dev->api;
|
||
|
int ret;
|
||
|
|
||
|
if (api->write_block != NULL) {
|
||
|
return api->write_block(dev, buffer, len);
|
||
|
}
|
||
|
for (int i = 0; i < len; ++i) {
|
||
|
ret = w1_write_byte(dev, buffer[i]);
|
||
|
if (ret < 0) {
|
||
|
return ret;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return 0;
|
||
|
}
|