Changeset 389 for azure_iot_hub/trunk/ntshell/echonet/echonet_agent.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/ntshell/echonet/echonet_agent.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 4 4 * Copyright (C) 2015 Cores Co., Ltd. Japan 5 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 責ãããã¨ï¼ 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 * 免責すること. 42 28 * 43 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 44 ã 45 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 46 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 47 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 48 * ã®è²¬ä»»ãè² ããªãï¼ 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 * の責任を負わない. 49 34 * 50 35 * @(#) $Id$ … … 52 37 53 38 /* 54 * ECHONET Lite åççæãã¼ã39 * ECHONET Lite 動的生成ノード 55 40 */ 56 41 … … 194 179 195 180 /* 196 * ãã¥ã¼ã®åæå181 * キューの初期化 197 182 * 198 * p_queue ã«ã¯ãã¥ã¼ããããæå®ããï¼183 * p_queueにはキューヘッダを指定する. 199 184 */ 200 185 Inline void … … 209 194 210 195 /* 211 * ãã¥ã¼ã®åã¨ã³ããªã¸ã®æ¿å 212 ¥ 196 * キューの前エントリへの挿入 213 197 * 214 * p_queueã®åã«p_entryãæ¿å 215 ¥ããï¼p_queueã«ãã¥ã¼ããããæå®ããå ´ 216 * åã«ã¯ï¼ãã¥ã¼ã®æ«å°¾ã«p_entryãæ¿å 217 ¥ãããã¨ã«ãªãï¼ 198 * p_queueの前にp_entryを挿入する.p_queueにキューヘッダを指定した場 199 * 合には,キューの末尾にp_entryを挿入することになる. 218 200 */ 219 201 Inline void … … 231 213 232 214 /* 233 * ã¨ã³ããªã®åé¤215 * エントリの削除 234 216 * 235 * p_entry ããã¥ã¼ããåé¤ããï¼217 * p_entryをキューから削除する. 236 218 */ 237 219 Inline void … … 346 328 int i = eobjid; 347 329 348 /* ãªãã¸ã§ã¯ãIDããå®ä½ãåå¾*/330 /* オブジェクトIDから実体を取得 */ 349 331 i -= (tmax_eobjid + 1); 350 332 if ((i < 0) … … 357 339 return false; 358 340 359 /* ãªãã¸ã§ã¯ãã®EOJãã³ãã¼*/341 /* オブジェクトのEOJをコピー */ 360 342 memcpy(eoj, &buf->obj.inib.eojx1, sizeof(*eoj)); 361 343 362 /* æå±ãããã¼ãã®ãªãã¸ã§ã¯ãIDãåå¾*/344 /* 所属するノードのオブジェクトIDを取得 */ 363 345 if(buf->obj.inib.enodid == 0) 364 346 i = buf->obj.eobjId; … … 372 354 } 373 355 374 /* ãã¼ãIDãåå¾*/356 /* ノードIDを取得 */ 375 357 buf = &agent->blockes[i]; 376 358 *enodid = buf->node.enodId; … … 413 395 T_ECN_EOJ *eoj, *end; 414 396 415 // ããããã£éç¥ãåå¾å¿çã§ã397 // プロパティ通知か取得応答で、 416 398 switch (esv->hdr.edata.esv) { 417 399 case ESV_GET_RES: … … 423 405 } 424 406 425 // ãã¼ããããã¡ã¤ã«å®ã®å ´å407 // ノードプロファイル宛の場合 426 408 eoj = &esv->hdr.edata.seoj; 427 409 if ((eoj->eojx1 != EOJ_X1_PROFILE) || (eoj->eojx2 != EOJ_X2_NODE_PROFILE) … … 436 418 while (ecn_itr_nxt(&enm, &epc, &pdc, &edt) == E_OK) { 437 419 switch (epc) { 438 // ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®å ´å420 // インスタンスリスト通知の場合 439 421 case 0xD5: 440 // èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³éç¥ã®å ´å422 // 自ノードインスタンスリストS通知の場合 441 423 case 0xD6: 442 // ãµã¤ãºãåããªãå ´å424 // サイズが合わない場合 443 425 if (pdc != (1 + edt[0] * sizeof(T_ECN_EOJ))) 444 426 return NULL; … … 736 718 ecn_obj_t *sobj; 737 719 738 /* éçã«å®ç¾©ãããéä¿¡å 739 ã®å ´å */ 720 /* 静的に定義された送信元の場合 */ 740 721 if ((*ppk_snod != NULL) && (*ppk_snod)->eobjs != NULL) { 741 /* å¦çããªã*/722 /* 処理しない */ 742 723 return; 743 724 } … … 745 726 snod = ecn_agent_find_node2(*ppk_snod); 746 727 747 /* éä¿¡å 748 ãç¥ããªãã£ãã */ 728 /* 送信元を知らなかったら */ 749 729 if (snod == NULL) { 750 /* éä¿¡å 751 ã®ãã¼ãæ 752 å ±ãæ°è¦ã«ä½æ */ 730 /* 送信元のノード情報を新規に作成 */ 753 731 snod = ecn_agent_create_node(agent, esv); 754 732 if (snod == NULL) … … 758 736 sobj = ecn_agent_find_obj2(snod, *ppk_sobj); 759 737 760 /* ãã¼ããããã¡ã¤ã«ã®å ´å*/738 /* ノードプロファイルの場合 */ 761 739 if ((esv->hdr.edata.seoj.eojx1 == EOJ_X1_PROFILE) 762 740 && (esv->hdr.edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 763 741 sobj = &snod->base; 764 742 } 765 /* æ©å¨ãªãã¸ã§ã¯ãã®å ´å*/743 /* 機器オブジェクトの場合 */ 766 744 else { 767 745 sobj = ecn_agent_find_eobj(&snod->eobj, esv->hdr.edata.seoj); … … 808 786 ecn_obj_t *obj = node->current; 809 787 810 // ããããã£å¤èªã¿åºãè¦æ±788 // プロパティ値読み出し要求 811 789 ecn_esv_get(&esv, obj->eobjId, 0x9E); 812 790 ecn_snd_esv(esv); … … 821 799 ecn_obj_t *obj = node->current; 822 800 823 // ããããã£å¤èªã¿åºãè¦æ±801 // プロパティ値読み出し要求 824 802 ecn_esv_get(&esv, obj->eobjId, 0x9F); 825 803 ecn_snd_esv(esv); … … 834 812 ecn_obj_t *obj = node->current; 835 813 836 // ããããã£å¤èªã¿åºãè¦æ±814 // プロパティ値読み出し要求 837 815 ecn_esv_get(&esv, obj->eobjId, 0x9D); 838 816 ecn_snd_esv(esv); … … 848 826 ecn_device_t *device; 849 827 850 /* obj ãæå®ããã¦ããªãå ´å*/828 /* objが指定されていない場合 */ 851 829 if(obj == NULL){ 852 /* ãã®ãã¼ããè¿ã*/830 /* このノードを返す */ 853 831 node->current = &node->base; 854 832 return; 855 833 } 856 /* ãã¼ãã®å ´å*/834 /* ノードの場合 */ 857 835 else if((obj->inib.eojx1 == EOJ_X1_PROFILE) && (obj->inib.eojx2 == EOJ_X2_NODE_PROFILE)){ 858 836 node = (ecn_node_t *)obj; 859 837 860 /* é 861 ä¸ã®æ©å¨ãè¿ã */ 838 /* 配下の機器を返す */ 862 839 queue = node->devices.p_next; 863 840 device = (ecn_device_t *)cast_obj(queue); 864 841 } 865 /* æ©å¨ã®å ´å*/842 /* 機器の場合 */ 866 843 else{ 867 /* 次ã®æ©å¨ãè¿ã*/844 /* 次の機器を返す */ 868 845 node = ((ecn_device_t *)obj)->node; 869 846 queue = cast_queue(obj)->p_next; … … 871 848 } 872 849 873 /* ãã®æ©å¨ãæ«å°¾ã ã£ãå ´å*/850 /* その機器が末尾だった場合 */ 874 851 if(&node->devices == queue){ 875 852 node->current = NULL; … … 1000 977 bool_t has = false; 1001 978 1002 /* ãã¼ãã®å ´åã¯ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã¨èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³éç¥ãå¿ 1003 é ã§åãåã */ 979 /* ノードの場合はインスタンスリスト通知と自ノードインスタンスリストS通知を必須で受け取る */ 1004 980 if ((fp_obj->enodid == 0) && ((fa_epc == 0xD5) || (fa_epc == 0xD6))) 1005 981 has = true; … … 1035 1011 1036 1012 switch (item->eprpcd) { 1037 /* ã¤ã³ã¹ã¿ã³ã¹ãªã¹ãéç¥ã®å ´å*/1013 /* インスタンスリスト通知の場合 */ 1038 1014 case 0xD5: 1039 /* èªãã¼ãã¤ã³ã¹ã¿ã³ã¹ãªã¹ãï¼³éç¥ã®å ´å*/1015 /* 自ノードインスタンスリストS通知の場合 */ 1040 1016 case 0xD6: 1041 1017 if ((node != NULL) && (node->state == ecn_node_state_idle)) { … … 1055 1031 } 1056 1032 break; 1057 /* éç¥ããããã£ãããã®å ´å*/1033 /* 通知プロパティマップの場合 */ 1058 1034 case 0x9D: 1059 1035 eprpcnt = edt[0]; 1060 1036 1061 1037 if (eprpcnt < 16) { 1062 /* ãµã¤ãºãã§ãã¯*/1038 /* サイズチェック */ 1063 1039 if (eprpcnt + 1 != size) 1064 1040 return 0; … … 1068 1044 } 1069 1045 else { 1070 /* ãµã¤ãºãã§ãã¯*/1046 /* サイズチェック */ 1071 1047 if (size != 17) 1072 1048 return 0; … … 1077 1053 sobj->pmapFlag |= PMAP_FLAG_ANNO; 1078 1054 break; 1079 /* SET ããããã£ãããã®å ´å*/1055 /* SETプロパティマップの場合 */ 1080 1056 case 0x9E: 1081 1057 eprpcnt = edt[0]; 1082 1058 1083 1059 if (eprpcnt < 16) { 1084 /* ãµã¤ãºãã§ãã¯*/1060 /* サイズチェック */ 1085 1061 if (eprpcnt + 1 != size) 1086 1062 return 0; … … 1090 1066 } 1091 1067 else { 1092 /* ãµã¤ãºãã§ãã¯*/1068 /* サイズチェック */ 1093 1069 if (size != 17) 1094 1070 return 0; … … 1099 1075 sobj->pmapFlag |= PMAP_FLAG_SET; 1100 1076 break; 1101 /* GET ããããã£ãããã®å ´å*/1077 /* GETプロパティマップの場合 */ 1102 1078 case 0x9F: 1103 1079 eprpcnt = edt[0]; 1104 1080 1105 1081 if (eprpcnt < 16) { 1106 /* ãµã¤ãºãã§ãã¯*/1082 /* サイズチェック */ 1107 1083 if (eprpcnt + 1 != size) 1108 1084 return 0; … … 1112 1088 } 1113 1089 else { 1114 /* ãµã¤ãºãã§ãã¯*/1090 /* サイズチェック */ 1115 1091 if (size != 17) 1116 1092 return 0;
Note:
See TracChangeset
for help on using the changeset viewer.