CC2541 AirSync(5)——登录包
来源:互联网 发布:美国黑人解放知乎 编辑:程序博客网 时间:2024/05/17 03:58
未经许可不得转载。
前面说过最好使用 AirSyncDebugger 软件测试程序,第四步就是测试 Auth 包就是“登录包”,主要包括版本、是否加密等,而这些参数最后是要跟服务器中参数相对应的,否则是连接不上微信公众号的。最后打包好的数据就是Dataout[]。
//-----登录包打包------void pack_auth_request(uint8_t *MD5, int MD5_len , int32_t Ver , uint8_t *Dataout, uint16_t *Dataout_len ,uint8_t *MAC ){ AuthRequest *request = (AuthRequest *)malloc(sizeof(AuthRequest)) ; //-----MD5 request->has_md5_device_type_and_device_id = false ; request->md5_device_type_and_deviceid.data = MD5 ; request->md5_device_type_and_deviceid.len = MD5_len ; //-----版本 request->proto_version = Ver ; //----- request->auth_proto = 1 ; //----- 验证及加密的版本号 //request->auth_method = 1 ; request->auth_method = EAM_macNoEncrypt ; request->has_aes_sign = false ; request->aes_sign.data = 0 ; request->aes_sign.len = 0 ; //-----mac address request->has_mac_address = true; request->mac_address.data = MAC ; request->mac_address.len = 6 ; ///-----时区 request->has_time_zone = false ; request->time_zone.str = timezone ; request->time_zone.len = strlen(timezone) ; //-----语言 request->has_language = false ; request->language.str = language ; request->language.len = strlen(language) ; //-----产品名 request->has_device_name = false ; request->device_name.str = device_name ; request->device_name.len = strlen(device_name) ; //-----计算长度及打包 Pack_len = epb_auth_request_pack_size(request) ; Pack_buf = (uint8_t *)malloc(Pack_len) ; epb_pack_auth_request(request, Pack_buf, Pack_len) ; *Dataout_len = Pack_len + 8 ; for(ICount=8; ICount<PACKLEN-1; ICount++)//从第八个数据开始统计 { Dataout[ICount] = 0xFF ; } for(ICount=0; ICount<Pack_len; ICount++) { Dataout[ICount+8] = Pack_buf[ICount] ; } //END free(request) ; free(Pack_buf) ;}
上面完成登录包后,就可以通过程序发送登录包,通过第四步测试,相应的下面也有打包初始包和数据包,都在 Pack_Data() 函数中。
uint8_t Pack_Data(uint16 EmCmdIDData){ if(EmCmdIDData==ECI_req_auth) { pack_auth_request(md5_type_id , sizeof(md5_type_id) , proto_version , PackProtobufData , &PackProtobufLen , mac) ; //打包登录包 PackProtobufData[4] = ((ECI_req_auth & 0xFF00)>>8) ; PackProtobufData[5] = (ECI_req_auth & 0x00FF) ; PacknSeq = 1 ; } else if(EmCmdIDData==ECI_req_init) { pack_Init_request( ) ; //打包初始包 PackProtobufData[4] = ((ECI_req_init & 0xFF00)>>8) ; PackProtobufData[5] = (ECI_req_init & 0x00FF) ; } else if(EmCmdIDData==ECI_req_sendDataToManufacturerSvr) { pack_SendData_request( ) ; //打包数据包 PackProtobufData[4] = ((ECI_req_sendDataToManufacturerSvr & 0xFF00)>>8) ; PackProtobufData[5] = (ECI_req_sendDataToManufacturerSvr & 0x00FF) ; } else { return(ERR_EMCMDID) ; } if(PackProtobufLen > PACKLEN) { return(ERR_LEN) ; } PackProtobufData[0] = MagicNumber ; PackProtobufData[1] = bVer ; PackProtobufData[2] = ((PackProtobufLen & 0xFF00)>>8) ; PackProtobufData[3] = (PackProtobufLen & 0x00FF) ; PackProtobufData[6] = ((PacknSeq & 0xFF00)>>8) ; PackProtobufData[7] = (PacknSeq & 0x00FF) ; PacknSeq++ ; if(PacknSeq >= 65534) { PacknSeq = 1 ; } return(PACK_OK) ;}
1 0
- CC2541 AirSync(5)——登录包
- CC2541 AirSync(2)——广播包
- CC2541 AirSync(4)——封包、解包
- CC2541 AirSync(3)——特征值
- CC2541 连接微信(1)——微信 AirSync 和 微信精简协议 介绍
- cc2541 cc2640 接入微信AirSync协议
- CC254x(cc2540/cc2541)的微信AirSync调试笔记
- CC2541 上微信与AirSync的验证服务与特征值
- CC2541蓝牙学习——ADC
- CC2541蓝牙学习——定时器1的捕获/比较功能(PWM)
- CC2541
- CC2541 程序编译错误——Warning[w52]
- 可穿戴设备(CC2541)上微信(5)
- CC2541 空中升级(OAD)
- 【BLE】CC2541之主机端获取广播包数据
- 【BLE】CC2541实时更新广播包advertData内容
- 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环
- 蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例
- 在kali linux206-01版本上安装vmtools一直不能用
- happens-before
- 两个类A和B,A创建的对象可以计算两个整数的最大公约数,B创建的对象可以求最好公倍数,B类中成员变量是A类声明对象
- HDU 1087
- 【java算法】二叉树遍历、求叶子数--用递归的方法
- CC2541 AirSync(5)——登录包
- 笔记
- Java 中String对象比较方法equals和等号==
- CoordinatorLayout 、FloatingActionButton 、Snackbar、DrawerLayout和NavigationView结合使用demo
- 最小圈基问题
- Method Swizzling、AOP 面向切片编程
- Hibernate缓存
- 一个伟大的发现,装X一下。笔记本win7系统64位机器运行unity 时,屏幕模糊解决办法
- python中的闭包