基站定位

MTK获取基站的cell_id 发送请求Lai消息给底层,然后处理反馈信息取出cell_id。然后处理反馈信息取出cell_id。再根据cell_id去数据库查经纬度了。 注册消息处理函数 [code="c"]void GetCellIDStartReq(U32 mod_id, PU8 info_req) { SetProtocolEventHandler(parsing_cellId_data,MS... 阅读详情

思路:
要获得cell id,可以通过发送 MSG_ID_MMI_EM_UPDATE_REQ来获得
网络回来的消息为MSE_ID_MMI_EM_UPDATE_RSP,MSG_ID_MMI_EM_STATUS_ID.
可以自行实现这两个消息的处理函数
处理的函数 mmi_em_update_rsp_hdlr 处理请求是否成功。如果不影响原来的工程模式处理可以使用EnginerrModeStartRes
           mmi_em_status_ind 处理返回来的所有信息。
要想停止 MSG_ID_MMI_EM_STATUS_IND消息,可以在次发送MSG_ID_MMI_EM_UPDATE_REQ,并将update_req->info_request全部置为EM_OFF.

基站定位:
cell_id                    unique identifier of the cell (cid for gsm ,bid for cdma)
location_area_code         location area code (lac for gsm ,nid for cdma) 位置区号
mobile_country_code        mobile country code (mcc for gsm and cdma) 移动国家码
mobile_network_code        mobile network code (mnc for gsm,sid for cdma) 移动网络码
age                        the number of milliseconds since this cell was primary,if age is 0,the cell_id represents a current measurement
signal_strength            radio signal strength mearsured in dbm
timing_advance             represents the distance from the cell tower.each unit is roughly 550 meters
///其他需要调用基站定位数据地方,可以通过注册一个回调函数来得到相应的基站信息
例如:

1.cagps_reg_valid_cb(cagps_greg_send_agps);
  cagps_open();
2.cagps_unreg_valid_cb(cagps_gred_send_agps);
  cagps_close();
 
typedef struct
{
   WORD cell_id;
   WORD location_area_code;
   WORD mobile_country_code;
   WORD mobile_network_code;
   WORD age;
   S16  signal_strength;
   WORD timing_advance;
}AGPSDataStruct;
typedef enum
{
   AI_NULL = 0x00;
   AI_LAI  = 0x01;
   AI_MR   = 0x02;
   AI_ALL  = 0x03
}AGPS_ITEM;
///基站定位数据回调
typedef void (*cagps_set_agpsdata_cb)(const AGPSDataStruct *p_agpsdata);
typedef struct
{
  BOOL bt_open;
  AGPSDataStruct agpsdata;
  AGPS_ITEM ai_item;
  cagps_set_agpsdata_cb set_agpsdata_cb[MAX_GPSM_MODULE_SIZE]; 
}AGPSParserStruct;
static AGPSParserStruct gAGPSParser;

///启动基站定位的时候需要对其初始化
///1.初始化参数的值,都设置为0.
///2.设置ai_item的参数为AI_NULL表示为接收到基站的信息 AI_LAI AI_MR 表示接收到了LAI MR参数
///3.设置消息映射函数。
void cagps_init(void)
{
   meset(&gAGPSParser,0,sizeof(AGPRSParserStruct));
   gAGPSParser.ai_item = AI_NULL;
   cagps_setevent_handler();
}
///设置消息映射函数,当请求基站定位的时候会参数两个消息MSG_ID_MMI_EM_UPDATE_RSP和MSG_ID_MMI_EM_STATUS_IND
///MSG_ID_MMI_EM_UPDATE_RSP 看是否请求成功。
///MSG_ID_MMI_EM_STATUS_IND 对得到的数据进行处理。
///[注]此处用的是mmi_frm_set_protocol_event_handler();
void cagps_setevent_handler();
{
    //SetProtocolEventHandler();
 mmi_frm_set_protocol_event_handler(cagps_update_rsp_hdlr,MSG_ID_MMI_EM_UPDATE_RSP,MMI_TRUE);
 mmi_frm_set_protocol_event_handler(cagps_status_ind_hdlr,MSG_ID_MMI_EM_STATUS_IND,MMI_TRUE);
}
///对MSG_ID_MMI_EM_UPDATE_RSP的处理
static void cagps_update_rsp_hdlr(void *inMsg)
{
    /*mmi_em_update_rsp_struct *rsp_p = (mmi_em_update_rsp_struct *)inMsg;
 if(rsp_p == NULL)
 {
   
 }
 if(rsp_p->result)
 {
 }
 else
 {
 }*/
}
///对MSG_ID_MMI_EM_STATUS_IND的处理
/*typedef struct
{
   LOCAL_PARA_HDR
   kal_uint8 mod_id;
   kal_uint32 em_info;
   peer_buff_struct* info;
} mmi_em_status_ind_struct;
typedef struct
{   
 kal_uint8 mcc[3]; //MCC
 kal_uint8 mnc[3]; //MNC
 kal_uint8 lac[2]; //LAC
 kal_uint16 cell_id;  //cell ID
 kal_uint8 nc_info_index; // index in rlc array to acquire the corresponding arfcn, bsic, rxlevel...
} rr_em_lai_info_struct;
*/
static void cagps_status_ind_hdlr(void *info)
{
   mmi_em_status_ind_struct *msg = (mmi_em_status_ind_struct *)info;
  
   if(msg == NULL)
   {
   }
   /// 处理lai
   if(msg->em_info == RR_EM_LAI_INFO)
   {
     rr_em_lai_info_struct *data_ptr;
  U16 mm_pdu_len;
  data_ptr = (rr_em_lai_info_struct *)get_pdu_ptr(msg->info,&mm_pdu_len);
  cagps_parse_lai_info(data_ptr);
   }
   ///处理 MR
   if(msg->em_info == RR_EM_MEASUREMENT_REPORT_INFO)
   {
     rr_em_measurement_report_info_struct *data_ptr;
  U16 mm_pdu_len;
  data_ptr = (rr_em_measurement_report_info_struct *)get_pdu_ptr(msg->info,&mm_pud_len);
  cagps_parse_mr_info(data_ptr);
   }
   free_peer_buff(msg->info);
}
///解析得到的LAI数据
static void cagps_parse_lai_info(const rr_em_lai_info_struct *data_ptr)
{
  AGPSDataStruct *p_ckAGPSData = &gAGPSParser.agpsdata;
 
  p_ckAGPSData->cell_id = data_ptr->cell_id;
  if(data_ptr->cell_id == 0)
  {
     return;
  }
  ///lac
  memcpy(&p_ckAGPSData->location_area_code,data_ptr->lac,sizeof(WORD));
  p_ckAGPSData->location_area_code = cmo_short_reverse((short)p_ckAGPSData->location_area_code);
 
  ///mcc
  p_ckAGPSData->mobile_country_code = data_ptr->mcc[0]*100 + data_ptr->mcc[1]*10 + data_ptr->mcc[2];
 
  ///mnc
  if(data_ptr->mnc[2] != 0x0f)
  {
     p_ckAGPSData->mobile_network_code = data_ptr->mnc[0]*100 + data_ptr->mnc[1]*10 + data_ptr->mnc[2];
  }
  else
  {
    p_ckAGPSData->mobile_network_code = data_ptr->mnc[0]*10 + data_ptr->mnc[1];
  }
 
  gAGPSParser.ai_item | = AI_LAI;
 
  if(gAGPSParser.ai_item == AI_ALL)
  {
     cagps_excute_valid_cb(&gAGPSParser.agpsdata);
  cagps_reset();
  }
}
///解析MR数据
static void cagps_parse_mr_info(const rr_em_measurement_report_info_struct *data_ptr)
{
   AGPSDataStruct *p_ckAGPSData = &gAGPSParser.agpsdata;
   ///ta
   if(data_ptr->timing_advance != 0xff)
   {
      p_ckAGPSData->timing_advance = data_ptr->timing_advance * 550;
   }
   ///RSSI
   p_ckAGPSData->signal_strength = data_ptr->serv_rla_in_quarter_dbm * 4;
  
   gAGPSParser.ai_item | = AI_MR;
  
   if(gAGPSParser.ai_item == AI_ALL)
   {
       cagps_excute_valid_cb(&gAGPSParser.agpsdat);
    agps_reset();
   }
}
///重置基站定位
static void cagps_reset(void)
{
  gAGPSParser.ai_item = AI_NULL;
}
///short类型转换
short cmo_short_reverse(short sh)
{
   char *p0 = (char *)&sh;
   short ret = 0;
   char *p1 = (char *)&ret;
  
   p1[0] = p0[0];
   p1[1] = p0[1];
  
   return ret;
}
///注册回调函数
REG_TYPE cagps_reg_valid_cb(cagps_set_agpsdata_cb fun_ptr)
{
    U8 i = 0;
 cagps_set_agpsdata_cb *parser_data_cb_list = gAGPSParer.set_agpsdata_cb;
 
 ASSERT(fun_ptr != NULL);
 while(parser_data_cb_list[i] != fun_ptr)
 {
    if(parser_data_cb_list[i] == fun_ptr)
    {
       return RT_HAS_DONE;
    }
    i++;
    if(i >= 6)
    {
      return RT_FAILED;
    }
 }
 
 parser_data_cb_list[i] = fun_ptr;
 
 return RT_SUCCESSED;
}
///取消注册回调函数
BOOL cagps_unreg_valid(cagps_set_agpsdata_cb fun_ptr)
{
   U8 i = 0;
   cagps_set_agpsdata_cb *parser_data_cb_list = gAGPSParser.set_agpsdata_cb;
   ASSERT(fun_ptr != NULL);
  
   while(i < 6)
   {
       if(parser_data_cb_list[i] == fun_ptr)
    {
        parser_data_cb_list[i] = NULL;
     return TRUE;
    }
    i++;
   }
   return FALSE;
}
///执行回调函数
static void cagps_excute_valid(const AGPSDataStruct *p_agpsdata)
{
   U8 i = 0;
   cagps_set_agpsdata_cb *parser_data_cb_list = gAGPSParser.set_agpsdata_cb;
   while(i < 6)
   {
       if(parser_data_cb_list[i] != NULL)
    {
       (*parser_data_cb_list[i])(p_agpsdata);
    }
    i++;
   }
}
///打开基站定位。发送消息MSG_ID_MMI_EM_UPDATE_REQ
BOOL cagps_open(void)
{
   if(!gAGPSParser.bt_open)
   {
      gAGPSParser.bt_open = TRUE;
   share_SendEMUpdateReq(TRUE);
   }
   return gAGPSParser.bt_open;
}
///关闭基站定位
void cagps_close(void)
{
   if(gAGPSParser.bt_open)
   {
      share_SendEMUpdateReq(FALSE);
      gAGPSParser.bt_open = FALSE;
   cagps_restet();
   }
}
///向系统发送MSG_ID_MMI_EM_UPDATE_REQ的消息处理
/*
typedef struct
{
 LOCAL_PARA_HDR
 kal_uint8 info_request[EM_INFO_REQ_NUM];
} mmi_em_update_req_struct;
*/
void share_SendEMUpdataReq(BOOL bState)
{
   S32 i;
   MYQUEUE Message;
   mmi_em_update_req_struct *update_req;
  
   Message.oslMsgId = MSG_ID_MMI_EM_UPDATE_REQ;
   update_req = OslConstructDataPtr(sizeof(mmi_em_update_req_struct));
   for(i = 0; i < EM_INFO_REQ_NUM; i++)
   {
      update_req->info_requsest[i] = EM_OFF;
   }
   if(bState)
   {
      update_req->info_request[RR_EM_LAI_INFO] = EM_ON;
   update_req->info_request[RR_EM_MESUREMENT_REPORT_INFO] = EM_ON;
   }
  
   Message.oslDataPtr = (oslParaType *)updata_req;
   Message.oslPeerBuffPtr = NULL;
   Message.oslSrcID = MOD_MMI;
   Message.oslDestId = MOD_L4C;
}

///外部得到基站信息
AGPSDataStruct *cagps_get_data(void)
{
    WORD wCID = gAGPSParser.agpsdata.cell_id;
 
 if(wCID == 0)
 {
 }
 return &gAGPSParser.agpsdata;
}

Android基站定位详解 本文主要介绍android基站定位的基本思路,介绍了一些TelephonyManager中用到方法。最后简单说明google定位服务与android提供参数之间的联系。 阅读详情

相关推荐

利用基站定位手机

                                                                                                                                                                    利用基站定位手机             在手机拨号键盘处输入...

William234的博客 2万+

MTK获取基站的cell_id 【转】

MTK获取基站的cell_id 博客分类: MTK MTK C C++ C# 发送请求Lai消息给底层,然后处理反馈信息取出cell_id。然后处理反馈信息取出cell_id。再根据cell_id去数据库查经纬度了。 注册消息处理函数 C代码   void  GetCellIDStartReq(U32 ...

萧瑟中的苦索 339

基站定位-基于基站的移动台定位

西安邮电学院 董安亮  摘要:  基于gpsOne技术的移动台定位技术已经在C网实现,而GSM手机定位方式通常可分为基于网络方式和基于终端方式两种。这里介绍的是一种基于基站的移动台定位技术。  关键词:GPSgpsOne JVM J2ME 基于基站的定位 基站定位 GPS  一、GPS系统简介  1、GPS系统组成  GPS(GlobalPositioningSystem)全球定位系统,是美国

热爱嵌入式Linux Wince Android和硬件设计 5839

MTK基站定位

$GPGGA,hhmmss.ssss,ddmm.mmmm,a,dddmm.mmmm,a,x,xx,x.x,x.x,M,,M,x.x,xxxx*CS $GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,00

aaaaatiger--寻路 4966

基站定位查询接口

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33922670的博客 6428

(一)GPS与基站定位

& nbsp 最近看到好多对定位方式的含义及原理,特别是wifi辅助定位的原理搞不明白,所以整理了一下找到的文章再加上自己的理解,科普一下~~& nbsp 首先说一下要阐述这些东西: & nbsp 1、GPS定位。2、基站定位。3、WiFi辅助定位。4、AGPS定位。5、Glonass定位。6、北斗定位。7、定位举例。& nbsp 说个题外话,从4s开始,iPhone手机具有以上中1、2、3、4

大牙哥哥的博客 8887

MTK开发快速诊断手册_09B

1 应用GROUP MMI_ID mmi_frm_group_create (MMI_ID parent_id, MMI_ID group_id, mmi_proc_func proc, void *user_data) MMI_ID mmi_frm_group_enter (MMI_ID group_id, mmi_group_enter_flag flag) 例如: mmi_frm_g

chaod5659的专栏 843

OneNET物联网平台开发1 - LBS基站定位_http接入(当前仅支持移动基站定位)

3.用于计算签名的字符串 StringForSignature的组成顺序按照参数名称进行字符串排序,以’\n’作为参数分隔,当前版本中按照如下顺序进行排序:et、method、res、version。注意:每个参数均为key=value格式组成,但是仅参数中的value参与计算签名的字符串 StringForSignature的组成。1.Key为OneNET为资源分配的访问密钥(产品级、设备级均可),其作为签名算法参数之一参与签名计算,为保证访问安全,请妥善保管。

qq_32012843的博客 2098

什么是基站定位?基站定位的原理及特点

基站定位的定义 基站定位也就是"LBS定位",全称是Location Based Service,它包括两层含义:首先是确定移动设备或用户所在的地理位置;其次是提供与位置相关的各类信息服务。意指与定位相关的各类服务系统,简称"定位服务"。 另外一种叫法为MPS-Mobile Position Services,也称为"移动定位服务"系统。如找到手机用户的当前地理位置,然后在上海市6340平方公里...

AmazIOT的博客 3万+

【原创】基站定位小测

【原创】基站定位小测 Author: chad Mail: linczone@163.com 本文可以自由转载,但转载请务必注明出处以及本声明信息。定位方法: 1、首先要有一块GPRS模块(本次采用有方M590E),并且要有一张SIM卡。2、通过命令查询 GPRS 蜂窝 小区信息 AT+CGED=0,返回结果如下: +CGED: Service Cell: MCC:

池上好风---码农改变世界 3517

使用3d Slicer标注病灶并生成ROI掩膜

本篇博客给大家演示一下如何使用3d Slicer标注病灶并生成ROI掩膜,供深度学习模型训练使用。 关于3d Slicer和MRIcron的安装请看我的另一个帖子。 一、数据加载 你可以使用你手头的数据进行标注,这里为了示例方便,我是用的3d Slicer中给出的Sample Data中的MRBrainTumor1的数据。 二、病灶标注及保存 Modules选择Segment Editor: 然后点击Add按钮添加一个Segment,在下方便签上双击可以修改Segment的命名和颜色等。下方三个按钮

Su_Del的博客 1万+

移动联通基站定位API以及电信基站定位API

什么是基站定位? 基站定位是指手机发射基站根据与手机的距离来计算手机坐标地理位置的一种功能,基站定位一般应用于手机用户,手机基站定位服务又叫做移动位置服务(LBS服务),它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务。   移动联通基站接口 移动联通基站接口将通过移动联通基站的小区号和基站号进行基

ishxiao的博客 1万+

AI驱动Spine骨骼动画生成:从图像拆分到动画自动化的全流程解析

计算机视觉与生成式AI技术正深度赋能传统数字内容生产流程。在2D动画制作领域,骨骼动画技术通过模拟真实生物关节运动,实现了角色动画的高效制作与灵活控制。其核心原理在于将角色拆分为独立部件,通过骨骼层级关系驱动部件变换,结合关键帧插值算法生成流畅动作。这项技术的工程价值在于大幅降低动画制作门槛,提升内容生产效率,尤其适用于游戏开发、影视预演、广告设计等需要快速原型迭代的场景。本文聚焦于如何利用SIFT特征匹配、RANSAC几何验证等CV算法实现部件自动对位,并结合动画12原则的程序化实现,构建从单张角色立绘到

weixin_28696185的博客 1517

什么是基站定位?

主要应用在急救中心、消防等领域,在接线员接到相关情况的电话时,可以通过基站进行人员的精准定位,疫情防控中所运用的行程码也是通过基站定位实现的。缺点:这种基站定位的方法,在没有基站的位置上,误差范围会比较大,通过计算基站信号差异得到的位置坐标明显低于GPS定位精度(定位精度在500-5000米)。基站定位也称“LBS”定位,全称是Location Based Service,基站可以根据移动设备获取用户所在的地理位置,并在此基础上提供相关的信息服务。简单地说,基站并不是信号塔,而是信号塔下面的那个小屋子。

TTmanghe的博客 2751

银河麒麟V10安装docker

最近在做的一个信创项目使用的操作系统是银河麒麟高级服务器V10,在安装docker时,会遇到下面的错误。 nothing provides fuse-overlayfs >= 0.7 needed by docker-ce-rootless-extras-20.10.0-3.el7.x86_64 经过分析,以下依赖包是centos系统中的包,所以需要给kylinos创建一个合适的centos源。经过实验,Kylin Linux Advanced Server V1

m0_38004228的博客 4908

从药企研发视角:如何用GNN提升分子水溶性预测准确率?PyTorch+ESOL全案例

本文从药企研发的实际需求出发,详细介绍了如何利用图神经网络(GNN)技术,结合PyTorch框架和ESOL数据集,构建并优化分子水溶性预测模型。通过完整的代码案例,深入探讨了分子图数据处理、GNN架构设计、超参数调优以及模型评估与解释等关键环节,旨在帮助研发团队提升预测准确率,从而更高效地筛选和优化候选药物分子。

weixin_29054399的博客 292

基站定位算法

定位技术有 两种,一种是基于 GPS 的定位,一种是基于移动运营网的基站的定位。 基于移动运营网基站定位服务又叫做移动位置服务(LBS——Location Based Service ),它是通过电信移动运营商的网络(如 GSM 网)获取移动终端用户的位置信息 (经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务[1], 在手机上不需要增加任何功能,向运营商开通相关服务就可...

MICKEY@STUDY 3860

ks-快手滑块验证码-Js逆向

本文分析了快手滑块验证码的破解过程。首先通过抓包找到验证码背景图接口,发现需要动态获取captchaSession参数。然后深入分析验证流程,发现verifyParam参数被加密处理,需要追踪其生成逻辑。文章详细解析了加密参数c的构成,包括captchaSn、滑动距离、轨迹信息等,并指出轨迹验证较为严格。最后通过对比浏览器和本地生成的加密值,确认加密逻辑正确,但指出轨迹生成仍需优化。作者建议参考相关文章深入分析轨迹逻辑,并提供了验证成功的截图作为参考。

2302_76420666的博客 1876

如何通过AT指令获取基站定位

基站定位描述 基站定位一般应用于手机用户,手机基站定位服务又叫做移动位置服务(LBS——Location Based Service),它是通过电信移动运营商的网络(如GSM网)获取移动终端用户的位置信息(经纬度坐标),在电子地图平台的支持下,为用户提供相应服务的一种增值业务。 基站定位的大致原理为:移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(Time of A...

weixin_30681121的博客 3204

OpenFOAM-v2006重叠网格挖洞问题实战:如何手动修复overset代码中的边缘识别缺陷

本文深入探讨了OpenFOAM-v2006中重叠网格挖洞问题的实战解决方案,重点修复overset代码中的边缘识别缺陷。通过逆向工程解析挖洞决策机制,设计最小侵入式的函数override方案,并建立多级验证体系,有效解决了网格挖洞区域覆盖不全的问题,提升了计算流体动力学模拟的准确性和可靠性。

weixin_29216049的博客 430

Quartus Prime v18.1 standard-QuartusPrimeV18.1标准版安装过程

Quartus Prime v18.1 standard安装破解过程 下载方式1:官网下载: https://fpgasoftware.intel.com/18.1/?edition=standard&platform=windows 下载方式2:可以从我的网盘下载安装包(如果链接未时效的话): 链接:https://pan.baidu.com/s/1bq4_FcNPSflU1zGJv__rvA 提取码:o0in ----------------------------------.

Alonger1988的博客 2万+

Android基站定位——三基站(多基站)定位(三)

转载请标明出处:http://blog.youkuaiyun.com/android_ls/article/details/8673532 这一篇基于:Android基站定位——单基站定位(二) 阐述几个概念: 基站:类似于WIFI热点,官方解释,移动通信系统中,连接固定部分与无线部分,并通过空中的无线传输与移动台相连的设备。基站即公用移动通信基站是无线电台站的一种形式,是指在一定的无线电覆盖区中,通过

android_ls的专栏 2万+

【AI智能体】Codex 插件从使用到项目开发实战操作详解

Codex 插件从使用到项目开发实战操作详解

congge 7636

LBS位置服务中GPS定位、基站定位、wifi定位的区别

1、卫星定位     其原理是接收机接收卫星广播,通过解析可见卫星的位置、距离等信息以及相应算法得出自己的位置信息,误差在15米范围内,当前可视卫星数量将影响定位精度,可见卫星数量越多,精度越高,实际测试中在正午定位精度较高,傍晚较低。 各国定位系统有:美国GPS、俄罗斯GLONASS、欧洲伽利略、中国北斗。 优点:定位精度高 缺点:室内商城、楼宇信号盲区无法定位   2、基站定位 ...

拥抱变化 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: MTK平台输入法浅析
下一篇: GPS定位
沙澧
博客等级 码龄15年 29粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值