1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-01-31 16:52:10 +01:00

PiOS.posix: small corrections and bugfixes to make pios_com_udp work correctly. Telemetry works now.

This commit is contained in:
Corvus Corax 2011-08-14 14:19:15 +02:00
parent 5b240a2675
commit b75653a226
3 changed files with 43 additions and 27 deletions

View File

@ -55,13 +55,19 @@
#define PIOS_COM_MAX_DEVS 256 #define PIOS_COM_MAX_DEVS 256
#define PIOS_UDP_RX_BUFFER_SIZE PIOS_COM_BUFFER_SIZE #define PIOS_UDP_RX_BUFFER_SIZE PIOS_COM_BUFFER_SIZE
#define PIOS_COM_TELEM_RF 0 extern uint32_t pios_com_telem_rf_id;
#define PIOS_COM_GPS 1 extern uint32_t pios_com_telem_usb_id;
#define PIOS_COM_TELEM_USB 2 extern uint32_t pios_com_gps_id;
extern uint32_t pios_com_aux_id;
extern uint32_t pios_com_spectrum_id;
#define PIOS_COM_TELEM_RF (pios_com_telem_rf_id)
#define PIOS_COM_TELEM_USB (pios_com_telem_usb_id)
#define PIOS_COM_GPS (pios_com_gps_id)
#ifdef PIOS_ENABLE_AUX_UART #ifdef PIOS_ENABLE_AUX_UART
#define PIOS_COM_AUX 3 #define PIOS_COM_AUX (pios_com_aux_id)
#define PIOS_COM_DEBUG PIOS_COM_AUX #define PIOS_COM_DEBUG (PIOS_COM_AUX
#endif #endif
/** /**

View File

@ -92,14 +92,13 @@ static uint32_t PIOS_COM_create(void)
com_dev = &pios_com_devs[pios_com_num_devs++]; com_dev = &pios_com_devs[pios_com_num_devs++];
com_dev->magic = PIOS_COM_DEV_MAGIC; com_dev->magic = PIOS_COM_DEV_MAGIC;
return (pios_com_num_devs-1); return (pios_com_num_devs);
} }
static struct pios_com_dev * PIOS_COM_find_dev(uint32_t com_dev_id) static struct pios_com_dev * PIOS_COM_find_dev(uint32_t com_dev_id)
{ {
if (com_dev_id>pios_com_num_devs) { if (!com_dev_id) return NULL;
return NULL; if (com_dev_id>pios_com_num_devs+1) return NULL;
} return &pios_com_devs[com_dev_id-1];
return &pios_com_devs[com_dev_id];
} }
#endif #endif

View File

@ -32,6 +32,7 @@
#if defined(PIOS_INCLUDE_UDP) #if defined(PIOS_INCLUDE_UDP)
#include <signal.h>
#include <pios_udp_priv.h> #include <pios_udp_priv.h>
/* We need a list of UDP devices */ /* We need a list of UDP devices */
@ -75,6 +76,12 @@ static pios_udp_dev * find_udp_dev_by_id (uint8_t udp)
*/ */
void * PIOS_UDP_RxThread(void * udp_dev_n) void * PIOS_UDP_RxThread(void * udp_dev_n)
{ {
/* needed because of FreeRTOS.posix scheduling */
sigset_t set;
sigfillset(&set);
sigprocmask(SIG_BLOCK, &set, NULL);
pios_udp_dev * udp_dev = (pios_udp_dev*) udp_dev_n; pios_udp_dev * udp_dev = (pios_udp_dev*) udp_dev_n;
/** /**
@ -93,10 +100,8 @@ void * PIOS_UDP_RxThread(void * udp_dev_n)
PIOS_UDP_RX_BUFFER_SIZE, PIOS_UDP_RX_BUFFER_SIZE,
0, 0,
(struct sockaddr *) &udp_dev->client, (struct sockaddr *) &udp_dev->client,
(socklen_t*)&udp_dev->clientLength)) < 0) { (socklen_t*)&udp_dev->clientLength)) >= 0)
{
pthread_exit(NULL);
}
/* copy received data to buffer if possible */ /* copy received data to buffer if possible */
/* we do NOT buffer data locally. If the com buffer can't receive, data is discarded! */ /* we do NOT buffer data locally. If the com buffer can't receive, data is discarded! */
@ -113,6 +118,9 @@ void * PIOS_UDP_RxThread(void * udp_dev_n)
#endif /* PIOS_INCLUDE_FREERTOS */ #endif /* PIOS_INCLUDE_FREERTOS */
} }
}
} }
@ -172,7 +180,7 @@ static void PIOS_UDP_TxStart(uint32_t udp_id, uint16_t tx_bytes_avail)
PIOS_Assert(udp_dev); PIOS_Assert(udp_dev);
uint16_t length,len,rem; int32_t length,len,rem;
/** /**
* we send everything directly whenever notified of data to send (lazy!) * we send everything directly whenever notified of data to send (lazy!)
@ -186,9 +194,12 @@ static void PIOS_UDP_TxStart(uint32_t udp_id, uint16_t tx_bytes_avail)
len = sendto(udp_dev->socket, udp_dev->tx_buffer, length, 0, len = sendto(udp_dev->socket, udp_dev->tx_buffer, length, 0,
(struct sockaddr *) &udp_dev->client, (struct sockaddr *) &udp_dev->client,
sizeof(udp_dev->client)); sizeof(udp_dev->client));
if (!len) return; if (len<=0) {
rem=0;
} else {
rem -= len; rem -= len;
} }
}
tx_bytes_avail -= length; tx_bytes_avail -= length;
} }
} }