mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-06-04 22:17:01 +08:00
[superbitrf] fix check_size, correct init of pprz and define tx buffer size
This commit is contained in:
@@ -46,6 +46,7 @@
|
||||
#define PPRZ 1
|
||||
#define XBEE 2
|
||||
#define SUPERBITRF 3
|
||||
#define W5100 4
|
||||
|
||||
EXTERN bool_t dl_msg_available;
|
||||
/** Flag provided to control calls to ::dl_parse_msg. NOT used in this module*/
|
||||
|
||||
@@ -63,7 +63,7 @@ void downlink_init(void)
|
||||
downlink.nb_msgs = 0;
|
||||
|
||||
#if defined DATALINK
|
||||
#if DATALINK == PPRZ
|
||||
#if DATALINK == PPRZ || DATALINK == SUPERBITRF || DATALINK == W5100
|
||||
pprz_transport_init();
|
||||
#endif
|
||||
#if DATALINK == XBEE
|
||||
|
||||
@@ -200,15 +200,18 @@ static void send_superbit(struct transport_tx *trans, struct link_device *dev) {
|
||||
#endif
|
||||
|
||||
// Functions for the generic device API
|
||||
static int superbitrf_check_free_space(struct SuperbitRF* p __attribute__((unused)), uint8_t len __attribute__((unused)))
|
||||
static bool_t superbitrf_check_free_space(struct SuperbitRF* p, uint8_t len)
|
||||
{
|
||||
return (((superbitrf.tx_insert_idx+1) %128) != superbitrf.tx_extract_idx);
|
||||
int16_t space = p->tx_extract_idx - p->tx_insert_idx;
|
||||
if (space <= 0)
|
||||
space += SUPERBITRF_TX_BUFFER_SIZE;
|
||||
return (uint16_t)(space - 1) >= len;
|
||||
}
|
||||
|
||||
static void superbitrf_transmit(struct SuperbitRF* p __attribute__((unused)), uint8_t byte)
|
||||
static void superbitrf_transmit(struct SuperbitRF* p, uint8_t byte)
|
||||
{
|
||||
superbitrf.tx_buffer[superbitrf.tx_insert_idx] = byte;
|
||||
superbitrf.tx_insert_idx = (superbitrf.tx_insert_idx+1) %128;
|
||||
p->tx_buffer[p->tx_insert_idx] = byte;
|
||||
p->tx_insert_idx = (p->tx_insert_idx+1) %SUPERBITRF_TX_BUFFER_SIZE;
|
||||
}
|
||||
|
||||
static void superbitrf_send(struct SuperbitRF* p __attribute__((unused))) { }
|
||||
@@ -506,12 +509,12 @@ void superbitrf_event(void) {
|
||||
tx_packet[1] = (superbitrf.bind_mfg_id[3])+1+superbitrf.packet_loss_bit;
|
||||
}
|
||||
|
||||
packet_size = (superbitrf.tx_insert_idx-superbitrf.tx_extract_idx+128 %128);
|
||||
packet_size = (superbitrf.tx_insert_idx-superbitrf.tx_extract_idx+SUPERBITRF_TX_BUFFER_SIZE %SUPERBITRF_TX_BUFFER_SIZE);
|
||||
if(packet_size > 14)
|
||||
packet_size = 14;
|
||||
|
||||
for(i = 0; i < packet_size; i++)
|
||||
tx_packet[i+2] = superbitrf.tx_buffer[(superbitrf.tx_extract_idx+i) %128];
|
||||
tx_packet[i+2] = superbitrf.tx_buffer[(superbitrf.tx_extract_idx+i) %SUPERBITRF_TX_BUFFER_SIZE];
|
||||
}
|
||||
|
||||
// Send a packet
|
||||
@@ -519,7 +522,7 @@ void superbitrf_event(void) {
|
||||
|
||||
// Update the packet extraction
|
||||
if(!superbitrf.packet_loss)
|
||||
superbitrf.tx_extract_idx = (superbitrf.tx_extract_idx+packet_size) %128;
|
||||
superbitrf.tx_extract_idx = (superbitrf.tx_extract_idx+packet_size) %SUPERBITRF_TX_BUFFER_SIZE;
|
||||
|
||||
superbitrf.state++;
|
||||
break;
|
||||
@@ -632,12 +635,12 @@ void superbitrf_event(void) {
|
||||
tx_packet[1] = ((superbitrf.bind_mfg_id[3])+1+superbitrf.packet_loss_bit) % 0xFF;
|
||||
}
|
||||
|
||||
packet_size = (superbitrf.tx_insert_idx-superbitrf.tx_extract_idx+128 %128);
|
||||
packet_size = (superbitrf.tx_insert_idx-superbitrf.tx_extract_idx+SUPERBITRF_TX_BUFFER_SIZE %SUPERBITRF_TX_BUFFER_SIZE);
|
||||
if(packet_size > 14)
|
||||
packet_size = 14;
|
||||
|
||||
for(i = 0; i < packet_size; i++)
|
||||
tx_packet[i+2] = superbitrf.tx_buffer[(superbitrf.tx_extract_idx+i) %128];
|
||||
tx_packet[i+2] = superbitrf.tx_buffer[(superbitrf.tx_extract_idx+i) %SUPERBITRF_TX_BUFFER_SIZE];
|
||||
}
|
||||
|
||||
// Send a packet
|
||||
@@ -645,7 +648,7 @@ void superbitrf_event(void) {
|
||||
|
||||
// Update the packet extraction
|
||||
if(!superbitrf.packet_loss)
|
||||
superbitrf.tx_extract_idx = (superbitrf.tx_extract_idx+packet_size) %128;
|
||||
superbitrf.tx_extract_idx = (superbitrf.tx_extract_idx+packet_size) %SUPERBITRF_TX_BUFFER_SIZE;
|
||||
|
||||
superbitrf.state++;
|
||||
break;
|
||||
|
||||
@@ -70,6 +70,8 @@ enum dsm_protocol {
|
||||
#define IS_DSM2(x) (x == DSM_DSM2P || x == DSM_DSM2_1 || x == DSM_DSM2_2)
|
||||
#define IS_DSMX(x) (!IS_DSM2(x))
|
||||
|
||||
#define SUPERBITRF_TX_BUFFER_SIZE 128
|
||||
|
||||
/* The superbitrf structure */
|
||||
struct SuperbitRF {
|
||||
struct Cyrf6936 cyrf6936; /**< The cyrf chip used */
|
||||
@@ -108,7 +110,7 @@ struct SuperbitRF {
|
||||
|
||||
struct pprz_transport rx_transport; /**< The receive transport */
|
||||
|
||||
uint8_t tx_buffer[128]; /**< The transmit buffer */
|
||||
uint8_t tx_buffer[SUPERBITRF_TX_BUFFER_SIZE]; /**< The transmit buffer */
|
||||
uint8_t tx_insert_idx; /**< The transmit buffer insert index */
|
||||
uint8_t tx_extract_idx; /**< The transmit buffer extract index */
|
||||
|
||||
@@ -125,10 +127,10 @@ extern void superbitrf_set_protocol(uint8_t protocol);
|
||||
|
||||
/* The datalink defines */
|
||||
#define SuperbitRFInit() { }//superbitrf_init(); }
|
||||
#define SuperbitRFCheckFreeSpace(_x) (((superbitrf.tx_insert_idx+1) %128) != superbitrf.tx_extract_idx)
|
||||
#define SuperbitRFCheckFreeSpace(_x) (((superbitrf.tx_insert_idx+1) %SUPERBITRF_TX_BUFFER_SIZE) != superbitrf.tx_extract_idx)
|
||||
#define SuperbitRFTransmit(_x) { \
|
||||
superbitrf.tx_buffer[superbitrf.tx_insert_idx] = _x; \
|
||||
superbitrf.tx_insert_idx = (superbitrf.tx_insert_idx+1) %128; \
|
||||
superbitrf.tx_insert_idx = (superbitrf.tx_insert_idx+1) %SUPERBITRF_TX_BUFFER_SIZE; \
|
||||
}
|
||||
#define SuperbitRFSendMessage() { }
|
||||
#define SuperbitRFCheckAndParse() { }
|
||||
|
||||
Reference in New Issue
Block a user