1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-25 06:23:53 +01:00

tests/net/ieee802154_hal: add ESP32x IEEE802.15.4 driver

This commit is contained in:
Gunar Schorcht 2025-04-19 07:21:23 +02:00
parent 98469c0175
commit 548c0a1eb8
3 changed files with 29 additions and 9 deletions

View File

@ -29,6 +29,10 @@
#include "cc2538_rf.h"
#endif
#ifdef MODULE_ESP_IEEE802154
#include "esp_ieee802154_hal.h"
#endif
#ifdef MODULE_NRF802154
#include "nrf802154.h"
#endif
@ -82,6 +86,13 @@ void ieee802154_hal_test_init_devs(ieee802154_dev_cb_t cb, void *opaque)
}
#endif
#ifdef MODULE_ESP_IEEE802154
if ((radio = cb(IEEE802154_DEV_TYPE_ESP_IEEE802154, opaque)) ){
esp_ieee802154_setup(radio);
esp_ieee802154_init();
}
#endif
#ifdef MODULE_NRF802154
if ((radio = cb(IEEE802154_DEV_TYPE_NRF802154, opaque)) ){
nrf802154_hal_setup(radio);

View File

@ -157,7 +157,7 @@ static event_t _rx_done_event = {
static void _hal_radio_cb(ieee802154_dev_t *dev, ieee802154_trx_ev_t status)
{
(void) dev;
switch(status) {
switch (status) {
case IEEE802154_RADIO_CONFIRM_TX_DONE:
case IEEE802154_RADIO_CONFIRM_CCA:
mutex_unlock(&lock);
@ -182,7 +182,8 @@ static void _tx_finish_handler(event_t *event)
expect(ieee802154_radio_confirm_transmit(&_radio, &tx_info) >= 0);
ieee802154_radio_set_rx(&_radio);
if (!ieee802154_radio_has_irq_ack_timeout(&_radio) && !ieee802154_radio_has_frame_retrans(&_radio)) {
if (!ieee802154_radio_has_irq_ack_timeout(&_radio) &&
!ieee802154_radio_has_frame_retrans(&_radio)) {
/* This is just to show how the MAC layer would handle ACKs... */
xtimer_set(&timer_ack, ACK_TIMEOUT_TIME);
}
@ -227,7 +228,7 @@ static void _send(iolist_t *pkt)
ieee802154_radio_write(&_radio, pkt);
/* Block until the radio confirms the state change */
while(ieee802154_radio_confirm_set_idle(&_radio) == -EAGAIN);
while (ieee802154_radio_confirm_set_idle(&_radio) == -EAGAIN) {}
/* Set the frame filter to receive ACKs */
ieee802154_radio_set_frame_filter_mode(&_radio, IEEE802154_FILTER_ACK_ONLY);
@ -252,7 +253,7 @@ static ieee802154_dev_t *_reg_callback(ieee802154_dev_type_t type, void *opaque)
{
struct _reg_container *reg = opaque;
printf("Trying to register ");
switch(type) {
switch (type) {
case IEEE802154_DEV_TYPE_CC2538_RF:
printf("cc2538_rf");
break;
@ -268,6 +269,9 @@ static ieee802154_dev_t *_reg_callback(ieee802154_dev_type_t type, void *opaque)
case IEEE802154_DEV_TYPE_MRF24J40:
printf("mrf24j40");
break;
case IEEE802154_DEV_TYPE_ESP_IEEE802154:
printf("esp_ieee802154");
break;
}
puts(".");
@ -300,7 +304,7 @@ static int _init(void)
* The transceiver state will be "TRX_OFF" */
res = ieee802154_radio_request_on(&_radio);
expect(res >= 0);
while(ieee802154_radio_confirm_on(&_radio) == -EAGAIN) {}
while (ieee802154_radio_confirm_on(&_radio) == -EAGAIN) {}
ieee802154_radio_set_frame_filter_mode(&_radio, IEEE802154_FILTER_ACCEPT);
@ -318,7 +322,9 @@ static int _init(void)
expect(res >= 0);
/* Set PHY configuration */
ieee802154_phy_conf_t conf = {.channel=CONFIG_IEEE802154_DEFAULT_CHANNEL, .page=CONFIG_IEEE802154_DEFAULT_SUBGHZ_PAGE, .pow=CONFIG_IEEE802154_DEFAULT_TXPOWER};
ieee802154_phy_conf_t conf = { .channel=CONFIG_IEEE802154_DEFAULT_CHANNEL,
.page=CONFIG_IEEE802154_DEFAULT_SUBGHZ_PAGE,
.pow=CONFIG_IEEE802154_DEFAULT_TXPOWER};
res = ieee802154_radio_config_phy(&_radio, &conf);
expect(res >= 0);
@ -334,7 +340,8 @@ static int _init(void)
return 0;
}
uint8_t payload[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam ornare lacinia mi elementum interdum ligula.";
uint8_t payload[] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
"Etiam ornare lacinia mi elementum interdum ligula.";
static int send(uint8_t *dst, size_t dst_len,
size_t len, bool ack_req)
@ -426,7 +433,7 @@ int _test_states(int argc, char **argv)
? "FAIL"
: "PASS");
printf("Testing RX<->TX transition time");
printf("Testing RX<->TX transition time: ");
a = xtimer_now();
res = ieee802154_radio_set_idle(&_radio, true);
assert(res == 0);

View File

@ -29,7 +29,8 @@
IS_USED(MODULE_NRF802154) + \
SOCKET_ZEP_MAX + \
IS_USED(MODULE_MRF24J40) + \
IS_USED(MODULE_KW2XRF)
IS_USED(MODULE_KW2XRF) + \
IS_USED(MODULE_ESP_IEEE802154)
#ifdef __cplusplus
extern "C" {
@ -46,6 +47,7 @@ typedef enum {
IEEE802154_DEV_TYPE_SOCKET_ZEP,
IEEE802154_DEV_TYPE_KW2XRF,
IEEE802154_DEV_TYPE_MRF24J40,
IEEE802154_DEV_TYPE_ESP_IEEE802154,
} ieee802154_dev_type_t;
typedef ieee802154_dev_t* (*ieee802154_dev_cb_t)(ieee802154_dev_type_t type,