source: asp3_tinet_ecnl_rx/trunk/app1_usb_watt_meter/src/main.c@ 340

Last change on this file since 340 was 340, checked in by coas-nagasima, 6 years ago

NTPクライアント処理を追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 9.0 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2014-2017 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 *
35 * @(#) $Id$
36 */
37
38/*
39 * サンプルプログラム(1)の本体
40 */
41
42#include "shellif.h"
43#include <kernel.h>
44#include <t_stdlib.h>
45#include <sil.h>
46#include <setjmp.h>
47#include <string.h>
48#include "syssvc/serial.h"
49#include "syssvc/syslog.h"
50#include "target_syssvc.h"
51#include "kernel_cfg.h"
52#include "main.h"
53#include <tinet_config.h>
54#include <netinet/in.h>
55#include <netinet/in_itron.h>
56#include <tinet_nic_defs.h>
57#include <tinet_cfg.h>
58#include <netinet/in_var.h>
59#include <net/ethernet.h>
60#include <net/if6_var.h>
61#include <net/net.h>
62#include <net/if_var.h>
63#include <netinet/udp_var.h>
64#include "netapp/dhcp4_cli.h"
65#include "ffarch.h"
66#include "ff.h"
67#include "core/ntshell.h"
68#include "core/ntlibc.h"
69#include "util/ntstdio.h"
70#include "usrcmd.h"
71#include "util/ntopt.h"
72#include "socket_stub.h"
73#include "mbed_api.h"
74#include "usb_hbth.h"
75#include "ntshell_main.h"
76#include <btstack/utils.h>
77#include "client.h"
78#include "ntp_cli.h"
79
80ID ws_api_mailboxid = MAIN_DATAQUEUE;
81ID ws_mempoolid = MPF_NET_BUF_256;
82
83#ifdef IF_ETHER_BTUSB
84extern int bt_bnep_mode;
85
86// BUFFALLO
87//bd_addr_t remote_addr = { 0x00,0x1B,0xDC,0x04,0x5C,0x2D };
88// Raspberry Pi 3
89//bd_addr_t remote_addr = {0xB8,0x27,0xEB,0x10,0x6D,0x60};
90// PRINCETON
91//bd_addr_t remote_addr = {0x00,0x1B,0xDC,0x06,0x6E,0x98};
92// ELECOM
93bd_addr_t remote_addr = {0x00,0x1B,0xDC,0x09,0x27,0x26};
94#endif
95
96uint8_t mac_addr[6] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0x01};
97bool_t dhcp_enable = true;
98PRI main_task_priority = MAIN_PRIORITY + 1;
99
100static void netif_link_callback(T_IFNET *ether);
101extern int execute_command(int wait);
102
103enum main_state_t {
104 main_state_start,
105 main_state_idle,
106};
107
108struct main_t {
109 int timer;
110 enum main_state_t state;
111 SYSTIM prev, now;
112};
113struct main_t main_obj;
114
115static void main_initialize();
116static int main_get_timer();
117static void main_progress(int interval);
118static void main_timeout();
119
120int uart_read(char *buf, int cnt, void *extobj)
121{
122 return serial_rea_dat(SIO_PORTID, (char *)buf, cnt);
123}
124
125int uart_write(const char *buf, int cnt, void *extobj)
126{
127 return serial_wri_dat(SIO_PORTID, buf, cnt);
128}
129
130unsigned char ntstdio_xi(struct ntstdio_t *handle)
131{
132 char buf[1];
133 if(serial_rea_dat(SIO_PORTID, buf, 1) != 1)
134 return -EIO;
135 return buf[0];
136}
137
138void ntstdio_xo(struct ntstdio_t *handle, unsigned char c)
139{
140 char buf[1];
141 buf[0] = c;
142 serial_wri_dat(SIO_PORTID, buf, 1);
143}
144
145ntshell_t ntshell;
146void _start_c(long *p);
147
148/*
149 * メインタスク
150 */
151void main_task(intptr_t exinf)
152{
153 long args[] = {
154 1,
155 (long)"ntshell",
156 };
157 _start_c(args);
158}
159
160int main(int argc, char **argv)
161{
162#ifdef IF_ETHER_BTUSB
163 // PANU mode
164 bt_bnep_mode = 0;
165#endif
166
167 main_initialize();
168
169 ntshell_init(&ntshell, uart_read, uart_write, cmd_execute, NULL);
170 ntshell_set_prompt(&ntshell, "NTShell>");
171 ntshell_execute(&ntshell);
172
173 return 0;
174}
175
176int wolfSSL_Debugging_ON(void);
177
178/*
179 * 初期化
180 */
181static void main_initialize()
182{
183 FILINFO fno;
184#if _USE_LFN
185 char lfn[_MAX_LFN + 1];
186 fno.lfname = lfn;
187 fno.lfsize = _MAX_LFN + 1;
188#endif
189 ER ret2;
190
191 //wolfSSL_Debugging_ON();
192
193 ntshell_task_init();
194
195 main_obj.timer = TMO_FEVR;
196 main_obj.state = main_state_start;
197
198 gpio_t led_blue, led_green, led_red, sw;
199 gpio_init_out(&led_blue, LED_BLUE);
200 gpio_init_out(&led_green, LED_GREEN);
201 gpio_init_out(&led_red, LED_RED);
202 gpio_init_in(&sw, USER_BUTTON0);
203
204 bool_t exec = gpio_read(&sw) == 1;
205
206 gpio_write(&led_blue, 1);
207 gpio_write(&led_green, exec ? 1 : 0);
208 gpio_write(&led_red, 0);
209
210 if (!dhcp_enable) {
211 dhcp4c_rel_info();
212
213 in4_add_ifaddr(IPV4_ADDR_STAIC_LOCAL, IPV4_ADDR_STAIC_LOCAL_MASK);
214 uint8_t data[32], c;
215 int i, j;
216
217 for (i = 0, j = 0; i < sizeof(mac_addr); i++) {
218 c = mac_addr[i] >> 4;
219 data[j++] = (c < 10) ? ('0' + c) : ('A' - 10 + c);
220 c = mac_addr[i] & 0xF;
221 data[j++] = (c < 10) ? ('0' + c) : ('A' - 10 + c);
222 data[j++] = ':';
223 }
224 data[--j] = '\0';
225
226 syslog(LOG_NOTICE, "mac_addr %s %s", data, dhcp_enable ? "dhcp" : "static");
227 }
228
229 /* libcurlとWolfSSLの初期化 */
230 client_init();
231
232 ether_set_link_callback(netif_link_callback);
233
234 /* 初期化 */
235 if (ffarch_init() == 0) {
236 gpio_write(&led_blue, 0);
237 }
238 else {
239 gpio_write(&led_blue, 0);
240 gpio_write(&led_red, 1);
241 }
242
243 gpio_write(&led_green, 0);
244
245#ifdef IF_ETHER_BTUSB
246 usbhost_init(USBHOST_TASK);
247#endif
248
249 ret2 = get_tim(&main_obj.now);
250 if (ret2 != E_OK) {
251 syslog(LOG_ERROR, "get_tim");
252 ext_tsk();
253 return;
254 }
255}
256
257/*
258 * タイマー取得
259 */
260static int main_get_timer()
261{
262 int timer = main_obj.timer;
263
264 return timer;
265}
266
267/*
268 * 時間経過
269 */
270static void main_progress(int interval)
271{
272 if (main_obj.timer != TMO_FEVR) {
273 main_obj.timer -= interval;
274 if (main_obj.timer < 0) {
275 main_obj.timer = 0;
276 }
277 }
278}
279
280/*
281 * タイムアウト処理
282 */
283static void main_timeout()
284{
285 //if (main_obj.timer == 0) {
286 //}
287}
288
289/* MACアドレスの設定時に呼ばれる */
290void mbed_mac_address(char *mac)
291{
292 memcpy(mac, mac_addr, 6);
293}
294
295void echonet_change_netif_link(uint8_t link_up, uint8_t up);
296
297static void netif_link_callback(T_IFNET *ether)
298{
299 uint8_t link_up = (ether->flags & IF_FLAG_LINK_UP) != 0;
300 uint8_t up = (ether->flags & IF_FLAG_UP) != 0;
301
302 if (dhcp_enable) {
303 if (!link_up)
304 dhcp4c_rel_info();
305 else if (!up)
306 dhcp4c_renew_info();
307 }
308 else {
309 up = link_up;
310 }
311
312 if (link_up && up)
313 ntp_cli_execute();
314
315 ntshell_change_netif_link(link_up, up);
316
317 echonet_change_netif_link(link_up, up);
318}
319
320int custom_rand_generate_seed(uint8_t* output, int32_t sz)
321{
322 SYSTIM now;
323 int32_t i;
324
325 get_tim(&now);
326 srand(now);
327
328 for (i = 0; i < sz; i++)
329 output[i] = rand();
330
331 return 0;
332}
333
334int cmd_logupload(int argc, char **argv)
335{
336 client_task(0);
337 return 0;
338}
339
340extern int curl_main(int argc, char **argv);
341extern int usrcmd_ping(int argc, char **argv);
342extern int usrcmd_dhcp4c(int argc, char **argv);
343extern int usrcmd_dnsc(int argc, char **argv);
344extern int usrcmd_ntpc(int argc, char **argv);
345
346static const cmd_table_t cmdlist[] = {
347 {"cd", "change directory", usrcmd_cd },
348 {"ls", "list files", usrcmd_ls },
349 {"cp", "copy file", usrcmd_cp },
350 {"rm", "remove file", usrcmd_rm },
351 {"mv", "move file", usrcmd_mv },
352 {"mkdir", "Make directory", usrcmd_mkdir},
353 {"hexdump", "Hex dump", usrcmd_hexdump},
354 {"date", "print date and time", usrcmd_date},
355 {"curl", "Command lines or scripts to transfer data", curl_main},
356 {"ping", "ping", usrcmd_ping},
357 {"dhcpc", "DHCP Client rel/renew/info", usrcmd_dhcp4c},
358 {"dnsc", "DNS client", usrcmd_dnsc },
359 {"ntpc", "NTP client", usrcmd_ntpc },
360 {"logupload", "Upload log to server", cmd_logupload},
361 {"info", "This is a description text string for info command.", usrcmd_info},
362 {"exit", "Exit Natural Tiny Shell", usrcmd_exit},
363};
364cmd_table_info_t cmd_table_info = { cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) };
Note: See TracBrowser for help on using the repository browser.