[340] | 1 | /*
|
---|
| 2 | * TOPPERS ECHONET Lite Communication Middleware
|
---|
| 3 | *
|
---|
| 4 | * Copyright (C) 2018 Cores Co., Ltd. Japan
|
---|
| 5 | *
|
---|
| 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 | * 免責すること.
|
---|
| 28 | *
|
---|
| 29 | * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
---|
| 30 | * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
---|
| 31 | * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
---|
| 32 | * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
---|
| 33 | * の責任を負わない.
|
---|
| 34 | *
|
---|
[359] | 35 | * @(#) $Id$
|
---|
[340] | 36 | */
|
---|
| 37 |
|
---|
| 38 | #include <kernel.h>
|
---|
| 39 | #include <sil.h>
|
---|
| 40 | #include <t_syslog.h>
|
---|
| 41 | #include <t_stdlib.h>
|
---|
| 42 |
|
---|
| 43 | #include <tinet_defs.h>
|
---|
| 44 | #include <tinet_config.h>
|
---|
| 45 |
|
---|
| 46 | #include <net/if.h>
|
---|
| 47 | #include <net/ethernet.h>
|
---|
| 48 |
|
---|
| 49 | #include <net/net.h>
|
---|
| 50 | #include <net/net_endian.h>
|
---|
| 51 | #include <net/net_var.h>
|
---|
| 52 | #include <net/net_timer.h>
|
---|
| 53 |
|
---|
| 54 | #include <netinet/in.h>
|
---|
| 55 | #include <netinet/in_var.h>
|
---|
| 56 |
|
---|
| 57 | #include "netapp/dhcp4_cli.h"
|
---|
| 58 | #include "netapp/dhcp4_cli_var.h"
|
---|
| 59 | #include "ntp_cli.h"
|
---|
| 60 | #include "kernel_cfg.h"
|
---|
| 61 | #include "tinet_cfg.h"
|
---|
[359] | 62 | #include "util/ntstdio.h"
|
---|
[340] | 63 |
|
---|
[359] | 64 | extern ntstdio_t ntstdio;
|
---|
| 65 |
|
---|
[340] | 66 | T_DHCP4_CLI_CONTEXT *dhcp4_cli_initialize(ID tskid, ID cepid);
|
---|
| 67 | int dhcp4_cli_get_timer(T_DHCP4_CLI_CONTEXT *ct);
|
---|
| 68 | void dhcp4_cli_progress(T_DHCP4_CLI_CONTEXT *ct, int elapse);
|
---|
| 69 | void dhcp4_cli_wakeup(T_DHCP4_CLI_CONTEXT *ct);
|
---|
| 70 | void dhcp4_cli_timeout(T_DHCP4_CLI_CONTEXT *ct);
|
---|
| 71 |
|
---|
| 72 | int net_misc_get_timer(T_DHCP4_CLI_CONTEXT *ct, T_NTP_CLI_CONTEXT *nc)
|
---|
| 73 | {
|
---|
| 74 | int timer = dhcp4_cli_get_timer(ct);
|
---|
| 75 |
|
---|
| 76 | if ((nc->timer != TMO_FEVR) && ((timer == TMO_FEVR) || (timer > nc->timer))) {
|
---|
| 77 | timer = nc->timer;
|
---|
| 78 | }
|
---|
| 79 |
|
---|
| 80 | return timer;
|
---|
| 81 | }
|
---|
| 82 |
|
---|
| 83 | extern T_NTP_CLI_CONTEXT ntp_cli;
|
---|
| 84 |
|
---|
| 85 | /*
|
---|
| 86 | * DHCP, NTP クライアント タスク
|
---|
| 87 | */
|
---|
| 88 |
|
---|
| 89 | void
|
---|
| 90 | net_misc_task (intptr_t exinf)
|
---|
| 91 | {
|
---|
| 92 | T_DHCP4_CLI_CONTEXT *ct;
|
---|
| 93 | T_NTP_CLI_CONTEXT *nc = &ntp_cli;
|
---|
| 94 | ER error = E_OK, ret;
|
---|
| 95 | SYSTIM prev, time;
|
---|
| 96 | int timer;
|
---|
| 97 |
|
---|
| 98 | get_tid(&nc->tskid);
|
---|
[359] | 99 | ntstdio_printf(&ntstdio, "[NET MISC:%d,%d] started.", nc->tskid, (ID)exinf);
|
---|
[340] | 100 |
|
---|
| 101 | /* 初期化 */
|
---|
| 102 | ct = dhcp4_cli_initialize(nc->tskid, UDP4_DHCP_CLI_CEPID);
|
---|
| 103 | ntp_cli_initialize(nc, NTP_CLI_CEPID);
|
---|
| 104 |
|
---|
| 105 | ret = get_tim(&time);
|
---|
| 106 | if (ret != E_OK) {
|
---|
[359] | 107 | ntstdio_printf(&ntstdio, "[NET MISC,%d] get_tim error: %7lu,%s",
|
---|
[340] | 108 | nc->cepid, time / SYSTIM_HZ, itron_strerror(ret));
|
---|
| 109 | return;
|
---|
| 110 | }
|
---|
| 111 |
|
---|
| 112 | while (true) {
|
---|
| 113 | prev = time;
|
---|
| 114 |
|
---|
| 115 | /* タイマー取得 */
|
---|
| 116 | timer = net_misc_get_timer(ct, nc);
|
---|
| 117 |
|
---|
| 118 | /* 待ち */
|
---|
| 119 | error = tslp_tsk(timer);
|
---|
| 120 | if ((error != E_OK) && (error != E_TMOUT)) {
|
---|
[359] | 121 | ntstdio_printf(&ntstdio, "[NET MISC,%d] tslp_tsk error: %s %d",
|
---|
[340] | 122 | nc->cepid, itron_strerror(error), timer);
|
---|
| 123 | break;
|
---|
| 124 | }
|
---|
| 125 |
|
---|
| 126 | ret = get_tim(&time);
|
---|
| 127 | if (ret != E_OK) {
|
---|
[359] | 128 | ntstdio_printf(&ntstdio, "[NET MISC,%d] get_tim error: %s",
|
---|
[340] | 129 | nc->cepid, itron_strerror(ret));
|
---|
| 130 | break;
|
---|
| 131 | }
|
---|
| 132 |
|
---|
| 133 | /* 時間経過 */
|
---|
| 134 | int elapse = time - prev;
|
---|
| 135 | dhcp4_cli_progress(ct, elapse);
|
---|
| 136 | ntp_cli_progress(nc, elapse);
|
---|
| 137 |
|
---|
| 138 | /* 起こされた場合 */
|
---|
| 139 | if (error == E_OK) {
|
---|
| 140 | dhcp4_cli_wakeup(ct);
|
---|
| 141 | ntp_cli_wakeup(nc);
|
---|
| 142 | }
|
---|
| 143 |
|
---|
| 144 | /* タイムアウト処理 */
|
---|
| 145 | dhcp4_cli_timeout(ct);
|
---|
| 146 | ntp_cli_timeout(nc);
|
---|
| 147 | }
|
---|
| 148 | }
|
---|