Changeset 167 for UsbWattMeter/trunk/ecnl_lwip/echonet_agent.c
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/ecnl_lwip/echonet_agent.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 4 4 * Copyright (C) 2015 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 * ECHONET Lite ®I¶¬m[h39 * ECHONET Lite 動的生成ノード 44 40 */ 45 41 … … 181 177 182 178 /* 183 * L 184 [Ìú» 179 * キューの初期化 185 180 * 186 * p_queueÉÍL 187 [wb_ðwè·éD 181 * p_queueにはキューヘッダを指定する. 188 182 */ 189 183 Inline void … … 198 192 199 193 /* 200 * L 201 [ÌOGgÖÌ}ü 194 * キューの前エントリへの挿入 202 195 * 203 * p_queueÌOÉp_entryð}ü·éDp_queueÉL 204 [wb_ðwèµ½ê 205 * ÉÍCL 206 [ÌöÉp_entryð}ü·é±ÆÉÈéD 196 * p_queueの前にp_entryを挿入する.p_queueにキューヘッダを指定した場 197 * 合には,キューの末尾にp_entryを挿入することになる. 207 198 */ 208 199 Inline void … … 220 211 221 212 /* 222 * GgÌí213 * エントリの削除 223 214 * 224 * p_entryðL 225 [©çí·éD 215 * p_entryをキューから削除する. 226 216 */ 227 217 Inline void … … 336 326 int i = eobjid; 337 327 338 /* IuWFNgID©çÀÌðæ¾*/328 /* オブジェクトIDから実体を取得 */ 339 329 i -= (tmax_eobjid + 1); 340 330 if ((i < 0) … … 347 337 return false; 348 338 349 /* IuWFNgÌEOJðRs[*/339 /* オブジェクトのEOJをコピー */ 350 340 memcpy(eoj, &buf->obj.inib.eojx1, sizeof(*eoj)); 351 341 352 /* ®·ém[hÌIuWFNgIDðæ¾*/342 /* 所属するノードのオブジェクトIDを取得 */ 353 343 if(buf->obj.inib.enodid == 0) 354 344 i = buf->obj.eobjId; … … 362 352 } 363 353 364 /* m[hIDðæ¾*/354 /* ノードIDを取得 */ 365 355 buf = &agent->blockes[i]; 366 356 *enodid = buf->node.enodId; … … 403 393 T_ECN_EOJ *eoj, *end; 404 394 405 // vpeBÊm©æ¾ÅA395 // プロパティ通知か取得応答で、 406 396 switch (esv->hdr.edata.esv) { 407 397 case ESV_GET_RES: … … 413 403 } 414 404 415 // m[hvt@C¶Ìê405 // ノードプロファイル宛の場合 416 406 eoj = &esv->hdr.edata.seoj; 417 407 if ((eoj->eojx1 != EOJ_X1_PROFILE) || (eoj->eojx2 != EOJ_X2_NODE_PROFILE) … … 426 416 while (ecn_itr_nxt(&enm, &epc, &pdc, &edt) == E_OK) { 427 417 switch (epc) { 428 // CX^XXgÊmÌê418 // インスタンスリスト通知の場合 429 419 case 0xD5: 430 // ©m[hCX^XXgrÊmÌê420 // 自ノードインスタンスリストS通知の場合 431 421 case 0xD6: 432 // TCYªíÈ¢ê422 // サイズが合わない場合 433 423 if (pdc != (1 + edt[0] * sizeof(T_ECN_EOJ))) 434 424 return NULL; … … 726 716 ecn_obj_t *sobj; 727 717 728 /* ÃIÉè`³ê½M³Ìê*/718 /* 静的に定義された送信元の場合 */ 729 719 if ((*ppk_snod != NULL) && (*ppk_snod)->eobjs != NULL) { 730 /* µÈ¢*/720 /* 処理しない */ 731 721 return; 732 722 } … … 734 724 snod = ecn_agent_find_node2(*ppk_snod); 735 725 736 /* M³ðmçÈ©Á½ç*/726 /* 送信元を知らなかったら */ 737 727 if (snod == NULL) { 738 /* M³Ìm[hîñðVKÉì¬*/728 /* 送信元のノード情報を新規に作成 */ 739 729 snod = ecn_agent_create_node(agent, esv); 740 730 if (snod == NULL) … … 744 734 sobj = ecn_agent_find_obj2(snod, *ppk_sobj); 745 735 746 /* m[hvt@CÌê*/736 /* ノードプロファイルの場合 */ 747 737 if ((esv->hdr.edata.seoj.eojx1 == EOJ_X1_PROFILE) 748 738 && (esv->hdr.edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 749 739 sobj = &snod->base; 750 740 } 751 /* @íIuWFNgÌê*/741 /* 機器オブジェクトの場合 */ 752 742 else { 753 743 sobj = ecn_agent_find_eobj(&snod->eobj, esv->hdr.edata.seoj); … … 794 784 ecn_obj_t *obj = node->current; 795 785 796 // vpeBlÇÝoµv786 // プロパティ値読み出し要求 797 787 ecn_esv_get(&esv, obj->eobjId, 0x9E); 798 788 ecn_snd_esv(esv); … … 807 797 ecn_obj_t *obj = node->current; 808 798 809 // vpeBlÇÝoµv799 // プロパティ値読み出し要求 810 800 ecn_esv_get(&esv, obj->eobjId, 0x9F); 811 801 ecn_snd_esv(esv); … … 820 810 ecn_obj_t *obj = node->current; 821 811 822 // vpeBlÇÝoµv812 // プロパティ値読み出し要求 823 813 ecn_esv_get(&esv, obj->eobjId, 0x9D); 824 814 ecn_snd_esv(esv); … … 834 824 ecn_device_t *device; 835 825 836 /* obj ªwè³êĢȢê*/826 /* objが指定されていない場合 */ 837 827 if(obj == NULL){ 838 /* ±Ìm[hðÔ·*/828 /* このノードを返す */ 839 829 node->current = &node->base; 840 830 return; 841 831 } 842 /* m[hÌê*/832 /* ノードの場合 */ 843 833 else if((obj->inib.eojx1 == EOJ_X1_PROFILE) && (obj->inib.eojx2 == EOJ_X2_NODE_PROFILE)){ 844 834 node = (ecn_node_t *)obj; 845 835 846 /* zºÌ@íðÔ·*/836 /* 配下の機器を返す */ 847 837 queue = node->devices.p_next; 848 838 device = (ecn_device_t *)cast_obj(queue); 849 839 } 850 /* @íÌê*/840 /* 機器の場合 */ 851 841 else{ 852 /* Ì@íðÔ·*/842 /* 次の機器を返す */ 853 843 node = ((ecn_device_t *)obj)->node; 854 844 queue = cast_queue(obj)->p_next; … … 856 846 } 857 847 858 /* »Ì@íªö¾Á½ê*/848 /* その機器が末尾だった場合 */ 859 849 if(&node->devices == queue){ 860 850 node->current = NULL; … … 985 975 bool_t has = false; 986 976 987 /* m[hÌêÍCX^XXgÊmÆ©m[hCX^XXgrÊmðK{Åó¯æé*/977 /* ノードの場合はインスタンスリスト通知と自ノードインスタンスリストS通知を必須で受け取る */ 988 978 if ((fp_obj->enodid == 0) && ((fa_epc == 0xD5) || (fa_epc == 0xD6))) 989 979 has = true; … … 1019 1009 1020 1010 switch (item->eprpcd) { 1021 /* CX^XXgÊmÌê*/1011 /* インスタンスリスト通知の場合 */ 1022 1012 case 0xD5: 1023 /* ©m[hCX^XXgrÊmÌê*/1013 /* 自ノードインスタンスリストS通知の場合 */ 1024 1014 case 0xD6: 1025 1015 if ((node != NULL) && (node->state == ecn_node_state_idle)) { … … 1039 1029 } 1040 1030 break; 1041 /* ÊmvpeB}bvÌê*/1031 /* 通知プロパティマップの場合 */ 1042 1032 case 0x9D: 1043 1033 eprpcnt = edt[0]; 1044 1034 1045 1035 if (eprpcnt < 16) { 1046 /* TCY`FbN*/1036 /* サイズチェック */ 1047 1037 if (eprpcnt + 1 != size) 1048 1038 return 0; … … 1052 1042 } 1053 1043 else { 1054 /* TCY`FbN*/1044 /* サイズチェック */ 1055 1045 if (size != 17) 1056 1046 return 0; … … 1061 1051 sobj->pmapFlag |= PMAP_FLAG_ANNO; 1062 1052 break; 1063 /* SET vpeB}bvÌê*/1053 /* SETプロパティマップの場合 */ 1064 1054 case 0x9E: 1065 1055 eprpcnt = edt[0]; 1066 1056 1067 1057 if (eprpcnt < 16) { 1068 /* TCY`FbN*/1058 /* サイズチェック */ 1069 1059 if (eprpcnt + 1 != size) 1070 1060 return 0; … … 1074 1064 } 1075 1065 else { 1076 /* TCY`FbN*/1066 /* サイズチェック */ 1077 1067 if (size != 17) 1078 1068 return 0; … … 1083 1073 sobj->pmapFlag |= PMAP_FLAG_SET; 1084 1074 break; 1085 /* GET vpeB}bvÌê*/1075 /* GETプロパティマップの場合 */ 1086 1076 case 0x9F: 1087 1077 eprpcnt = edt[0]; 1088 1078 1089 1079 if (eprpcnt < 16) { 1090 /* TCY`FbN*/1080 /* サイズチェック */ 1091 1081 if (eprpcnt + 1 != size) 1092 1082 return 0; … … 1096 1086 } 1097 1087 else { 1098 /* TCY`FbN*/1088 /* サイズチェック */ 1099 1089 if (size != 17) 1100 1090 return 0; -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.