Skip to content

Commit ad5a1e1

Browse files
author
Jarkko Paso
authored
Merge pull request ARMmbed#1527 from ARMmbed/IOTTHD-2095
Iotthd 2095
2 parents 209e49a + bf65e9c commit ad5a1e1

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

nanostack/platform/arm_hal_phy.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ typedef enum {
5656
PHY_EXTENSION_READ_LINK_STATUS, /**< Net library could read link status. */
5757
PHY_EXTENSION_CONVERT_SIGNAL_INFO, /**< Convert signal info. */
5858
PHY_EXTENSION_ACCEPT_ANY_BEACON, /**< Set boolean true or false for accept beacon from other Pan-ID than configured. Default value should be false */
59+
PHY_EXTENSION_SET_TX_TIME, /**< Net library sets transmission time based on global time stamp. Max. 65ms from setting to TX */
60+
PHY_EXTENSION_READ_RX_TIME, /**< Read the time of last reception based on global time stamp. */
5961
} phy_extension_type_e;
6062

6163
/** Address types */

source/MAC/IEEE802_15_4/mac_pd_sap.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,47 @@ int8_t mac_pd_sap_req(protocol_interface_rf_mac_setup_s *rf_mac_setup)
160160
return 0;
161161
}
162162

163+
/**
164+
* Set PHY TX time.
165+
*
166+
* \param rf_mac_setup pointer to MAC
167+
* \param time_to_tx Time from present time to wanted TX time (us)
168+
* \return 0 if success, -1 when FHSS not registered
169+
*
170+
*/
171+
static int mac_pd_sap_set_tx_time(protocol_interface_rf_mac_setup_s *rf_mac_setup, uint16_t time_to_tx)
172+
{
173+
if (rf_mac_setup->fhss_api) {
174+
// Max. TX time is 65ms
175+
if (time_to_tx > 65000) {
176+
time_to_tx = 65000;
177+
}
178+
uint8_t tx_time_buffer[4];
179+
uint32_t tx_time = rf_mac_setup->fhss_api->read_timestamp(rf_mac_setup->fhss_api) + time_to_tx;
180+
if (!tx_time) {
181+
tx_time++;
182+
}
183+
common_write_32_bit(tx_time, tx_time_buffer);
184+
rf_mac_setup->dev_driver->phy_driver->extension(PHY_EXTENSION_SET_TX_TIME, tx_time_buffer);
185+
return 0;
186+
}
187+
return -1;
188+
}
189+
190+
/**
191+
* Get PHY RX time.
192+
*
193+
* \param rf_mac_setup pointer to MAC
194+
* \return Timestamp of last PHY reception
195+
*
196+
*/
197+
static uint32_t mac_pd_sap_get_rx_time(protocol_interface_rf_mac_setup_s *rf_mac_setup)
198+
{
199+
uint8_t rx_time_buffer[4];
200+
rf_mac_setup->dev_driver->phy_driver->extension(PHY_EXTENSION_READ_RX_TIME, rx_time_buffer);
201+
return common_read_32_bit(rx_time_buffer);
202+
}
203+
163204
/**
164205
* Run Mac data interface state Machine for mac timer.
165206
*

source/MAC/rf_driver_storage.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@ int8_t arm_net_phy_register(phy_device_driver_s *phy_driver)
9595
if (new->phy_driver->state_control) {
9696
new->phy_driver->state_control(PHY_INTERFACE_RESET, 0);
9797
}
98+
if (new->phy_driver->extension) {
99+
uint8_t tx_time_buffer[4];
100+
uint32_t tx_time = 0;
101+
common_write_32_bit(tx_time, tx_time_buffer);
102+
new->phy_driver->extension(PHY_EXTENSION_SET_TX_TIME, tx_time_buffer);
103+
}
98104
ns_list_add_to_end(&arm_device_driver_list, new);
99105

100106
return new->id;

test/nanostack/unittest/mac/rf_driver_storage/test_rf_driver_storage.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ int8_t test_control(phy_interface_state_e a, uint8_t b){
3434
return 1;
3535
}
3636

37+
int8_t test_extension(phy_extension_type_e extension_type, uint8_t *data_ptr){
38+
return 0;
39+
}
40+
3741
bool test_arm_net_phy_register()
3842
{
3943
int8_t ret = arm_net_phy_register(NULL);
@@ -75,6 +79,7 @@ bool test_arm_net_phy_register()
7579
nsdynmemlib_stub.returnCounter = 1;
7680

7781
driver.state_control = &test_control;
82+
driver.extension = &test_extension;
7883
protocol_tun_driver_stub.int8_value = 0;
7984
ret = arm_net_phy_register(&driver);
8085
if( ret != 0 ){
@@ -190,6 +195,7 @@ bool test_arm_net_phy_mac64_set()
190195
nsdynmemlib_stub.returnCounter = 1;
191196

192197
driver.state_control = &test_control;
198+
driver.extension = &test_extension;
193199
protocol_tun_driver_stub.int8_value = 0;
194200
int8_t ret = arm_net_phy_register(&driver);
195201
if( ret != 0 ){
@@ -214,6 +220,7 @@ bool test_arm_net_phy_mac64_get()
214220
nsdynmemlib_stub.returnCounter = 1;
215221

216222
driver.state_control = &test_control;
223+
driver.extension = &test_extension;
217224
protocol_tun_driver_stub.int8_value = 0;
218225
int8_t ret = arm_net_phy_register(&driver);
219226
if( ret != 0 ){
@@ -245,6 +252,7 @@ bool test_arm_net_phy_rf_type()
245252
nsdynmemlib_stub.returnCounter = 1;
246253

247254
driver.state_control = &test_control;
255+
driver.extension = &test_extension;
248256
protocol_tun_driver_stub.int8_value = 0;
249257
int8_t ret = arm_net_phy_register(&driver);
250258
if( ret != 0 ){
@@ -271,6 +279,7 @@ bool test_arm_net_phy_mtu_size()
271279
nsdynmemlib_stub.returnCounter = 1;
272280

273281
driver.state_control = &test_control;
282+
driver.extension = &test_extension;
274283
protocol_tun_driver_stub.int8_value = 0;
275284
int8_t ret = arm_net_phy_register(&driver);
276285
if( ret != 0 ){
@@ -297,6 +306,7 @@ bool test_arm_net_observer_cb_set()
297306
nsdynmemlib_stub.returnCounter = 1;
298307

299308
driver.state_control = &test_control;
309+
driver.extension = &test_extension;
300310
protocol_tun_driver_stub.int8_value = 0;
301311
arm_net_phy_register(&driver);
302312

0 commit comments

Comments
 (0)