Skip to content

Commit b2e7efc

Browse files
author
Jarkko Paso
committed
FHSS WS: Get MAC channel from FHSS when starting RF interface
1 parent fe2b448 commit b2e7efc

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

nanostack/fhss_api.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,9 @@ typedef bool fhss_data_tx_fail(const fhss_api_t *api, uint8_t handle, int frame_
132132
* @param api FHSS instance.
133133
* @param fhss_state FHSS state (FHSS states are defined by FHSS api).
134134
* @param pan_id PAN id of the network FHSS synchronizes with.
135+
* @return -1 when failed, otherwise current MAC channel.
135136
*/
136-
typedef void fhss_synch_state_set(const fhss_api_t *api, fhss_states fhss_state, uint16_t pan_id);
137+
typedef int16_t fhss_synch_state_set(const fhss_api_t *api, fhss_states fhss_state, uint16_t pan_id);
137138

138139
/**
139140
* @brief Read timestamp.

source/MAC/IEEE802_15_4/mac_mlme.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -400,13 +400,14 @@ int8_t mac_mlme_start_req(const mlme_start_t *s, struct protocol_interface_rf_ma
400400

401401
tr_debug("MAC: Start network %u channel %x panid", s->LogicalChannel, s->PANId);
402402
mac_mlme_set_panid(rf_mac_setup, s->PANId);
403+
403404
// Synchronize FHSS
404405
if (rf_mac_setup->fhss_api) {
405-
rf_mac_setup->fhss_api->synch_state_set(rf_mac_setup->fhss_api, FHSS_SYNCHRONIZED, s->PANId);
406+
rf_mac_setup->mac_channel = rf_mac_setup->fhss_api->synch_state_set(rf_mac_setup->fhss_api, FHSS_SYNCHRONIZED, s->PANId);
407+
} else {
408+
rf_mac_setup->mac_channel = s->LogicalChannel;
406409
}
407410

408-
rf_mac_setup->mac_channel = s->LogicalChannel;
409-
410411
mac_mlme_start_request(rf_mac_setup);
411412
if (s->PANCoordinator) {
412413
//tr_debug("Cordinator");

source/Service_Libs/fhss/fhss.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -700,16 +700,16 @@ static void fhss_update_beacon_info_lifetimes(fhss_structure_t *fhss_structure,
700700
}
701701
}
702702

703-
static void fhss_synch_state_set_callback(const fhss_api_t *api, fhss_states fhss_state, uint16_t pan_id)
703+
static int16_t fhss_synch_state_set_callback(const fhss_api_t *api, fhss_states fhss_state, uint16_t pan_id)
704704
{
705705
fhss_structure_t *fhss_structure = fhss_get_object_with_api(api);
706706
if (!fhss_structure) {
707-
return;
707+
return -1;
708708
}
709709
// State is already set
710710
if (fhss_structure->fhss_state == fhss_state) {
711711
tr_debug("Synch same state %u", fhss_state);
712-
return;
712+
return -1;
713713
}
714714

715715
if (fhss_state == FHSS_UNSYNCHRONIZED) {
@@ -723,7 +723,7 @@ static void fhss_synch_state_set_callback(const fhss_api_t *api, fhss_states fhs
723723
// Do not synchronize to current pan
724724
if (fhss_structure->bs->synch_panid == pan_id) {
725725
tr_debug("Synch same panid %u", pan_id);
726-
return;
726+
return -1;
727727
}
728728
fhss_generate_scramble_table(fhss_structure);
729729

@@ -748,11 +748,11 @@ static void fhss_synch_state_set_callback(const fhss_api_t *api, fhss_states fhs
748748
fhss_start_timer(fhss_structure, fhss_structure->bs->synch_configuration.fhss_superframe_length, fhss_superframe_handler);
749749
} else {
750750
tr_error("Synch info not found");
751-
return;
751+
return -1;
752752
}
753753
}
754754
fhss_structure->fhss_state = fhss_state;
755-
return;
755+
return fhss_structure->rx_channel;
756756
}
757757

758758
static void fhss_beacon_decode_raw(fhss_synchronization_beacon_payload_s* dest, const uint8_t* buffer)

source/Service_Libs/fhss/fhss_ws.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,12 +283,12 @@ static uint32_t fhss_ws_get_sf_timeout_callback(fhss_structure_t *fhss_structure
283283
return fhss_structure->ws->fhss_configuration.fhss_uc_dwell_interval * 1000;
284284
}
285285

286-
static void fhss_ws_synch_state_set_callback(const fhss_api_t *api, fhss_states fhss_state, uint16_t pan_id)
286+
static int16_t fhss_ws_synch_state_set_callback(const fhss_api_t *api, fhss_states fhss_state, uint16_t pan_id)
287287
{
288288
(void) pan_id;
289289
fhss_structure_t *fhss_structure = fhss_get_object_with_api(api);
290290
if (!fhss_structure) {
291-
return;
291+
return -1;
292292
}
293293
if (fhss_state == FHSS_SYNCHRONIZED) {
294294
uint32_t fhss_broadcast_interval = fhss_structure->ws->fhss_configuration.fhss_broadcast_interval;
@@ -306,7 +306,11 @@ static void fhss_ws_synch_state_set_callback(const fhss_api_t *api, fhss_states
306306
}
307307

308308
fhss_structure->fhss_state = fhss_state;
309-
return;
309+
int16_t current_channel = fhss_structure->rx_channel;
310+
if (fhss_structure->ws->is_on_bc_channel == true) {
311+
current_channel = fhss_structure->ws->bc_channel;
312+
}
313+
return current_channel;
310314
}
311315

312316
static void fhss_ws_update_uc_channel_callback(fhss_structure_t *fhss_structure)

0 commit comments

Comments
 (0)