同的国家和地区规定了在本国或本地区可以使用的信道、射频信号在信道中的最大发射功率。工作在不同信道的射频信号,信号强度可能会有差别。国家码和信道顺从表、各信道的功率限制值、信道编号和频率。
开发人员需要一份国家对应得信道列表,用于限制用户的配置。原厂sdk的驱动中有对应的列表,但一般比较庞大难懂,提取出来也很麻烦。如果设备支持AC控制,AC的配置页面也需要该列表,解决方法是给一个通用接口提供页面查询。在开发过程中,也经常遇到国家代码问题,所以就花时间将国家码顺从表整理成了数据库、json、数组,开发者可以根据个人喜好来调用。
考虑到该顺从表非常庞大,将信道列表按位存储,这样可以节省很多空间,如果直接存在c代码中,通过编译,占用的空间就更小了。当然,如果是在AC端直接可以用数据库方式查询,所以数据库设计也没有考虑空间问题,一共才3000多条记录,占几十K,可以忽略。也可以生成json配置文件,这种做法跟数据库差不多,但考虑到json文件太大,就没有去生成了。
char *CCODE_RADIO_MODE_LIST[] = {
"11b",
"11bg",
"11g",
"11gnonly",
"11gn",
"11gnonly40+",
"11gn40+",
"11gnonly40-",
"11gn40-",
"11a",
"11anonly",
"11an",
"11anonly40+",
"11an40+",
"11anonly40-",
"11an40-",
"11acvht",
"11acvht40+",
"11acvht40-",
"11acvht80"
};
int CHANNEL_TABLE_24G[] = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14};
int CHANNEL_TABLE_5G[] = {
36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165,169,173};
typedef struct country_node{
u_int8_t radio_type;
char cname[3];
u_int8_t wl_mode;
u_int8_t min_tx;
u_int8_t max_tx;
u_int32_t channel_bits;
}country_node_t;
country_node_t country_table[] =
{
{
0,"HN",0,3,27,0x1fff},
{
0,"HN",1,3,27,0x1fff},
{
0,"HN",2,3,27,0x1fff},
{
0,"HN",3,3,27,0x1fff},
{
0,"HN",4,3,27,0x1fff},
{
0,"HN",5,3,27,0x1ff},
{
0,"HN",6,3,27,0x1ff},
{
0,"HN",7,3,27,0x1ff0},
{
0,"HN",8,3,27,0x1ff0},
{
0,"MC",0,3,27,0x1fff},
{
0,"MC",1,3,27,0x1fff},
{
0,"MC",2,3,27,0x1fff},
{
0,"MC",3,3,27,0x1fff},
{
0,"MC",4,3,27,0x1fff},
{
0,"MC",5,3,27,0x1ff},
{
0,"MC",6,3,27,0x1ff},
{
0,"MC",7,3,27,0x1ff0},