static void req_start(uint8 chan, bool coord) /* this function configures the coordinator. * NOTE: when in periodic mode, active scan will NOT be answered immediatly. */ { void *mac = pvAppApiGetMacHandle(); MAC_Pib_s *pib = MAC_psPibGetHandle(mac); MAC_MlmeReqRsp_s mlmereq; MAC_MlmeSyncCfm_s mlmecfm; MAC_vPibSetShortAddr(mac, 0x0000); pib->bAssociationPermit = true; memcpy(&pib->sCoordExtAddr, ieee_get_mac(), sizeof(MAC_ExtAddr_s)); mlmereq.u8Type = MAC_MLME_REQ_START; mlmereq.u8ParamLength = sizeof(MAC_MlmeReqScan_s); mlmereq.uParam.sReqStart.u16PanId = IEEE802154_PANDID; mlmereq.uParam.sReqStart.u8Channel = chan; mlmereq.uParam.sReqStart.u8BeaconOrder = BEACON_ORDER; mlmereq.uParam.sReqStart.u8SuperframeOrder = SUPERFRAME_ORDER; mlmereq.uParam.sReqStart.u8PanCoordinator = coord; mlmereq.uParam.sReqStart.u8BatteryLifeExt = false; mlmereq.uParam.sReqStart.u8Realignment = false; mlmereq.uParam.sReqStart.u8SecurityEnable = false; vAppApiMlmeRequest(&mlmereq, &mlmecfm); }
int start_sniffer(int channel) { void *mac; MAC_Pib_s *pib; int res; rxq_init(); /* setup mac <-> app interface */ u32AppApiInit((PR_GET_BUFFER) rxq_mlme_alloc, (PR_POST_CALLBACK) dummy, NULL, (PR_GET_BUFFER) rxq_mcps_alloc, (PR_POST_CALLBACK) dummy, NULL); /* get mac and pib handles */ mac = pvAppApiGetMacHandle(); pib = MAC_psPibGetHandle(mac); /* do a full reset */ req_reset(true); MAC_vPibSetShortAddr(mac, 0x0001); MAC_vPibSetPromiscuousMode(mac, true, true); res = req_start(channel, true); MAC_vPibSetPromiscuousMode(mac, true, false); return res; }