Changeset 364 for asp3_tinet_ecnl_rx/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_rx/trunk/app7_buzzer/src/echonet_main.c
r351 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 */ … … 106 106 { 107 107 /* サイズが1以外は受け付けない */ 108 if (size != 1)108 if (size != 1) 109 109 return 0; 110 110 111 111 *anno = *((uint8_t*)item->exinf) != *((uint8_t*)src); 112 112 113 switch (*(uint8_t *)src){113 switch (*(uint8_t *)src) { 114 114 /* ONの場合 */ 115 115 case 0x30: … … 138 138 { 139 139 /* サイズが1以外は受け付けない */ 140 if (size != 1)140 if (size != 1) 141 141 return 0; 142 142 143 143 *anno = *((uint8_t *)item->exinf) != *((uint8_t *)src); 144 144 145 switch (*(uint8_t *)src){145 switch (*(uint8_t *)src) { 146 146 /* 異常発生ありの場合 */ 147 147 case 0x41: … … 166 166 167 167 /* サイズが1以外は受け付けない */ 168 if (size != 1)169 return 0; 170 171 switch (*(uint8_t *)src){168 if (size != 1) 169 return 0; 170 171 switch (*(uint8_t *)src) { 172 172 /* 音発生有の場合 */ 173 173 case 0x41: … … 199 199 200 200 /* サイズが1以外は受け付けない */ 201 if (size != 1)201 if (size != 1) 202 202 return 0; 203 203 … … 208 208 data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00; 209 209 ret = ecn_brk_wai(data, sizeof(data)); 210 if (ret != E_OK){210 if (ret != E_OK) { 211 211 syslog(LOG_ERROR, "ecn_brk_wai"); 212 212 } … … 224 224 225 225 /* サイズが1以外は受け付けない */ 226 if (size != 1)226 if (size != 1) 227 227 return 0; 228 228 … … 233 233 data[1] = (*((uint8_t *)src) == 0x41) ? 0x01 : 0x00; 234 234 ret = ecn_brk_wai(data, sizeof(data)); 235 if (ret != E_OK){235 if (ret != E_OK) { 236 236 syslog(LOG_ERROR, "ecn_brk_wai"); 237 237 } … … 263 263 264 264 ret2 = get_tim(&now); 265 if (ret2 != E_OK) {265 if (ret2 != E_OK) { 266 266 syslog(LOG_ERROR, "get_tim"); 267 267 return; 268 268 } 269 269 270 for (;;){270 for (;;) { 271 271 prev = now; 272 272 … … 276 276 /* 応答電文待ち */ 277 277 ret = ecn_trcv_esv(&esv, timer); 278 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) {278 if ((ret != E_OK) && (ret != E_BRK) && (ret != E_TMOUT)) { 279 279 syslog(LOG_ERROR, "ecn_trcv_esv"); 280 280 break; … … 282 282 283 283 ret2 = get_tim(&now); 284 if (ret2 != E_OK) {284 if (ret2 != E_OK) { 285 285 syslog(LOG_ERROR, "get_tim"); 286 286 break; … … 297 297 /* 領域解放 */ 298 298 ret = ecn_rel_esv(esv); 299 if (ret != E_OK) {299 if (ret != E_OK) { 300 300 syslog(LOG_ERROR, "ecn_rel_esv"); 301 301 break; … … 306 306 /* 応答電文待ちの割り込みデータ取得 */ 307 307 ret = ecn_get_brk_dat(esv, brkdat, sizeof(brkdat), &len); 308 if (ret != E_OK) {308 if (ret != E_OK) { 309 309 syslog(LOG_ERROR, "ecn_get_brk_dat"); 310 310 break; … … 316 316 /* 領域解放 */ 317 317 ret = ecn_rel_esv(esv); 318 if (ret != E_OK) {318 if (ret != E_OK) { 319 319 syslog(LOG_ERROR, "ecn_rel_esv"); 320 320 break; … … 327 327 } 328 328 329 bool_t started = false;330 331 329 void echonet_change_netif_link(uint8_t link_up, uint8_t up) 332 330 { … … 336 334 return; 337 335 338 if (up && !started) { 339 started = true; 340 341 /* ECHONETミドルウェアを起動 */ 342 ret = ecn_sta_svc(); 343 if (ret != E_OK) 344 return; 345 346 /* ECHONETミドルウェアを起動するのを待つ */ 347 dly_tsk(100); 336 if (up) { 337 /* インスタンスリスト通知の送信 */ 338 ret = ecn_ntf_inl(); 339 if (ret != E_OK) { 340 syslog(LOG_ERROR, "ecn_ntf_inl"); 341 } 348 342 } 349 343 … … 351 345 uint8_t data[2]; 352 346 data[0] = 0x01; 353 data[1] = up ? 0x01 : 0x02;354 347 ret = ecn_brk_wai(data, sizeof(data)); 355 348 if (ret != E_OK) { … … 359 352 } 360 353 361 enum main_state_t{ 354 enum main_state_t { 355 main_state_start, 362 356 main_state_idle, 363 357 main_state_search, … … 366 360 367 361 int main_timer = TMO_FEVR; 368 enum main_state_t main_state = main_state_ idle;362 enum main_state_t main_state = main_state_start; 369 363 370 364 int main_nop_timer = TMO_FEVR; … … 378 372 sil_wrb_mem((uint8_t *)0x0008C02A, 0x00); 379 373 380 /* 1秒後にブザーを検索*/381 main_state = main_state_s earch;374 /* ECHONETミドルウェアを起動するのを待つ */ 375 main_state = main_state_start; 382 376 main_timer = 1000 * 1000; 383 377 378 /* メインタスクを起動 */ 384 379 ER ret = act_tsk(MAIN_TASK); 385 380 if (ret != E_OK) { … … 395 390 int result = main_timer; 396 391 397 if ((result == TMO_FEVR)398 || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))) {392 if ((result == TMO_FEVR) 393 || ((main_nop_timer != TMO_FEVR) && (main_nop_timer < result))) { 399 394 result = main_nop_timer; 400 395 } … … 408 403 static void main_progress(int interval) 409 404 { 410 if (main_timer != TMO_FEVR){405 if (main_timer != TMO_FEVR) { 411 406 main_timer -= interval; 412 if (main_timer < 0){407 if (main_timer < 0) { 413 408 main_timer = 0; 414 409 } 415 410 } 416 411 417 if (main_nop_timer != TMO_FEVR){412 if (main_nop_timer != TMO_FEVR) { 418 413 main_nop_timer -= interval; 419 if (main_nop_timer < 0){414 if (main_nop_timer < 0) { 420 415 main_nop_timer = 0; 421 416 } … … 436 431 437 432 eobjid = ecn_get_eobj(esv); 438 if (eobjid == EOBJ_NULL){433 if (eobjid == EOBJ_NULL) { 439 434 syslog(LOG_ERROR, "ecn_get_eobj"); 440 435 return; … … 442 437 443 438 ret = ecn_itr_ini(&enm, esv); 444 if (ret != E_OK){439 if (ret != E_OK) { 445 440 syslog(LOG_ERROR, "ecn_itr_ini"); 446 441 return; 447 442 } 448 443 449 for (;;) {450 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) {444 for (;;) { 445 while ((ret = ecn_itr_nxt(&enm, &epc, &pdc, p_edt)) == E_OK) { 451 446 switch (epc) { 452 447 case 0xD6: 453 switch (main_state){448 switch (main_state) { 454 449 case main_state_search: 455 450 if (eobjid == POT_NODE_EOBJ) { … … 463 458 } 464 459 } 465 if (ret != E_BOVR){460 if (ret != E_BOVR) { 466 461 syslog(LOG_ERROR, "ecn_itr_nxt"); 467 462 break; 468 463 } 469 if (enm.is_eof)464 if (enm.is_eof) 470 465 break; 471 466 } … … 478 473 uint8_t p_edt[1]; 479 474 480 switch (main_state){475 switch (main_state) { 481 476 case main_state_idle: 482 477 p_edt[0] = 0x41; /* 音発生有 */ … … 484 479 /* プロパティ設定電文作成 */ 485 480 ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt); 486 if (ret != E_OK){481 if (ret != E_OK) { 487 482 syslog(LOG_ERROR, "ecn_esv_seti"); 488 483 break; … … 491 486 /* 電文送信 */ 492 487 ecn_snd_esv(esv); 493 if (ret != E_OK){488 if (ret != E_OK) { 494 489 syslog(LOG_ERROR, "ecn_snd_esv"); 495 490 break; … … 511 506 uint8_t p_edt[1]; 512 507 513 switch (main_state){508 switch (main_state) { 514 509 case main_state_buzzer_on: 515 510 p_edt[0] = 0x42; /* 音発生無 */ … … 517 512 /* プロパティ設定電文作成 */ 518 513 ret = ecn_esv_seti(&esv, BUZZER_EOBJ, 0xB1, 1, p_edt); 519 if (ret != E_OK){514 if (ret != E_OK) { 520 515 syslog(LOG_ERROR, "ecn_esv_seti"); 521 516 break; … … 524 519 /* 電文送信 */ 525 520 ecn_snd_esv(esv); 526 if (ret != E_OK){521 if (ret != E_OK) { 527 522 syslog(LOG_ERROR, "ecn_snd_esv"); 528 523 break; … … 545 540 } 546 541 547 if (len < 2)548 return; 549 550 switch (brkdat[0]){542 if (len < 2) 543 return; 544 545 switch (brkdat[0]) { 551 546 case 0x01: 552 if (brkdat[1] != 0)547 if (brkdat[1] != 0) 553 548 main_buzzer_on(); 554 549 else … … 556 551 break; 557 552 case 0x02: 558 if (brkdat[1] == 0)553 if (brkdat[1] == 0) 559 554 main_nop_timer = 5000 * 1000; /* 5秒後にブザーON */ 560 555 break; … … 570 565 static void main_timeout() 571 566 { 572 if (main_timer == 0){567 if (main_timer == 0) { 573 568 main_ontimer(); 574 569 } 575 570 576 if (main_nop_timer == 0){571 if (main_nop_timer == 0) { 577 572 main_nop_timeout(); 578 573 } … … 583 578 static void main_ontimer() 584 579 { 585 switch (main_state) 586 { 580 ER ret; 581 582 switch (main_state) { 583 case main_state_start: 584 /* ECHONETミドルウェアを起動 */ 585 ret = ecn_sta_svc(); 586 if (ret != E_OK) { 587 syslog(LOG_ERROR, "ecn_sta_svc"); 588 } 589 590 /* 1秒後にブザーを検索 */ 591 main_state = main_state_search; 592 main_timer = 1000 * 1000; 593 break; 587 594 case main_state_search: 588 595 /* 電気ポット再検索 */ … … 608 615 /* 電気ポット検索 */ 609 616 ret = ecn_esv_inf_req(&esv, EOBJ_NULL, 0xD6); 610 if (ret != E_OK){617 if (ret != E_OK) { 611 618 syslog(LOG_ERROR, "ecn_esv_inf_req"); 612 619 return; … … 615 622 /* 電文送信 */ 616 623 ret = ecn_snd_esv(esv); 617 if (ret != E_OK){624 if (ret != E_OK) { 618 625 syslog(LOG_ERROR, "ecn_snd_esv"); 619 626 }
Note:
See TracChangeset
for help on using the changeset viewer.