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); } }
//---------------------------------------------------------------------------- //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 *)ð_buffer[IP_OFFSET]; udp_cmd_pollReplyTarget = ip->IP_Srcaddr; if(strcasestr_P((char*)ð_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*)ð_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*)ð_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); } } }
// ---------------------------------------------------------------------------- // receive Art-Net packet void artnet_get(unsigned char index) { struct artnet_header *header; header = (struct artnet_header *)ð_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 *)ð_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 *)ð_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 *)ð_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 *)ð_buffer[UDP_DATA_START]; //processIpProgPacket(ipprog); return; } } }