/*
===============================================================================
Name : main.c
Author : Zero
Version : 1.0 / 22.03.2012
Copyright : $(copyright)
Description : UDPIP sample using udpip library
===============================================================================
*/
#ifdef __USE_CMSIS
#include "LPC17xx.h"
#endif
#include <cr_section_macros.h>
#include <NXP/crp.h>
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
//#define USE_PRINTF //comment out to avoid printf
#ifdef USE_PRINTF
#include <stdio.h> //used for printf
#else
#define printf(...)
#endif
#include <string.h> //used for mem functions
#include "udpip.h" //include UDP/IP
//MAC
uint8_t MY_MAC[6]={0x1E,0x30,0x6C,0xA2,0x45,0x5E};
//IPs
static uint8_t SOURCE_IP[4]={192,168,178,120};
static uint8_t TARGET_IP[4]={192,168,178, 26};
//Ports
static uint16_t SOURCE_PORT=50100;
static uint16_t TARGET_PORT=50101;
//predefine message
//transmit data
uint8_t trans_message[16] = {'S','p','e','e','d','1',':',0,0,0,0,0,0,0,0,0};
uint16_t trans_number; //transmit number
uint16_t trans_counter; //transmit counter
uint8_t rec_message[20]; //receive buffer
uint16_t rec_number; //receive number
uint16_t rec_counter; //receive counter
//conversions
uint32_t conversion_long;
void read_UDP1(unsigned char* msg, short len, unsigned char broadcast)
{
memcpy(rec_message,msg,7); //copy 7 char string
rec_message[7]='\0'; //end
memcpy(&rec_number,msg + 10,2);//copy number (2 bytes at 10)
rec_counter++;
printf("RxD %04d: %s %d\n",rec_counter,rec_message,rec_number);
}
int main(void) //start main
{
//let's show the basic settings
printf("UDP-IP Sample Init...\n");
printf("MY_MAC: %02x-%02x-%02x-%02x-%02x-%02x\n",MY_MAC[0],MY_MAC[1],MY_MAC[2],MY_MAC[3],MY_MAC[4],MY_MAC[5]);
printf("SOURCE_IP: %03d.%03d.%03d.%03d\n",SOURCE_IP[0],SOURCE_IP[1],SOURCE_IP[2],SOURCE_IP[3]);
printf("TARGET_IP: %03d.%03d.%03d.%03d\n",TARGET_IP[0],TARGET_IP[1],TARGET_IP[2],TARGET_IP[3]);
printf("SOURCE_PORT: %d\n",SOURCE_PORT);
printf("TARGET_PORT: %d\n",TARGET_PORT);
//init source MAC and IP
memcpy(&conversion_long,&SOURCE_IP[0],4);//convert IP to long
udpipInit(&MY_MAC[0],conversion_long); //read IP as long
//setup source port for broadcast (MAC = FF-FF-FF-FF-FF-FF)
//udpipSetBroadcastForService(2,TARGET_PORT);
memcpy(&conversion_long,&TARGET_IP[0],4);//convert IP to long
udpipSetIPForService(2,conversion_long,TARGET_PORT);
udpipSetService(1,SOURCE_PORT,read_UDP1);//set receive port callback service 1
udpipSetService(2,SOURCE_PORT,NULL); //set receive port callback service 2
while(1) //endless loop
{
volatile static int i = 500000; //start to transmit
i++;
if(i>500000) //delay
{
trans_number++; //inc transmit number
i=0;
//copy trans_number(2 bytes) in trans_message at offset 10
memcpy(&trans_message[10],(uint8_t*)(&trans_number),sizeof(trans_number));
//transmit message
udpipSend(2,trans_message,sizeof(trans_message)); //service 2, trans_message, 16 bytes
printf("TxD %04d: %s %d\n",trans_counter,trans_message,trans_number);
trans_counter++;
}
udpipWork(); //do udp work
} //end endless loop
return 0;
} //end main
|