I using two BOOSTXL-CC3135 as devboards to implement radio exchange in transceiver on 5 GHz channels
Code for initialization:
SL_DEBUG("start SimpleLink\n");
ret = sl_Start(NULL, comm_sl_ctx.spi_dev, NULL);
SL_DEBUG("SL role %d\n", ret);
if(ret == start_role){
printf("role is correct, waiting to acquiring ip ... \n");
if(start_role == ROLE_AP && (ret = comm_simplelink_wait_acqured_ip())){
SL_DEBUG("Error wait SimpleLink ipv4 aquired, ret %d\n", ret);
break;
}
printf("\ndone\n");
}else if(ret != start_role){
printf("switching in %s mode\n", (start_role == ROLE_AP) ? "AP" : "STA");
if((ret = comm_simplelink_switch_mode(start_role)) != start_role){
SL_DEBUG("Error set SimpleLink role to AP, ret %d\n", ret);
break;
}
}
SL_DEBUG("get version\n");
pConfigLen = sizeof(ver);
pConfigOpt = SL_DEVICE_GENERAL_VERSION;
if((ret = sl_DeviceGet(SL_DEVICE_GENERAL, &pConfigOpt, &pConfigLen, (_u8 *)(&ver)))){
SL_DEBUG("Error get SimpleLink version info, ret %d\n", ret);
break;
}
SL_DEBUG("\nCHIP %d, "
"MAC 31.%d.%d.%d.%d, "
"PHY %d.%d.%d.%d, "
"NWP %d.%d.%d.%d, "
"ROM %d, "
"HOST %d.%d.%d.%d\n",
ver.ChipId,
ver.FwVersion[0], ver.FwVersion[1],
ver.FwVersion[2], ver.FwVersion[3],
ver.PhyVersion[0], ver.PhyVersion[1],
ver.PhyVersion[2], ver.PhyVersion[3],
ver.NwpVersion[0], ver.NwpVersion[1], ver.NwpVersion[2], ver.NwpVersion[3],
ver.RomVersion,
SL_MAJOR_VERSION_NUM, SL_MINOR_VERSION_NUM, SL_VERSION_NUM, SL_SUB_VERSION_NUM);
SL_DEBUG("set enable 5G\n");
if((ret = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_ENABLE_5G, sizeof(enable), (_u8 *)&enable))){
SL_DEBUG("Error set SimpleLink 5G enable, ret %d\n", ret);
break;
}
_u16 macAddressLen = sizeof(comm_sl_ctx.mac);
_u16 ConfigOpt = 0;
if((ret = sl_NetCfgGet(SL_NETCFG_MAC_ADDRESS_GET,&ConfigOpt,&macAddressLen,(_u8 *)comm_sl_ctx.mac))){
SL_DEBUG("Error get MAC addr, ret %d\n", ret);
break;
}
SL_DEBUG("MAC addr %02X:%02X:%02X:%02X:%02X:%02X:\n", comm_sl_ctx.mac[0], comm_sl_ctx.mac[1], comm_sl_ctx.mac[2],
comm_sl_ctx.mac[3], comm_sl_ctx.mac[4], comm_sl_ctx.mac[5]);
SL_DEBUG("set device name\n");
if((ret = sl_NetAppSet(SL_NETAPP_DEVICE_ID, SL_NETAPP_DEVICE_URN, strlen(device_name), device_name))){
SL_DEBUG("Error set SimpleLink name, ret %d\n", ret);
break;
}
SL_DEBUG("set enable 5G\n");
if((ret = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_ENABLE_5G, sizeof(enable), (_u8 *)&enable))){
SL_DEBUG("Error set SimpleLink 5G enable, ret %d\n", ret);
break;
}
SL_DEBUG("reset SimpleLink\n");
if((ret = comm_simplelink_reset()) != start_role){
SL_DEBUG("Error SimpleLink interface reset, ret %d\n", ret);
break;
}
SL_DEBUG("opening raw socket for ch %d\n", ch);
if((comm_sl_ctx.sl_raw_socket = sl_Socket(SL_AF_RF ,SL_SOCK_RAW, ch)) < 0){
SL_DEBUG("Error opening RAW socket %d\n", ret);
break;
}
if(!(comm_sl_ctx.raw_tx_frame = (uint8_t *)malloc(SL_RAW_FRAME_TX_BUFF_SIZE))){
SL_DEBUG("Error allocating memory for raw tx frame\n");
ret = -ENOMEM;
break;
}
if(!(comm_sl_ctx.raw_rx_frame = (uint8_t *)malloc(SL_RAW_FRAME_RX_BUFF_SIZE))){
SL_DEBUG("Error allocating memory for raw tx frame\n");
ret = -ENOMEM;
break;
}Code for receiving frames
do{
if((ret = sl_Recv(comm_sl_ctx.sl_raw_socket, comm_sl_ctx.raw_rx_frame, len, 0)) < 0){
SL_DEBUG("Error receiving frame %d\n", ret);
break;
}
SL_DEBUG("receive packet with len %d: rate %d, ch %d, rssi %d, timestamp %d\n", ret, packet->ti_header.rate, packet->ti_header.channel, packet->ti_header.rssi, packet->ti_header.timestamp );
if(ret < sizeof(comm_sl_raw_rx_packet_t)){
SL_DEBUG("packet size less than expected\n");
continue;
}
if(memcmp(packet->mac_header.receiver_addr, comm_sl_ctx.mac, sizeof(comm_sl_ctx.mac)) && memcmp(packet->mac_header.receiver_addr, SL_BROADCAST_BSSID, sizeof(comm_sl_ctx.mac))){ //this packet not for us
printf("skip packet\n");
continue;
}
}while(0);
code to send data
#define SL_SEND_FRAME_OPT(ch) SL_WLAN_RAW_RF_TX_PARAMS(ch, SL_WLAN_RATE_1M, 0 ,SL_WLAN_LONG_PREAMBLE)
comm_sl_raw_tx_packet_t *packet = (comm_sl_raw_tx_packet_t *)comm_sl_ctx.raw_tx_frame;
memset(packet, 0, sizeof(*packet));
packet->mac_header.frame_control.proto_version = SL_TRANSCIVER_FRAME_PROTO;
packet->mac_header.frame_control.type = SL_TRANSCIVER_FRAME_TYPE;
packet->mac_header.frame_control.subtype = SL_TRANSCIVER_FRAME_SUBTYPE;
packet->mac_header.frame_control.from_ds = 0;
packet->mac_header.duration = SL_FRAME_DURATION;
memcpy(packet->mac_header.transmitter_addr, comm_sl_ctx.mac, sizeof(packet->mac_header.transmitter_addr));
memcpy(packet->mac_header.receiver_addr, dst_mac, sizeof(packet->mac_header.receiver_addr));
memcpy(packet->mac_header.bssid_addr, bssid, sizeof(packet->mac_header.bssid_addr));
memcpy(comm_sl_ctx.raw_tx_frame + sizeof(*packet), data, to_send);
ret = sl_Send(comm_sl_ctx.sl_raw_socket, comm_sl_ctx.raw_tx_frame, sizeof(*packet) + to_send, SL_SEND_FRAME_OPT(comm_sl_ctx.ch));
As transmitter_addr I use mac of current cc module, for receiver_addr and bssid_addr I use broadcast mac FF:FF:FF:FF:FF:FF
This code produce header like in examples: 0x88, 0x00, 0x2c, 0x00 receiver, transmitter, bssid mack
For ch form 1 to 13, i.e 2,4 GHz channels this code work correct, for ch 36, 40 and any other 5GHz subrange I did not receive any packets form transceiver (but still receive some from air from another wifi devices)
I try to play with
SL_DEBUG("set country code\n");
if((ret = sl_WlanSet(SL_WLAN_CFG_GENERAL_PARAM_ID, SL_WLAN_GENERAL_PARAM_OPT_COUNTRY_CODE, strlen(CountryCode), CountryCode))){
SL_DEBUG("Error set SimpleLink country code, ret %d\n", ret);
break;
}
SL_DEBUG("set channel\n");
if((ret = sl_WlanSet(SL_WLAN_CFG_AP_ID, SL_WLAN_AP_OPT_CHANNEL, sizeof(channel), &channel))){
SL_DEBUG("Error set SimpleLink channel, ret %d\n", ret);
break;
}
with countrycode = "US" but this didn`t help(
Did I miss something in configuration/sending/receiving ?