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
原创粉丝点击