[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [lwip-users] STR912 lwIP + Freertos demo
From: |
ajinkya |
Subject: |
Re: [lwip-users] STR912 lwIP + Freertos demo |
Date: |
Tue, 16 Apr 2013 01:53:41 -0700 (PDT) |
Hi Noam,
I have tried the code, and have made some changes, but I have some issues.
Here is the part of code.
"BuildReply" function compares the received payload with the string, and
sets "RetVal" flag,
which we use "Discovery_recv" function to send different replies depending
on the returned "RetVal" flag value.
This is just for trials and testing i tried this code, and I am getting the
expected reply.
But I wanted to ask, *am I doing it correct??*
I guess I am missing something.
Because when I introduce the "vAC_ON_OFF_Function" it happens only once (I
get a reply saying "AC Switched ON" and the signal is also sent) but then it
is gone.........doesn't even reply ping.
I have attached 2 screen shots of Wireshark for reference (
With_vAC_ON_OFF_Function_1.png
<http://lwip.100.n7.nabble.com/file/n21320/With_vAC_ON_OFF_Function_1.png>
, With_vAC_ON_OFF_Function_2.png
<http://lwip.100.n7.nabble.com/file/n21320/With_vAC_ON_OFF_Function_2.png>
)
And 2 more screen shots with plain request-reply ( plain-request-reply1.png
<http://lwip.100.n7.nabble.com/file/n21320/plain-request-reply1.png> ,
plain-request-reply2.png
<http://lwip.100.n7.nabble.com/file/n21320/plain-request-reply2.png> )
which was working fine (without the addon function - "vAC_ON_OFF_Function"
).
Source addr-10.114.12.50
Dest Addr - 10.114.12.58 --(STR9 device address)
void vBasicWEBServer( void *pvParameters )
{
struct ip_addr xIpAddr, xNetMast, xGateway;
extern err_t ethernetif_init( struct netif *netif );
err_t err;
struct udp_pcb *my_pcb;
struct pbuf *p;
/* Parameters are not used - suppress compiler error. */
( void ) pvParameters;
/* Create and configure the EMAC interface. */
IP4_ADDR( &xIpAddr, emacIPADDR0, emacIPADDR1, emacIPADDR2, emacIPADDR3
);
IP4_ADDR( &xNetMast, emacNET_MASK0, emacNET_MASK1, emacNET_MASK2,
emacNET_MASK3 );
IP4_ADDR( &xGateway, emacGATEWAY_ADDR0, emacGATEWAY_ADDR1,
emacGATEWAY_ADDR2, emacGATEWAY_ADDR3 );
netif_add( &EMAC_if, &xIpAddr, &xNetMast, &xGateway, NULL,
ethernetif_init, tcpip_input );
/* make it the default interface */
netif_set_default( &EMAC_if );
/* bring it up */
netif_set_up(&EMAC_if);
/*----------------------------Modify
here---------------------------------------*/
/* Initialize UDP */
my_pcb = udp_new();
if(my_pcb != NULL)
err = udp_bind(my_pcb, IP_ADDR_ANY, 1235);
if(err == ERR_OK)
{
while (1)
{
udp_recv(my_pcb, Discovery_recv, my_pcb);
}
}
/* Nothing else to do. No point hanging around. */
//vTaskDelete( NULL );
}
/*----------------------------------------------------------------------------*/
/******************************************************************************/
/*----------------------------------------------------------------------------*/
static void Discovery_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p,
struct ip_addr *addr, u16_t port)
{
struct pbuf *pLocal_ON, *pLocal_OFF, *pLocal_Miss ;
char *Payload_extract;
char reply_msg1[]="AC Switched ON";
char reply_msg2[]="AC Switched OFF";
char reply_msg3[]="Ohh noo";
// p == NULL when client has terminated the udp connection. We will
acknowledge the request and close conn.
if(p == NULL)
{
return;
}
Payload_extract = (char*) p->payload; // take the pointer to the data or
even better to copy it to a buffer
pbuf_free(p);
// Allocate a new pbuf for sending the response.
pLocal_ON = pbuf_alloc(PBUF_TRANSPORT, sizeof(reply_msg1), PBUF_RAM);
pLocal_OFF = pbuf_alloc(PBUF_TRANSPORT, sizeof(reply_msg2), PBUF_RAM);
pLocal_Miss = pbuf_alloc(PBUF_TRANSPORT, sizeof(reply_msg3), PBUF_RAM);
memcpy (pLocal_ON->payload, reply_msg1, sizeof(reply_msg1));
memcpy (pLocal_OFF->payload, reply_msg2, sizeof(reply_msg2));
memcpy (pLocal_Miss->payload, reply_msg3, sizeof(reply_msg3));
// create the response
RetVal = BuildReply(Payload_extract);
// Send the response.
// pLocal->len = pLocal->tot_len = PayloadLength;
if(RetVal == 1)
{
//PassArray = 1;
//vAC_ON_OFF_Function(); //Send signal to switch ON AC-
udp_sendto(upcb, pLocal_ON, addr, port);
}
else if(RetVal == 2)
{
//PassArray = 0;
//vAC_ON_OFF_Function(); //Send signal to switch OFF AC
udp_sendto(upcb, pLocal_OFF, addr, port);
}
else if(RetVal ==0)
udp_sendto(upcb, pLocal_Miss, addr, port);
pbuf_free(pLocal_ON);
pbuf_free(pLocal_OFF);
pbuf_free(pLocal_Miss);
return;
}
/*----------------------------------------------------------------------------*/
static int BuildReply(char *Payload)
{
char AC_Sig_ON[] = "Switch ON AC";
char AC_Sig_OFF[] = "Switch OFF AC";
// add your own code here
if(strcmp (Payload, AC_Sig_ON) == 0) //compare received payload with
string
RetVal = 1;
else if(strcmp(Payload, AC_Sig_OFF) == 0) //compare received payload with
string
RetVal = 2;
else
RetVal = 0;
return RetVal;
}
/*----------------------------------------------------------------------------*/
/*---------Add on code to send a signal on receiving perticular
payload---------*/
/*------------------------------------------------------------------------*/
static int vAC_ON_OFF_Function()
{
PWMBusy = 1;
ConfigurePWMfor_AC_ON();
if(PulseCount >= 31)
{
PulseCount =0;
TIM_DeInit(TIM1);
TIM_DeInit(TIM2);
}
PWMBusy = 0;
return PWMBusy;
}
/*------------------------------------------------------------------------*/
void ConfigurePWMfor_AC_ON(void)
{
VIC_DeInit();
TIM_DeInit(TIM1);
TIM_DeInit(TIM2);
TIM2->OC1R = 0x0023;
TIM2->OC2R = 0x0046;
TIM2->CR2 = 0x0010;
TIM2->CR1 = 0x8250; //carrier 38 khz
TIM_ClearFlag(TIM1,TIM_FLAG_OC2);
portENTER_CRITICAL();
{
VIC_Config(TIM1_ITLine,VIC_IRQ, 0);
VIC_ITCmd(TIM1_ITLine,ENABLE);
//VIC_InitDefaultVectors();
TIM1->SR &= 0x0000;
VIC0->ISR = 0x0000;
}
portEXIT_CRITICAL();
TIM1->OC1R = 0x00FF;
TIM1->OC2R = 0x0FFF;
TIM1->CR2 = 0x0810;
TIM1->CR1 = 0x8250; // Signal of AC remote
while(PulseCount < 31);
}
/*------------------------------------------------------------------------*/
void PWM_TIM1_IRQHandler(void) // Interrupt handler
{
/* Clear the interrupt. */
TIM1->SR = 0x0000;
VIC0->ISR = 0x0000;
if(PassArray != 1)
TIM1->OC2R = OFFArrayOC2R[PulseCount];
else
TIM1->OC2R = ONArrayOC2R[PulseCount];
TIM1->OC1R = ArrayOC1R[PulseCount];
if(PulseCount < 31)
PulseCount++;
else
TIM1->CR1 &= 0x7FFF; //STOP timer counter so next interrupt
will not occur
VIC0->VAR = 0xFF;
}
--
View this message in context:
http://lwip.100.n7.nabble.com/STR912-lwIP-Freertos-demo-tp21277p21320.html
Sent from the lwip-users mailing list archive at Nabble.com.
- [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/03
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/04
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/04
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/04
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/07
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/08
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/09
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/10
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/10
- Re: [lwip-users] STR912 lwIP + Freertos demo,
ajinkya <=
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/16
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/18
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/18
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/22
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/22
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/22
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/22
- Re: [lwip-users] STR912 lwIP + Freertos demo, ajinkya, 2013/04/22
- Re: [lwip-users] STR912 lwIP + Freertos demo, Noam weissman, 2013/04/22
- Re: [lwip-users] STR912 lwIP + Freertos demo, Bill Auerbach, 2013/04/22