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

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

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 9.2 KB
RevLine 
[388]1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2014-2019 Cores Co., Ltd. Japan
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è²¬ã™ã‚‹ã“と.
42 *
43 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
44お
45 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
46 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
47 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
48 * の責任を負わない.
49 *
50 * @(#) $Id: main.c 388 2019-05-22 11:25:18Z coas-nagasima $
51 */
52
53/*
54 * サンプルプログラム(1)の本体
55 */
56
57#include "shellif.h"
58#include <kernel.h>
59#include <t_stdlib.h>
60#include <sil.h>
61#include <setjmp.h>
62#include <string.h>
63#include <stdlib.h>
64#include <stdbool.h>
65#include "syssvc/serial.h"
66#include "syssvc/syslog.h"
67#include "target_syssvc.h"
68#include "kernel_cfg.h"
69#include "main.h"
70#include <tinet_config.h>
71#include <netinet/in.h>
72#include <netinet/in_itron.h>
73#include <tinet_nic_defs.h>
74#include <tinet_cfg.h>
75#include <netinet/in_var.h>
76#include <net/ethernet.h>
77#include <net/if6_var.h>
78#include <net/net.h>
79#include <net/if_var.h>
80#include <netinet/udp_var.h>
81#include "netapp/dhcp4_cli.h"
82#include "ffarch.h"
83#include "ff.h"
84#include <stdio.h>
85#include "usrcmd.h"
86#include "fdtable.h"
87#include "gpio_api.h"
88#include "usb_hbth.h"
89#include "ntshell_main.h"
90#ifdef IF_ETHER_BTUSB
91#include <btstack/utils.h>
92#endif
93#include "ntp_cli.h"
94#include "netcmd.h"
95#include "adafruit_ssd1306.h"
96#include "draw_font.h"
97
98ID ws_api_mailboxid = MAIN_DATAQUEUE;
99#ifndef NOUSE_MPF_NET_BUF
100ID ws_mempoolid = MPF_NET_BUF_256;
101#endif
102
103#ifdef IF_ETHER_BTUSB
104extern int bt_bnep_mode;
105/* PANU向けリモートアドレス */
106bd_addr_t remote_addr = {0x00,0x1B,0xDC,0x09,0x27,0x26};
107bool_t dhcp_enable = false;
108#else
109bool_t dhcp_enable = true;
110#endif
111
112uint8_t mac_addr[6] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0x01};
113PRI main_task_priority = MAIN_PRIORITY + 1;
114
115static void netif_link_callback(T_IFNET *ether);
116extern int execute_command(int wait);
117
118enum main_state_t {
119 main_state_start,
120 main_state_idle,
121};
122
123struct main_t {
124 int timer;
125 enum main_state_t state;
126 SYSTIM prev, now;
127};
128struct main_t main_obj;
129
130static void main_initialize();
131static int main_get_timer();
132static void main_progress(int interval);
133static void main_timeout();
134
135extern int ntshell_exit;
136
137int uart_read(char *buf, int cnt, void *extobj)
138{
139 struct main_t *obj = (struct main_t *)extobj;
140 int result;
141 ER ret;
142 int timer;
143
144 obj->prev = obj->now;
145
146 /* タイマー取得 */
147 timer = main_get_timer();
148
149 /* 待
150ち */
151 ret = serial_trea_dat(SIO_PORTID, buf, cnt, timer);
152 if ((ret < 0) && (ret != E_OK) && (ret != E_TMOUT)) {
153 syslog(LOG_NOTICE, "tslp_tsk ret: %s %d", itron_strerror(ret), timer);
154 ntshell_exit = 1;
155 return -1;
156 }
157 result = (int)ret;
158
159 ret = get_tim(&obj->now);
160 if (ret != E_OK) {
161 syslog(LOG_NOTICE, "get_tim ret: %s", itron_strerror(ret));
162 ntshell_exit = 1;
163 return -1;
164 }
165
166 /* 時間経過 */
167 int elapse = obj->now - obj->prev;
168 main_progress(elapse);
169
170 /* タイムアウト処理 */
171 main_timeout();
172
173 return result;
174}
175
176int uart_write(const char *buf, int cnt, void *extobj)
177{
178 return serial_wri_dat(SIO_PORTID, buf, cnt);
179}
180
181ntshell_t ntshell;
182
183/*
184 * メインタスク
185 */
186void main_task(intptr_t exinf)
187{
188#ifdef IF_ETHER_BTUSB
189 // PANU mode
190 bt_bnep_mode = 0;
191#endif
192
193 main_initialize();
194
195 ntshell_init(&ntshell, uart_read, uart_write, cmd_execute, &main_obj);
196 ntshell_set_prompt(&ntshell, "NTShell>");
197 ntshell_execute(&ntshell);
198}
199
200#if !defined(_MSC_VER)
201LCD_Handler_t lcd;
202#endif
203
204int wolfSSL_Debugging_ON(void);
205
206/*
207 * 初期化
208 */
209static void main_initialize()
210{
211 FILINFO fno;
212#if FF_USE_LFN
213 char lfn[FF_MAX_LFN + 1];
214 fno.lfname = lfn;
215 fno.lfsize = FF_MAX_LFN + 1;
216#endif
217 ER ret;
218
219 //wolfSSL_Debugging_ON();
220
221 ntshell_task_init(SIO_PORTID);
222
223 main_obj.timer = TMO_FEVR;
224 main_obj.state = main_state_start;
225
226 gpio_t led_blue, led_green, led_red, sw;
227 gpio_init_out(&led_blue, LED_BLUE);
228 gpio_init_out(&led_green, LED_GREEN);
229 gpio_init_out(&led_red, LED_RED);
230 gpio_init_in(&sw, USER_BUTTON0);
231
232 bool_t exec = gpio_read(&sw) == 1;
233
234 gpio_write(&led_blue, 1);
235 gpio_write(&led_green, exec ? 1 : 0);
236 gpio_write(&led_red, 0);
237
238 if (!dhcp_enable) {
239 dhcp4c_rel_info();
240
241 in4_add_ifaddr(IPV4_ADDR_STAIC_LOCAL, IPV4_ADDR_STAIC_LOCAL_MASK);
242 uint8_t data[32], c;
243 int i, j;
244
245 for (i = 0, j = 0; i < sizeof(mac_addr); i++) {
246 c = mac_addr[i] >> 4;
247 data[j++] = (c < 10) ? ('0' + c) : ('A' - 10 + c);
248 c = mac_addr[i] & 0xF;
249 data[j++] = (c < 10) ? ('0' + c) : ('A' - 10 + c);
250 data[j++] = ':';
251 }
252 data[--j] = '\0';
253
254 syslog(LOG_NOTICE, "mac_addr %s %s", data, dhcp_enable ? "dhcp" : "static");
255 }
256
257 ether_set_link_callback(netif_link_callback);
258
259 /* 初期化 */
260 ffarch_init();
261
262 gpio_write(&led_green, 0);
263#if !defined(_MSC_VER)
264 i2c_init(&lcd.i2c, I2C_SDA, I2C_SCL);
265 i2c_frequency(&lcd.i2c, 100000);
266
267 lcd_init3(&lcd, NC);
268
269 lcd_begin(&lcd, SSD1306_SWITCHCAPVCC, SSD1306_I2C_ADDRESS, true);
270
271 lcd_clearDisplay(&lcd);
272
273 lcd_display(&lcd);
274
275 lcd_drawString(&lcd, "OLED表示初期化完了!", 0, 0, WHITE, BLACK);
276
277 lcd_display(&lcd);
278#endif
279#ifdef IF_ETHER_BTUSB
280 usbhost_init(USBHOST_TASK);
281#endif
282
283 if (f_stat("1:/upload/main.mrb", &fno) != FR_OK) {
284 exec = false;
285 }
286
287 if (exec) {
288 cmd_execute("mruby -b 1:/upload/main.mrb", NULL);
289 }
290
291 ret = get_tim(&main_obj.now);
292 if (ret != E_OK) {
293 syslog(LOG_ERROR, "get_tim");
294 ext_tsk();
295 return;
296 }
297}
298
299/*
300 * タイマー取得
301 */
302static int main_get_timer()
303{
304 int timer = main_obj.timer;
305
306 return timer;
307}
308
309/*
310 * 時間経過
311 */
312static void main_progress(int interval)
313{
314 if (main_obj.timer != TMO_FEVR) {
315 main_obj.timer -= interval;
316 if (main_obj.timer < 0) {
317 main_obj.timer = 0;
318 }
319 }
320}
321
322/*
323 * タイムアウト処理
324 */
325static void main_timeout()
326{
327 //if (main_obj.timer == 0) {
328 //}
329}
330
331/* MACアドレスの設定時に呼ばれる */
332void mbed_mac_address(char *mac)
333{
334 memcpy(mac, mac_addr, 6);
335}
336
337static void netif_link_callback(T_IFNET *ether)
338{
339 uint8_t link_up = (ether->flags & IF_FLAG_LINK_UP) != 0;
340 uint8_t up = (ether->flags & IF_FLAG_UP) != 0;
341
342 if (dhcp_enable) {
343 if (!link_up)
344 dhcp4c_rel_info();
345 else if (!up)
346 dhcp4c_renew_info();
347 }
348 else {
349 up = link_up;
350 }
351
352 if (link_up && up)
353 ntp_cli_execute();
354
355 ntshell_change_netif_link(link_up, up);
356}
357
358int custom_rand_generate_seed(uint8_t* output, int32_t sz)
359{
360 SYSTIM now;
361 int32_t i;
362
363 get_tim(&now);
364 srand(now);
365
366 for (i = 0; i < sz; i++)
367 output[i] = rand();
368
369 return 0;
370}
371
372//extern int curl_main(int argc, char **argv);
373extern int iothub_client_main(int argc, char **argv);
374
375static const cmd_table_t cmdlist[] = {
376 {"cd", "change directory", usrcmd_cd },
377 {"ls", "list files", usrcmd_ls },
378 {"cp", "copy file", usrcmd_cp },
379 {"rm", "remove file", usrcmd_rm },
380 {"mv", "move file", usrcmd_mv },
381 {"mkdir", "Make directory", usrcmd_mkdir},
382 {"hexdump", "Hex dump", usrcmd_hexdump},
383 {"date", "print date and time", usrcmd_date},
384// {"curl", "Command lines or scripts to transfer data", curl_main},
385 {"ping", "ping", usrcmd_ping},
386 {"dhcpc", "DHCP Client rel/renew/info", usrcmd_dhcp4c},
387 {"dnsc", "DNS client", usrcmd_dnsc },
388 {"ntpc", "NTP client", usrcmd_ntpc },
389 {"iothub", "Asure IoT Hub Client", iothub_client_main},
390 {"info", "This is a description text string for info command.", usrcmd_info},
391 {"exit", "Exit Natural Tiny Shell", usrcmd_exit},
392};
393cmd_table_info_t cmd_table_info = { cmdlist, sizeof(cmdlist) / sizeof(cmdlist[0]) };
Note: See TracBrowser for help on using the repository browser.