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:
parent
5b240a2675
commit
b75653a226
@ -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
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user