Changeset 364 for asp3_tinet_ecnl_arm/trunk/app7_buzzer/src/echonet_main.c
- Timestamp:
- Feb 1, 2019, 9:57:09 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_tinet_ecnl_arm/trunk/app7_buzzer/src/echonet_main.c
r352 r364 1 1 /* 2 2 * TOPPERS ECHONET Lite Communication Middleware 3 * 3 * 4 4 * Copyright (C) 2014-2018 Cores Co., Ltd. Japan 5 * 5 * 6 6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ 7 7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 … … 26 26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 27 27 * 免責すること. 28 * 28 * 29 29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 30 30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 … … 32 32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 33 33 * の責任を負わない. 34 * 34 * 35 35 * @(#) $Id$ 36 36 */ 37 37 38 /* 38 /* 39 39 * サンプルプログラム(1)の本体 40 40 */ … … 112 112 { 113 113 /* サイズが1以外は受け付けない */ 114 if (size != 1)114 if (size != 1) 115 115 return 0; 116 116 117 117 *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src); 118 118 119 switch (*(uint8_t *)src){119 switch (*(uint8_t *)src) { 120 120 /* ONの場合 */ 121 121 case 0x30: … … 144 144 { 145 145 /* サイズが1以外は受け付けない */ 146 if (size != 1)146 if (size != 1) 147 147 return 0; 148 148 149 149 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 150 150 151 switch (*(uint8_t *)src){151 switch (*(uint8_t *)src) { 152 152 /* 異常発生ありの場合 */ 153 153 case 0x41: … … 170 170 { 171 171 /* サイズが1以外は受け付けない */ 172 if (size != 1)173 return 0; 174 175 switch (*(uint8_t *)src){172 if (size != 1) 173 return 0; 174 175 switch (*(uint8_t *)src) { 176 176 /* 音発生有の場合 */ 177 177 case 0x41: … … 203 203 204 204 /* サイズが1以外は受け付けない */ 205 if (size != 1)205 if (size != 1) 206 206 return 0; 207 207 … … 212 212 data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00; 213 213 ret = ecn_brk_wai(data, sizeof(data)); 214 if (ret != E_OK){214 if (ret != E_OK) { 215 215 syslog(LOG_ERROR, "ecn_brk_wai"); 216 216 } … … 228 228 229 229 /* サイズが1以外は受け付けない */ 230 if (size != 1)230 if (size != 1) 231 231 return 0; 232 232 … … 237 237 data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00; 238 238 ret = ecn_brk_wai(data, sizeof(data)); 239 if (ret != E_OK){239 if (ret != E_OK) { 240 240 syslog(LOG_ERROR, "ecn_brk_wai"); 241 241 } … … 267 267 268 268 ret2 = get_tim(&now); 269 if (ret2 != E_OK) {269 if (ret2 != E_OK) { 270 270 syslog(LOG_ERROR, "get_tim"); 271 271 return; 272 272 } 273 273 274 for (;;){274 for (;;) { 275 275 prev = now; 276 276 … … 280 280 /* 応答電文待ち */ 281 281 ret = ecn_trcv_esv(&esv, timer); 282 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {282 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 283 283 syslog(LOG_ERROR, "ecn_trcv_esv"); 284 284 break; … … 286 286 287 287 ret2 = get_tim(&now); 288 if (ret2 != E_OK) {288 if (ret2 != E_OK) { 289 289 syslog(LOG_ERROR, "get_tim"); 290 290 break; … … 301 301 /* 領域解放 */ 302 302 ret = ecn_rel_esv(esv); 303 if (ret != E_OK) {303 if (ret != E_OK) { 304 304 syslog(LOG_ERROR, "ecn_rel_esv"); 305 305 break; … … 310 310 /* 応答電文待ちの割り込みデータ取得 */ 311 311 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 312 if (ret != E_OK) {312 if (ret != E_OK) { 313 313 syslog(LOG_ERROR, "ecn_get_brk_dat"); 314 314 break; … … 320 320 /* 領域解放 */ 321 321 ret = ecn_rel_esv(esv); 322 if (ret != E_OK) {322 if (ret != E_OK) { 323 323 syslog(LOG_ERROR, "ecn_rel_esv"); 324 324 break; … … 331 331 } 332 332 333 bool_t started = false;334 335 333 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 336 334 { … … 340 338 return; 341 339 342 if (up && !started) { 343 started = true; 344 345 /* ECHONETミドルウェアを起動 */ 346 ret = ecn_sta_svc(); 347 if (ret != E_OK) 348 return; 349 350 /* ECHONETミドルウェアを起動するのを待つ */ 351 dly_tsk(100); 340 if (up) { 341 /* インスタンスリスト通知の送信 */ 342 ret = ecn_ntf_inl(); 343 if (ret != E_OK) { 344 syslog(LOG_ERROR, "ecn_ntf_inl"); 345 } 352 346 } 353 347 … … 363 357 } 364 358 365 enum main_state_t{ 359 enum main_state_t { 360 main_state_start, 366 361 main_state_idle, 367 362 main_state_search, … … 370 365 371 366 int main_timer = TMO_FEVR; 372 enum main_state_t main_state = main_state_ idle;367 enum main_state_t main_state = main_state_start; 373 368 374 369 int main_nop_timer = TMO_FEVR; … … 390 385 gpio_write(&led_red, 0); 391 386 392 /* 1秒後にブザーを検索*/393 main_state = main_state_s earch;387 /* ECHONETミドルウェアを起動するのを待つ */ 388 main_state = main_state_start; 394 389 main_timer = 1000 * 1000; 395 390 391 /* メインタスクを起動 */ 396 392 ER ret = act_tsk(MAIN_TASK); 397 393 if (ret != E_OK) { … … 407 403 int result = main_timer; 408 404 409 if ((result == TMO_FEVR)410 || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))) {405 if ((result == TMO_FEVR) 406 || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))) { 411 407 result = main_nop_timer; 412 408 } … … 420 416 static void main_progress(int interval) 421 417 { 422 if (main_timer != TMO_FEVR){418 if (main_timer != TMO_FEVR) { 423 419 main_timer -= interval; 424 if (main_timer < 0){420 if (main_timer < 0) { 425 421 main_timer = 0; 426 422 } 427 423 } 428 424 429 if (main_nop_timer != TMO_FEVR){425 if (main_nop_timer != TMO_FEVR) { 430 426 main_nop_timer -= interval; 431 if (main_nop_timer < 0){427 if (main_nop_timer < 0) { 432 428 main_nop_timer = 0; 433 429 } … … 448 444 449 445 eobjid = ecn_get_eobj(esv); 450 if (eobjid == EOBJ_NULL){446 if (eobjid == EOBJ_NULL) { 451 447 syslog(LOG_ERROR, "ecn_get_eobj"); 452 448 return; … … 454 450 455 451 ret = ecn_itr_ini(&enm, esv); 456 if (ret != E_OK){452 if (ret != E_OK) { 457 453 syslog(LOG_ERROR, "ecn_itr_ini"); 458 454 return; 459 455 } 460 456 461 for (;;) {462 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {457 for (;;) { 458 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 463 459 switch (epc) { 464 460 case 0xD6: 465 switch (main_state){461 switch (main_state) { 466 462 case main_state_search: 467 463 if (eobjid == POT_NODE_EOBJ) { … … 475 471 } 476 472 } 477 if (ret != E_BOVR){473 if (ret != E_BOVR) { 478 474 syslog(LOG_ERROR, "ecn_itr_nxt"); 479 475 break; 480 476 } 481 if (enm.is_eof)477 if (enm.is_eof) 482 478 break; 483 479 } … … 490 486 uint8_t p_edt[1]; 491 487 492 switch (main_state){488 switch (main_state) { 493 489 case main_state_idle: 494 490 p_edt[0] = 0x41; /* 音発生有 */ … … 496 492 /* プロパティ設定電文作成 */ 497 493 ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt); 498 if (ret != E_OK){494 if (ret != E_OK) { 499 495 syslog(LOG_ERROR, "ecn_esv_seti"); 500 496 break; … … 503 499 /* 電文送信 */ 504 500 ecn_snd_esv(esv); 505 if (ret != E_OK){501 if (ret != E_OK) { 506 502 syslog(LOG_ERROR, "ecn_snd_esv"); 507 503 break; … … 523 519 uint8_t p_edt[1]; 524 520 525 switch (main_state){521 switch (main_state) { 526 522 case main_state_buzzer_on: 527 523 p_edt[0] = 0x42; /* 音発生無 */ … … 529 525 /* プロパティ設定電文作成 */ 530 526 ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt); 531 if (ret != E_OK){527 if (ret != E_OK) { 532 528 syslog(LOG_ERROR, "ecn_esv_seti"); 533 529 break; … … 536 532 /* 電文送信 */ 537 533 ecn_snd_esv(esv); 538 if (ret != E_OK){534 if (ret != E_OK) { 539 535 syslog(LOG_ERROR, "ecn_snd_esv"); 540 536 break; … … 557 553 } 558 554 559 if (len < 2)560 return; 561 562 switch (brkdat[0]){555 if (len < 2) 556 return; 557 558 switch (brkdat[0]) { 563 559 case 0x01: 564 if (brkdat[1] != 0)560 if (brkdat[1] != 0) 565 561 main_buzzer_on(); 566 562 else … … 568 564 break; 569 565 case 0x02: 570 if (brkdat[1] == 0)566 if (brkdat[1] == 0) 571 567 main_nop_timer = 5000 * 1000; /* 5秒後にブザーON */ 572 568 break; … … 582 578 static void main_timeout() 583 579 { 584 if (main_timer == 0){580 if (main_timer == 0) { 585 581 main_ontimer(); 586 582 } 587 583 588 if (main_nop_timer == 0){584 if (main_nop_timer == 0) { 589 585 main_nop_timeout(); 590 586 } … … 595 591 static void main_ontimer() 596 592 { 597 switch (main_state) 598 { 593 ER ret; 594 595 switch (main_state) { 596 case main_state_start: 597 /* ECHONETミドルウェアを起動 */ 598 ret = ecn_sta_svc(); 599 if (ret != E_OK) { 600 syslog(LOG_ERROR, "ecn_sta_svc"); 601 } 602 603 /* 1秒後にブザーを検索 */ 604 main_state = main_state_search; 605 main_timer = 1000 * 1000; 606 break; 599 607 case main_state_search: 600 608 /* 電気ポット再検索 */ … … 620 628 /* 電気ポット検索 */ 621 629 ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6); 622 if (ret != E_OK){630 if (ret != E_OK) { 623 631 syslog(LOG_ERROR, "ecn_esv_inf_req"); 624 632 return; … … 627 635 /* 電文送信 */ 628 636 ret = ecn_snd_esv(esv); 629 if (ret != E_OK){637 if (ret != E_OK) { 630 638 syslog(LOG_ERROR, "ecn_snd_esv"); 631 639 }
Note:
See TracChangeset
for help on using the changeset viewer.