无线入网分析代码一
2015-06-12 11:08
197 查看
void touch_scan(void)
{
int i;
/*扫描按键*/
if(scan_pad_task() != SCAN_TASK_OK)//按键值确定就会开始扫描 scan_pad_task这是个干嘛用的函数,就是按完按键就扫描
{
return;
}
for(i=0; i<CAP_PAD_NUM; i++)
{
if(0 == cap_pad[i].touch)//如果符合条件结束这一次小循环 下面有对cap_pad[i].touch的赋值,如果还没有用就直接跳过这次的按键扫描
{
continue;//在scan_pad_task里如果过触发了就赋值1
}
// if (!is_task_set(EV_BIND))
if(cap_pad[i].led_on) //cap_pad[i].led_on只是代表扫描完成
{
cap_pad[i].touch = 0;//触摸清零
continue;//如果扫描完成了,结束此次小循环,????如果灯开了为什么结束此次小循环
}
cap_pad[i].led_on = 1;//标志扫描
if ((i==3)&&(cap_pad[0].led_on||cap_pad[1].led_on||cap_pad[2].led_on)) //什么意思没有看懂????
{
cap_pad[3].led_on = 0;
return;
}
if (!is_tpm0_interrupt_enable())//is_tpm0_interrupt_enable这是一个什么中断????
{
enable_tpm0_interrupt();//什么意思????
}
if (device_bind_process==WAIT_FOR_TOUCH)//绑定状态的切换 按2、3按键进入网状态 怎么表现的2、3键
{
if (i==3) //检测到有新设备的时候,状态为WAIT_FOR_TOUCH,按了3键紧接着进入了WAIT_FOR_CONFIRM,进入WAIT_FOR_CONFIRM以后干吗用呢????
{
device_bind_process = WAIT_FOR_CONFIRM; //点击按键后 回复一次2
enter_vlps_xms(50);//进入第功率状态
return;
}
}
cap_pad[i].touch = 0;
if (i==3) //如果为3执行的是第3种情况
if (!(silicon_status & SILLICON_ALL_SET))
{
relay_status_on(i);//点亮i=3
return;
}
else
{
led_on_ctl|=(1<<i);//用来改变LED灯的转态
return;
}//谁来改变silicon_status
if (!(silicon_status & (1 << (SILLICON_CHANNAL_1 + i)))) //如果silicon_status为0,那么就可以执行if下面的函数 木 silicon_status 和后面与是怎么配合使用的
{
relay_status_on(i);//改变的是LED的灯,LED和继电器同时改变
}
else
{
led_on_ctl|=(1<<i);
}
if (1==i||2==i)//这的意义是不是 连续2键和3键后启动入网用的????
{
touch_seq_cnt++;
}
//ctrl_device_opt(logicch2phych[i]);
}
}
只要是触摸2键或3键,就会执行touch_seq_cnt++。这段代码大致对入网就做了这么些事。
#define USER_TOUCH_SEQ_CHECK 0X08
touch_seq_check这个函数是每隔5秒运行一次,但为什么选择USER_TOUCH_SEQ_CHECK为8呢????如果是说明已经入网了
void touch_seq_check(void *args)//added in 2015-3-4 untest 添加这个函数的意思在哪呢????
{
statue_report();//跳出表示有数据????
//无灯亮时不进行处理
if (!(silicon_status&SILLICON_ALL_SET)) goto end; //sleep or not 有状态变化就进入
if (touch_seq_cnt>=USER_TOUCH_SEQ_CHECK) //touch_seq_cnt这参数是干什么用的???? if (1==i||2==i) touch_seq_cnt++; 只在这种情况下运行为什么呢????
{
if (DEVICE_IS_NEW==new_device_flag)//touch_san运行了8次,touch_seq_check才运行一次我就开启
{
notify(EV_BIND);//加入新设备就启动绑定通信一次
}
else
{
adapter_infor_clean(); //执行清理操作//执行这次操作的意义在哪里呢???? 里面有新设备的赋值,不和逻辑???? ????
notify(EV_BIND);//马上进入一次绑定流程
}
bind_state_cnt = BIND_WAIT_TIME;//这里为什么加绑定的时间呢????
}
end:;
touch_seq_cnt=0;
clr_wdog();
}
void adapter_bind(void *args)//added in 2015-3-4 untest
{
//根据亮灯来实施
if (!(silicon_status&(1<<SILLICON_CHANNAL_1))) //状态1为1时,绑定成功,不在绑定。用1键确认绑定成功
{
notify(EV_BIND); //ADDED IN 3-12 UNTTEST,为什么启动自己
return; //无灯亮时不执行
}
randseed++;
if(0xFF==wirless_state_analyse())return; //如果程序处在WAIT_FOR_TOUCH,BIND_SUCCESS,UBIND这几个状态的时候,就返回
if (si4438_delay&&(si4438_delay!=210)) //第一次进入时 delay有值,记得ms--时加上处理,为什么偏偏是210????
{//即便种子为0也不会产生随机数0呀????
bind_listen_send(); //通讯单位为ms 检测是否为新设备,是新设备将等待操作 加入网络 木
notify(EV_BIND);
}
else
{
if (si4438_statue == SI4438_TX) //SI4438_TX 2
{
si4438_delay = rand() % 200;
}
else
{
si4438_delay = rand() % 5 +210;
}
si446x_change_state(1); //什么意思????木
if((0==(cap_pad[0].led_on||cap_pad[1].led_on
||cap_pad[2].led_on||cap_pad[3].led_on))
&&(device_bind_process!=WAIT_FOR_TOUCH))
enter_vlps_xms(50); //在TX&RX之间增加睡眠间隔 保证不复位
srand(randseed);
clr_wdog();
wirless_TX_RX_negation(); //TX RX切换 里面发送握手报文
notify(EV_BIND);
}
}
这个绑定只能分析到这里了,已经找不到其他的了。连续触摸2、3键,表示要入网。随后会有呼吸灯,呼吸灯是怎么进行的呢?
所有灯具全亮时停止点击,这一句是怎么实现的呢???
呼吸灯是怎么实现的呢????
1. 打开无线适配器手机界面,点击扫描设备按钮
2. 快速点击电容触摸开关2,3键 所有灯具全亮时停止点击,已进入绑定模式
3. 等待呼吸灯闪烁,点击触摸1键确认绑定
4. 手机界面显示绑定成功列表
{
int i;
/*扫描按键*/
if(scan_pad_task() != SCAN_TASK_OK)//按键值确定就会开始扫描 scan_pad_task这是个干嘛用的函数,就是按完按键就扫描
{
return;
}
for(i=0; i<CAP_PAD_NUM; i++)
{
if(0 == cap_pad[i].touch)//如果符合条件结束这一次小循环 下面有对cap_pad[i].touch的赋值,如果还没有用就直接跳过这次的按键扫描
{
continue;//在scan_pad_task里如果过触发了就赋值1
}
// if (!is_task_set(EV_BIND))
if(cap_pad[i].led_on) //cap_pad[i].led_on只是代表扫描完成
{
cap_pad[i].touch = 0;//触摸清零
continue;//如果扫描完成了,结束此次小循环,????如果灯开了为什么结束此次小循环
}
cap_pad[i].led_on = 1;//标志扫描
if ((i==3)&&(cap_pad[0].led_on||cap_pad[1].led_on||cap_pad[2].led_on)) //什么意思没有看懂????
{
cap_pad[3].led_on = 0;
return;
}
if (!is_tpm0_interrupt_enable())//is_tpm0_interrupt_enable这是一个什么中断????
{
enable_tpm0_interrupt();//什么意思????
}
if (device_bind_process==WAIT_FOR_TOUCH)//绑定状态的切换 按2、3按键进入网状态 怎么表现的2、3键
{
if (i==3) //检测到有新设备的时候,状态为WAIT_FOR_TOUCH,按了3键紧接着进入了WAIT_FOR_CONFIRM,进入WAIT_FOR_CONFIRM以后干吗用呢????
{
device_bind_process = WAIT_FOR_CONFIRM; //点击按键后 回复一次2
enter_vlps_xms(50);//进入第功率状态
return;
}
}
cap_pad[i].touch = 0;
if (i==3) //如果为3执行的是第3种情况
if (!(silicon_status & SILLICON_ALL_SET))
{
relay_status_on(i);//点亮i=3
return;
}
else
{
led_on_ctl|=(1<<i);//用来改变LED灯的转态
return;
}//谁来改变silicon_status
if (!(silicon_status & (1 << (SILLICON_CHANNAL_1 + i)))) //如果silicon_status为0,那么就可以执行if下面的函数 木 silicon_status 和后面与是怎么配合使用的
{
relay_status_on(i);//改变的是LED的灯,LED和继电器同时改变
}
else
{
led_on_ctl|=(1<<i);
}
if (1==i||2==i)//这的意义是不是 连续2键和3键后启动入网用的????
{
touch_seq_cnt++;
}
//ctrl_device_opt(logicch2phych[i]);
}
}
只要是触摸2键或3键,就会执行touch_seq_cnt++。这段代码大致对入网就做了这么些事。
#define USER_TOUCH_SEQ_CHECK 0X08
touch_seq_check这个函数是每隔5秒运行一次,但为什么选择USER_TOUCH_SEQ_CHECK为8呢????如果是说明已经入网了
void touch_seq_check(void *args)//added in 2015-3-4 untest 添加这个函数的意思在哪呢????
{
statue_report();//跳出表示有数据????
//无灯亮时不进行处理
if (!(silicon_status&SILLICON_ALL_SET)) goto end; //sleep or not 有状态变化就进入
if (touch_seq_cnt>=USER_TOUCH_SEQ_CHECK) //touch_seq_cnt这参数是干什么用的???? if (1==i||2==i) touch_seq_cnt++; 只在这种情况下运行为什么呢????
{
if (DEVICE_IS_NEW==new_device_flag)//touch_san运行了8次,touch_seq_check才运行一次我就开启
{
notify(EV_BIND);//加入新设备就启动绑定通信一次
}
else
{
adapter_infor_clean(); //执行清理操作//执行这次操作的意义在哪里呢???? 里面有新设备的赋值,不和逻辑???? ????
notify(EV_BIND);//马上进入一次绑定流程
}
bind_state_cnt = BIND_WAIT_TIME;//这里为什么加绑定的时间呢????
}
end:;
touch_seq_cnt=0;
clr_wdog();
}
void adapter_bind(void *args)//added in 2015-3-4 untest
{
//根据亮灯来实施
if (!(silicon_status&(1<<SILLICON_CHANNAL_1))) //状态1为1时,绑定成功,不在绑定。用1键确认绑定成功
{
notify(EV_BIND); //ADDED IN 3-12 UNTTEST,为什么启动自己
return; //无灯亮时不执行
}
randseed++;
if(0xFF==wirless_state_analyse())return; //如果程序处在WAIT_FOR_TOUCH,BIND_SUCCESS,UBIND这几个状态的时候,就返回
if (si4438_delay&&(si4438_delay!=210)) //第一次进入时 delay有值,记得ms--时加上处理,为什么偏偏是210????
{//即便种子为0也不会产生随机数0呀????
bind_listen_send(); //通讯单位为ms 检测是否为新设备,是新设备将等待操作 加入网络 木
notify(EV_BIND);
}
else
{
if (si4438_statue == SI4438_TX) //SI4438_TX 2
{
si4438_delay = rand() % 200;
}
else
{
si4438_delay = rand() % 5 +210;
}
si446x_change_state(1); //什么意思????木
if((0==(cap_pad[0].led_on||cap_pad[1].led_on
||cap_pad[2].led_on||cap_pad[3].led_on))
&&(device_bind_process!=WAIT_FOR_TOUCH))
enter_vlps_xms(50); //在TX&RX之间增加睡眠间隔 保证不复位
srand(randseed);
clr_wdog();
wirless_TX_RX_negation(); //TX RX切换 里面发送握手报文
notify(EV_BIND);
}
}
这个绑定只能分析到这里了,已经找不到其他的了。连续触摸2、3键,表示要入网。随后会有呼吸灯,呼吸灯是怎么进行的呢?
所有灯具全亮时停止点击,这一句是怎么实现的呢???
呼吸灯是怎么实现的呢????
1. 打开无线适配器手机界面,点击扫描设备按钮
2. 快速点击电容触摸开关2,3键 所有灯具全亮时停止点击,已进入绑定模式
3. 等待呼吸灯闪烁,点击触摸1键确认绑定
4. 手机界面显示绑定成功列表
相关文章推荐
- [Spring]04_最小化Spring XML配置
- python通过POST提交页面请求
- C#实现将像素转换为页面单位的方法
- Spring中Adivisor和Aspect的区别(自我理解)
- Eclipse常用快捷键记录
- ADO.NET编程之基础知识
- Java环境配置
- c语言实现BMP图像转换为灰度图
- Eclipse将引用了第三方jar包的Java项目打包成jar文件的两种方法
- C、C++写二进制数据到mysql的Blob字段/插入images
- c++ 实现结构体单链表的 创建 插入 删除等操作
- C# Socket模块
- Java中Integer的最大值和最小值
- 《编程珠玑》阅读小记(7) — 代码调优与节省空间
- 《编程珠玑》阅读小记(7) — 代码调优与节省空间
- java FTP上传文件(进度条显示进度)
- 利用Spring自定义AOP进行Session超时自动跳转到登录页面
- java中的单例设计模式
- C#中事件的使用
- Java thread jargon