📄 clone.lst
字号:
329
330 /* ======================================= */
331 static void CloneStatusToWaitACK(WAIT_ACK_TYPE type)
332 {
333 1 g_ucCloneStatus = CLONE_WAIT_ACK;
334 1 ucWaitAckType = type;
335 1 wWaitRecCount = 0;
336 1 }
337 /* ======================================= */
338
339 static void CloneStatusToRecData(void)
340 {
341 1 g_ucCloneStatus = CLONE_REC_AND_SEND_ACK;
342 1 g_wCloneNVAddress = 0;
343 1 g_wTVNVAddress = CLONE_TV_NV_ADDR_START;
344 1 wWaitRecCount = 0;
345 1 }
346
347
348 static void CloneStatusToSendData(void)
349 {
350 1 g_ucCloneStatus = CLONE_SEND_DATA;
351 1 g_wTVNVAddress = CLONE_TV_NV_ADDR_START;
352 1 g_wCloneNVAddress = 0;
353 1 }
354 /* ======================================= */
355 static void CloneClearRecMessage(void)
356 {
357 1 /*
358 1 Byte i;
359 1 for(i = 0;i < 19; i++)
360 1 {
361 1 irRecBuffer[i] = 0;
362 1 }
363 1 */
364 1 //clear the flag
C51 COMPILER V7.50 CLONE 10/25/2006 14:55:44 PAGE 7
365 1 g_ucIRRecDataType = REC_NONE;
366 1 g_bIRDetect = 0;
367 1 wWaitRecCount = 0;
368 1 }
369 /* ======================================= */
370
371 static void CloneHandler(void)
372 {
373 1 #ifdef DEBUG
if(g_bIRDetect)
{
g_bIRDetect = 0;
g_wCloneNVAddress = 0;
NVWriteNByte(16, &irRecBuffer[2]);
}
#else
381 1 // Byte i;
382 1 // Word RecNVAddress;
383 1 Byte num;
384 1 if(g_ucCloneStatus == CLONE_NONE) return;
385 1
386 1 switch(g_ucCloneStatus)
387 1 {
388 2
389 2 //process send data
390 2 case CLONE_SEND_SEND_READY:
391 2 IRSend_SendReady();
392 2 Delay1ms(120);
393 2 CloneStatusToSendData();
394 2 break;
395 2 /*
396 2 case CLONE_SEND_ADDR:
397 2 IRSend_Address(g_wTVNVAddress);
398 2 CloneStatusToWaitACK(SEND_ADDRESS_WAITACK);
399 2 break;
400 2 */
401 2 case CLONE_SEND_DATA:
402 2 if(g_wTVNVAddress <= (CLONE_TV_NV_ADDR_END - 15))//send 16 byte data
403 2 {
404 3 NVReadNByte(16,irSendBuffer);
405 3 IRSend_16ByteData(irSendBuffer);
406 3 g_wTVNVAddress += 16;
407 3 g_wCloneNVAddress += 16;
408 3 }
409 2 else if(g_wTVNVAddress <= CLONE_TV_NV_ADDR_END)//send n byte data
410 2 {
411 3 num = CLONE_TV_NV_ADDR_END - g_wTVNVAddress + 1;
412 3 NVReadNByte(num, irSendBuffer);
413 3 IRSend_nByteData(num,irSendBuffer);
414 3 g_wTVNVAddress += num;
415 3 }
416 2 // CloneStatusToWaitACK(SEND_DATA_WAITACK); //20061008 del 子机不回复ACK,等待100ms后继续发
417 2 Delay1ms(120);
418 2 if(g_wTVNVAddress > CLONE_TV_NV_ADDR_END) //数据发送完毕
419 2 {
420 3 g_ucCloneStatus = CLONE_SEND_END;
421 3 }
422 2 break;
423 2
424 2
425 2 //recevie data handle
426 2 case CLONE_SEND_REC_READY:
C51 COMPILER V7.50 CLONE 10/25/2006 14:55:44 PAGE 8
427 2 IRSend_RecReady();
428 2 CloneStatusToWaitACK(SEND_RECREADY_WAITACK);
429 2 break;
430 2
431 2 case CLONE_REC_AND_SEND_ACK:
432 2
433 2 /*
434 2 if(g_ucIRRecDataType == REC_DATA_ADDRESS)
435 2 {
436 2 RecNVAddress = (irRecBuffer[2] << 8) + irRecBuffer[3];
437 2 if((RecNVAddress == g_wTVNVAddress) &&
438 2 VerifyCheckSum(CHECK_ADDRESS))
439 2 {
440 2 IRSend_RecReady();
441 2 }
442 2 else
443 2 {
444 2 g_ucCloneStatus = CLONE_ERROR;
445 2 }
446 2 }
447 2 */
448 2 if(g_bIRDetect)
449 2 {
450 3 if(g_ucIRRecDataType == REC_16_BYTES)
451 3 {
452 4 if(VerifyCheckSum(CHECK_16_BYTE))
453 4 {
454 5 NVWriteNByte(16, irRecBuffer + 2);
455 5 g_wTVNVAddress += 16;
456 5 g_wCloneNVAddress += 16;
457 5 IRSend_RecReady();
458 5 }
459 4 else
460 4 {
461 5 g_ucCloneStatus = CLONE_CHECKSUM_ERROR;
462 5 }
463 4
464 4 }
465 3 else if(g_ucIRRecDataType == REC_N_BYTES)
466 3 {
467 4 if(VerifyCheckSum(CHECK_N_BYTE))
468 4 {
469 5 num = irRecBuffer[2];//N bytes number
470 5 NVWriteNByte(num, &irRecBuffer[3]);
471 5 g_wTVNVAddress += num;
472 5 g_wCloneNVAddress += num;
473 5 IRSend_RecReady();
474 5 }
475 4 else
476 4 {
477 5 g_ucCloneStatus = CLONE_CHECKSUM_ERROR;
478 5 }
479 4 }
480 3 else
481 3 {
482 4 g_ucCloneStatus = CLONE_REC_CUSTOM_ERROR;
483 4 }
484 3
485 3 if(g_wTVNVAddress > CLONE_TV_NV_ADDR_END)
486 3 {
487 4 g_ucCloneStatus = CLONE_REC_END;
488 4 }
C51 COMPILER V7.50 CLONE 10/25/2006 14:55:44 PAGE 9
489 3 CloneClearRecMessage();
490 3 }
491 2 else if(++wWaitRecCount > 30000)
492 2 g_ucCloneStatus = CLONE_ERROR;
493 2 break;
494 2
495 2
496 2 case CLONE_WAIT_ACK:
497 2 if(g_bIRDetect)
498 2 {
499 3 if(!CheckRecAck(ucWaitAckType))
500 3 {
501 4 g_ucCloneStatus = CLONE_ERROR;
502 4 }
503 3 CloneClearRecMessage();
504 3 }
505 2 else if(++wWaitRecCount > 30000)
506 2 g_ucCloneStatus = CLONE_ERROR;
507 2 break;
508 2
509 2 //add for remote receive data from another remote
510 2 case CLONE_REC_PREPARE:
511 2 if(g_bIRDetect)
512 2 {
513 3 if(g_ucIRRecDataType == REC_SEND_READY)
514 3 {
515 4 IRSend_RecReady();
516 4 CloneStatusToRecData();
517 4 }
518 3 CloneClearRecMessage();
519 3 }
520 2 break;
521 2
522 2 case CLONE_SEND_END:
523 2 IRSend_IrEnd();
524 2 GlobalVariableInit();
525 2 break;
526 2
527 2 case CLONE_REC_END:
528 2 GlobalVariableInit();
529 2 break;
530 2
531 2 default:
532 2 break;
533 2 }
534 1 #endif
535 1 }
536
537 /* ======================================= */
538
539 static void LedDisplayHandler(void)
540 {
541 1 #ifdef DEBUG
if(g_bI2cError)
{
if((wMainLoopCount % 1000) == 0) //fast blink
All_LED_Blink();
}
else if(g_ucIRRecDataType == REC_ERROR)
{
All_LED_On();
}
C51 COMPILER V7.50 CLONE 10/25/2006 14:55:44 PAGE 10
else
#endif
553 1 {
554 2 switch(g_ucCloneStatus)
555 2 {
556 3 case CLONE_NONE:
557 3 LED1_On_Only();
558 3 break;
559 3
560 3 /* 发送 */
561 3 case CLONE_SEND_PREPARE:
562 3 LED3_On_Only();
563 3 break;
564 3 case CLONE_SEND_SEND_READY:
565 3 case CLONE_SEND_DATA:
566 3 LED3_Blink_Only();
567 3 break;
568 3
569 3 /* 接收 */
570 3 case CLONE_REC_PREPARE:
571 3 LED2_On_Only();
572 3 break;
573 3 case CLONE_SEND_REC_READY:
574 3 case CLONE_REC_AND_SEND_ACK:
575 3 if((wMainLoopCount % 1500) == 0) //slow blink
576 3 {
577 4 LED2_Blink_Only();
578 4 }
579 3 break;
580 3
581 3 #ifdef DEBUG
case CLONE_ERROR:
if((wMainLoopCount % 1000) == 0) //fast blink
{
LED4_Blink_Only();
}
break;
case CLONE_REC_CUSTOM_ERROR:
if((wMainLoopCount % 1000) == 0) //fast blink
{
LED3Blink();
LED4Blink();
}
break;
case CLONE_CHECKSUM_ERROR:
if((wMainLoopCount % 1000) == 0) //fast blink
{
LED1Blink();
LED2Blink();
}
break;
#else
603 3 case CLONE_ERROR:
604 3 case CLONE_REC_CUSTOM_ERROR:
605 3 case CLONE_CHECKSUM_ERROR:
606 3 if((wMainLoopCount % 1000) == 0) //fast blink
607 3 {
608 4 LED4_Blink_Only();
609 4 }
610 3 break;
611 3 #endif
612 3 default:
C51 COMPILER V7.50 CLONE 10/25/2006 14:55:44 PAGE 11
613 3 break;
614 3 }
615 2 }
616 1 }
617
618
619
620
621
622
623 void main(void)
624 {
625 1 SP = 0x60;
626 1 //Initial
627 1 McuInit();
628 1 GlobalVariableInit();
629 1
630 1 //main loop
631 1 while(1)
632 1 {
633 2 // if((wMainLoopCount % 160) == 0)//about 16ms /* Del By dj 2006-10-16 */
634 2 {
635 3 KeyScan();
636 3 KeyHandler();
637 3 }
638 2 IR_CheckLeadingHander();
639 2 CloneHandler();
640 2 LedDisplayHandler();
641 2
642 2 wMainLoopCount++;
643 2 }
644 1
645 1 }
646
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1116 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 4
IDATA SIZE = 26 ----
BIT SIZE = 1 ----
EDATA SIZE = ---- ----
HDATA SIZE = ---- ----
XDATA CONST SIZE = ---- ----
FAR CONST SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -