⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mca25.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 5 页
字号:
 506:io/mca25.c    **** 								state = 100;
 507:io/mca25.c    **** 							else
 508:io/mca25.c    **** 								state = 0;
 509:io/mca25.c    **** 						}
 510:io/mca25.c    **** 						break;
 511:io/mca25.c    **** 
 512:io/mca25.c    **** 					default:
 513:io/mca25.c    **** 						break;
 514:io/mca25.c    **** 				} //case
 515:io/mca25.c    **** 				//softuart_put_uint16(skip_count);
 516:io/mca25.c    **** 			}else if (mca25_mux_buffer[0] == 0x23){
 517:io/mca25.c    **** 				//channel 0x23
 518:io/mca25.c    **** 				mca25_handle_channel_x23();
 519:io/mca25.c    **** 			}else if (mca25_mux_buffer[0] == 0x03){ 
 520:io/mca25.c    **** 				//channel 0x03
 521:io/mca25.c    **** 				mca25_handle_channel_x03();
 522:io/mca25.c    **** 			}else{
 523:io/mca25.c    **** 				for(unsigned char f=0; f<40; f++){
 524:io/mca25.c    **** 					softuart_put_uint8(f);
 525:io/mca25.c    **** 					softuart_putc('=');
 526:io/mca25.c    **** 					softuart_put_uint8(mca25_buffer[f]);
 527:io/mca25.c    **** 					softuart_putnewline();
 528:io/mca25.c    **** 
 529:io/mca25.c    **** 				}softuart_putnewline();softuart_putnewline();//softuart_putc('.');
 530:io/mca25.c    **** 				/*softuart_put_uint8(mca25_buffer[1]);
 531:io/mca25.c    **** 				softuart_put_uint8(mca25_buffer[2]);
 532:io/mca25.c    **** 				softuart_put_uint8(mca25_buffer[3]);
 533:io/mca25.c    **** 				softuart_put_uint8(mca25_buffer[4]);
 534:io/mca25.c    **** 				softuart_putnewline();*/
 535:io/mca25.c    **** 			}
 536:io/mca25.c    **** 		}
 537:io/mca25.c    **** 		//preview image #i has been grabbed.
 538:io/mca25.c    **** 		#if MCA25_DEBUG
 539:io/mca25.c    **** 		softuart_putc('-');
 540:io/mca25.c    **** 		#endif
 541:io/mca25.c    **** 	}
 542:io/mca25.c    **** 	#if MCA25_DEBUG
 543:io/mca25.c    **** 	softuart_putnewline();
 544:io/mca25.c    **** 	softuart_puts_progmem("CAM : preview images done!");
 545:io/mca25.c    **** 	softuart_putnewline();
 546:io/mca25.c    **** 	softuart_puts_progmem("CAM : sending JPG grab request... ");
 547:io/mca25.c    **** 	softuart_putnewline();
 548:io/mca25.c    **** 	#endif
 549:io/mca25.c    **** 
 550:io/mca25.c    **** 	// send capture start cmd:
 551:io/mca25.c    **** 	mca25_puts_progmem2(MCA25_START_JPG, sizeof(MCA25_START_JPG));
 552:io/mca25.c    **** 	#if MCA25_DEBUG
 553:io/mca25.c    **** 	//softuart_puts_progmem("done!");
 554:io/mca25.c    **** 	//softuart_putnewline();
 555:io/mca25.c    **** 	#endif
 556:io/mca25.c    **** 
 557:io/mca25.c    **** 	//switch light off:
 558:io/mca25.c    **** 	MPF10_DISABLE();
 559:io/mca25.c    **** 
 560:io/mca25.c    **** 	//cam has transferred no image byte yet -> 0
 561:io/mca25.c    **** 	mca25_datapos=0;
 562:io/mca25.c    **** 	mca25_pic_state = MCA25_PIC_STATE_PREVIEW_DONE; //preview done!
 563:io/mca25.c    **** 	return 1;
 564:io/mca25.c    **** }
 565:io/mca25.c    **** 
 566:io/mca25.c    **** //configure mca25
 567:io/mca25.c    **** unsigned char mca25_configure(void){
 568:io/mca25.c    **** 	unsigned char state=0;
 569:io/mca25.c    **** 	//unsigned char res = 0;
 570:io/mca25.c    **** 	int skip_count=0;
 571:io/mca25.c    **** 
 572:io/mca25.c    **** 	mca25_pic_state = MCA25_PIC_STATE_IDLE;
 573:io/mca25.c    **** 
 574:io/mca25.c    **** 	if (mca25_ready == 0){
 575:io/mca25.c    **** 		//cam not initialised or missing!
 576:io/mca25.c    **** 		#if MCA25_DEBUG
 577:io/mca25.c    **** 		softuart_puts_progmem("CAM : cam not initialised or missing -> abort.");
 578:io/mca25.c    **** 		softuart_putnewline();
 579:io/mca25.c    **** 		#endif
 580:io/mca25.c    **** 		return 0;
 581:io/mca25.c    **** 	}
 582:io/mca25.c    **** 		
 583:io/mca25.c    **** 	#if MCA25_DEBUG
 584:io/mca25.c    **** 	softuart_puts_progmem("CAM : configure...");
 585:io/mca25.c    **** 	#endif
 586:io/mca25.c    **** 	
 587:io/mca25.c    **** 	//config cam:
 588:io/mca25.c    **** 	mca25_puts_progmem2(MCA25_CONFIG_640x480, sizeof(MCA25_CONFIG_640x480)); 
 589:io/mca25.c    **** 
 590:io/mca25.c    **** 	while (state != 100){
 591:io/mca25.c    **** 		if( ! mca25_read_mux_packet(mca25_buffer,0)){
 592:io/mca25.c    **** 				#if MCA25_DEBUG 
 593:io/mca25.c    **** 				softuart_puts_progmem("TIMEOUT! (MUX2)");
 594:io/mca25.c    **** 				softuart_putnewline();
 595:io/mca25.c    **** 				#endif
 596:io/mca25.c    **** 
 597:io/mca25.c    **** 				//cam error, disable !
 598:io/mca25.c    **** 				mca25_ready = 0;
 599:io/mca25.c    **** 				return 0; //read failed -> exit!; 
 600:io/mca25.c    **** 		}
 601:io/mca25.c    **** 
 602:io/mca25.c    **** 		if (mca25_mux_buffer[0] == 0x83){
 603:io/mca25.c    **** 			if (mca25_mux_buffer[1] == 0xEF){//UIH packet
 604:io/mca25.c    **** 				switch (state){
 605:io/mca25.c    **** 					case 0:
 606:io/mca25.c    **** 					case 1:
 607:io/mca25.c    **** 						// wait for cam ACK:
 608:io/mca25.c    **** 						// [F9 83 EF 07 A0 00 03 C7 F9
 609:io/mca25.c    **** 						//if (string_compare_progmem_plen("\xF9\x83\xEF\x07\xA0\x00\x03\xC7\xF9", mca25_buffer)){
 610:io/mca25.c    **** 						if (string_compare_progmem_plen("\xA0\x00\x03", mca25_buffer)){
 611:io/mca25.c    **** 							// request camera info:
 612:io/mca25.c    **** 							// [F9 81 EF 2F 83 00 17 42 00 14 78 2D 62 74 2F 63 
 613:io/mca25.c    **** 							//  61 6D 65 72 61 2D 69 6E 66 6F 00 90 F9]
 614:io/mca25.c    **** 							mca25_puts_progmem("\xF9\x81\xEF\x2F\x83\x00\x17\x42\x00\x14\x78\x2D\x62\x74\x2F\x63\x61\x6D
 615:io/mca25.c    **** 							state = 2;
 616:io/mca25.c    **** 						}
 617:io/mca25.c    **** 						break;
 618:io/mca25.c    **** 					case 2:
 619:io/mca25.c    **** 						// ignore camera info ...
 620:io/mca25.c    **** 						// new version: read how many config bytes cam wants to send
 621:io/mca25.c    **** 						// in order to decide when we can continue!
 622:io/mca25.c    **** 						// thanks to jesper for this idea ;)  [now works with brand new, unused cams!]
 623:io/mca25.c    **** 						skip_count = ((int)mca25_mux_buffer[3]<<8) + mca25_mux_buffer[4];
 624:io/mca25.c    **** 						skip_count -= (mca25_mux_buffer[2]>>1);
 625:io/mca25.c    **** 						state = 3;
 626:io/mca25.c    **** 						
 627:io/mca25.c    **** 						break;
 628:io/mca25.c    **** 		
 629:io/mca25.c    **** 					case 3:
 630:io/mca25.c    **** 						//now skip the necessary amount of bytes:
 631:io/mca25.c    **** 						skip_count -= (mca25_mux_buffer[2]>>1);
 632:io/mca25.c    **** 		
 633:io/mca25.c    **** 						//finished !
 634:io/mca25.c    **** 						if (skip_count <= 0)
 635:io/mca25.c    **** 							state = 100;
 636:io/mca25.c    **** 						break;
 637:io/mca25.c    **** 		
 638:io/mca25.c    **** 					default:
 639:io/mca25.c    **** 						break;
 640:io/mca25.c    **** 				}
 641:io/mca25.c    **** 			}
 642:io/mca25.c    **** 		}else if (mca25_mux_buffer[0] == 0x23){
 643:io/mca25.c    **** 			//channel 0x23
 644:io/mca25.c    **** 			mca25_handle_channel_x23();
 645:io/mca25.c    **** 		}else if (mca25_mux_buffer[0] == 0x03){ 
 646:io/mca25.c    **** 			//channel 0x03
 647:io/mca25.c    **** 			mca25_handle_channel_x03();
 648:io/mca25.c    **** 		}else{
 649:io/mca25.c    **** 			softuart_putc('i');
 650:io/mca25.c    **** 		}
 651:io/mca25.c    **** 	}
 652:io/mca25.c    **** 	#if MCA25_DEBUG
 653:io/mca25.c    **** 	softuart_puts_progmem("done!");
 654:io/mca25.c    **** 	softuart_putnewline();
 655:io/mca25.c    **** 	#endif
 656:io/mca25.c    **** 	return 1;
 657:io/mca25.c    **** }
 658:io/mca25.c    **** 
 659:io/mca25.c    **** 
 660:io/mca25.c    **** //initialise
 661:io/mca25.c    **** void mca25_init(void){
 662:io/mca25.c    **** 	//start with rev016
 663:io/mca25.c    **** 	mca25_is_rev017 = 0;
 664:io/mca25.c    **** 	mca25_allocated_timeout = 0;
 665:io/mca25.c    **** 	mca25_pic_state = MCA25_PIC_STATE_IDLE;
 666:io/mca25.c    **** 
 667:io/mca25.c    **** 	mca25_init_cam();
 668:io/mca25.c    **** }
 669:io/mca25.c    **** 
 670:io/mca25.c    **** //initialise webcam, return 0 if failed!
 671:io/mca25.c    **** unsigned char mca25_init_cam(void){
 672:io/mca25.c    **** 	unsigned char state=0;
 673:io/mca25.c    **** 	#if MCA25_DEBUG 
 674:io/mca25.c    **** 	//unsigned char old_state=0xFF;
 675:io/mca25.c    **** 	#endif	
 676:io/mca25.c    **** 
 677:io/mca25.c    **** 	//mark cam as not ready:
 678:io/mca25.c    **** 	mca25_ready	= 0;
 679:io/mca25.c    **** 
 680:io/mca25.c    **** 	//make camreset pin output
 681:io/mca25.c    **** 	MCA25_RESET_PORT_DIR |=  (1<<MCA25_RESET_PIN); 
 682:io/mca25.c    **** 	PORTD |= (1<<1);  //UART TX = output
 683:io/mca25.c    **** 	PORTD &= ~(1<<0); //UART RX =  input
 684:io/mca25.c    **** 
 685:io/mca25.c    **** 	MCA25_RESET_LO();
 686:io/mca25.c    **** 
 687:io/mca25.c    **** 	//init uart
 688:io/mca25.c    **** 	if (mca25_is_rev017) 
 689:io/mca25.c    **** 		mca25_uart_init_19200();
 690:io/mca25.c    **** 	else
 691:io/mca25.c    **** 		mca25_uart_init_9600();
 692:io/mca25.c    **** 
 693:io/mca25.c    **** 	//reset cam:
 694:io/mca25.c    **** 	MCA25_RESET_LO();
 695:io/mca25.c    **** 	_delay_ms(50);
 696:io/mca25.c    **** 	MCA25_RESET_HI();
 697:io/mca25.c    **** 
 698:io/mca25.c    **** 	#if MCA25_DEBUG 
 699:io/mca25.c    **** 	softuart_puts_progmem("CAM : reset");
 700:io/mca25.c    **** 	softuart_putnewline();
 701:io/mca25.c    **** 	#endif
 702:io/mca25.c    **** /*
 703:io/mca25.c    **** 	//WARNING: will block whole server if no cam connected !! -> DO NOT USE!
 704:io/mca25.c    **** 
 705:io/mca25.c    **** 	//detect mca25 revision
 706:io/mca25.c    **** 	//KTY 105 016 sends always at 9600 baud
 707:io/mca25.c    **** 	//KTY 105 017 sends AT at 9600 and then switches to 19200 !!!
 708:io/mca25.c    **** 	unsigned int count;
 709:io/mca25.c    **** 	for (state = 0; state <4; state++){
 710:io/mca25.c    **** 		count=0;
 711:io/mca25.c    **** 		while((PIND & (1<<0))){}
 712:io/mca25.c    **** 		while(!(PIND & (1<<0))){ count++; }
 713:io/mca25.c    **** 		softuart_put_uint16(count);
 714:io/mca25.c    **** 		softuart_putnewline();
 715:io/mca25.c    **** 	}
 716:io/mca25.c    **** 
 717:io/mca25.c    **** 
 718:io/mca25.c    **** 	#if MCA25_DEBUG 
 719:io/mca25.c    **** 	softuart_puts_progmem("CAM : detected rev");
 720:io/mca25.c    **** 	if (count > 50)
 721:io/mca25.c    **** 		softuart_puts_progmem("016");
 722:io/mca25.c    **** 	else
 723:io/mca25.c    **** 		softuart_puts_progmem("017");
 724:io/mca25.c    **** 	softuart_putnewline();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -