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

📄 mca25.c

📁 ENC28J60 System HTTP
💻 C
📖 第 1 页 / 共 3 页
字号:
					mca25_puts_progmem("\r\r\n+CMUX: (0),(0),(1-7),(31),(10),(3),(30),(10),(1-7)\r\n");					state = 4;				}				break;			case 4:				//wait for mux enable request				if (string_compare_progmem_plen("AT+CMUX=0,0,7,31", mca25_buffer)){					#if MCA25_DEBUG 					softuart_puts_progmem("at done, ");					#endif					mca25_send_ok();					state = 10;				}				break;			case 10:					// wait for mux ch0 request:					// [F9 03 3F 01 1C F9]					//if (string_compare_progmem_plen("\xF9\x03\x3F\x01\x1C\xF9", mca25_buffer)){					if ((mca25_mux_buffer[0] == 0x03) && (mca25_mux_buffer[2] == 0x01)){						// send mux ch0 ack/open packet:						// [F9 03 73  01 D7 F9]						mca25_puts_progmem("\xF9\x03\x73\x01\xD7\xF9");					  state = 11;					}					break;				case 11:					// wait for mux ch3 request:					// [F9 23 3F 01 C9 F9]					//if (string_compare_progmem_plen("\xF9\x23\x3F\x01\xC9\xF9", mca25_buffer)){					if ((mca25_mux_buffer[0] == 0x23) && (mca25_mux_buffer[2] == 0x01)){						// send mux ch3 ack/open packet:						// [F9 23 73 01 02 F9]						mca25_puts_progmem("\xF9\x23\x73\x01\x02\xF9");					  state = 12;					}					break;				case 12:					// wait for config mux ch0 request:					// [F9 03 EF 09 E3 05 23 8D FB F9]					//if (string_compare_progmem_plen("\xF9\x03\xEF\x09\xE3\x05\x23\x8D\xFB\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\xE3\x05\x23\x8D", mca25_buffer)){						// send mux ch0 config ack/open packet:						// [F9 01 EF 0B E3 07 23 0C 01 79 F9]						mca25_puts_progmem("\xF9\x01\xEF\x0B\xE3\x07\x23\x0C\x01\x79\xF9");					  state = 13;					}					break;				case 13:					// wait for config mux ch3 request:					// [F9 03 EF 09 E1 07 23 0C 01 FB F9]					//if (string_compare_progmem_plen("\xF9\x03\xEF\x09\xE1\x07\x23\x0C\x01\xFB\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\xE1\x07\x23\x0C\x01", mca25_buffer)){						// send mux ch3 config ack/open packet:						// [F9 01 EF 09 E1 05 23 8D 9A F9]						mca25_puts_progmem("\xF9\x01\xEF\x09\xE1\x05\x23\x8D\x9A\xF9");					  state = 14;					}					break;				case 14:					// wait for AT*EACS.17.1.r:					// [F9 23 EF 1B 41 54 2A 45 41 43 53 3D 31 37 2C 31 0D D1 F9]					//if (memcmp(buf,"\xF9\x23\xEF\x1BAT*EACS=17,1\r\xD1\xF9",19) == 0){					//if (string_compare_progmem_plen("\xF9\x23\xEF\x1B\x41\x54\x2A\x45\x41\x43\x53\x3D\x31\x37\x2C\x31\x0D\xD1\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\x41\x54\x2A\x45\x41\x43\x53\x3D\x31\x37\x2C\x31\x0D", mca25_buffer)){						// send mux "\r\nOK\r\n" packet:						// [F9 21 EF 0D 0D 0A 4F 4B 0D 0A 48  F9]						mca25_puts_progmem("\xF9\x21\xEF\x0D\x0D\x0A\x4F\x4B\x0D\x0A\x48\xF9");					  state = 15;					}					break;									case 15:					// wait for AT+CSCC=1,199\r5 peripheral AUTH req:					// [F9 23 EF 1D 41 54 2B 43 53 43 43 3D 31 2C 31 39 39 0D 35 F9]					//if (string_compare_progmem_plen("\xF9\x23\xEF\x1D\x41\x54\x2B\x43\x53\x43\x43\x3D\x31\x2C\x31\x39\x39\x0D\x35\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\x41\x54\x2B\x43\x53\x43\x43\x3D\x31\x2C\x31\x39\x39\x0D", mca25_buffer)){						// send response token:						//DONT// [F9 21 EF 1D 41 54 2B 43 53 43 43 3D 31 2C 31 39 39 0D 54 F9]						// [F9 21 EF 1B 0D 0A 2B 43 53 43 43 3A 20 45 33 0D 0A B0 F9 ]						//printf("\xF9\x21\xEF\x1D\x41\x54\x2B\x43\x53\x43"						//			 "\x43\x3D\x31\x2C\x31\x39\x39\x0D\x54\xF9"); 						mca25_puts_progmem("\xF9\x21\xEF\x1B\x0D\x0A\x2B\x43\x53\x43"									 "\x43\x3A\x20\x45\x33\x0D\x0A\xB0\xF9");									 						//append ok:						mca25_puts_progmem("\xF9\x21\xEF\x0D\x0D\x0A\x4F\x4B\x0D\x0A\x48\xF9");					  state = 16;					}					break;									case 16:					// wait for AT+CSCC=2,199.B9\r AUTH2 req:					// AT+CSCC.2.199.B9.r|					// [F9 23 EF 23 41 54 2B 43 53 43 43 3D 32 2C 31 39 39 2C 42 39 0D FB F9]					//if (string_compare_progmem_plen("\xF9\x23\xEF\x23\x41\x54\x2B\x43\x53\x43\x43\x3D\x32\x2C\x31\x39\x39\x2C\x42\x39\x0D\xFB\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\x41\x54\x2B\x43\x53\x43\x43\x3D\x32\x2C\x31\x39\x39\x2C\x42\x39\x0D", mca25_buffer)){						// send response token: (OK)						// [F9 21 EF 0D 0D 0A 4F 4B 0D 0A 48  F9]						mca25_puts_progmem("\xF9\x21\xEF\x0D\x0D\x0A\x4F\x4B\x0D\x0A\x48\xF9");												// now request data mux channel (ch1):						// [F9 81 3F 01 AB F9]						mca25_puts_progmem("\xF9\x81\x3F\x01\xAB\xF9");					  state = 17;					}					break;									case 17:					// wait for mux ch1 ack:					// [F9 81 73 01 60 F9]					//if (string_compare_progmem_plen("\xF9\x81\x73\x01\x60\xF9", mca25_buffer)){					if ((mca25_mux_buffer[0] == 0x81) && (mca25_mux_buffer[2] == 0x01)){						// channel1 is now open!					  state = 18;					}					break;									case 18:					// wait for ch1 mux config:					// [F9 03 EF 09 E3 05 83 8D FB F9]					//if (string_compare_progmem_plen("\xF9\x03\xEF\x09\xE3\x05\x83\x8D\xFB\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\xE3\x05\x83\x8D", mca25_buffer)){						// send config response:						// [F9 01 EF 09 E1 05 83 8D 9A F9]						mca25_puts_progmem("\xF9\x01\xEF\x09\xE1\x05\x83\x8D\x9A\xF9");												// now configure cam mode:						// [ F9 81 EF 37 80 00 1A 10 00 01 00 46 00 13 E3 3D						//   95 45 83 74 4A D7 9E C5 C1 6B E3 1E DE 8E 61 82 F9 ]						// F9 81 EF 37 			= mux header						// 80 00 1A 10 00 	= ???						// 01 00 						= (256-6)Byte data, then wait for ACK						// 46  00 13 E3 3D 95 45 83 74 4A D7 9E C5 C1 6B E3 1E DE 8E 61 ???						mca25_puts_progmem("\xF9\x81\xEF\x37\x80\x00\x1A\x10\x00");						//mca25_puts_progmem("\x02\x00");//buffsize 512 byte						mca25_uart_putc(hi8(NIC_BUFFERSIZE-TCP_POS_TXDATA+6));						mca25_uart_putc(lo8(NIC_BUFFERSIZE-TCP_POS_TXDATA+6));						//"\x02\x28");//buffsize 546 data byte (but we have 6 dont care bytes) -> 546+6 = 552						mca25_puts_progmem("\x46\x00\x13\xE3\x3D\x95\x45\x83\x74\x4A\xD7\x9E");						mca25_puts_progmem("\xC5\xC1\x6B\xE3\x1E\xDE\x8E\x61\x82\xF9");						mca25_puts_progmem("\xF9\x21\xEF\x0D\x0D\x0A\x4F\x4B\x0D\x0A\x48\xF9");												state = 19;					}					break;									case 19:					// cam should now accept our settings:					// [F9 83 EF 3F A0 00 1F 10 00 20 00 CB 00 00 00 01 4A 00					//  13 E3 3D 95 45 83 74 4A D7 9E C5 C1 6B E3 1E DE 8E ED F9					//if (string_compare_progmem_plen("\xF9\x83\xEF\x3F\xA0\x00\x1F\x10\x00\x20\x00\xCB\x00\x00\x00\x01\x4A\x00\x13\xE3\x3D\x95\x45\x83\x74\x4A\xD7\x9E\xC5\xC1\x6B\xE3\x1E\xDE\x8E\xED\xF9", mca25_buffer)){					if (string_compare_progmem_plen("\xA0\x00\x1F\x10\x00\x20\x00\xCB\x00\x00\x00\x01\x4A\x00\x13\xE3\x3D\x95\x45\x83\x74\x4A\xD7\x9E\xC5\xC1\x6B\xE3\x1E\xDE\x8E", mca25_buffer)){						state = 100; //-> exit init loop.					#if MCA25_DEBUG 					softuart_puts_progmem("mux. ");					#endif										}					break;						default:				break;		}	}	#if MCA25_DEBUG 	softuart_puts_progmem("ready"); //finished! CAM found & ready!");	softuart_putnewline();	#endif	//cam is initialised:	mca25_ready	= 1;	return 0;}//send okvoid mca25_send_ok(void){	mca25_puts_progmem("\r\r\nOK\r\n");}//read at commandunsigned char mca25_read_at_command(unsigned char *buffer){	unsigned int cnt;	//set timeout to t+8 seconds:	clock_timeout_timer = 8;		#if MCA25_DEBUG	//softuart_puts_progmem("CAM : rx [");	#endif	for(cnt=0;cnt<MCA25_COMM_BUFFER_LEN;cnt++){ 		if (clock_timeout_timer == 0) 				return 0;		//wait for data in		while (!(UCSRA & (1<<RXC))){ 			if (clock_timeout_timer == 0) 				return 0;		}				buffer[cnt] = UDR;		if (buffer[cnt] == '\r' || buffer[cnt] == '\n'){			buffer[cnt] = '\0';			break; //we have finished read.		}	}	#if MCA25_DEBUG	/*for(cnt=0;cnt<MCA25_COMM_BUFFER_LEN;cnt++){		if (buffer[cnt] == 0)			break;		softuart_putc(buffer[cnt]);	}	softuart_puts_progmem("]\r\n");*/	#endif	return 1;}//read mux packetunsigned char mca25_read_mux_packet(unsigned char *buffer, unsigned char skipcount){	unsigned char data;	unsigned char state = 0;	unsigned char len = 0;	unsigned char crc = 0;	unsigned char bufpos = 0;	unsigned char muxbufpos = 0;	//set timeout to t+3 seconds:	clock_timeout_timer = 3;	while (clock_timeout_timer > 0){		//wait for incoming data: (abort if timeout!)		while (!(UCSRA & (1<<RXC))){			if (clock_timeout_timer == 0){				#if MCA25_DEBUG				softuart_put_uint8(state);				softuart_put_uint8(len);				#endif				return 0;			}		}			data = UDR;			if ((state == 4) || (state ==5 )){			if (skipcount == 0){				buffer[bufpos++] = data;			}else{				skipcount--;			}		}		LED_STATUS_ON();		switch (state){			case 0:	// waiting for start flag				if (data == 0xF9){					bufpos = 0;					state = 1;				}				break;			case 1: // address				if (data == 0xF9){					bufpos = 0;				}else{					muxbufpos = 0;					mca25_mux_buffer[0] = data;					state = 2;				}				break;				case 2:	// frame type				if (data != 0xF9){					state = 3;					mca25_mux_buffer[1] = data;					muxbufpos = 2;				}else{					//strange ... happens sometime!					state = 1;					bufpos = 0;				}				break;				case 3:	// frame length				len = (data >> 1);				//limt length				if (len>31)					len = 31;				mca25_mux_buffer[muxbufpos++] = data;				if (len > 0)					state = 4;				else					state = 5;				break;				case 4:	// package data				if (muxbufpos<6)					mca25_mux_buffer[muxbufpos++] = data;				len--;				if (len == 0)					state = 5;				break;				case 5: // checksum				crc = 0xFF;				crc = crc8_calc_byte_rev0x07(crc, mca25_mux_buffer[0]);				crc = crc8_calc_byte_rev0x07(crc, mca25_mux_buffer[1]);				crc = crc8_calc_byte_rev0x07(crc, mca25_mux_buffer[2]);				crc = 0xFF - crc;				if (crc != data){					// -> bad crc !					// special handling of the "buggy" config message					// \xF9\x03\xEF\x09\xE1\x07\x23\x0C\x01\xFB\xF9					if ((buffer[0] == 0xE1) && (buffer[1] == 0x07) && (buffer[3] == 0x0C)){						//softuart_puts_progmem("CAM : buggy cfg detected");						//read extra char for buggy config message:						while (!(UCSRA & (1<<RXC))){							if (clock_timeout_timer == 0)								return 0;						}						data = UDR;						//softuart_puts_progmem("skipped extra data.\r\n");						state = 6;					}else{						#if MCA25_DEBUG						softuart_puts_progmem("CAM : bad crc ");						softuart_put_uint8(crc);						softuart_putc(':');						softuart_put_uint8(data);						softuart_putnewline();						#endif						state = 0;					}				}else{						state = 6;				}				break;				case 6: // flag				if (data != 0xF9){					#if MCA25_DEBUG					softuart_puts_progmem("CAM : bad packet ?! ");					softuart_put_uint8(data);					softuart_putnewline();					#endif					state = 0;				}else{					LED_STATUS_OFF();					return 1;				}				break;			default:				break;		}	}	LED_STATUS_OFF();	return 0;}//put progmem data with given length,//see mca25.h for the mca25_puts_progmem(s) macro !!void mca25_puts_progmem2(PGM_P pointer, unsigned int len){	//softuart_put_uint16(len);	while (len--){		if (pgm_read_byte(pointer) == 0xF9)			_delay_ms(1);		mca25_uart_putc(pgm_read_byte(pointer++));		}}//initialise 460kbaudvoid mca25_uart_init_460800(void){	_delay_ms(2);	UBRRH=(F_CPU / (460800L * 16L) - 1)>>8;	UBRRL=(F_CPU / (460800L * 16L) - 1)&0xFF;}//initialise uartvoid mca25_uart_init_9600(void){	UBRRH = (F_CPU / (9600 * 16L) - 1)>>8;	UBRRL = (F_CPU / (9600 * 16L) - 1)&0xFF;	//activate uart TX+RX	UCSRB |= (1<<TXEN)|(1<<RXEN);	//async 8N1	UCSRC |= (1<<URSEL)|(3<<UCSZ0);}//initialise uartvoid mca25_uart_init_19200(void){	UBRRH = (F_CPU / (19200 * 16L) - 1)>>8;	UBRRL = (F_CPU / (19200 * 16L) - 1)&0xFF;}

⌨️ 快捷键说明

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