@ -43,7 +43,7 @@ string GetLocalTimeWithMs(void) {
char buffer [ 80 ] = { 0 } ;
struct tm nowTime ;
localtime_r ( & curTime . tv_sec , & nowTime ) ; // 闁硅泛锕ょ欢閬嶅礆閹殿喗鐣遍柛濠勫帶閻°劑宕楅妷銈咁槻闁哄啳娉涢崹搴ㄦ煀瀹ュ洦鐣遍柛鎰噹閻°劍绋夐銊х缂佹崘娉曢埢鑲┾偓鐟邦槸閸欙拷
localtime_r ( & curTime . tv_sec , & nowTime ) ; // 闂佺娉涢敃銈囨闁秴绀嗛柟娈垮枟閻i 亶鏌涙繝鍕付闁宦板姂瀹曟濡烽妶鍜佹Щ闂佸搫鍟冲▔娑㈠垂鎼淬劍鐓€鐎广儱娲﹂悾閬嶆煕閹邦剚鍣归柣掳鍔嶇粙澶愵敇閵娧咁槷缂備焦宕樺▔鏇㈠煝閼测斁鍋撻悷閭︽Ц闁告瑱鎷<EFBFBD>
strftime ( buffer , sizeof ( buffer ) , " %Y%m%d%H%M%S " , & nowTime ) ;
char currentTime [ 84 ] = { 0 } ;
@ -139,19 +139,19 @@ std::string convertEncoding(const std::string &input, const char *fromEncoding,
void InitGpio ( unsigned int gpioN , unsigned int inout ) {
int fd = 0 ;
char tmp [ 100 ] = { 0 } ;
// 闁瑰灚鎸哥槐鎱籶io閻犱焦鍎抽ˇ顒勫棘閸ワ附顐 <EFBFBD>
// 闂佺懓鐏氶幐鍝ユ閹辩倍io闁荤姳鐒﹂崕鎶剿囬鍕闁搞儻闄勯锟 <EFBFBD>
fd = open ( " /sys/class/gpio/export " , O_WRONLY ) ;
if ( - 1 = = fd ) {
printf ( " [%s]:[%d] open gpio export file error \r \n " , __FUNCTION__ , __LINE__ ) ;
}
// 闁汇垹鐤囬鐞痯 io
// 闂佹眹鍨归悿鍥敋閻炵棷 io
sprintf ( tmp , " %d " , gpioN ) ;
if ( write ( fd , tmp , strlen ( tmp ) ) < 0 ) {
printf ( " write file operation error %s \r \n " , tmp ) ;
}
close ( fd ) ;
sleep ( 1 ) ;
//闂 佹澘绉堕悿鍞僷io闁哄倻鎳撻幃锟<EFBFBD>
//闂 備焦婢樼粔鍫曟偪閸炲兎io闂佸搫鍊婚幊鎾诲箖閿燂拷
# ifdef G2UL_GATEWAY
char tmp2 [ 100 ] = { 0 } ;
if ( gpioN = = 507 )
@ -253,14 +253,14 @@ int gpio_set(unsigned int gpioN, char x) {
# endif
// printf("%s\r\n",tmp);
// print_info("set GPIO = %s\n",tmp);
// 闁瑰灚鎸哥槐鎱籶io value闁哄倸娲e ▎锟<E2968E>
// 闂佺懓鐏氶幐鍝ユ閹辩倍io value闂佸搫鍊稿ú锝呪枎閿燂拷
fd = open ( tmp , O_WRONLY ) ;
if ( - 1 = = fd ) {
print_red ( " [%s]:[%d][%s] open gpio export file error \r \n " , __FUNCTION__ , __LINE__ , tmp ) ;
close ( fd ) ;
return ( - 1 ) ; // exit(1);
}
// 閻犱礁澧介悿鍡涙偨闂堟盯鎸<EFBFBD>
// 闁荤姳绀佹晶浠嬫偪閸℃稒鍋ㄩ梻鍫熺洴閹革拷
if ( x ) {
if ( - 1 = = write ( fd , " 1 " , sizeof ( " 1 " ) ) ) {
print_red ( " [%s]:[%d] %d write operation value error \r \n " , __FUNCTION__ , __LINE__ , gpioN ) ;
@ -320,13 +320,13 @@ int gpio_read(unsigned int gpioN) {
# else if IMX6UL_GATEWAY
sprintf ( tmp , " /sys/class/gpio/gpio%d/value " , gpioN ) ;
# endif
// 闁瑰灚鎸哥槐鎱籶io value闁哄倸娲e ▎锟<E2968E>
// 闂佺懓鐏氶幐鍝ユ閹辩倍io value闂佸搫鍊稿ú锝呪枎閿燂拷
fd = open ( tmp , O_RDONLY ) ;
if ( - 1 = = fd ) {
print_red ( " [%s]:[%d] %d open gpio export file error \r \n " , __FUNCTION__ , __LINE__ , gpioN ) ;
return ( - 1 ) ; // exit(1);
}
// 閻犲洩顕цぐ锟<EFBFBD> value闁哄倸娲e ▎锟<E2968E>
// 闁荤姴娲╅褑銇愰敓锟<EFBFBD> value闂佸搫鍊稿ú锝呪枎閿燂拷
if ( - 1 = = read ( fd , & value , sizeof ( value ) ) ) {
print_red ( " [%s]:[%d] %d read gpiovalue is fail \r \n " , __FUNCTION__ , __LINE__ , gpioN ) ;
close ( fd ) ;
@ -339,7 +339,7 @@ int gpio_read(unsigned int gpioN) {
int CheckFileVersion ( int argc , char * * argv ) {
std : : string strVersion = GlobalConfig : : Version ;
int optionchar ; /*闂 侇偄顦甸妴宥団偓娑欘殣閹凤拷 ??*/
int optionchar ; /*闂 備緡鍋勯ˇ鐢稿Υ 瀹ュ洠鍋撳☉娆樻闁瑰嚖鎷<EFBFBD> ??*/
if ( argc > = 2 ) {
if ( strcmp ( argv [ 1 ] , " --debugmode " ) = = 0 ) {
GlobalConfig : : RUN_MODE = 1 ;
@ -541,14 +541,14 @@ std::string GetRTC(char *timestamp, int &millisecond) {
printf ( " RTC date/time is %d-%d-%d, %02d:%02d:%02d \n " , rtc_tm . tm_year + 1900 , rtc_tm . tm_mon + 1 , rtc_tm . tm_mday , rtc_tm . tm_hour , rtc_tm . tm_min , rtc_tm . tm_sec ) ;
sprintf ( rtcTime , " %d-%d-%d, %02d:%02d:%02d " , rtc_tm . tm_year + 1900 , rtc_tm . tm_mon + 1 , rtc_tm . tm_mday , rtc_tm . tm_hour , rtc_tm . tm_min , rtc_tm . tm_sec ) ;
// 閻忓繐鏁僼c_time缂備焦鎸婚悗顖涙媴閹捐绁柟璇℃線鐠愮劎ime_t闁哄啫鐖煎Λ鍧楀箣閿燂拷
// 闁诲繐绻愰弫鍍糲_time缂傚倷鐒﹂幐濠氭倵椤栨稒濯撮柟鎹愵潐缁侇噣鏌熺拠鈩冪窔閻犳劗鍔巌me_t闂佸搫鍟悥鐓幬涢崸妤€绠i 柨鐕傛嫹
tm . tm_year = rtc_tm . tm_year ;
tm . tm_mon = rtc_tm . tm_mon ;
tm . tm_mday = rtc_tm . tm_mday ;
tm . tm_hour = rtc_tm . tm_hour ;
tm . tm_min = rtc_tm . tm_min ;
tm . tm_sec = rtc_tm . tm_sec ;
tm . tm_isdst = - 1 ; // 濞戞挸绉虫繛鍥偨閵娿儺妲惧ù鐘€栧 锟<EFBFBD>
tm . tm_isdst = - 1 ; // 婵炴垶鎸哥粔铏箾閸ヮ剚鍋ㄩ柕濞垮労濡叉儳霉閻橆喖鈧牕顪冮敓 锟<EFBFBD>
rtc_timestamp = mktime ( & tm ) ;
@ -755,8 +755,8 @@ void ImportConfig(std::string filename) {
}
}
int UpdataDataNodeConfig ( std : : string filename ) {
vector < DataNodeInfo > vecDataNode ; // 濠㈠湱澧楀Σ鎴炵▔閳ь剚绋夐鍕憻缂佹缂氱憰鍡涘触閹达箑娅 <EFBFBD>
// 濞寸姰鍎撮浼村礂閵夛附鐓欑€殿喖绻戞晶锕€顕i 埀顒勫棘閸ワ附顐<EFBFBD>
vector < DataNodeInfo > vecDataNode ; // 婵犮垹婀辨晶妤€危閹寸偟鈻旈柍褜鍓氱粙澶愵敂閸曨厽鎲荤紓浣诡殣缂傛氨鎲伴崱娑樿Е闁硅揪绠戝▍锟 <EFBFBD>
// 婵炲濮伴崕鎾敋娴兼潙绀傞柕澶涢檮閻撴瑧鈧鍠栫换鎴炴櫠閿曗偓椤曪綁鍩€椤掑嫬妫橀柛銉檮椤愶拷
ifstream csv_data ( filename , ios : : in ) ;
int iRet = 0 ;
if ( ! csv_data . is_open ( ) ) {
@ -765,16 +765,16 @@ int UpdataDataNodeConfig(std::string filename) {
} else {
string line ;
vector < string > words ; // 濠㈠湱澧楀Σ鎴炵▔閳ь剚绋夐鍕憻缂佹缂氱憰鍡涘触閹达箑娅 <EFBFBD>
vector < string > words ; // 婵犮垹婀辨晶妤€危閹寸偟鈻旈柍褜鍓氱粙澶愵敂閸曨厽鎲荤紓浣诡殣缂傛氨鎲伴崱娑樿Е闁硅揪绠戝▍锟 <EFBFBD>
string word ;
DataNodeInfo dataNode ;
// ------------ 閻犲洩顕цぐ鍥极閻楀牆绁 <EFBFBD> -----------------
// 閻犲洩顕цぐ鍥冀閸ヮ剦鏆悶娑虫嫹
// ------------ 闁荤姴娲╅褑銇愰崶顒€鏋侀柣妤€鐗嗙粊锟 <EFBFBD> -----------------
// 闁荤姴娲╅褑銇愰崶顒€鍐€闁搞儺鍓﹂弳顖炴偠濞戣櫕瀚<EFBFBD>
getline ( csv_data , line ) ;
istringstream sin ;
// 闁圭ǹ顦抽、鎴犳嫚鐠囨彃绲块柡浣哄瀹擄拷
// 闂佸湱枪椤︽娊銆侀幋鐘冲珰閻犲洦褰冪徊鍧楁煛娴e 搫顣肩€规搫鎷<EFBFBD>
while ( getline ( csv_data , line ) ) {
words . clear ( ) ;
sin . clear ( ) ;
@ -1099,7 +1099,7 @@ extern void ZoneConfig(std::string zoneid) {
std : : string GetFileContent ( std : : string filename , int line ) {
std : : string strFileContent ( " " ) ;
std : : ifstream ifileOut ( filename . c_str ( ) ) ;
if ( ifileOut . is_open ( ) ) { // 闁哄倸娲e ▎銏ゅ箥閹惧磭纾<EFBFBD>
if ( ifileOut . is_open ( ) ) { // 闂佸搫鍊稿ú锝呪枎閵忋倕绠ラ柟鎯х-绾撅拷
int i = 1 ;
while ( ! ifileOut . eof ( ) ) {
if ( line = = 0 ) {
@ -1123,7 +1123,7 @@ std::string GetFileContent(std::string filename, int line) {
return strFileContent ;
}
// BOOST 闁烩偓鍔嶉婊堝礆濞嗘帇鈧啯娼忛幆褏纭€濡ょ姴鐭侀惁濉眕闁革附婢樺鍐触閸喓銆 <EFBFBD>
// BOOST 闂佺儵鍋撻崝宥夘敆濠婂牆绀嗘繛鍡樺竾閳ь剙鍟蹇涘箚瑜忕涵鈧俊銈囧Т閻線鎯佹繅鐪曢梺闈╅檮濠㈡ê顭囬崘顔艰Е闁割偆鍠撻妴锟 <EFBFBD>
bool CheckIP ( const char * ip ) {
boost : : xpressive : : cregex reg_ip =
boost : : xpressive : : cregex : : compile ( " (25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])[.](25[0-4]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9]) " ) ;
@ -1133,20 +1133,20 @@ bool CheckIP(const char *ip) {
bool IsValidMask ( std : : string mask ) {
int iRet = - 1 ;
// 閻忓繐鎹凱闁革附婢樺鍐偨閹典讲鍋撳⿰鍛化闁告帒妫楀畷鍕交濞戞ê鐓戦柍銉︾箚濞村棝骞戦姀鈥崇亣 闁炽儲绮堢花鈺傛交濞戞ê鐓戦柡浣哥摠閺嗙喖鍨鹃 敓锟<EFBFBD>
// 闁诲繐绻愰幑鍑遍梺闈╅檮濠㈡ê顭囬崘顔藉仺闁瑰吀璁查崑鎾斥堪閸涱厺鍖栭梺鍛婂笒濡鐣烽崟顒佷氦婵炴垶锚閻撴垿鏌嶉妷锔剧畾婵炴潙妫濋獮鎴﹀閳ュ磭浜<EFBFBD> 闂佺偨鍎茬划鍫㈣姳閳哄倹浜ゆ繛鎴灻悡鎴︽煛娴e摜鎽犻柡鍡欏枛閸ㄩ箖鏁撻 敓锟<EFBFBD>
struct in_addr s ;
iRet = inet_pton ( AF_INET , mask . c_str ( ) , & s ) ;
// 閺夌儐鍓氬畷鏌ュ箣閹邦剙顫犻弶鈺傛煥濞诧拷1闁挎稑鐭侀鈺呭及鎼淬垺笑闁哄牆顦伴弲銉╂儍閸戭毝闁革附婢樺锟<EFBFBD>
// 闁哄鍎愰崜姘暦閺屻儱绠i 柟閭﹀墮椤娀寮堕埡鍌涚叆婵炶鎷<EFBFBD> 1闂佹寧绋戦惌渚€顢氶埡鍛強閹兼番鍨虹瑧闂佸搫鐗嗛ˇ浼村疾閵夆晜鍎嶉柛鎴瘽闂侀潻闄勫妯侯焽閿燂拷
if ( iRet = = 1 ) {
// 濞寸姴娴风紞澶岀磼濠婂啰鎽熼柤鍝勫€块妴搴㈡償韫囨碍绁柟璇℃線鐠愮喐绋夌紒妯荤皻閻庢稒顨夋俊顓熴亜閸濆嫮纰 <EFBFBD>
// 婵炲濮村ù椋庣礊婢跺瞼纾兼繝濠傚暟閹界喖鏌ら崫鍕偓鍧楀Υ鎼淬垺鍎熼煫鍥ㄧ缁侇噣鏌熺拠鈩冪窔閻犳劗鍠愮粙澶岀磼濡崵鐨婚柣搴㈢⊕椤ㄥ淇婇鐔翠簻闁告繂瀚喊锟 <EFBFBD>
unsigned int addr = ntohl ( s . s_addr ) ;
// 閺夌儐鍓氬畷鍙夌▔鏉炴壆鐧岄弶鈺傜☉閸╂鈧稒顨堥浣圭▔閿燂拷
// 闁哄鍎愰崜姘暦閸欏鈻旈弶鐐村閻у 矂寮堕埡鍌溾槈闁糕晜顨堥埀顒佺⊕椤ㄥ牓顢栨担鍦枖闁跨噦鎷<EFBFBD>
std : : bitset < 32 > b ( ( int ) addr ) ;
std : : string strMask = b . to_string ( ) ;
// 闁哄被鍎叉竟妯荤瀹€鍐闁告帟娉涢悺褏绮敂鑳洬濞戞搩鍘惧▓锟<EFBFBD> "01"闁挎稑鑻々褔寮稿⿰鈧粭澶屸偓娑櫭﹢顏堟晬瀹€鍐惧殯闁哄嫬瀛╁Σ鎼佸嫉婢跺娅忛柣銊ュ閻℃瑧绱旈幋鐐茶礋闁活噯鎷<E599AF>
// 闂佸搫琚崕鍙夌珶濡崵顩茬€光偓閸愵亞顔掗梺鍛婂笩濞夋盯鎮鸿缁參鏁傞懗顖f船婵炴垶鎼╅崢鎯р枔閿燂拷"01"闂佹寧绋戦懟顖炪€呰瀵ǹ饪伴埀顒傜箔婢跺备鍋撳☉娅亜锕㈤鍫熸櫖鐎光偓閸愭儳娈梺鍝勫鐎涒晛危閹间礁瀚夊璺侯儐濞呭繘鏌i妸銉ヮ仼闁烩剝鐟х槐鏃堝箣閻愯尪绀嬮梺娲诲櫙閹凤拷
return ( strMask . find ( " 01 " ) = = std : : string : : npos ) ;
}
@ -1283,22 +1283,22 @@ std::string GetSysStatus() {
return strJson ;
}
// 閻忓繐妫楀畷鐔哥▔閿燂拷16閺夆晜绋戦崺妤冣偓娑欘殘椤戜焦娼浣稿簥濞戞挸鎼顔芥償閺冨倹鐣遍悗娑欘殙婵☆參宕愰 敓锟<EFBFBD>
// 闁诲繐绻愬Λ妤€鐣烽悢鍝モ枖闁跨噦鎷<EFBFBD> 16闁哄鏅滅粙鎴﹀春濡ゅ啠鍋撳☉娆樻畼妞ゆ垳鐒﹀顏堫敆娴g ǹ绨ユ繛鎴炴尭閹碱偊顢氶鑺ュ劅闁哄啫鍊归悾閬嶆倵濞戞瑯娈欏┑鈽嗗弮瀹曟劙鏁撻 敓锟<EFBFBD>
unsigned char hexCharToByte ( char c ) {
if ( c > = ' 0 ' & & c < = ' 9 ' ) return c - ' 0 ' ;
if ( c > = ' A ' & & c < = ' F ' ) return c - ' A ' + 10 ;
if ( c > = ' a ' & & c < = ' f ' ) return c - ' a ' + 10 ;
return 0 ; // 閻庣敻鈧稓鑹鹃柡鍐У閺呫儵鎯冮崟顐ゆ憻缂佹璁g槐婵囨交閺傛寧绀€ 0
return 0 ; // 闁诲海鏁婚埀顒佺〒閼归箖鏌¢崘顏勑i 柡鍛劦閹啴宕熼銈嗘喕缂備焦顨愮拋锝囨濠靛洦浜ら柡鍌涘缁€鈧<EFBFBD> 0
}
// 閻忓骏鎷<EFBFBD> 16閺夆晜绋戦崺妤冣偓娑欘殘椤戜焦绋夐懠鑸电ギ闁硅婢€鐠愮喓鈧稒顨夋俊顓㈠极閹殿喚鐭 <EFBFBD>
// 闁诲繐楠忛幏锟<EFBFBD> 16闁哄鏅滅粙鎴﹀春濡ゅ啠鍋撳☉娆樻畼妞ゆ垳鐒︾粙澶愭嚑閼哥數銈梺纭咁嚃濠⑩偓閻犳劗鍠撻埀顒佺⊕椤ㄥ淇婇銏犳瀬闁规鍠氶惌锟 <EFBFBD>
int hexStringToBytes ( const char * hexStr , unsigned char * bytes , size_t bytesSize ) {
size_t hexLen = strlen ( hexStr ) ;
if ( hexLen % 2 ! = 0 ) {
return - 1 ; // Hex 閻庢稒顨堥浣圭▔閺屻儲姣愰幖杈剧畱缁ㄨ尙鎷犻妷锔叫﹂柛瀣煐閺嗭拷
return - 1 ; // Hex 闁诲孩绋掗〃鍫ヮ敄娴e湱鈻旈柡灞诲劜濮f劙骞栨潏鍓х暠缂併劏灏欓幏鐘诲Ψ閿斿彨锕傛煕鐎n厼鐓愰柡鍡嫹
}
if ( bytesSize < hexLen / 2 ) {
return - 1 ; // 閻庢稒顨夋俊顓㈠极閹殿喚鐭嬮柣銊ュ閵囧洨浜歌箛搴g憹閻℃帒鍘栨禍鎺斺偓鐟版贡閹惧吋娼浣稿簥闁告艾娴峰▓鎴犫偓娑欘殙婵★拷
return - 1 ; // 闁诲孩绋掗〃澶嬩繆椤撱垹鏋侀柟娈垮枤閻鏌i 妸銉ヮ仼闁靛洤娲ㄦ禍姝岀疀鎼达絿鎲归柣鈩冨笒閸樻牗绂嶉幒鏂哄亾閻熺増璐¢柟鎯у 悑濞碱亪顢楁担绋跨哎闂佸憡鑹惧ù宄扳枔閹寸姭鍋撳☉娆樻畽濠碘槄鎷<EFBFBD>
}
for ( size_t i = 0 ; i < hexLen ; i + = 2 ) {
@ -1307,7 +1307,7 @@ int hexStringToBytes(const char *hexStr, unsigned char *bytes, size_t bytesSize)
bytes [ i / 2 ] = ( highNibble < < 4 ) | lowNibble ;
}
return 0 ; // 闁瑰瓨鍔曟慨锟<EFBFBD>
return 0 ; // 闂佺懓鐡ㄩ崝鏇熸叏閿燂拷
}
void stringToHex ( const char * str , char * hexStr ) {
@ -1324,13 +1324,13 @@ void hexToAscii(const char *hexStr, char *asciiStr) {
int i , j = 0 ;
for ( i = 0 ; i < len ; i + = 2 ) {
// 閻犲洩顕цぐ鍥ㄧ▔閵堝嫰鍤嬮悗娑欘殘椤戜線鐛捄铏规闁稿繑鍎煎ù鍡涘箲椤叀绀嬮柡浣哥摠閺嗭拷
// 闁荤姴娲╅褑銇愰崶銊р枖闁靛牆瀚伴崵瀣倵濞戞瑯娈樻い鎴滅窔閻涱喚鎹勯搹瑙勵啈闂佺ǹ绻戦崕鐓幟归崱娑樼妞ゎ偒鍙€缁€瀣煛娴e摜鎽犻柡鍡嫹
int byte ;
sscanf ( & hexStr [ i ] , " %2x " , & byte ) ;
// 閻忓繐妫欓弳锝夊极閹峰本绁柟璇℃線鐠愮喓鈧數鎳撶花鏌ユ儍閸戞┎CII閻庢稒顨堥锟<EFBFBD>
// 闁诲繐绻愬Λ娆撳汲閿濆鏋侀柟宄版湰缁侇噣鏌熺拠鈩冪窔閻犳劗鍠撻埀顒傛暩閹虫挾鑺遍弻銉﹀剭闁告垶鈹嶤II闁诲孩绋掗〃鍫ヮ敄閿燂拷
asciiStr [ j + + ] = ( char ) byte ;
}
// 婵烇綀顕ф慨鐐碘偓娑欘殘椤戜焦绋夐懠顒傛尝闁哄鍠撻 锟<EFBFBD>
// 濠电儑缍€椤曆勬叏閻愮鍋撳☉娆樻畼妞ゆ垳鐒︾粙澶愭嚑椤掑倹灏濋梺鍝勵槺閸犳捇顢栭敓 锟<EFBFBD>
asciiStr [ j ] = ' \0 ' ;
}
@ -1377,7 +1377,7 @@ void swap(char *data) {
int OpenWatchDog ( ) {
int fd = - 1 ;
InitGpio ( GlobalConfig : : GPIO_G . hardWatchDog , 1 ) ;
gpio_set ( GlobalConfig : : GPIO_G . hardWatchDog , 1 ) ; // 濡ゅ倹顭囬弫鎼佺嵁閾忣偅绠掗柡渚婃嫹
gpio_set ( GlobalConfig : : GPIO_G . hardWatchDog , 1 ) ; // 婵°倕鍊归…鍥极閹间胶宓侀柧蹇e亝缁犳帡鏌℃笟濠冨
if ( 0 > ( fd = open ( " /dev/watchdog " , O_WRONLY ) ) ) {
print_info ( " Failed:Open /dev/watchdog " ) ;
}
@ -1438,7 +1438,7 @@ string GetOneContent(const char *szData, int nRow, const char *szSeparate) {
int set_opt ( int fd , int nSpeed , int nBits , char nEvent , int nStop ) {
struct termios newtio , oldtio ;
if ( tcgetattr ( fd , & oldtio ) ! = 0 ) { // 婵☆偀鍋撴繛鏉戭儎鐟曞棝宕i敐鍡樞﹂柛姘剧畱瑜版煡鎮介 敓锟<EFBFBD>
if ( tcgetattr ( fd , & oldtio ) ! = 0 ) { // 濠碘槅鍋€閸嬫挻绻涢弶鎴剮閻熸洖妫濆畷锝夋晲閸℃锕傛煕濮樺墽鐣辩憸鐗堢叀閹粙鏁撻 敓锟<EFBFBD>
perror ( " SetupSerial 1 " ) ;
return - 1 ;
}
@ -1446,13 +1446,13 @@ int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop) {
newtio . c_cflag | = CLOCAL | CREAD ;
newtio . c_cflag & = ~ CSIZE ;
switch ( nBits ) // 閻犱礁澧介悿鍡涘极閻楀牆绁﹀ù锝忔嫹
switch ( nBits ) // 闁荤姳绀佹晶浠嬫偪閸℃稑鏋侀柣妤€鐗嗙粊锕€霉閿濆繑瀚<EFBFBD>
{
case 7 : newtio . c_cflag | = CS7 ; break ;
case 8 : newtio . c_cflag | = CS8 ; break ;
}
switch ( nEvent ) // 閻犱礁澧介悿鍡椢涢埀顒侇殽鐏炶偐绉<EFBFBD>
switch ( nEvent ) // 闁荤姳绀佹晶浠嬫偪閸℃あ娑㈠焵椤掍緡娈介悘鐐跺亹缁夛拷
{
case ' O ' :
newtio . c_cflag | = PARENB ;
@ -1467,7 +1467,7 @@ int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop) {
case ' N ' : newtio . c_cflag & = ~ PARENB ; break ;
}
switch ( nSpeed ) // 閻犱礁澧介悿鍡椻枖閵忋垹顥楅柣婊愭嫹
switch ( nSpeed ) // 闁荤姳绀佹晶浠嬫偪閸℃せ鏋栭柕蹇嬪灩椤ユ鏌e⿰鎰
{
case 2400 :
cfsetispeed ( & newtio , B2400 ) ;
@ -1494,14 +1494,14 @@ int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop) {
cfsetospeed ( & newtio , B9600 ) ;
break ;
}
if ( nStop = = 1 ) // 閻犱礁澧介悿鍡涘磻濠婂嫷鍓惧ù锝忔嫹
if ( nStop = = 1 ) // 闁荤姳绀佹晶浠嬫偪閸℃稑纾绘繝濠傚閸撴儳霉閿濆繑瀚<EFBFBD>
newtio . c_cflag & = ~ CSTOPB ;
else if ( nStop = = 2 )
newtio . c_cflag | = CSTOPB ;
newtio . c_cc [ VTIME ] = 0 ;
newtio . c_cc [ VMIN ] = 0 ;
tcflush ( fd , TCIFLUSH ) ;
if ( ( tcsetattr ( fd , TCSANOW , & newtio ) ) ! = 0 ) // 閻犱礁澧介悿鍡樼▔閹绘帒缍撻柛娆忓€归弳锟<EFBFBD>
if ( ( tcsetattr ( fd , TCSANOW , & newtio ) ) ! = 0 ) // 闁荤姳绀佹晶浠嬫偪閸℃鈻旈柟缁樺笒缂嶆捇鏌涘▎蹇撯偓褰掑汲閿燂拷
{
perror ( " com set error " ) ;
return - 1 ;
@ -1522,11 +1522,11 @@ int getcsq() {
}
set_opt ( fd , 115200 , 8 , ' N ' , 1 ) ;
// write(fd,"AT+QENG=\"servingcell\"\r\n",27);// 鐎殿喒鍋撻柛姘煎灠閻g偓鎷呴 敓锟<EFBFBD>
// write(fd,"AT+QENG=\"servingcell\"\r\n",27);// 閻庢鍠掗崑鎾绘煕濮樼厧鐏犻柣锝囧亾閹峰懘鏁撻 敓锟<EFBFBD>
write ( fd , " AT+CSQ " , 6 ) ;
sleep ( 1 ) ;
unsigned char rbuf [ 128 ] = { 0x00 } ;
int len = read ( fd , rbuf , sizeof ( rbuf ) ) ; // 闁革负鍔嬬憰鍡涘矗閿濆牜鍤㈤柛蹇嬪劚閻⊙呯箔閿旇儻顩 <EFBFBD>
int len = read ( fd , rbuf , sizeof ( rbuf ) ) ; // 闂侀潻璐熼崝瀣啺閸℃稑鐭楅柨婵嗙墱閸ゃ垽鏌涜箛瀣姎闁烩姍鍛當闁挎棁鍎婚々锟 <EFBFBD>
print_info ( " rbuf = %s,len = %d \n " , rbuf , len ) ;
sleep ( 1 ) ;
@ -1716,16 +1716,16 @@ int writeIntValue(const char *section, char *key, int val, const char *file) {
int getDiskInfo ( char * diskTotal , char * diskFree ) {
DISK diskInfo ;
/* 1. 闁兼儳鍢茶ぐ锟<EFBFBD> /home/濞戞挸顑夊浼存儍閸曨兘鍋撶拠宸晣闂佽鎷 <EFBFBD> */
/* 1. 闂佸吋鍎抽崲鑼躲亹閿燂拷/home/婵炴垶鎸搁澶婎焽娴煎瓨鍎嶉柛鏇ㄥ厴閸嬫挾鎷犲顔兼櫍闂備浇顕滈幏锟 <EFBFBD> */
statfs ( " / " , & diskInfo ) ;
unsigned long long blocksize = diskInfo . f_bsize ; // 婵絽绻嬮柌娓俵ock闂佹彃鑻€垫﹢宕ラ銈嗙暠閻庢稒顨夋俊顓㈠极閿燂拷
unsigned long long totalsize = blocksize * diskInfo . f_blocks ; // 闁诡剝宕靛▓鎴犫偓娑欘殙婵☆參寮敮顔剧f_blocks濞戞挾顕猯ock闁汇劌瀚弳鐔兼儎閿燂拷
unsigned long long blocksize = diskInfo . f_bsize ; // 濠殿噯绲界换瀣煂濞撲康ock闂備焦褰冮懟顖溾偓鍨耿瀹曘儵顢曢妶鍡欐殸闁诲孩绋掗〃澶嬩繆椤撱垹鏋侀柨鐕傛嫹
unsigned long long totalsize = blocksize * diskInfo . f_blocks ; // 闂佽鍓濆畷闈涒枔閹寸姭鍋撳☉娆樻畽濠碘槅鍙冨顐ゆ暜椤斿墽顦甪_blocks婵炴垶鎸鹃鐚痮ck闂佹眹鍔岀€氼參寮抽悢鍏煎剮闁跨噦鎷<EFBFBD>
/ / printf ( " Total_size=%llu B =%llu KB =%llu MB = %llu GB \n " , \
totalsize , totalsize > > 10 , totalsize > > 20 , totalsize > > 30 ) ;
/* 2. 闁兼儳鍢茶ぐ鍥ㄧ▔閳ь剚绋夌€n 亜鈷栧ù锝嗙懅閳规牠姊婚弶鎴炲闁告瑯鍨抽弫銈囩矚濞差亝锛熼柣銊ュ閵囧洨浜搁敓锟<EFBFBD> */
unsigned long long freeDisk = diskInfo . f_bfree * blocksize ; // 闁告挴鏅欑紞鎴犵矚濞差亝锛熼柣銊ュ閵囧洨浜搁敓锟<EFBFBD>
unsigned long long availableDisk = diskInfo . f_bavail * blocksize ; // 闁告瑯鍨抽弫銈囩矚濞差亝锛熷鍫嗗啰姣<EFBFBD>
/* 2. 闂佸吋鍎抽崲鑼躲亹閸ャ劎鈻旈柍褜鍓氱粙澶屸偓锝庝簻閳锋牕霉閿濆棛鎳呴柍瑙勭墵濮婂寮堕幋鐐差伅闂佸憡鐟崹鎶藉极閵堝洨鐭氭繛宸簼閿涚喖鏌i妸銉ヮ仼闁靛洤娲ㄦ禍鎼佹晸閿燂拷 */
unsigned long long freeDisk = diskInfo . f_bfree * blocksize ; // 闂佸憡鎸撮弲娆戠礊閹寸姷鐭氭繛宸簼閿涚喖鏌i妸銉ヮ仼闁靛洤娲ㄦ禍鎼佹晸閿燂拷
unsigned long long availableDisk = diskInfo . f_bavail * blocksize ; // 闂佸憡鐟崹鎶藉极閵堝洨鐭氭繛宸簼閿涚喎顭块崼鍡楀暟濮o拷
/ / printf ( " Disk_free=%llu MB =%llu GB Disk_available=%llu MB = %llu GB \n " , \
freeDisk > > 20 , freeDisk > > 30 , availableDisk > > 20 , availableDisk > > 30 ) ;
sprintf ( diskTotal , " %llu " , totalsize > > 20 ) ;
@ -1739,8 +1739,8 @@ bool NetIsOk() {
struct protoent * protocol ;
int i , recv_status ;
# ifdef _USE_DNS // 濠碘€冲€归悘澶屸偓瑙勭煯缁犵喓鎷犻妷銉ф殲闁挎稑鑻崹顖炲矗椤栨瑤绨板ù锝堟硶閺併倝宕洪悢閿嬪€抽弶鈺傜椤㈡垿宕氶妶鍡樼劷缂傚啯鍨圭划鑸垫交閻愭潙澶嶉柨娑樺缁躲儲淇婇崐鍍縲 .baidu.com
/* 閻犱礁澧介悿鍡涙儎椤旂偓鐣遍柛锔芥緲濞煎啯绌遍埄鍐х礀 */
# ifdef _USE_DNS // 婵犵鈧啿鈧綊鎮樻径灞稿亾鐟欏嫮鐓紒鐘靛枔閹风娀濡烽妷褎娈查梺鎸庣☉閼活垶宕归鐐茬煑妞ゆ牗鐟ょ花鏉棵归敐鍫熺《闁轰降鍊濆畷娲偄闁垮鈧娊寮堕埡鍌滎灱妞ゃ垺鍨垮畷姘跺Χ 閸℃鍔风紓鍌氬暞閸ㄥ湱鍒掗懜鍨氦闁绘劖娼欐径宥夋煥濞戞ê顨欑紒韬插劜娣囧﹪宕愰崓绺<EFBFBD> .baidu.com
/* 闁荤姳绀佹晶浠嬫偪閸℃稒鍎庢い鏃傚亾閻i亶鏌涢敂鑺ョ凡婵炵厧鍟粚閬嶅焺閸愌呯 */
char hostname [ 32 ] ;
sprintf ( hostname , " %s " , " www.baidu.com " ) bzero ( & dest_addr , sizeof ( dest_addr ) ) ;
dest_addr . sin_family = AF_INET ;
@ -1751,11 +1751,11 @@ bool NetIsOk() {
}
bcopy ( ( char * ) host - > h_addr , ( char * ) & dest_addr . sin_addr , host - > h_length ) ;
# else // 濠碘€冲€归悘澶嬬▔瀹ュ嫬鈻忛柣鈧妼閻撴瑩宕ュ蹇曠闁告帗鐟ヨぐ褔鎳楅悾灞炬殢ip闁革附婢樺鍐儎鐎涙ê澶嶉柛娆愬灴閳ь兛宸ヽmp闁告牕鎷戠槐锟<EFBFBD>
# else // 婵犵鈧啿鈧綊鎮樻径瀣枖鐎广儱瀚埢蹇涙煟閳ь剙濡奸柣鎾寸懇瀹曘儱顓艰箛鏇狀槷闂佸憡甯楅悷銉ㄣ亹瑜旈幊妤呮偩鐏炵偓娈p闂侀潻闄勫妯侯焽閸愵喗鍎庨悗娑櫭径宥夋煕濞嗘劕鐏撮柍褜鍏涘銉絤p闂佸憡鐗曢幏鎴犳閿燂拷
dest_addr . sin_addr . s_addr = inet_addr ( GlobalConfig : : ServerIP . c_str ( ) ) ;
# endif
if ( ( sockfd = socket ( AF_INET , SOCK_RAW , IPPROTO_ICMP ) ) < 0 ) { /* 闁告帗绋戠紓鎾诲储閻斿娼桰CMP濠靛倹顨嗙敮瀵糕偓娑虫嫹 */
if ( ( sockfd = socket ( AF_INET , SOCK_RAW , IPPROTO_ICMP ) ) < 0 ) { /* 闂佸憡甯楃粙鎴犵磽閹捐鍌ㄩ柣鏂款殠濞兼“CMP婵犻潧鍊归〃鍡欐暜鐎电硶鍋撳☉铏 */
LOG_ERROR ( " [NetStatus] error : socket %d \n " , sockfd ) ;
return false ;
}
@ -1807,11 +1807,11 @@ int pack(int pkt_no, char *sendpacket) {
struct icmp * icmp ;
struct timeval * tval ;
icmp = ( struct icmp * ) sendpacket ;
icmp - > icmp_type = ICMP_ECHO ; // 閻犱礁澧介悿鍡欑尵鐠囪尙鈧攱绋夌弧鎵朚P閻犲洭鏀遍惇浼村箮閵夛附鐎<EFBFBD>
icmp - > icmp_type = ICMP_ECHO ; // 闁荤姳绀佹晶浠嬫偪閸℃瑧灏甸悹鍥皺閳ь剟鏀辩粙澶屽姬閹垫湚P闁荤姴娲弨閬嶆儑娴兼潙绠柕澶涢檮閻庯拷
icmp - > icmp_code = 0 ;
icmp - > icmp_cksum = 0 ;
icmp - > icmp_seq = pkt_no ;
icmp - > icmp_id = pid ; // 閻犱礁澧介悿鍡氥亹閹惧啿顤呴弶鈺傜〒閳荤硰D濞戞挾鐦– MP闁哄秴娲ㄩ妵姘辩箔閿燂拷
icmp - > icmp_id = pid ; // 闁荤姳绀佹晶浠嬫偪閸℃哎浜归柟鎯у 暱椤ゅ懘寮堕埡鍌溿€掗柍鑽ょ“D婵炴垶鎸鹃惁鈥揗P闂佸搫绉村ú銊╁Φ濮樿京绠旈柨鐕傛嫹
packsize = ICMP_HEADSIZE + sizeof ( struct timeval ) ;
tval = ( struct timeval * ) icmp - > icmp_data ;
gettimeofday ( tval , NULL ) ;
@ -1824,12 +1824,12 @@ unsigned short cal_chksum(unsigned short *addr, int len) {
int sum = 0 ;
unsigned short * w = addr ;
unsigned short answer = 0 ;
while ( nleft > 1 ) // 闁硅泛顨扖MP闁硅翰鍎遍妵鏃€绂嶅畝鍐闁告帟鍩栭弳鐔煎箲椤旇绨<EFBFBD> 2閻庢稒顨夋俊顓熺▔閸濆嫬绀嬪ù锝呯Ф閻ゎ噣宕濋悩鐑樺闯闁哄鎷<EFBFBD>
while ( nleft > 1 ) // 闂佺娉涢〃鎵朚P闂佺缈伴崕閬嶅Φ閺冣偓缁傚秴鐣濋崘顏嗩啋闂佸憡甯熼崺鏍汲閻旂厧绠叉い鏃囶唺缁拷2闁诲孩绋掗〃澶嬩繆椤撶喓鈻旈柛婵嗗缁€瀣归敐鍛ら柣銈庡櫍瀹曟繈鎮╅悜妯洪棷闂佸搫顧€閹凤拷
{
sum + = * w + + ;
nleft - = 2 ;
}
if ( nleft = = 1 ) // 闁兼椿妾笴MP闁硅翰鍎遍妵鏃€绋夐崫鍕垫疄闁轰線顣﹂柌婊呪偓娑欘殙婵★拷,濞村吋鑹炬晶鎸庣▔鐎n 偅浠橀柛姘凹缁斿鈧稒顨夋俊锟<E4BF8A> .闁硅泛锕ュ〒鍫曞触鎼存繄顏卞☉鎿冧簻閻⊙囨嚍閸屾繍娼掑☉鎾规〃缁斿瓨绋夐敓锟<E69593> 2閻庢稒顨夋俊顓㈠极閻楀牆绁﹂柣銊ュ閻濐喚鈧稒顨夋俊锟<E4BF8A> ,閺夆晜鐟ら柌锟<E69F8C> 2閻庢稒顨夋俊顓㈠极閻楀牆绁﹂柣銊ュ缂嶅棛鈧稒顨夋俊顓熺▔閿燂拷0,缂備綀鍛暰缂侀硸鍨版慨锟<E685A8>
if ( nleft = = 1 ) // 闂佸吋妞垮绗碝P闂佺缈伴崕閬嶅Φ閺冣偓缁嬪宕崟鍨杽闂佽桨绶氶。锕傛煂濠婂應鍋撳☉娆樻畽濠碘槄鎷<EFBFBD> ,婵炴潙鍚嬮懝鐐櫠閹稿海鈻旈悗锝庡亝娴犳﹢鏌涘顒傚嚬缂佹柨顕埀顒佺⊕椤ㄥ淇婇敓锟<E69593> .闂佺娉涢敃銉ャ€掗崼鏇炶Е 閹煎瓨绻勯鍗炩槈閹垮啩绨婚柣鈯欏洦鍤嶉柛灞剧箥濞兼帒鈽夐幘瑙勩€冪紒鏂跨摠缁嬪鏁撻敓锟<E69593> 2闁诲孩绋掗〃澶嬩繆椤撱垹鏋侀柣妤€鐗嗙粊锕傛煟閵娿儱顏柣婵愬枤閳ь剚绋掗〃澶嬩繆閿燂拷,闁哄鏅滈悷銈夋煂閿燂拷2闁诲孩绋掗〃澶嬩繆椤撱垹鏋侀柣妤€鐗嗙粊锕傛煟閵娿儱顏х 紓宥呮閳ь剚绋掗〃澶嬩繆椤撶喓鈻旈柨鐕傛嫹0,缂傚倷缍€閸涱垱鏆扮紓渚€纭搁崹鐗堟叏閿燂拷
{
* ( unsigned char * ) ( & answer ) = * ( unsigned char * ) w ;
sum + = answer ;
@ -1872,9 +1872,9 @@ int unpack(int cur_seq, char *buf, int len) {
struct ip * ip ;
struct icmp * icmp ;
ip = ( struct ip * ) buf ;
iphdrlen = ip - > ip_hl < < 2 ; // 婵€涘牚p闁硅翰鍎遍妵鏃堟⒐閸喖顔<EFBFBD> ,闁告鐗玴闁硅翰鍎遍妵鏃堟儍閸曨垱姣愰幖杈鹃檮閻栵綀绠涘鍓ь啋 4
icmp = ( struct icmp * ) ( buf + iphdrlen ) ; // 閻℃帒锕ㄧ换鍍玴闁硅翰鍎遍妵锟<EFBFBD> ,闁圭ǹ娲ら幃娣欳MP闁硅翰鍎遍妵锟<E5A6B5>
len - = iphdrlen ; // ICMP 闁硅翰鍎遍妵鏃堝矗婵傚舶MP闁轰胶澧楀畵渚€骞庨妷褎鐣遍柟顒€顭烽弳杈ㄦ償閿燂拷
iphdrlen = ip - > ip_hl < < 2 ; // 濠殿噣鈧稑鐗歱闂佺缈伴崕閬嶅Φ閺冨牊鈷愰柛顭戝枛椤旓拷,闂佸憡顨堥悧鐜撮梺纭呯堪閸庨亶濡甸弮鍫熷剭闁告洦鍨卞В 鎰板箹鏉堥箖妾柣鏍电秬缁犳稑顪冮崜褜鍟<E8A49C> 4
icmp = ( struct icmp * ) ( buf + iphdrlen ) ; // 闁烩剝甯掗敃銊ф崲閸嶇幋闂佺缈伴崕閬嶅Φ閿燂拷,闂佸湱枪濞层倝骞冨ǎ娆矼P闂佺缈伴崕閬嶅Φ閿燂拷
len - = iphdrlen ; // ICMP 闂佺缈伴崕閬嶅Φ閺冨牆鐭楀┑鍌氳埗MP闂佽桨鑳舵晶妤€鐣垫笟鈧獮搴ㄥΨ瑜庨悾閬嶆煙椤掆偓椤兘寮虫潏銊﹀劅闁跨噦鎷<EFBFBD>
if ( len < 8 ) return - 1 ;
if ( ( icmp - > icmp_type = = ICMP_ECHOREPLY ) & & ( icmp - > icmp_id = = pid ) & & ( icmp - > icmp_seq = = cur_seq ) )
return 0 ;
@ -1902,28 +1902,28 @@ void _CloseSocket() {
int socketHeart ( const char * pSendData ) {
print_info ( " socketHeart \n " ) ;
int sockfd ; // Socket 闁哄倸娲e▎銏ゅ箵韫囨艾鐗氱紒妤嬫嫹
struct sockaddr_in serverAddr { } ; // Server 闁革附婢樺鍐磼閹惧鈧垱鎷呴敓锟<EFBFBD>
int sockfd ; // Socket 闂佸搫鍊稿ú锝呪枎閵忋倕绠甸煫鍥ㄨ壘閻楁氨绱掑Δ瀣
struct sockaddr_in serverAddr { } ; // Server 闂侀潻闄勫妯侯焽閸愵亞纾奸柟鎯ь嚟閳ь剦鍨遍幏鍛存晸閿燂拷
// 闁告帗绋戠紓鎻漮 cket
// 闂佸憡甯楃粙鎴犵磽閹绘籍 cket
if ( ( sockfd = socket ( AF_INET , SOCK_STREAM , 0 ) ) = = - 1 ) {
std : : cerr < < " Failed to create socket. " < < std : : endl ;
return 1 ;
}
// 閻犱礁澧介悿鍝爀rver闁革附婢樺鍐╃┍閳╁啩绱<EFBFBD>
// 闁荤姳绀佹晶浠嬫偪閸濈垁rver闂侀潻闄勫妯侯焽閸愨晝鈹嶉柍鈺佸暕缁憋拷
serverAddr . sin_family = AF_INET ;
serverAddr . sin_port = htons ( 18393 ) ; // TCP 濮掓稒枪椤撹崵绮╅姘稉闁告瑨娓圭拹 锟<EFBFBD> 80
serverAddr . sin_port = htons ( 18393 ) ; // TCP 婵帗绋掓灙妞ゆ捁宕电划鈺咁敍濮橆剛绋夐梺鍛婄懆濞撳湱鎷归敓 锟<EFBFBD> 80
inet_pton ( AF_INET , /*GlobalConfig::ServerIP.c_str()*/ " 192.168.1.147 " , & serverAddr . sin_addr ) ;
// 閺夆晝鍋炵敮鎾礆閻ф紴r ver
// 闁哄鏅濋崑鐐垫暜閹绢喖绀嗛柣褎绱磖 ver
if ( connect ( sockfd , reinterpret_cast < struct sockaddr * > ( & serverAddr ) , sizeof ( serverAddr ) ) = = - 1 ) {
std : : cerr < < " Failed to connect to the server. " < < std : : endl ;
close ( sockfd ) ;
return 1 ;
}
// 闁告瑦鍨块埀顑跨缁哄墽鎹勯搹顐f闁硅鍠栫€碉拷
// 闂佸憡鐟﹂崹鍧楀焵椤戣法顦︾紒鍝勫⒔閹瑰嫰鎼归锝嗩啀闂佺顕栭崰鏍偓纰夋嫹
const char heartbeat [ ] = " Heartbeat " ;
ssize_t bytesSent = send ( sockfd , pSendData , strlen ( pSendData ) , MSG_NOSIGNAL ) ;
if ( bytesSent = = - 1 ) {
@ -1936,14 +1936,14 @@ int socketHeart(const char *pSendData) {
return 1 ;
}
// 闁稿繑濞婂Λ纰╫cket閺夆晝鍋炵敮锟<EFBFBD>
// 闂佺ǹ绻戞繛濠偽涚喊鈺玞ket闁哄鏅濋崑鐐垫暜閿燂拷
close ( sockfd ) ;
return 0 ;
}
// Ping 闁告垼濮ら弳鐔兼晬鐎圭彻meout濞戞捇缂氱粔鎾籍閼稿灚顦ч梻鍌濇彧缁辨繈宕¢弴姘辩Т 闁哄嫮妫硈,10000 婵綆鍋嗛~ 锟<EFBD9E> =10 缂佸鎷<EE9980>
// 闁瑰瓨鍔曟慨娑㈡晬濮樺磭绠查柛銉嫹0闁挎稑鑻妵鎴犳嫻閵夘垳绐楅弶鈺傛煥濞诧拷1闁硅揪鎷 <EFBFBD> -1
// Ping 闂佸憡鍨兼慨銈夊汲閻斿吋鏅悗鍦交meout婵炴垶鎹囩紓姘辩矓閹绢喖绫嶉柤绋跨仛椤ρ 囨⒒閸屾繃褰х 紒杈ㄧ箞瀹曪繝寮村杈┬㈤梺鍝勫濡,10000 濠殿噯缍嗛崑鍡涳綖閿燂拷=10 缂備礁顧€閹凤拷
// 闂佺懓鐡ㄩ崝鏇熸叏濞戙垺鏅慨妯虹- 缁犳煡鏌涢妷顖涘0闂佹寧绋戦懟顖炲Φ閹寸姵瀚婚柕澶樺灣缁愭寮堕埡鍌涚叆婵炶鎷<EFBFBD> 1闂佺鎻幏锟 <EFBFBD> -1
int Ping ( const char * ips , int timeout ) {
struct timeval * tval ;
int maxfds = 0 ;
@ -1952,14 +1952,14 @@ int Ping(const char *ips, int timeout) {
int iRet = 0 ;
struct sockaddr_in addr ;
struct sockaddr_in from ;
// 閻犱焦鍎抽悾缍濞e 洠鍓濇导锟<EFBFBD>
// 闁荤姳鐒﹂崕鎶芥偩缂嶎晼婵烇絽娲犻崜婵囧閿燂拷
bzero ( & addr , sizeof ( addr ) ) ;
addr . sin_family = AF_INET ;
addr . sin_addr . s_addr = inet_addr ( ips ) ;
int sockfd ;
// 闁告瑦鐗曠欢鐪榦cket 闁靛棴鎷<E6A3B4> 濠碘€冲€归悘澶娾柦閳ュ啿顫udo 閺夆晜鐟╅崳閿嬪濮橆厼袚闂佸尅鎷<E5B085>
// 闂佸憡鐟﹂悧鏇犳閻Ζ cket 闂侀潧妫撮幏锟<E5B98F> 婵犵鈧啿鈧綊鎮樻径濞炬煢闁炽儱鍟块~ 顤箄do 闁哄鏅滈悷鈺呭闯闁垮顕辨慨姗嗗幖琚氶梻浣稿皡閹凤拷
sockfd = socket ( AF_INET , SOCK_RAW , IPPROTO_ICMP ) ;
if ( sockfd < 0 ) {
print_error ( " ip:%s,socket error \n " , ips ) ;
@ -1967,7 +1967,7 @@ int Ping(const char *ips, int timeout) {
}
struct timeval timeo ;
// 閻犱焦鍎抽悾缍痠meOut闁哄啫鐖煎Λ 锟<EFBFBD>
// 闁荤姳鐒﹂崕鎶芥偩缂嶇棤meOut闂佸搫鍟悥鐓幬涢敓 锟<EFBFBD>
timeo . tv_sec = timeout / 1000 ;
timeo . tv_usec = timeout % 1000 ;
@ -1979,25 +1979,25 @@ int Ping(const char *ips, int timeout) {
char sendpacket [ 2048 ] ;
char recvpacket [ 2048 ] ;
// 閻犱焦鍎抽悾缍猧ng闁告牭鎷 <EFBFBD>
// 闁荤姳鐒﹂崕鎶芥偩缂嶇導ng闂佸憡鐗幏锟 <EFBFBD>
memset ( sendpacket , 0 , sizeof ( sendpacket ) ) ;
pid_t pid ;
// 闁告瑦鐗曠欢鐩D闁挎稑濂旂紞鏃€绋夌弧娓媙g闁汇劌鍤猠q uence ID
// 闂佸憡鐟﹂悧鏇犳閻╊棷D闂佹寧绋戞總鏃傜礊閺冣偓缁嬪寮у 〒濯檊闂佹眹鍔岄崵鐚爍 uence ID
pid = getpid ( ) ;
struct ip * iph ;
struct icmp * icmp ;
icmp = ( struct icmp * ) sendpacket ;
icmp - > icmp_type = ICMP_ECHO ; // 闁搞儳鍋炲Ο澶屾嫚闁垮婀 <EFBFBD>
icmp - > icmp_type = ICMP_ECHO ; // 闂佹悶鍎抽崑鐐参熸径灞惧珰闂佸灝顑囧﹢锟 <EFBFBD>
icmp - > icmp_code = 0 ;
icmp - > icmp_cksum = 0 ;
icmp - > icmp_seq = 0 ;
icmp - > icmp_id = pid ;
tval = ( struct timeval * ) icmp - > icmp_data ;
gettimeofday ( tval , NULL ) ;
icmp - > icmp_cksum = cal_chksum ( ( unsigned short * ) icmp , sizeof ( struct icmp ) ) ; // 闁哄稄绻濋悰锟<EFBFBD>
icmp - > icmp_cksum = cal_chksum ( ( unsigned short * ) icmp , sizeof ( struct icmp ) ) ; // 闂佸搫绋勭换婵嬫偘閿燂拷
int n = sendto ( sockfd , ( char * ) & sendpacket , sizeof ( struct icmp ) , 0 , ( struct sockaddr * ) & addr , sizeof ( addr ) ) ;
if ( n < 1 ) {
@ -2006,11 +2006,11 @@ int Ping(const char *ips, int timeout) {
return - 1 ;
}
// 闁规亽鍎辫ぐ锟<EFBFBD>
// 闁汇垹褰夌花顒勫矗椤栨繂鍘撮柟鎭掑劚瑜板牓宕氶弶鍨緭濞寸姵婀ng闁汇劌瀚花鑼驳閺冣偓缁夌兘骞侀銈囩闁圭鍋撳ù鐘劥缁绘牠鏌屽畝鍐炬矗闁烩偓鍔岄幆濠囨偝閿燂拷
// 闂佽浜介崕杈亹閿燂拷
// 闂佹眹鍨硅ぐ澶岃姳椤掑嫬鐭楁い鏍ㄧ箓閸樻挳鏌熼幁鎺戝姎鐟滄澘鐗撳畷姘跺级閸喖绶繛瀵稿У 濠€顣弉g闂佹眹鍔岀€氼剛鑺遍懠顒傞┏闁哄啠鍋撶紒澶屽厴楠炰線顢涢妶鍥╊槷闂佸湱顣介崑鎾趁归悩顔煎姤缂佺粯鐗犻弻灞界暆閸愮偓鐭楅梺鐑╁亾閸斿矂骞嗘繝鍥ㄥ仢闁跨噦鎷<EFBFBD>
int cnt = 0 ;
while ( 1 ) {
// 閻犱焦鍎抽悾缍痠meOut闁哄啫鐖煎Λ鍧楁晬瀹€鍐婵炲棌鍓濇晶鐘诲及椤栨粍鍩傛慨婵撶秬閹癸絾鎷呭⿰鍛殢闁活煉鎷 <EFBFBD>
// 闁荤姳鐒﹂崕鎶芥偩缂嶇棤meOut闂佸搫鍟悥鐓幬涢崸妤佹櫖鐎光偓閸愵亞顔愬┑鐐叉閸撴繃鏅堕悩璇插強妞ゆ牗绮嶉崺鍌涙叏濠垫挾绉柟鐧哥稻閹峰懎饪伴崨顔芥闂佹椿鐓夐幏锟 <EFBFBD>
FD_ZERO ( & readfds ) ;
FD_SET ( sockfd , & readfds ) ;
maxfds = sockfd + 1 ;
@ -2022,7 +2022,7 @@ int Ping(const char *ips, int timeout) {
break ;
}
// 闁规亽鍎辫ぐ锟<EFBFBD>
// 闂佽浜介崕杈亹閿燂拷
memset ( recvpacket , 0 , sizeof ( recvpacket ) ) ;
int fromlen = sizeof ( from ) ;
n = recvfrom ( sockfd , recvpacket , sizeof ( recvpacket ) , 0 , ( struct sockaddr * ) & from , ( socklen_t * ) & fromlen ) ;
@ -2034,7 +2034,7 @@ int Ping(const char *ips, int timeout) {
}
char * from_ip = ( char * ) inet_ntoa ( from . sin_addr ) ;
// 闁告帇鍊栭弻鍥及椤栨碍鍎婇柡鍕靛灥閸ゆ粌顔忛惄顦弉g闁汇劌瀚ú鏍ㄥ緞閿燂拷
// 闂佸憡甯囬崐鏍蓟閸ヮ剙鍙婃い鏍ㄧ閸庡﹪鏌¢崟闈涚仴闁搞倖绮岄蹇涙儎椤﹀級g闂佹眹鍔岀€氼剙煤閺嶃劌绶為柨鐕傛嫹
if ( strcmp ( from_ip , ips ) ! = 0 ) {
print_info ( " NowPingip:%s Fromip:%s NowPingip is not same to Fromip,so ping wrong! \n " , ips , from_ip ) ;
close ( sockfd ) ;
@ -2047,14 +2047,14 @@ int Ping(const char *ips, int timeout) {
icmp = ( struct icmp * ) ( recvpacket + ( iph - > ip_hl < < 2 ) ) ;
print_info ( " ip:%s,icmp->icmp_type:%d,icmp->icmp_id:%d \n " , ips , icmp - > icmp_type , icmp - > icmp_id ) ;
// 闁告帇鍊栭弻鍢漣ng闁搞儳鍋涢ˇ鏌ュ礌閸涱垱鐣遍柣妯垮煐閳ь剨鎷 <EFBFBD>
if ( icmp - > icmp_type = = ICMP_ECHOREPLY & & icmp - > icmp_id = = pid ) // ICMP_ECHOREPLY 闁搞儳鍋炲Ο澶嬫償閺冨倻鎽 <EFBFBD>
// 闂佸憡甯囬崐鏍蓟閸㈡迹ng闂佹悶鍎抽崑娑⑺囬弻銉ョ闁告侗鍨遍悾閬嶆煟濡灝鐓愰柍褜鍓ㄩ幏锟 <EFBFBD>
if ( icmp - > icmp_type = = ICMP_ECHOREPLY & & icmp - > icmp_id = = pid ) // ICMP_ECHOREPLY 闂佹悶鍎抽崑鐐参熸径瀣劅闁哄啫鍊婚幗锟 <EFBFBD>
{
// 婵繐绲介悥鍓佷焊闁秮鍋撻埀顒勫礄閸濆嫭鍎曢柣婊愭嫹
// 濠殿喗绻愮徊浠嬫偉閸撲椒鐒婇梺顒€绉崑鎾诲焵椤掑嫬绀勯柛婵嗗閸庢洟鏌e⿰鎰
print_info ( " icmp succecss ............. \n " ) ;
break ;
} else if ( cnt < 3 ) {
// 闁告熬绠戦崹顖滅磼瑜忛悽鑽ょ驳閿燂拷
// 闂佸憡鐔粻鎴﹀垂椤栨粎纾肩憸蹇涙偨閼姐倗椹抽柨鐕傛嫹
cnt + + ;
continue ;
} else {
@ -2085,41 +2085,41 @@ int get_netlink_status(const char *if_name) {
return edata . data ;
}
// 閻忓繐妫涙晶妤呭嫉椤掆偓瑜拌法鈧稒顨堥浣圭▔閸欏顎曢柛鎺戞鐠愮喖寮€涙ɑ娈剁紓浣稿閸ㄦ岸鎯冮崟顐e€婚梺璇ф嫹
// 闁诲繐绻愬Λ娑欐櫠濡ゅ懎瀚夋い鎺嗗亾鐟滄媽娉曢埀顒佺⊕椤ㄥ牓顢栨担鍦枖闁告瑥顦鏇㈡煕閹烘垶顥欓悹鎰枛瀵偆鈧稒蓱濞堝墎绱撴担绋款仾闁搞劍宀搁幆鍐礋椤愶絽鈧姊虹拠褎瀚<EFBFBD>
std : : vector < int > splitVersion ( const std : : string & version ) {
std : : vector < int > parts ;
std : : stringstream ss ( version ) ;
std : : string part ;
// 闁烩偓鍔庨崑锝嗘媴濠娾偓鐠愮喖宕氶崱娑欘吘缂佹璁g槐婵嬪礆閸℃顥忛柣妤€鐗婂﹢浼村矗閿燂拷
// 闂佺儵鍋撻崝搴ㄥ磻閿濆棙濯存繝濞惧亾閻犳劗鍠栧畷姘跺幢濞戞瑯鍚樼紓浣诡殣鐠侊絿妲愬┑瀣闁糕剝顨呴ˉ蹇涙煟濡も偓閻楀﹤锕㈡导鏉戠煑闁跨噦鎷<EFBFBD>
while ( std : : getline ( ss , part , ' . ' ) ) {
parts . push_back ( std : : stoi ( part ) ) ; // 閻忓繐妫楅崹搴ㄥ礈閹绘帗鍊甸柣銊ュ閸庢挳宕氶崱姘ギ闁硅婢€鐠愮喖寮€涙ɑ娈 <EFBFBD>
parts . push_back ( std : : stoi ( part ) ) ; // 闁诲繐绻愬Λ妤呭垂鎼淬劌绀堥柟缁樺笚閸婄敻鏌i妸銉ヮ伃闁稿孩鎸冲畷姘跺幢濮橆厾銈梺纭咁嚃濠⑩偓閻犳劗鍠栧顐も偓娑櫳戝▓锟 <EFBFBD>
}
return parts ;
}
// 婵絾妫佺欢婵囩▔閵堝嫰鍤嬮柣妤€鐗婂﹢浼村矗閿燂拷
// 濠殿噯绲惧Λ浣烘濠靛洨鈻旈柕鍫濆閸ゅ鏌eΔ鈧悧濠傦耿娴兼潙鐭楅柨鐕傛嫹
int compareVersions ( const std : : string & version1 , const std : : string & version2 ) {
std : : vector < int > v1 = splitVersion ( version1 ) ;
std : : vector < int > v2 = splitVersion ( version2 ) ;
// 闁瑰灚鍎抽崺宀勫嫉閳ь剟姊圭捄銊︾暠闁绘鐗婂﹢浼村矗閻戣棄鍔ラ柛鎺戞閺嗚鲸鎯旈敓锟<EFBFBD>
// 闂佺懓鐏氶崕鎶藉春瀹€鍕珘闁逞屽墴濮婂湱鎹勯妸锔炬殸闂佺粯顨呴悧濠傦耿娴兼潙鐭楅柣鎴f閸斻儵鏌涢幒鎴烆棦闁哄棜椴搁幆鏃堟晸閿燂拷
size_t maxLength = std : : max ( v1 . size ( ) , v2 . size ( ) ) ;
for ( size_t i = 0 ; i < maxLength ; + + i ) {
int num1 = i < v1 . size ( ) ? v1 [ i ] : 0 ; // 濠碘€冲€归悘澶愬蓟閹版澘鍔ラ柛鎺戞缁楀鈧稒锚濠€顏堟晬瀹€鍐炬綊濞戞搫鎷<EFBFBD> 0
int num1 = i < v1 . size ( ) ? v1 [ i ] : 0 ; // 婵犵鈧啿鈧綊鎮樻径鎰摕闁圭増婢橀崝銉╂煕閹烘垶顥欑紒妤€顦遍埀顒佺⊕閿氭繝鈧鍫熸櫖鐎光偓閸愮偓缍婃繛鎴炴惈閹凤拷 0
int num2 = i < v2 . size ( ) ? v2 [ i ] : 0 ;
if ( num1 > num2 ) return 1 ; // version1 濠㈠爢鍌滆壘 version2
if ( num1 < num2 ) return - 1 ; // version1 閻忓繐绻嬬花锟<EFBFBD> version2
if ( num1 > num2 ) return 1 ; // version1 婵犮垹鐖㈤崒婊嗗 version2
if ( num1 < num2 ) return - 1 ; // version1 闁诲繐绻愮换瀣姳閿燂拷 version2
}
return 0 ; // 闁绘鐗婂﹢浼村矗妞嬪孩绁查柛姘炬嫹
return 0 ; // 闂佺粯顨呴悧濠傦耿娴兼潙鐭楀瀣缁佹煡鏌涘鐐
}
void Binary_Bit ( unsigned char * p_data , unsigned char position , int flag ) {
// 濞存粌鐭佺换姗€宕氶懜鐢靛帣濞达絽绉堕悿鍡涙⒖閼搁潧鐏楅柤鏉挎噸缁旓拷 position濞戞捁妗ㄧ紞鍛村极閿燂拷(濞寸媴鎷<E5AAB4> 0 鐎殿喒鍋撳┑顕嗘嫹 )
// 婵炲瓨绮岄惌浣烘崲濮椻偓瀹曟岸鎳滈悽闈涘福婵炶揪绲界粔鍫曟偪閸℃稒鈷栭柤鎼佹涧閻忔鏌ら弶鎸庡櫢缂佹棑鎷<EFBFBD> position婵炴垶鎹佸銊х 礊閸涙潙鏋侀柨鐕傛嫹(婵炲濯撮幏锟<E5B98F> 0 閻庢鍠掗崑鎾斥攽椤曞棙瀚<E6A399> )
if ( flag ) {
* p_data | = 0x01 < < ( position ) ;
} else {
@ -2127,11 +2127,11 @@ void Binary_Bit(unsigned char *p_data, unsigned char position, int flag) {
}
}
static const char * JSON_FIELD_CMD = " cmd " ; // 闁告绻楅锟<EFBFBD> : 闁告稒鍨濋幎銈団偓娑欘殕椤旓拷
static const char * JSON_FIELD_NAME = " dataWatchName " ; // 闁告绻楅锟<EFBFBD> : 缂備礁鐗忛顒勫触瀹ュ泦 锟<EFBFBD>
static const char * JSON_FIELD_CMD = " cmd " ; // 闂佸憡顨呯换妤咁敊閿燂拷: 闂佸憡绋掗崹婵嬪箮閵堝洠鍋撳☉娆樻畷妞ゆ棑鎷<E6A391>
static const char * JSON_FIELD_NAME = " dataWatchName " ; // 闂佸憡顨呯换妤咁敊閿燂拷: 缂傚倷绀侀悧蹇涱敂椤掑嫬瑙︾€广儱娉﹂敓 锟<EFBFBD>
static const char * JSON_FIELD_dataNodeGatewayNo = " dataNodeGatewayNo " ;
static const char * JSON_FIELD_ASSETID = " dataWatchAssetId " ; // 闁告绻楅锟<EFBFBD> : 閻犙冨妤犲洨绱撻弽褍濞<E8A48D> 閻庢稒顨嗛锟<EE9499>
static const char * JSON_FIELD_ADDEDBY = " dataWatchAddedBy " ; // 闁告绻楅锟<EFBFBD> : 婵烇綀顕ф慨鐐寸閿燂拷 閻庢稒顨嗛锟<EE9499>
static const char * JSON_FIELD_ASSETID = " dataWatchAssetId " ; // 闂佸憡顨呯换妤咁敊閿燂拷: 闁荤姍鍐仹濡ょ姴娲ㄧ槐鎾诲冀瑜嶆繛锟<E7B99B> 闁诲孩绋掗〃鍡涱敊閿燂拷
static const char * JSON_FIELD_ADDEDBY = " dataWatchAddedBy " ; // 闂佸憡顨呯换妤咁敊閿燂拷: 濠电儑缍€椤曆勬叏閻愬顩查柨鐕傛嫹 闁诲孩绋掗〃鍡涱敊閿燂拷
static const char * JSON_FIELD_DEVICETYPE = " deviceType " ;
static const char * JSON_FIELD_ADDEDDATE = " dataWatchAddedDate " ;
static const char * JSON_FIELD_IPADDRESS = " dataWatchIpAddress " ;