source: azure_iot_hub/trunk/app_iothub_client/src/main.c@ 389

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

ビルドが通るよう更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 8.3 KB
Line 
1/*
2 * TOPPERS PROJECT Home Network Working Group Software
3 *
4 * Copyright (C) 2014-2019 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 <stdlib.h>
49#include <stdbool.h>
50#include "syssvc/serial.h"
51#include "syssvc/syslog.h"
52#include "target_syssvc.h"
53#include "kernel_cfg.h"
54#include "main.h"
55#include <tinet_config.h>
56#include <netinet/in.h>
57#include <netinet/in_itron.h>
58#include <tinet_nic_defs.h>
59#include <tinet_cfg.h>
60#include <netinet/in_var.h>
61#include <net/ethernet.h>
62#include <net/if6_var.h>
63#include <net/net.h>
64#include <net/if_var.h>
65#include <netinet/udp_var.h>
66#include "netapp/dhcp4_cli.h"
67#include "ffarch.h"
68#include "ff.h"
69#include <stdio.h>
70#include "usrcmd.h"
71#include "fdtable.h"
72#include "gpio_api.h"
73#include "ntshell_main.h"
74#include "ntp_cli.h"
75#include "netcmd.h"
76
77ID ws_api_mailboxid = MAIN_DATAQUEUE;
78#ifndef NOUSE_MPF_NET_BUF
79ID ws_mempoolid = MPF_NET_BUF_256;
80#endif
81
82bool_t dhcp_enable = true;
83
84uint8_t mac_addr[6] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0x01};
85PRI main_task_priority = MAIN_PRIORITY + 1;
86
87static void netif_link_callback(T_IFNET *ether);
88extern int execute_command(int wait);
89
90enum main_state_t {
91 main_state_start,
92 main_state_idle,
93};
94
95struct main_t {
96 int timer;
97 enum main_state_t state;
98 SYSTIM prev, now;
99};
100struct main_t main_obj;
101
102static void main_initialize();
103static int main_get_timer();
104static void main_progress(int interval);
105static void main_timeout();
106
107extern int ntshell_exit;
108
109int uart_read(char *buf, int cnt, void *extobj)
110{
111 struct main_t *obj = (struct main_t *)extobj;
112 int result;
113 ER ret;
114 int timer;
115
116 obj->prev = obj->now;
117
118 /* タイマー取得 */
119 timer = main_get_timer();
120
121 /* 待ち */
122 ret = serial_trea_dat(SIO_PORTID, buf, cnt, timer);
123 if ((ret < 0) && (ret != E_OK) && (ret != E_TMOUT)) {
124 syslog(LOG_NOTICE, "tslp_tsk ret: %s %d", itron_strerror(ret), timer);
125 ntshell_exit = 1;
126 return -1;
127 }
128 result = (int)ret;
129
130 ret = get_tim(&obj->now);
131 if (ret != E_OK) {
132 syslog(LOG_NOTICE, "get_tim ret: %s", itron_strerror(ret));
133 ntshell_exit = 1;
134 return -1;
135 }
136
137 /* 時間経過 */
138 int elapse = obj->now - obj->prev;
139 main_progress(elapse);
140
141 /* タイムアウト処理 */
142 main_timeout();
143
144 return result;
145}
146
147int uart_write(const char *buf, int cnt, void *extobj)
148{
149 return serial_wri_dat(SIO_PORTID, buf, cnt);
150}
151
152ntshell_t ntshell;
153
154/*
155 * メインタスク
156 */
157void main_task(intptr_t exinf)
158{
159 main_initialize();
160
161 ntshell_init(&ntshell, uart_read, uart_write, cmd_execute, &main_obj);
162 ntshell_set_prompt(&ntshell, "NTShell>");
163 ntshell_execute(&ntshell);
164}
165
166int wolfSSL_Debugging_ON(void);
167
168/*
169 * 初期化
170 */
171static void main_initialize()
172{
173 FILINFO fno;
174#if FF_USE_LFN
175 char lfn[FF_MAX_LFN + 1];
176 fno.lfname = lfn;
177 fno.lfsize = FF_MAX_LFN + 1;
178#endif
179 ER ret;
180
181 //wolfSSL_Debugging_ON();
182
183 ntshell_task_init(SIO_PORTID);
184
185 main_obj.timer = TMO_FEVR;
186 main_obj.state = main_state_start;
187
188 gpio_t led_blue, led_green, led_red, sw;
189 gpio_init_out(&led_blue, LED_BLUE);
190 gpio_init_out(&led_green, LED_GREEN);
191 gpio_init_out(&led_red, LED_RED);
192 gpio_init_in(&sw, USER_BUTTON0);
193
194 bool_t exec = gpio_read(&sw) == 1;
195
196 gpio_write(&led_blue, 1);
197 gpio_write(&led_green, exec ? 1 : 0);
198 gpio_write(&led_red, 0);
199
200 if (!dhcp_enable) {
201 dhcp4c_rel_info();
202
203 in4_add_ifaddr(IPV4_ADDR_STAIC_LOCAL, IPV4_ADDR_STAIC_LOCAL_MASK);
204 uint8_t data[32], c;
205 int i, j;
206
207 for (i = 0, j = 0; i < sizeof(mac_addr); i++) {
208 c = mac_addr[i] >> 4;
209 data[j++] = (c < 10) ? ('0' + c) : ('A' - 10 + c);
210 c = mac_addr[i] & 0xF;
211 data[j++] = (c < 10) ? ('0' + c) : ('A' - 10 + c);
212 data[j++] = ':';
213 }
214 data[--j] = '\0';
215
216 syslog(LOG_NOTICE, "mac_addr %s %s", data, dhcp_enable ? "dhcp" : "static");
217 }
218
219 ether_set_link_callback(netif_link_callback);
220
221 /* 初期化 */
222 ffarch_init();
223
224 gpio_write(&led_green, 0);
225
226 ret = get_tim(&main_obj.now);
227 if (ret != E_OK) {
228 syslog(LOG_ERROR, "get_tim");
229 ext_tsk();
230 return;
231 }
232}
233
234/*
235 * タイマー取得
236 */
237static int main_get_timer()
238{
239 int timer = main_obj.timer;
240
241 return timer;
242}
243
244/*
245 * 時間経過
246 */
247static void main_progress(int interval)
248{
249 if (main_obj.timer != TMO_FEVR) {
250 main_obj.timer -= interval;
251 if (main_obj.timer < 0) {
252 main_obj.timer = 0;
253 }
254 }
255}
256
257/*
258 * タイムアウト処理
259 */
260static void main_timeout()
261{
262 //if (main_obj.timer == 0) {
263 //}
264}
265
266/* MACアドレスの設定時に呼ばれる */
267void mbed_mac_address(char *mac)
268{
269 memcpy(mac, mac_addr, 6);
270}
271
272static void netif_link_callback(T_IFNET *ether)
273{
274 uint8_t link_up = (ether->flags & IF_FLAG_LINK_UP) != 0;
275 uint8_t up = (ether->flags & IF_FLAG_UP) != 0;
276
277 if (dhcp_enable) {
278 if (!link_up)
279 dhcp4c_rel_info();
280 else if (!up)
281 dhcp4c_renew_info();
282 }
283 else {
284 up = link_up;
285 }
286
287 if (link_up && up)
288 ntp_cli_execute();
289
290 ntshell_change_netif_link(link_up, up);
291}
292
293int custom_rand_generate_seed(uint8_t* output, int32_t sz)
294{
295 SYSTIM now;
296 int32_t i;
297
298 get_tim(&now);
299 srand(now);
300
301 for (i = 0; i < sz; i++)
302 output[i] = rand();
303
304 return 0;
305}
306
307//extern int curl_main(int argc, char **argv);
308extern int iothub_client_main(int argc, char **argv);
309
310static const cmd_table_t cmdlist[] = {
311 {"cd", "change directory", usrcmd_cd },
312 {"ls", "list files", usrcmd_ls },
313 {"cp", "copy file", usrcmd_cp },
314 {"rm", "remove file", usrcmd_rm },
315 {"mv", "move file", usrcmd_mv },
316 {"mkdir", "Make directory", usrcmd_mkdir},
317 {"hexdump", "Hex dump", usrcmd_hexdump},
318 {"date", "print date and time", usrcmd_date},
319// {"curl", "Command lines or scripts to transfer data", curl_main},
320 {"ping", "ping", usrcmd_ping},
321 {"dhcpc", "DHCP Client rel/renew/info", usrcmd_dhcp4c},
322 {"dnsc", "DNS client", usrcmd_dnsc },
323 {"ntpc", "NTP client", usrcmd_ntpc },
324 {"iothub", "Asure IoT Hub Client", iothub_client_main},
325 {"info", "This is a description text string for info command.", usrcmd_info},
326 {"exit", "Exit Natural Tiny Shell", usrcmd_exit},
327};
328cmd_table_info_t cmd_table_info = { cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) };
Note: See TracBrowser for help on using the repository browser.