Changeset 389 for azure_iot_hub/trunk/ntshell/src/ntp_cli.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/ntshell/src/ntp_cli.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 1 1 /* 2 * TOPPERS ECHONET Lite Communication Middleware2 * TOPPERS PROJECT Home Network Working Group Software 3 3 * 4 4 * Copyright (C) 2018 Cores Co., Ltd. Japan 5 5 * 6 * ä¸è¨èä½æ¨©è 7 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 8 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 9 * å¤ã»åé 10 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 11 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 12 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 13 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 14 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 15 * ç¨ã§ããå½¢ã§åé 16 å¸ããå ´åã«ã¯ï¼åé 17 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 18 * è 19 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 20 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 21 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 22 * ç¨ã§ããªãå½¢ã§åé 23 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 24 * ã¨ï¼ 25 * (a) åé 26 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 27 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 28 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 29 * (b) åé 30 å¸ã®å½¢æ 31 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 32 * å ±åãããã¨ï¼ 33 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 34 * 害ãããï¼ä¸è¨èä½æ¨©è 35 ããã³TOPPERSããã¸ã§ã¯ããå 36 責ãããã¨ï¼ 37 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 38 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ãã 40 * å 41 責ãããã¨ï¼ 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 11 * スコード中に含まれていること. 12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 15 * の無保証規定を掲載すること. 16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 18 * と. 19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 20 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 22 * 報告すること. 23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 * 免責すること. 42 28 * 43 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 44 ã 45 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 46 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 47 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 48 * ã®è²¬ä»»ãè² ããªãï¼ 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 49 34 * 50 35 * @(#) $Id$ … … 52 37 53 38 /* 54 * NTP ã¯ã©ã¤ã¢ã³ã39 * NTP クライアント 55 40 */ 56 41 … … 84 69 #include "ntp_cli.h" 85 70 86 /* NTP ãµã¼ãã®ãã¼ãçªå·*/71 /* NTP サーバのポート番号 */ 87 72 88 73 #define NTP_SRV_PORTNO UINT_C(123) 89 74 90 /* NTP ãµã¼ãã®URL */75 /* NTP サーバのURL */ 91 76 92 77 #define NTP_SRV_URL "ntp.nict.jp" 93 78 94 /* éä¿¡éé*/79 /* 送信間隔 */ 95 80 96 81 #define SLP_ITV (60*SYSTIM_HZ) 97 82 98 /* é¢æ°*/83 /* 関数 */ 99 84 100 85 void ntp_cli_update_time(T_NTP_CLI_CONTEXT *nc); … … 105 90 106 91 /* 107 * å 108 ¨åå¤æ° 92 * 全域変数 109 93 */ 110 94 … … 171 155 } 172 156 173 #define NTP_POLL_ASYNC 10 // 1024 ç§æ¯ã«æå»åãåãã174 #define NTP_POLL_NORMAL 16 // 65536 ç§æ¯ã«æå»åãåãã157 #define NTP_POLL_ASYNC 10 // 1024秒毎に時刻問い合わせ 158 #define NTP_POLL_NORMAL 16 // 65536秒毎に時刻問い合わせ 175 159 176 160 void ntp_cli_initialize(T_NTP_CLI_CONTEXT *nc, ID cepid) … … 214 198 T_NTP_MSG *ntp = &nc->ntp_msg; 215 199 216 // NTP æå»å¿çã®å ´å200 // NTP時刻応答の場合 217 201 if ((ntp->mode == NTP_MODE_SERVER) || (ntp->mode == NTP_MODE_BROADCAST)) { 218 202 switch (nc->state) { … … 221 205 break; 222 206 case NTP_CLI_STATE_REQUEST: 223 // ãµã¼ãã¼ããã®å¿çæå»ãåå¾207 // サーバーからの応答時刻を取得 224 208 memcpy(&nc->receive_timestamp, &ntp->receive_timestamp, sizeof(nc->receive_timestamp)); 225 209 memcpy(&nc->transmit_timestamp, &ntp->transmit_timestamp, sizeof(nc->transmit_timestamp)); 226 210 227 // ç¾å¨æå»åå¾211 // 現在時刻取得 228 212 ntp_cli_read_time(nc, &tp); 229 213 230 // NTPåç 231 §æå»ã«ç¾å¨æå»ãè¨å® 214 // NTP参照時刻に現在時刻を設定 232 215 set_systime_to_ntptime(&tp, &nc->recv_resp_timestamp); 233 216 234 // æå»ãæ´æ°217 // 時刻を更新 235 218 ntp_cli_update_time(nc); 236 219 … … 243 226 } 244 227 } 245 // NTP æå»è¦æ±ã®å ´å228 // NTP時刻要求の場合 246 229 else if (ntp->mode == NTP_MODE_CLIENT) { 247 // ç¾å¨æå»åå¾230 // 現在時刻取得 248 231 ntp_cli_read_time(nc, &tp); 249 232 250 // NTP åä¿¡ã»éä¿¡æå»ã«ç¾å¨æå»ãè¨å®233 // NTP受信・送信時刻に現在時刻を設定 251 234 set_systime_to_ntptime(&tp, &nc->receive_timestamp); 252 235 set_systime_to_ntptime(&tp, &nc->transmit_timestamp); 253 236 254 // NTP ãã±ããéä¿¡237 // NTPパケット送信 255 238 ntp_cli_time_synchronization(nc, NTP_MODE_SERVER); 256 239 } … … 267 250 div2_timestamp(&ofs); 268 251 269 // å·®ã大ããå ´åã¯ãµã¼ãã¼ã®éä¿¡æéãè¨å®252 // 差が大きい場合はサーバーの送信時間を設定 270 253 if (ntohl(ofs.integer) > 2) { 271 254 memcpy(&nc->reference_timestamp, &nc->transmit_timestamp, sizeof(nc->transmit_timestamp)); … … 286 269 #endif 287 270 { 288 /* æ¹è¡ã³ã¼ãã®åé¤*/271 /* 改行コードの削除 */ 289 272 int len = strnlen(nc->buf, sizeof(nc->buf) - 1); 290 273 nc->buf[len - 1] = '\0'; … … 344 327 /* through */ 345 328 case NTP_CLI_STATE_RESOLVE_ADDR: 346 // ç¾å¨æå»åå¾329 // 現在時刻取得 347 330 ntp_cli_read_time(nc, &tp); 348 331 349 // NTP éå§æå»ã«ç¾å¨æå»ãè¨å®332 // NTP開始時刻に現在時刻を設定 350 333 set_systime_to_ntptime(&tp, &nc->originate_timestamp); 351 334 memset(&nc->receive_timestamp, 0, sizeof(nc->receive_timestamp)); 352 335 memset(&nc->transmit_timestamp, 0, sizeof(nc->transmit_timestamp)); 353 336 354 // NTP ãã±ããéä¿¡337 // NTPパケット送信 355 338 ntp_cli_time_synchronization(nc, NTP_MODE_CLIENT); 356 339 357 // NTPå¿çå¾ 358 ã¡ã«é·ç§»ã500msã§ãªãã©ã¤ 340 // NTP応答待ちに遷移、500msでリトライ 359 341 nc->retry = 0; 360 342 nc->state = NTP_CLI_STATE_REQUEST; … … 366 348 nc->state = NTP_CLI_STATE_ASYNC; 367 349 nc->poll = NTP_POLL_ASYNC; 368 nc->timer = (1 << nc->poll) * 1000 * 1000; // 1024 ç§å¾ã«æå»åæ369 break; 370 } 371 // ç¾å¨æå»åå¾350 nc->timer = (1 << nc->poll) * 1000 * 1000; // 1024秒後に時刻同期 351 break; 352 } 353 // 現在時刻取得 372 354 ntp_cli_read_time(nc, &tp); 373 355 374 // NTP éå§æå»ã«ç¾å¨æå»ãè¨å®356 // NTP開始時刻に現在時刻を設定 375 357 set_systime_to_ntptime(&tp, &nc->originate_timestamp); 376 358 memset(&nc->receive_timestamp, 0, sizeof(nc->receive_timestamp)); 377 359 memset(&nc->transmit_timestamp, 0, sizeof(nc->transmit_timestamp)); 378 360 379 // NTP ãã±ããéä¿¡361 // NTPパケット送信 380 362 ntp_cli_time_synchronization(nc, NTP_MODE_CLIENT); 381 363 382 // NTPå¿çå¾ 383 ã¡ã«é·ç§»ã500msã§ãªãã©ã¤ 364 // NTP応答待ちに遷移、500msでリトライ 384 365 nc->state = NTP_CLI_STATE_REQUEST; 385 366 nc->timer = 500 * 1000; 386 367 break; 387 368 case NTP_CLI_STATE_SYNC: 388 // ç¾å¨æå»åå¾369 // 現在時刻取得 389 370 ntp_cli_read_time(nc, &tp); 390 371 391 // NTP éå§æå»ã«ç¾å¨æå»ãè¨å®372 // NTP開始時刻に現在時刻を設定 392 373 set_systime_to_ntptime(&tp, &nc->originate_timestamp); 393 374 memset(&nc->receive_timestamp, 0, sizeof(nc->receive_timestamp)); 394 375 memset(&nc->transmit_timestamp, 0, sizeof(nc->transmit_timestamp)); 395 376 396 // NTP ãã±ããéä¿¡377 // NTPパケット送信 397 378 ntp_cli_time_synchronization(nc, NTP_MODE_CLIENT); 398 379 399 // NTPå¿çå¾ 400 ã¡ã«é·ç§»ã500msã§ãªãã©ã¤ 380 // NTP応答待ちに遷移、500msでリトライ 401 381 nc->state = NTP_CLI_STATE_REQUEST; 402 382 nc->timer = 500 * 1000; … … 418 398 ntp->stratum = (mode == NTP_MODE_CLIENT) ? 2 : 1; 419 399 ntp->poll = nc->poll; 420 ntp->precision = 0xfa; // 精度ã¯10^-6(1μs)400 ntp->precision = 0xfa; // 精度は10^-6(1μs) 421 401 ntp->root_delay = htonl(0); 422 402 ntp->root_dispersion = htonl(0); 423 // åæã®ããã®å¤é¨çãªæ段ã®ãªããµãããã403 // 同期のための外部的な手段のないサブネット 424 404 ntp->reference_identifier[0] = 'L'; 425 405 ntp->reference_identifier[1] = 'O'; 426 406 ntp->reference_identifier[2] = 'C'; 427 407 ntp->reference_identifier[3] = 'L'; 428 // åç 429 §ã¿ã¤ã ã¹ã¿ã³ã 408 // 参照タイムスタンプ 430 409 memcpy(&ntp->reference_timestamp, &nc->reference_timestamp, sizeof(ntp->reference_timestamp)); 431 // éå§ã¿ã¤ã ã¹ã¿ã³ã410 // 開始タイムスタンプ 432 411 memcpy(&ntp->originate_timestamp, &nc->originate_timestamp, sizeof(ntp->originate_timestamp)); 433 // åä¿¡ã¿ã¤ã ã¹ã¿ã³ã412 // 受信タイムスタンプ 434 413 memcpy(&ntp->receive_timestamp, &nc->receive_timestamp, sizeof(ntp->receive_timestamp)); 435 // éä¿¡ã¿ã¤ã ã¹ã¿ã³ã414 // 送信タイムスタンプ 436 415 memcpy(&ntp->transmit_timestamp, &nc->transmit_timestamp, sizeof(ntp->transmit_timestamp)); 437 // éµèå¥å416 // 鍵識別子 438 417 ntp->key_identifier[0] = 0x08; 439 418 ntp->key_identifier[1] = 0x18; … … 486 465 487 466 /* 488 * ãã³ããããã³ã°ã³ã¼ã«ã®ã³ã¼ã«ããã¯é¢æ°467 * ノンブロッキングコールのコールバック関数 489 468 */ 490 469 … … 497 476 len = *(ER_UINT*)p_parblk; 498 477 if (len < 0 && len != E_RLWAI) { 499 /* E_RLWAI 以å¤ã§ã0 以ä¸ã®å ´åã¯ãã¨ã©ã¼ãæå³ãã¦ããã*/478 /* E_RLWAI 以外で、0 以下の場合は、エラーを意味している。*/ 500 479 syslog(LOG_NOTICE, "[NTP CLI,%d] callback error: %s, fncd: %s", nc->cepid, 501 480 itron_strerror(len), in_strtfn(fncd)); … … 525 504 526 505 /* 527 * NTP ã¯ã©ã¤ã¢ã³ãéä¿¡ã¿ã¹ã¯506 * NTP クライアント送信タスク 528 507 */ 529 508 … … 539 518 syslog(LOG_NOTICE, "[NTP CLI:%d,%d] started.", nc->tskid, (ID)exinf); 540 519 541 /* åæå*/520 /* 初期化 */ 542 521 ntp_cli_initialize(nc, (ID)exinf); 543 522 … … 552 531 prev = time; 553 532 554 /* ã¿ã¤ãã¼åå¾*/533 /* タイマー取得 */ 555 534 timer = ntp_cli_get_timer(nc); 556 535 557 /* å¾ 558 ã¡ */ 536 /* 待ち */ 559 537 error = tslp_tsk(timer); 560 538 if ((error != E_OK) && (error != E_TMOUT)) { … … 571 549 } 572 550 573 /* æéçµé*/551 /* 時間経過 */ 574 552 ntp_cli_progress(nc, time - prev); 575 553 576 /* èµ·ããããå ´å*/554 /* 起こされた場合 */ 577 555 if (error == E_OK) { 578 556 ntp_cli_wakeup(nc); 579 557 } 580 558 581 /* ã¿ã¤ã ã¢ã¦ãå¦ç*/559 /* タイムアウト処理 */ 582 560 ntp_cli_timeout(nc); 583 561 }
Note:
See TracChangeset
for help on using the changeset viewer.