Changeset 107 for uKadecot/trunk/src/ukadecot/main.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/src/ukadecot/main.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r105 r107 4 4 * Copyright (C) 2014 Cores Co., Ltd. Japan 5 5 * 6 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 7 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 8 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 9 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 10 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 11 * XR[hÉÜÜêĢ鱯D 12 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 13 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 14 gip 15 * Ò}j 16 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 17 * Ì³ÛØKèðfÚ·é±ÆD 18 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 19 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 20 * ÆD 21 * (a) Äzzɺ¤hL 22 gipÒ}j 23 AÈÇjÉCãLÌ 24 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 25 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 26 * ñ·é±ÆD 27 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 28 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 29 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 30 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 31 * ÆÓ·é±ÆD 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 * 免責すること. 32 28 * 33 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨34 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI35 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF36 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»37 * ÌÓCðíÈ¢D29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 38 34 * 39 35 * @(#) $Id$ … … 41 37 42 38 /* 43 * TvvO(1)Ì{Ì39 * サンプルプログラム(1)の本体 44 40 */ 45 41 … … 61 57 #include "uip_adpt.h" 62 58 #include "wamp.h" 63 // TODO: Rg[ü¯wb_[t@Cð쬷é59 // TODO:コントローラ向けヘッダーファイルを作成する 64 60 #include "echonet_task.h" 65 61 #include "echonet_agent.h" … … 70 66 uint8_t mac_addr[6] = { 0x12, 0x34, 0x56, 0x78, 0x9A, 0xB8 }; 71 67 72 #define MAKER_CODE 0x00, 0x00, 0xB3 /* TOPPERS vWFNg*/73 74 /* m[hvt@CIuWFNg*/68 #define MAKER_CODE 0x00, 0x00, 0xB3 /* TOPPERSプロジェクト */ 69 70 /* ノードプロファイルオブジェクト */ 75 71 struct node_profile_object_t local_node_data = { 76 0x30, /* ®ìóÔ */ 77 { 0x01, 0x0A, 0x01, 0x00 }, /* u 78 îñ */ 72 0x30, /* 動作状態 */ 73 { 0x01, 0x0A, 0x01, 0x00 }, /* Version情報 */ 79 74 { 80 0xFE, /* ºÊÊMwIDtB[h*/81 { MAKER_CODE }, /* [J[R[h*/82 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, /* j[NID([J[Æ©) */75 0xFE, /* 下位通信層IDフィールド */ 76 { MAKER_CODE }, /* メーカーコード */ 77 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }, /* ユニークID部(メーカー独自) */ 83 78 }, 84 0x0000, /* Ùíàe*/85 { MAKER_CODE }, /* [J[R[h*/79 0x0000, /* 異常内容 */ 80 { MAKER_CODE }, /* メーカーコード */ 86 81 }; 87 82 88 /* Rg[[NX*/83 /* コントローラークラス */ 89 84 struct controller_t controller_class_data = { 90 0x30, /* ®ìóÔ */ 91 0x00, /* Ýuê */ 92 { 0x00, 0x00, 'C', 0x00 }, /* Kiu 93 îñ */ 94 0x41, /* Ùí¶óÔ */ 95 { MAKER_CODE }, /* [J[R[h */ 85 0x30, /* 動作状態 */ 86 0x00, /* 設置場所 */ 87 { 0x00, 0x00, 'C', 0x00 }, /* 規格Version情報 */ 88 0x41, /* 異常発生状態 */ 89 { MAKER_CODE }, /* メーカーコード */ 96 90 }; 97 91 98 92 /* 99 * ®ìóÔON/OFFÝèÖi0x30, 0x31ÌÝó¯t¯j93 * 動作状態ON/OFF設定関数(0x30, 0x31のみ受け付け) 100 94 */ 101 95 int onoff_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) 102 96 { 103 /* TCYªPÈOÍó¯t¯È¢*/97 /* サイズが1以外は受け付けない */ 104 98 if(size != 1) 105 99 return 0; … … 108 102 109 103 switch(*(uint8_t *)src){ 110 /* ON Ìê*/104 /* ONの場合 */ 111 105 case 0x30: 112 106 *((uint8_t *)item->exinf) = *((uint8_t *)src); 113 /* LED Ì"."ðON */107 /* LEDの"."をON */ 114 108 sil_wrb_mem((uint8_t *)0x0008C02A, sil_reb_mem((uint8_t *)0x0008C02A) | 0x40); 115 109 break; 116 /* OFF Ìê*/110 /* OFFの場合 */ 117 111 case 0x31: 118 112 *((uint8_t *)item->exinf) = *((uint8_t *)src); 119 /* LED Ì"."ðOFF */113 /* LEDの"."をOFF */ 120 114 sil_wrb_mem((uint8_t *)0x0008C02A, sil_reb_mem((uint8_t *)0x0008C02A) & ~0x40); 121 115 break; 122 /* 0x30 ©0x31ÈOÍó¯t¯È¢*/116 /* 0x30か0x31以外は受け付けない */ 123 117 default: 124 118 return 0; … … 129 123 130 124 /* 131 * ÙíàeÝèÖ125 * 異常内容設定関数 132 126 */ 133 127 int node_profile_object_fault_content_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) 134 128 { 135 /* TCYª2ÈOÍó¯t¯È¢*/129 /* サイズが2以外は受け付けない */ 136 130 if(size != 2) 137 131 return 0; … … 139 133 if((*(uint16_t *)src >= 0x0) && (*(uint16_t *)src <= 0x3ec)){ 140 134 *((uint16_t *)item->exinf) = *((uint16_t *)src); 141 /* TODO: ±ÌÌêÌ*/142 } 143 /* ãLÈOÍó¯t¯È¢*/135 /* TODO: このの場合の処理*/ 136 } 137 /* 上記以外は受け付けない */ 144 138 else{ 145 139 return 0; … … 150 144 151 145 /* 152 * Ùí¶óÔÝèÖi0x41, 0x42ÌÝó¯t¯j146 * 異常発生状態設定関数(0x41, 0x42のみ受け付け) 153 147 */ 154 148 int alarm_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) 155 149 { 156 /* TCYªPÈOÍó¯t¯È¢*/150 /* サイズが1以外は受け付けない */ 157 151 if(size != 1) 158 152 return 0; … … 161 155 162 156 switch(*(uint8_t *)src){ 163 /* Ùí¶ èÌê*/157 /* 異常発生ありの場合 */ 164 158 case 0x41: 165 /* Ùí¶ÈµÌê*/159 /* 異常発生なしの場合 */ 166 160 case 0x42: 167 161 *((uint8_t *)item->exinf) = *((uint8_t *)src); 168 162 break; 169 /* 0x41 ©0x42ÈOÍó¯t¯È¢*/163 /* 0x41か0x42以外は受け付けない */ 170 164 default: 171 165 return 0; … … 176 170 177 171 /* 178 * »ÝÝèÖ172 * 現在時刻設定関数 179 173 */ 180 174 int time_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) … … 185 179 return 0; 186 180 187 /* Ýè*/181 /* 時刻設定 */ 188 182 p_src = (uint8_t *)src; 189 183 sil_wrb_mem((uint8_t *)RTC_RHRCNT_ADDR, *p_src++); … … 195 189 196 190 /* 197 * »Ýæ¾Ö191 * 現在時刻取得関数 198 192 */ 199 193 int time_prop_get(const EPRPINIB *item, void *dst, int size) … … 204 198 return 0; 205 199 206 /* Ýè*/200 /* 時刻設定 */ 207 201 p_dst = (uint8_t *)dst; 208 202 *p_dst++ = sil_reb_mem((uint8_t *)RTC_RHRCNT_ADDR); … … 213 207 214 208 /* 215 * »ÝNúÝèÖ209 * 現在年月日設定関数 216 210 */ 217 211 int date_prop_set(const EPRPINIB *item, const void *src, int size, bool_t *anno) … … 222 216 return 0; 223 217 224 /* NúÝè*/218 /* 年月日設定 */ 225 219 p_src = (uint8_t *)src; 226 220 p_src++; /* 20XX */ … … 233 227 234 228 /* 235 * »ÝNúæ¾Ö229 * 現在年月日取得関数 236 230 */ 237 231 int date_prop_get(const EPRPINIB *item, void *dst, int size) … … 252 246 253 247 /* 254 * uIP ^XNú»248 * uIP タスク初期化処理 255 249 */ 256 250 void uip_task_init(intptr_t exinf) … … 284 278 285 279 /* 286 * C^XN280 * メインタスク 287 281 */ 288 282 static … … 298 292 PT_BEGIN(&main_pt); 299 293 300 /* ú»*/294 /* 初期化 */ 301 295 main_initialize(); 302 296 … … 310 304 prev = now; 311 305 312 /* ^C}[æ¾*/306 /* タイマー取得 */ 313 307 timer = main_get_timer(); 314 308 timer_set(&main_pt_timer, timer); 315 309 316 /* d¶Ò¿*/310 /* 応答電文待ち */ 317 311 PT_WAIT_UNTIL(&main_pt, (((ret = ecn_prcv_esv(&esv)) == E_OK) || (ret == E_BRK) 318 312 || ((ret = timer_expired(&main_pt_timer) ? E_TMOUT : E_WBLK) == E_TMOUT))); … … 328 322 } 329 323 330 /* Ôoß*/324 /* 時間経過 */ 331 325 main_progress(now - prev); 332 326 333 /* Echonet d¶óMÌê*/327 /* Echonet電文受信の場合 */ 334 328 if (ret == E_OK) { 335 /* Echonet d¶óM*/329 /* Echonet電文受信処理 */ 336 330 main_recv_esv(esv); 337 331 338 /* Ìæðú*/332 /* 領域解放 */ 339 333 ret = ecn_rel_esv(esv); 340 334 if (ret != E_OK){ … … 343 337 } 344 338 } 345 /* d¶Ò¿ÌèÝÌê*/339 /* 応答電文待ちの割り込みの場合 */ 346 340 else if (ret == E_BRK) { 347 341 ECN_FBS_ID msg = { (T_ECN_FST_BLK *)esv }; … … 355 349 break; 356 350 case 3/*ECN_MSG_USER_BREAK*/: 357 /* d¶Ò¿ÌèÝf[^æ¾*/351 /* 応答電文待ちの割り込みデータ取得 */ 358 352 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 359 353 if (ret != E_OK){ … … 362 356 } 363 357 364 /* d¶Ò¿ÌèÝ*/358 /* 応答電文待ちの割り込み処理 */ 365 359 main_break_wait(brkdat, len); 366 360 break; 367 361 } 368 362 369 /* Ìæðú*/363 /* 領域解放 */ 370 364 if (rel_msg) { 371 365 ret = ecn_rel_esv(esv); … … 377 371 } 378 372 379 /* ^CAEg*/373 /* タイムアウト処理 */ 380 374 main_timeout(); 381 375 382 /* L 383 [ÉÜÁ½bZ[Wð */ 376 /* キューに溜まったメッセージを処理 */ 384 377 while(main_wbs_que_msg()); 385 378 } … … 436 429 437 430 /* 438 * ú»431 * 初期化 439 432 */ 440 433 static void main_initialize() … … 446 439 ER ret; 447 440 448 /* LED ð"000"Æ\¦*/441 /* LEDを"000"と表示 */ 449 442 sil_wrb_mem((uint8_t *)0x0008C02A, 0x00); 450 443 … … 473 466 syslog(LOG_INFO, "mac_addr %s %s", data, dflt_addr ? "default" : "flash-rom"); 474 467 475 /* uIP ðJn*/468 /* uIPを開始 */ 476 469 uip_start(); 477 470 478 471 wamp_init(&wamp); 479 472 480 /* 10ms ãÉ{^óÔðmF*/473 /* 10ms後にボタン状態を確認 */ 481 474 main_state = main_state_start; 482 475 main_timer = TMO_FEVR; 483 476 484 /* Arduino Ý·@\ú»*/477 /* Arduino互換機能初期化 */ 485 478 arduino_init(); 486 479 487 /* {^óÔÇÝÝ*/480 /* ボタン状態読み込み */ 488 481 btn1 = sil_reb_mem((uint8_t *)0x0008C04A); 489 482 /*btn1 = sil_reb_mem((uint8_t *)0x0008C040);*/ … … 498 491 499 492 /* 500 * ^C}[æ¾493 * タイマー取得 501 494 */ 502 495 static TMO main_get_timer() … … 518 511 519 512 /* 520 * Ôoß513 * 時間経過 521 514 */ 522 515 static void main_progress(TMO interval) … … 547 540 548 541 /* 549 * Echonet d¶óM542 * Echonet電文受信処理 550 543 */ 551 544 static void main_recv_esv(T_EDATA *esv) … … 610 603 611 604 /* 612 * WebSocket bZ[WóM605 * WebSocketメッセージ受信処理 613 606 */ 614 607 static bool_t main_wbs_msg(ECN_FBS_ID msg) … … 646 639 647 640 /* 648 * èÝbZ[WóM641 * 割り込みメッセージ受信処理 649 642 */ 650 643 static void main_int_msg(ECN_FBS_ID msg) … … 673 666 674 667 /* 675 * d¶Ò¿ÌèÝ668 * 応答電文待ちの割り込み処理 676 669 */ 677 670 static void main_break_wait(uint8_t *brkdat, int32_t len) … … 689 682 690 683 /* 691 * d¶Ò¿ÌèÝ684 * 応答電文待ちの割り込み処理 692 685 */ 693 686 void main_set_addr_callback() … … 696 689 uint8_t data[1]; 697 690 698 /* C^XNÉÊm*/691 /* メインタスクに通知 */ 699 692 data[0] = 0x01; 700 693 ret = ecn_brk_wai(data, sizeof(data)); … … 705 698 706 699 /* 707 * d¶Ò¿ÌèÝ700 * 応答電文待ちの割り込み処理 708 701 */ 709 702 static void main_start_service() … … 717 710 syslog(LOG_INFO, "ip_addr %s, netmask %s, gateway %s", ip_addr, netmask, gateway); 718 711 719 /* ECHONET ~hEFAðN®*/712 /* ECHONETミドルウェアを起動 */ 720 713 ret = ecn_sta_svc(); 721 714 if(ret != E_OK) … … 727 720 728 721 /* 729 * ^CAEg722 * タイムアウト処理 730 723 */ 731 724 static void main_timeout() … … 760 753 switch(main_state){ 761 754 case main_state_idle: 762 /* 10ms ãÉ{^óÔðmF*/755 /* 10ms後にボタン状態を確認 */ 763 756 main_timer = 10; 764 757 765 758 arduino_tick(); 766 759 767 /* {^óÔÇÝÝ*/760 /* ボタン状態読み込み */ 768 761 btn1 = sil_reb_mem((uint8_t *)0x0008C04A); 769 762 /*btn1 = sil_reb_mem((uint8_t *)0x0008C040);*/ 770 763 btn2 = sil_reb_mem((uint8_t *) 0x0008C040); 771 764 772 /* {^PÌ*/765 /* ボタン1の処理 */ 773 766 if(((btn1 & 0x80/*0x20*/) != 0) && !main_btn1_state){ 774 767 main_btn1_count++; … … 793 786 } 794 787 795 /* {^QÌ*/788 /* ボタン2の処理 */ 796 789 if(((btn2 & 0x80) != 0) && !main_btn2_state){ 797 790 main_btn2_count++; … … 852 845 853 846 /* 854 * {^PóÔÏ»847 * ボタン1状態変化処理 855 848 */ 856 849 static void main_btn1_change(bool_t push) 857 850 { 858 /* ³êÄßÁ½É·é*/851 /* 押されて戻った時に処理する */ 859 852 if(push) 860 853 return; 861 854 862 /* @íÌõ*/855 /* 機器の検索 */ 863 856 main_search_device(); 864 857 } 865 858 866 859 /* 867 * {^QóÔÏ»860 * ボタン2状態変化処理 868 861 */ 869 862 static void main_btn2_change(bool_t push) … … 872 865 873 866 /* 874 * @íÌõ867 * 機器の検索 875 868 */ 876 869 static ER main_search_device() … … 879 872 T_EDATA *esv; 880 873 881 /* @íÌõ*/874 /* 機器の検索 */ 882 875 ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6); 883 876 if(ret != E_OK){ … … 886 879 } 887 880 888 /* d¶M*/881 /* 電文送信 */ 889 882 ret = ecn_snd_esv(esv); 890 883 if(ret != E_OK){ … … 925 918 return E_QOVR; 926 919 927 /* @íÌõ*/920 /* 機器の検索 */ 928 921 ret = main_search_device(); 929 922 if(ret != E_OK){ … … 1120 1113 return E_QOVR; 1121 1114 1122 /* vpeBæ¾d¶ì¬*/1115 /* プロパティ取得電文作成 */ 1123 1116 ret = ecn_esv_get(&esv, eobjid, epc); 1124 1117 if(ret != E_OK){ … … 1127 1120 } 1128 1121 1129 /* d¶M*/1122 /* 電文送信 */ 1130 1123 ret = ecn_snd_esv(esv); 1131 1124 if(ret != E_OK){ … … 1195 1188 return E_QOVR; 1196 1189 1197 /* vpeBæ¾d¶ì¬*/1190 /* プロパティ取得電文作成 */ 1198 1191 ret = ecn_esv_setc(&esv, eobjid, epc, pdc, edt); 1199 1192 if(ret != E_OK){ … … 1202 1195 } 1203 1196 1204 /* d¶M*/1197 /* 電文送信 */ 1205 1198 ret = ecn_snd_esv(esv); 1206 1199 if(ret != E_OK){ … … 1270 1263 return E_QOVR; 1271 1264 1272 /* d¶M*/1265 /* 電文送信 */ 1273 1266 ret = ecn_snd_esv(esv); 1274 1267 if(ret != E_OK){ … … 1306 1299 return E_QOVR; 1307 1300 1308 /* d¶M*/1301 /* 電文送信 */ 1309 1302 ret = ecn_snd_esv(esv); 1310 1303 if(ret != E_OK){ … … 1342 1335 return E_QOVR; 1343 1336 1344 /* d¶M*/1337 /* 電文送信 */ 1345 1338 ret = ecn_snd_esv(esv); 1346 1339 if(ret != E_OK){ -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.