Make wlan_start timeout

This commit is contained in:
iabdalkader 2014-07-05 03:39:01 +02:00
parent 95b36965ec
commit 43758d1a67
2 changed files with 20 additions and 8 deletions

View File

@ -141,7 +141,7 @@ extern void wlan_init( tWlanCB sWlanCB,
//! //!
// //
//***************************************************************************** //*****************************************************************************
extern void wlan_start(unsigned short usPatchesAvailableAtHost); extern int wlan_start(unsigned short usPatchesAvailableAtHost);
//***************************************************************************** //*****************************************************************************
// //

View File

@ -251,12 +251,13 @@ void SpiReceiveHandler(void *pvBuffer)
//! //!
// //
//***************************************************************************** //*****************************************************************************
#define TIMEOUT (500000)
void int
wlan_start(unsigned short usPatchesAvailableAtHost) wlan_start(unsigned short usPatchesAvailableAtHost)
{ {
unsigned long ulSpiIRQState; unsigned long ulSpiIRQState;
unsigned long volatile timeout;
tSLInformation.NumberOfSentPackets = 0; tSLInformation.NumberOfSentPackets = 0;
tSLInformation.NumberOfReleasedPackets = 0; tSLInformation.NumberOfReleasedPackets = 0;
@ -281,30 +282,41 @@ wlan_start(unsigned short usPatchesAvailableAtHost)
// ASIC 1273 chip enable: toggle WLAN EN line // ASIC 1273 chip enable: toggle WLAN EN line
tSLInformation.WriteWlanPin( WLAN_ENABLE ); tSLInformation.WriteWlanPin( WLAN_ENABLE );
timeout = TIMEOUT;
if (ulSpiIRQState) if (ulSpiIRQState)
{ {
// wait till the IRQ line goes low // wait till the IRQ line goes low
while(tSLInformation.ReadWlanInterruptPin() != 0) while(tSLInformation.ReadWlanInterruptPin() != 0 && --timeout)
{ {
} }
} }
else else
{ {
// wait till the IRQ line goes high and than low // wait till the IRQ line goes high and than low
while(tSLInformation.ReadWlanInterruptPin() == 0) while(tSLInformation.ReadWlanInterruptPin() == 0 && --timeout)
{ {
} }
while(tSLInformation.ReadWlanInterruptPin() != 0) if (timeout == 0) {
return -1;
}
timeout = TIMEOUT;
while(tSLInformation.ReadWlanInterruptPin() != 0 && --timeout)
{ {
} }
} }
if (timeout ==0) {
return -1;
}
SimpleLink_Init_Start(usPatchesAvailableAtHost); SimpleLink_Init_Start(usPatchesAvailableAtHost);
// Read Buffer's size and finish // Read Buffer's size and finish
hci_command_send(HCI_CMND_READ_BUFFER_SIZE, tSLInformation.pucTxCommandBuffer, 0); hci_command_send(HCI_CMND_READ_BUFFER_SIZE, tSLInformation.pucTxCommandBuffer, 0);
SimpleLinkWaitEvent(HCI_CMND_READ_BUFFER_SIZE, 0); SimpleLinkWaitEvent(HCI_CMND_READ_BUFFER_SIZE, 0);
return 0;
} }