Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
1116bb2c
Commit
1116bb2c
authored
Mar 20, 2017
by
devsaurus
Browse files
ow: handle misconfigured bus gracefully with timeout
parent
21e1cadf
Changes
1
Hide whitespace changes
Inline
Side-by-side
components/platform/onewire.c
View file @
1116bb2c
...
@@ -198,6 +198,7 @@ int platform_onewire_reset( uint8_t gpio_num, uint8_t *presence )
...
@@ -198,6 +198,7 @@ int platform_onewire_reset( uint8_t gpio_num, uint8_t *presence )
{
{
rmt_item32_t
tx_items
[
1
];
rmt_item32_t
tx_items
[
1
];
uint8_t
_presence
=
0
;
uint8_t
_presence
=
0
;
int
res
=
PLATFORM_OK
;
if
(
onewire_rmt_attach_pin
(
gpio_num
)
!=
PLATFORM_OK
)
if
(
onewire_rmt_attach_pin
(
gpio_num
)
!=
PLATFORM_OK
)
return
PLATFORM_ERR
;
return
PLATFORM_ERR
;
...
@@ -218,8 +219,7 @@ int platform_onewire_reset( uint8_t gpio_num, uint8_t *presence )
...
@@ -218,8 +219,7 @@ int platform_onewire_reset( uint8_t gpio_num, uint8_t *presence )
if
(
rmt_write_items
(
ow_rmt
.
tx
,
tx_items
,
1
,
true
)
==
ESP_OK
)
{
if
(
rmt_write_items
(
ow_rmt
.
tx
,
tx_items
,
1
,
true
)
==
ESP_OK
)
{
size_t
rx_size
;
size_t
rx_size
;
rmt_item32_t
*
rx_items
=
(
rmt_item32_t
*
)
xRingbufferReceive
(
ow_rmt
.
rb
,
&
rx_size
,
portMAX_DELAY
);
rmt_item32_t
*
rx_items
=
(
rmt_item32_t
*
)
xRingbufferReceive
(
ow_rmt
.
rb
,
&
rx_size
,
100
/
portTICK_PERIOD_MS
);
rmt_rx_stop
(
ow_rmt
.
rx
);
if
(
rx_items
)
{
if
(
rx_items
)
{
if
(
rx_size
>=
1
*
sizeof
(
rmt_item32_t
))
{
if
(
rx_size
>=
1
*
sizeof
(
rmt_item32_t
))
{
...
@@ -238,17 +238,21 @@ int platform_onewire_reset( uint8_t gpio_num, uint8_t *presence )
...
@@ -238,17 +238,21 @@ int platform_onewire_reset( uint8_t gpio_num, uint8_t *presence )
}
}
vRingbufferReturnItem
(
ow_rmt
.
rb
,
(
void
*
)
rx_items
);
vRingbufferReturnItem
(
ow_rmt
.
rb
,
(
void
*
)
rx_items
);
}
else
{
// time out occurred, this indicates an unconnected / misconfigured bus
res
=
PLATFORM_ERR
;
}
}
}
else
{
}
else
{
//
clean up in case of error
//
error in tx channel
r
mt_rx_stop
(
ow_rmt
.
rx
)
;
r
es
=
PLATFORM_ERR
;
}
}
rmt_rx_stop
(
ow_rmt
.
rx
);
rmt_set_rx_idle_thresh
(
ow_rmt
.
rx
,
old_rx_thresh
);
rmt_set_rx_idle_thresh
(
ow_rmt
.
rx
,
old_rx_thresh
);
*
presence
=
_presence
;
*
presence
=
_presence
;
return
PLATFORM_OK
;
return
res
;
}
}
static
rmt_item32_t
onewire_encode_write_slot
(
uint8_t
val
)
static
rmt_item32_t
onewire_encode_write_slot
(
uint8_t
val
)
...
@@ -337,6 +341,7 @@ static int onewire_read_bits( uint8_t gpio_num, uint8_t *data, uint8_t num )
...
@@ -337,6 +341,7 @@ static int onewire_read_bits( uint8_t gpio_num, uint8_t *data, uint8_t num )
{
{
rmt_item32_t
tx_items
[
num
+
1
];
rmt_item32_t
tx_items
[
num
+
1
];
uint8_t
read_data
=
0
;
uint8_t
read_data
=
0
;
int
res
=
PLATFORM_OK
;
if
(
num
>
8
)
if
(
num
>
8
)
return
PLATFORM_ERR
;
return
PLATFORM_ERR
;
...
@@ -359,7 +364,6 @@ static int onewire_read_bits( uint8_t gpio_num, uint8_t *data, uint8_t num )
...
@@ -359,7 +364,6 @@ static int onewire_read_bits( uint8_t gpio_num, uint8_t *data, uint8_t num )
size_t
rx_size
;
size_t
rx_size
;
rmt_item32_t
*
rx_items
=
(
rmt_item32_t
*
)
xRingbufferReceive
(
ow_rmt
.
rb
,
&
rx_size
,
portMAX_DELAY
);
rmt_item32_t
*
rx_items
=
(
rmt_item32_t
*
)
xRingbufferReceive
(
ow_rmt
.
rb
,
&
rx_size
,
portMAX_DELAY
);
rmt_rx_stop
(
ow_rmt
.
rx
);
if
(
rx_items
)
{
if
(
rx_items
)
{
#if 0
#if 0
...
@@ -383,15 +387,20 @@ static int onewire_read_bits( uint8_t gpio_num, uint8_t *data, uint8_t num )
...
@@ -383,15 +387,20 @@ static int onewire_read_bits( uint8_t gpio_num, uint8_t *data, uint8_t num )
}
}
vRingbufferReturnItem
(
ow_rmt
.
rb
,
(
void
*
)
rx_items
);
vRingbufferReturnItem
(
ow_rmt
.
rb
,
(
void
*
)
rx_items
);
}
else
{
// time out occurred, this indicates an unconnected / misconfigured bus
res
=
PLATFORM_ERR
;
}
}
}
else
{
}
else
{
//
clean up in case of error
//
error in tx channel
r
mt_rx_stop
(
ow_rmt
.
rx
)
;
r
es
=
PLATFORM_ERR
;
}
}
rmt_rx_stop
(
ow_rmt
.
rx
);
*
data
=
read_data
;
*
data
=
read_data
;
return
PLATFORM_OK
;
return
res
;
}
}
int
platform_onewire_read_bytes
(
uint8_t
gpio_num
,
uint8_t
*
buf
,
uint16_t
count
)
int
platform_onewire_read_bytes
(
uint8_t
gpio_num
,
uint8_t
*
buf
,
uint16_t
count
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment