Ejemplo n.º 1
0
void Check (int line, const char *s1, const char *s2, int expect)
{
    char t1[300];
    char *p;

    if (strlen_P(s1) > sizeof(t1) - 1)
	exit (1);
    strcpy_P (t1, s1);
    p = strcasestr_P (t1, s2);

    if (expect < 0) {
	if (p) {
	    PRINTFLN (line, "return nonzero");
	    EXIT (line);
	}
    } else {
	if (p != t1 + expect) {
	    PRINTFLN (line, "expect= %d  result= %d", expect, p - t1);
	    EXIT (1000 + line);
	}
    }
    if (strcmp_P (t1, s1)) {
	PRINTFLN (line, "string is changed");
	EXIT (2000 + line);
    }
}
Ejemplo n.º 2
0
//----------------------------------------------------------------------------
//Empfang der IP
void udp_cmd_get (unsigned char index)
{
	//UDP_CMD_DEBUG("** CMD DATA GET Bytes: %i **\r\n",((UDP_DATA_END_VAR)-(UDP_DATA_START)));

	struct IP_Header *ip;
	ip = (struct IP_Header *)&eth_buffer[IP_OFFSET];
	udp_cmd_pollReplyTarget = ip->IP_Srcaddr;
	
	if(strcasestr_P((char*)&eth_buffer[UDP_DATA_START],PSTR("CMD IP ")) != 0){	
		if ((eth_buffer[UDP_DATA_START+11] == myip[0] &&
			eth_buffer[UDP_DATA_START+12] == myip[1] &&
			eth_buffer[UDP_DATA_START+13] == myip[2] &&
			eth_buffer[UDP_DATA_START+14] == myip[3])||
			(eth_buffer[UDP_DATA_START+11] == 255 &&
			eth_buffer[UDP_DATA_START+12] == 255 &&
			eth_buffer[UDP_DATA_START+13] == 255 &&
			eth_buffer[UDP_DATA_START+14] == 255))
		{
			//write default port
			unsigned short tmp = 0x1936;
			eeprom_write_block(&tmp,(void *)64, 2);

			//write_eeprom_ip(IP_EEPROM_STORE);
			if (*((unsigned int*)&eth_buffer[UDP_DATA_START+7]) != 0x00000000)
			{	
				//value ins EEPROM schreiben
				for (unsigned char count = 0; count<4;count++)
				{
					eeprom_busy_wait ();
					eeprom_write_byte((unsigned char *)(IP_EEPROM_STORE + count),eth_buffer[UDP_DATA_START+7+count]);
				}
			}

			//write_eeprom_netmask(NETMASK_EEPROM_STORE);
			if (*((unsigned int*)&eth_buffer[UDP_DATA_START+15]) != 0x00000000)
			{	
				//value ins EEPROM schreiben
				for (unsigned char count = 0; count<4;count++)
				{
					eeprom_busy_wait ();
					eeprom_write_byte((unsigned char *)(NETMASK_EEPROM_STORE + count),eth_buffer[UDP_DATA_START+15+count]);
				}
			}
			
			(*((unsigned long*)&myip[0])) = MYIP;
			(*((unsigned long*)&netmask[0])) = NETMASK;

			//UDP_CMD_DEBUG("My IP: %1i.%1i.%1i.%1i\r\n",myip[0],myip[1],myip[2],myip[3]);
			//UDP_CMD_DEBUG("MASK %1i.%1i.%1i.%1i\r\n", netmask[0]  , netmask[1]  , netmask[2]  , netmask[3]);
			
			//send OK
			eth_buffer[UDP_DATA_START] = 'O';
			eth_buffer[UDP_DATA_START+1] = 'K';
			//create_new_udp_packet(2,UDP_CMD_PORT_TX+1392,UDP_CMD_PORT_TX,udp_cmd_pollReplyTarget);
			create_new_udp_packet(2,UDP_CMD_PORT_TX+3456,UDP_CMD_PORT_TX,(unsigned long)0xffffffff);
		}
	}
}
Ejemplo n.º 3
0
// ----------------------------------------------------------------------------
// receive Art-Net packet
void artnet_get(unsigned char index) {
	struct artnet_header *header;

	header = (struct artnet_header *)&eth_buffer[UDP_DATA_START];
	//check the id
	if(strcasestr_P((char*)&header->id,PSTR("Art-Net")) == 0){
		//ARTNET_DEBUG("Wrong ArtNet header, discarded\r\n");
		artnet_status = RC_PARSE_FAIL;
		return;
	}

	switch(header->opcode)
	{
		//OP_POLL
		case (OP_POLL):{
			struct artnet_poll *poll;
			//ARTNET_DEBUG("Received artnet poll packet!\r\n");
			poll = (struct artnet_poll *)&eth_buffer[UDP_DATA_START];
			processPollPacket(poll);
			return;
		}
		//OP_POLLREPLY
		case (OP_POLLREPLY):{
			//ARTNET_DEBUG("Received artnet poll reply packet!\r\n");
			return;
		}
		//OP_OUTPUT
		case (OP_OUTPUT):{
			struct artnet_dmx *dmx;

			//ARTNET_DEBUG("Received artnet output packet!\r\n");
			dmx = (struct artnet_dmx *)&eth_buffer[UDP_DATA_START];

			if (dmx->universe == ((artnet_subNet << 4) | artnet_outputUniverse1)) 
			{
				if (artnet_dmxDirection == 0)
				{
					artnet_dmxChannels = (dmx->lengthHi << 8) | dmx->length;
					memcpy((unsigned char*)&artnet_dmxUniverse[0], &(dmx->dataStart), artnet_dmxChannels);
					
					if (artnet_dmxTransmitting == FALSE)
						{
						// setup USART
						DMXPort |= (1 << DMXDIR_IO);
						DMXPort |= (1 << DMXTXD);
						UBRR0   = (F_CPU / (250000* 16L) - 1);
						UCSR0C|= (1<<USBS0); //USBS0 2 Stop bits
						UCSR0B|= (1<<TXEN0)|(1<<TXCIE0); // TXEN0 Transmitter enable / TXCIE0 TX complete interrupt enable
						UDR0    = 0;//start transmitting

						artnet_dmxTransmitting = TRUE;
						if (artnet_sendPollReplyOnChange == TRUE) {
							artnet_pollReplyCounter++;
							artnet_sendPollReply();
						}
					}
					isActive = 1;

				}
			}
			return;
		}
		//OP_ADDRESS
		case (OP_ADDRESS):{
			struct artnet_address *address;
			//ARTNET_DEBUG("Received artnet address packet!\r\n");
			address = (struct artnet_address *)&eth_buffer[UDP_DATA_START];
			//processAddressPacket(address);
			return;
		}
		//OP_IPPROG
		case (OP_IPPROG):{
			struct artnet_ipprog *ipprog;
			//ARTNET_DEBUG("Received artnet ip prog packet!\r\n");
			ipprog = (struct artnet_ipprog *)&eth_buffer[UDP_DATA_START];
			//processIpProgPacket(ipprog);
			return;		
		}	
	}
}