Changeset 107 for uKadecot/trunk/ecnl_ssp/echonet_agent.c
- Timestamp:
- Jun 10, 2015, 8:40:31 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uKadecot/trunk/ecnl_ssp/echonet_agent.c
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r101 r107 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 … … 183 179 184 180 /* 185 * L 186 [Ìú» 181 * キューの初期化 187 182 * 188 * p_queueÉÍL 189 [wb_ðwè·éD 183 * p_queueにはキューヘッダを指定する. 190 184 */ 191 185 Inline void … … 200 194 201 195 /* 202 * L 203 [ÌOGgÖÌ}ü 196 * キューの前エントリへの挿入 204 197 * 205 * p_queueÌOÉp_entryð}ü·éDp_queueÉL 206 [wb_ðwèµ½ê 207 * ÉÍCL 208 [ÌöÉp_entryð}ü·é±ÆÉÈéD 198 * p_queueの前にp_entryを挿入する.p_queueにキューヘッダを指定した場 199 * 合には,キューの末尾にp_entryを挿入することになる. 209 200 */ 210 201 Inline void … … 222 213 223 214 /* 224 * GgÌí215 * エントリの削除 225 216 * 226 * p_entryðL 227 [©çí·éD 217 * p_entryをキューから削除する. 228 218 */ 229 219 Inline void … … 338 328 int i = eobjid; 339 329 340 /* IuWFNgID©çÀÌðæ¾*/330 /* オブジェクトIDから実体を取得 */ 341 331 i -= (tmax_eobjid + 1); 342 332 if ((i < 0) … … 349 339 return false; 350 340 351 /* IuWFNgÌEOJðRs[*/341 /* オブジェクトのEOJをコピー */ 352 342 memcpy(eoj, &buf->obj.inib.eojx1, sizeof(*eoj)); 353 343 354 /* ®·ém[hÌIuWFNgIDðæ¾*/344 /* 所属するノードのオブジェクトIDを取得 */ 355 345 if(buf->obj.inib.enodid == 0) 356 346 i = buf->obj.eobjId; … … 364 354 } 365 355 366 /* m[hIDðæ¾*/356 /* ノードIDを取得 */ 367 357 buf = &agent->blockes[i]; 368 358 *enodid = buf->node.enodId; … … 405 395 T_ECN_EOJ *eoj, *end; 406 396 407 // vpeBÊm©æ¾ÅA397 // プロパティ通知か取得応答で、 408 398 switch (esv->hdr.edata.esv) { 409 399 case ESV_GET_RES: … … 415 405 } 416 406 417 // m[hvt@C¶Ìê407 // ノードプロファイル宛の場合 418 408 eoj = &esv->hdr.edata.seoj; 419 409 if ((eoj->eojx1 != EOJ_X1_PROFILE) || (eoj->eojx2 != EOJ_X2_NODE_PROFILE) … … 428 418 while (ecn_itr_nxt(&enm, &epc, &pdc, &edt) == E_OK) { 429 419 switch (epc) { 430 // CX^XXgÊmÌê420 // インスタンスリスト通知の場合 431 421 case 0xD5: 432 // ©m[hCX^XXgrÊmÌê422 // 自ノードインスタンスリストS通知の場合 433 423 case 0xD6: 434 // TCYªíÈ¢ê424 // サイズが合わない場合 435 425 if (pdc != (1 + edt[0] * sizeof(T_ECN_EOJ))) 436 426 return NULL; … … 773 763 ecn_obj_t *sobj; 774 764 775 /* ÃIÉè`³ê½M³Ìê*/765 /* 静的に定義された送信元の場合 */ 776 766 if ((*ppk_snod != NULL) && (*ppk_snod)->eobjs != NULL) { 777 /* µÈ¢*/767 /* 処理しない */ 778 768 return; 779 769 } … … 781 771 snod = ecn_agent_find_node2(*ppk_snod); 782 772 783 /* M³ðmçÈ©Á½ç*/773 /* 送信元を知らなかったら */ 784 774 if (snod == NULL) { 785 /* M³Ìm[hîñðVKÉì¬*/775 /* 送信元のノード情報を新規に作成 */ 786 776 snod = ecn_agent_create_node(agent, esv); 787 777 if (snod == NULL) … … 791 781 sobj = ecn_agent_find_obj2(snod, *ppk_sobj); 792 782 793 /* m[hvt@CÌê*/783 /* ノードプロファイルの場合 */ 794 784 if ((esv->hdr.edata.seoj.eojx1 == EOJ_X1_PROFILE) 795 785 && (esv->hdr.edata.seoj.eojx2 == EOJ_X2_NODE_PROFILE)) { 796 786 sobj = &snod->base; 797 787 } 798 /* @íIuWFNgÌê*/788 /* 機器オブジェクトの場合 */ 799 789 else { 800 790 sobj = ecn_agent_find_eobj(&snod->eobj, esv->hdr.edata.seoj); … … 841 831 ecn_obj_t *obj = node->current; 842 832 843 // vpeBlÇÝoµv833 // プロパティ値読み出し要求 844 834 ecn_esv_get(&esv, obj->eobjId, 0x9E); 845 835 ecn_snd_esv(esv); … … 854 844 ecn_obj_t *obj = node->current; 855 845 856 // vpeBlÇÝoµv846 // プロパティ値読み出し要求 857 847 ecn_esv_get(&esv, obj->eobjId, 0x9F); 858 848 ecn_snd_esv(esv); … … 867 857 ecn_obj_t *obj = node->current; 868 858 869 // vpeBlÇÝoµv859 // プロパティ値読み出し要求 870 860 ecn_esv_get(&esv, obj->eobjId, 0x9D); 871 861 ecn_snd_esv(esv); … … 881 871 ecn_device_t *device; 882 872 883 /* obj ªwè³êĢȢê*/873 /* objが指定されていない場合 */ 884 874 if(obj == NULL){ 885 /* ±Ìm[hðÔ·*/875 /* このノードを返す */ 886 876 node->current = &node->base; 887 877 return; 888 878 } 889 /* m[hÌê*/879 /* ノードの場合 */ 890 880 else if((obj->inib.eojx1 == EOJ_X1_PROFILE) && (obj->inib.eojx2 == EOJ_X2_NODE_PROFILE)){ 891 881 node = (ecn_node_t *)obj; 892 882 893 /* zºÌ@íðÔ·*/883 /* 配下の機器を返す */ 894 884 queue = node->devices.p_next; 895 885 device = (ecn_device_t *)cast_obj(queue); 896 886 } 897 /* @íÌê*/887 /* 機器の場合 */ 898 888 else{ 899 /* Ì@íðÔ·*/889 /* 次の機器を返す */ 900 890 node = ((ecn_device_t *)obj)->node; 901 891 queue = cast_queue(obj)->p_next; … … 903 893 } 904 894 905 /* »Ì@íªö¾Á½ê*/895 /* その機器が末尾だった場合 */ 906 896 if(&node->devices == queue){ 907 897 node->current = NULL; … … 1040 1030 bool_t has = false; 1041 1031 1042 /* m[hÌêÍCX^XXgÊmÆ©m[hCX^XXgrÊmðK{Åó¯æé*/1032 /* ノードの場合はインスタンスリスト通知と自ノードインスタンスリストS通知を必須で受け取る */ 1043 1033 if ((fp_obj->enodid == 0) && ((fa_epc == 0xD5) || (fa_epc == 0xD6))) 1044 1034 has = true; … … 1074 1064 1075 1065 switch (item->eprpcd) { 1076 /* CX^XXgÊmÌê*/1066 /* インスタンスリスト通知の場合 */ 1077 1067 case 0xD5: 1078 /* ©m[hCX^XXgrÊmÌê*/1068 /* 自ノードインスタンスリストS通知の場合 */ 1079 1069 case 0xD6: 1080 1070 if ((node != NULL) && (node->state == ecn_node_state_idle)) { … … 1094 1084 } 1095 1085 break; 1096 /* ÊmvpeB}bvÌê*/1086 /* 通知プロパティマップの場合 */ 1097 1087 case 0x9D: 1098 1088 eprpcnt = edt[0]; 1099 1089 1100 1090 if (eprpcnt < 16) { 1101 /* TCY`FbN*/1091 /* サイズチェック */ 1102 1092 if (eprpcnt + 1 != size) 1103 1093 return 0; … … 1107 1097 } 1108 1098 else { 1109 /* TCY`FbN*/1099 /* サイズチェック */ 1110 1100 if (size != 17) 1111 1101 return 0; … … 1116 1106 sobj->pmapFlag |= PMAP_FLAG_ANNO; 1117 1107 break; 1118 /* SET vpeB}bvÌê*/1108 /* SETプロパティマップの場合 */ 1119 1109 case 0x9E: 1120 1110 eprpcnt = edt[0]; 1121 1111 1122 1112 if (eprpcnt < 16) { 1123 /* TCY`FbN*/1113 /* サイズチェック */ 1124 1114 if (eprpcnt + 1 != size) 1125 1115 return 0; … … 1129 1119 } 1130 1120 else { 1131 /* TCY`FbN*/1121 /* サイズチェック */ 1132 1122 if (size != 17) 1133 1123 return 0; … … 1138 1128 sobj->pmapFlag |= PMAP_FLAG_SET; 1139 1129 break; 1140 /* GET vpeB}bvÌê*/1130 /* GETプロパティマップの場合 */ 1141 1131 case 0x9F: 1142 1132 eprpcnt = edt[0]; 1143 1133 1144 1134 if (eprpcnt < 16) { 1145 /* TCY`FbN*/1135 /* サイズチェック */ 1146 1136 if (eprpcnt + 1 != size) 1147 1137 return 0; … … 1151 1141 } 1152 1142 else { 1153 /* TCY`FbN*/1143 /* サイズチェック */ 1154 1144 if (size != 17) 1155 1145 return 0; -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.