platform_comm.h
9.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
//
// platform_comm.h
// BBAAPIRequest
//
// Created by Liu,Muye on 2018/11/14.
//
#ifndef platform_comm_h
#define platform_comm_h
#include <string>
#ifdef ANDROID
#include "mars/comm/thread/mutex.h"
#endif
#ifndef __cplusplus
#error "C++ only"
#endif
namespace apirequest {
namespace sdt {
enum NetType {
kNoNet = -1,
kWifi = 1,
kMobile = 2,
kOtherNet = 3
};
int getNetInfo();
bool getCurRadioAccessNetworkInfo(struct RadioAccessNetworkInfo& _info);
struct WifiInfo {
std::string ssid;
std::string bssid;
};
bool getCurWifiInfo(WifiInfo& _wifi_info);
struct SIMInfo {
std::string isp_code;
std::string isp_name;
};
bool getCurSIMInfo(SIMInfo& _sim_info);
struct APNInfo {
APNInfo(): nettype(kNoNet-1), sub_nettype(0), extra_info("") {}
int nettype;
int sub_nettype;
std::string extra_info;
};
bool getAPNInfo(APNInfo& info);
bool getIsIPV4Reachable();
bool getIsIPV6Reachable();
#if __cplusplus >= 201103L
# define __CXX11_CONSTEXPR__ constexpr
#else
# define __CXX11_CONSTEXPR__
#endif
__CXX11_CONSTEXPR__ static const char* const GPRS = "GPRS";
__CXX11_CONSTEXPR__ static const char* const Edge = "Edge";
__CXX11_CONSTEXPR__ static const char* const WCDMA = "WCDMA";
__CXX11_CONSTEXPR__ static const char* const HSDPA = "HSDPA";
__CXX11_CONSTEXPR__ static const char* const HSUPA = "HSUPA";
__CXX11_CONSTEXPR__ static const char* const CDMA1x = "CDMA1x";
__CXX11_CONSTEXPR__ static const char* const CDMAEVDORev0 = "CDMAEVDORev0";
__CXX11_CONSTEXPR__ static const char* const CDMAEVDORevA = "CDMAEVDORevA";
__CXX11_CONSTEXPR__ static const char* const CDMAEVDORevB = "CDMAEVDORevB";
__CXX11_CONSTEXPR__ static const char* const eHRPD = "eHRPD";
__CXX11_CONSTEXPR__ static const char* const LTE = "LTE";
__CXX11_CONSTEXPR__ static const char* const UMTS = "UMTS";
__CXX11_CONSTEXPR__ static const char* const CDMA = "CDMA";
__CXX11_CONSTEXPR__ static const char* const HSPA = "HSPA";
__CXX11_CONSTEXPR__ static const char* const IDEN = "IDEN";
__CXX11_CONSTEXPR__ static const char* const HSPAP = "HSPA+";
__CXX11_CONSTEXPR__ static const char* const NR = "NR";
__CXX11_CONSTEXPR__ static const char* const NRNSA = "NRNSA";
struct RadioAccessNetworkInfo {
/***
一、制式演进路线
1.GSM - WCDMA R99 - LTE FDD路线
2G GSM
2.5G GPRS
2.75G EDGE
3G WCDMA R99
3.5G HSPA(分HSUPA和HSDPA)
3.75G HSPA+(分HSUPA+和HSDPA+)
3.9G LTE FDD
2.CDMA IS 95 - CDMA 2000 EV-DO Rev.A - LTE FDD路线
2G CDMA IS 95
2.5G CDMA 1X
2.75G CDMA 2000 EV-DO Rev.0
3G CDMA 2000 EV-DO Rev.A
3.5G 跳过
3.75G 跳过
3.9G LTE FDD
3.CDMA IS 95 - CDMA 2000 EV-DO Rev.A - UMB路线
2G CDMA IS 95
2.5G CDMA 1X
2.75G CDMA 2000 EV-DO Rev.0
3G CDMA 2000 EV-DO Rev.A
3.5G CDMA 2000 EV-DO Rev.B
3.75G 跳过
3.9G UMB
4.GSM - TD-SCDMA - LTE TDD路线
2G GSM
2.5G 跳过
2.75G 跳过
3G TD-SCDMA
3.5G TD-HSPA(分TD-HSUPA和TD-HSDPA)
3.75G TD-HSPA+(分TD-HSUPA+和TD-HSDPA+)
3.9G LTE TDD
二、路线点评
1.GSM - WCDMA R99 - LTE FDD路线
iPhone以及大部分主流手机的支持制式路线,使用率高达70%,现中国联通路线,技术成熟。为欧洲提议,全球流行。
2.CDMA IS 95 - CDMA 2000 EV-DO Rev.A - LTE FDD/UMB路线
由2G非主流CDMA演变而来,技术稳定,使用率高达20%,现中国电信路线。美国高通提议,LTE FDD转接部分为摩托罗拉公司提议。美日韩流行。
3.GSM - TD-SCDMA - LTE TDD路线
与第一个路线相反,它采用了TD时分技术,不可能和FD频分技术融合。技术新兴,使用率高达10%,兼容终端不多,现中国移动路线,中国大唐提议,中国流行,受Govements看好,支持。
三、各制式点评介绍
2G:
GSM:最基本、主流的技术,无话可说。(中国除133、153、180、189号段外使用的技术)
CDMA IS 95:最基本、辐射低的技术,无话可说。(中国133、153、180、189号段使用的技术)
2.5G:
GPRS:GSM演进走出的中央的一步。(中国除133、153、180、189号段外使用的技术)
CDMA 1X:CDMA提供数据服务重要的一步。(中国133、153、180、189号段使用的技术)
2.75G:
EDGE:被人们无视的一种重要技术,90%机油没用gprs服务,而是这个服务。(中国除133、153、180、189号段外使用的技术)
CDMA 2000 EV-DO Rev.0:被电信强烈无视的一种技术。(中国133、153、180、189号段使用的技术)
3G:
WCDMA:传说中最强的技术,上下行皆是其它3G技术的2倍多!(中国185、186号段使用的技术)
CDMA 2000 EV-DO Rev.A:电信寄予它便宜的资本,用便宜的价格售出,无疑性价比超高!(中国189、180号段使用的技术)
TD-SCDMA:国货,外货(基本除了国产和移动定制很少终端支持)的来支持它吧,移动服务值得肯定!(中国187、188号段使用的技术)
3.5G:
HSDPA:WCDMA的加速技术,主要增加下载速度,可与HSUPA自由调节。(中国未发展)
HSUPA:WCDMA的加速技术,主要增加上传速度,可与HSDPA自由调节。(中国未发展)
TD-HSDPA:TD-SCDMA的加速技术,主要增加下载速度,可与TD-HSUPA自由调节。(中国未发展,移动想跳过)
TD-HSUPA:TD-SCDMA的加速技术,主要增加上传速度,可与TD-HSDPA自由调节。(中国未发展,移动想跳过)
CDMA 2000 EV-DO Rev.B:CDMA终结技术,稳定+高速,曾经WCDMA的挑衅对象。(中国未发展)
3.75G:
HSDPA+:WCDMA的高级加速技术,主要增加下载速度,可与HSUPA(+)自由调节。(中国未发展)
HSUPA+:WCDMA的高级加速技术,主要增加上传速度,可与HSDPA(+)自由调节。(中国未发展)
TD-HSDPA+:TD-SCDMA的高级加速技术,主要增加下载速度,可与TD-HSUPA(+)自由调节。(中国未发展,移动想跳过)
TD-HSUPA+:TD-SCDMA的高级加速技术,主要增加上传速度,可与TD-HSDPA(+)自由调节。(中国未发展,移动想跳过)
3.9G:
LTE FDD:Wi-Fi终结者,拥有比WLAN快10倍的能力,估速将达到4M/S以上,兼容性强!是CDMA2000和WCDMA歧路同归的重要制式!(中国未发展)
LTE TDD:世b0会展出对象,尖端技术,比FDD早发展一年,网速和FDD差不多,但不成熟,兼容性弱!(湖北移动、上海移动已启动试运营,国家大力推广)
***/
std::string radio_access_network;
bool Is2G() const { return radio_access_network == GPRS || radio_access_network == CDMA1x || radio_access_network == Edge || radio_access_network == CDMAEVDORev0 || radio_access_network == UMTS || radio_access_network == CDMA;}
bool Is3G() const { return radio_access_network == WCDMA || radio_access_network == CDMAEVDORevA || radio_access_network == HSDPA || radio_access_network == HSUPA || radio_access_network == CDMAEVDORevB || radio_access_network == eHRPD || radio_access_network == HSPAP || radio_access_network == HSPA;}
bool Is4G() const { return radio_access_network == LTE;}
bool Is5G() const { return radio_access_network == NR || radio_access_network == NRNSA;}
bool IsUnknown() const { return !Is2G() && !Is3G() && !Is4G() && !Is5G();}
};
bool getCurRadioAccessNetworkInfo(RadioAccessNetworkInfo& _raninfo);
unsigned int getSignal(bool isWifi);
bool isNetworkConnected();
bool getifaddrs_ipv4_hotspot(std::string& _ifname, std::string& _ifip);
inline int getCurrNetLabel(std::string& netInfo) {
netInfo = "defalut";
int netId = getNetInfo();
if (netId == kNoNet) {
netInfo = "";
return netId;
}
switch (netId) {
case kWifi: {
WifiInfo wifiInfo;
if (getCurWifiInfo(wifiInfo)) {
netInfo = wifiInfo.ssid;
} else {
netInfo = "no_ssid_wifi";
}
break;
}
case kMobile: {
SIMInfo simInfo;
if (getCurSIMInfo(simInfo)) {
netInfo = simInfo.isp_code;
} else {
netInfo = "no_ispCode_mobile";
}
break;
}
case kOtherNet: {
netInfo = "other";
break;
}
default: {
break;
}
}
return netId;
}
#ifdef __APPLE__
float publiccomponent_GetSystemVersion();
#endif
#ifdef ANDROID
bool startAlarm(int64_t id, int after);
bool stopAlarm(int64_t id);
void* wakeupLock_new();
void wakeupLock_delete(void* _object);
void wakeupLock_Lock(void* _object);
void wakeupLock_Lock_Timeout(void* _object, int64_t _timeout);
void wakeupLock_Unlock(void* _object);
bool wakeupLock_IsLocking(void* _object);
#endif
#ifdef ANDROID
extern int g_NetInfo;
extern WifiInfo g_wifi_info;
extern SIMInfo g_sim_info;
extern APNInfo g_apn_info;
extern Mutex g_net_mutex;
#endif
}
}
#endif /* platform_comm_h */