[superbitrf] fix check_size, correct init of pprz and define tx buffer size

This commit is contained in:
Gautier Hattenberger
2014-12-11 19:03:10 +01:00
parent 62a42e3e65
commit 8bce8ce4fb
4 changed files with 21 additions and 15 deletions
@@ -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*/
+1 -1
View File
@@ -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
+14 -11
View File
@@ -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;
+5 -3
View File
@@ -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() { }