diff --git a/conf/airframes/walkera_V120D02S.xml b/conf/airframes/walkera_V120D02S.xml new file mode 100644 index 00000000000..d25f606cd21 --- /dev/null +++ b/conf/airframes/walkera_V120D02S.xml @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +
+ + +
+ + +
+ + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ +
+ + + + + + + + + + + + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/conf/settings/superbitrf.xml b/conf/settings/superbitrf.xml new file mode 100644 index 00000000000..93596bdab4d --- /dev/null +++ b/conf/settings/superbitrf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sw/airborne/subsystems/datalink/superbitrf.c b/sw/airborne/subsystems/datalink/superbitrf.c index 4231d1dd901..f26ede432e5 100644 --- a/sw/airborne/subsystems/datalink/superbitrf.c +++ b/sw/airborne/subsystems/datalink/superbitrf.c @@ -60,7 +60,7 @@ PRINT_CONFIG_VAR(SUPERBITRF_DRDY_PIN); /* Default forcing in DSM2 mode is false */ #ifndef SUPERBITRF_FORCE_DSM2 -#define SUPERBITRF_FORCE_DSM2 FALSE +#define SUPERBITRF_FORCE_DSM2 TRUE #endif PRINT_CONFIG_VAR(SUPERBITRF_FORCE_DSM2); @@ -434,7 +434,7 @@ void superbitrf_event(void) { } // Switch channel, sop code, data code and crc - superbitrf.channel = (superbitrf.channel + 1) % 0x62; //TODO fix define + superbitrf.channel = (superbitrf.channel + 2) % 0x4F; //TODO fix define superbitrf.crc_seed = ~superbitrf.crc_seed; pn_row = (IS_DSM2(superbitrf.protocol) || SUPERBITRF_FORCE_DSM2)? superbitrf.channel % 5 : (superbitrf.channel-2) % 5; @@ -483,8 +483,8 @@ void superbitrf_event(void) { cyrf6936_multi_write(&superbitrf.cyrf6936, cyrf_abort_receive, 2); superbitrf.state++; - // When we don't have enough time - if(superbitrf.timeouts > 0 || superbitrf.timing2 < 10000 || superbitrf.timing1 > 10000) { + // Only send on channel 2 + if(superbitrf.crc_seed != ((superbitrf.bind_mfg_id[0] << 8) + superbitrf.bind_mfg_id[1])) { superbitrf.state = 8; // Set the timer superbitrf.timer = (get_sys_time_usec() + SUPERBITRF_DATARECV_TIME) % 0xFFFFFFFF; @@ -506,10 +506,10 @@ void superbitrf_event(void) { superbitrf.packet_loss_bit = !superbitrf.packet_loss_bit; if(IS_DSM2(superbitrf.protocol) || SUPERBITRF_FORCE_DSM2) { tx_packet[0] = ~superbitrf.bind_mfg_id[2]; - tx_packet[1] = (~superbitrf.bind_mfg_id[3])+1+superbitrf.packet_loss_bit; + tx_packet[1] = ((~superbitrf.bind_mfg_id[3])+1+superbitrf.packet_loss_bit) % 0xFF; } else { tx_packet[0] = superbitrf.bind_mfg_id[2]; - tx_packet[1] = (superbitrf.bind_mfg_id[3])+1+superbitrf.packet_loss_bit; + 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); @@ -678,7 +678,7 @@ static inline void superbitrf_receive_packet_cb(bool_t error, uint8_t status, ui superbitrf.uplink_count++; // Check if it is a data loss packet - if(packet[1] != (~superbitrf.bind_mfg_id[3] + 1 + superbitrf.packet_loss_bit) && packet[1] != (superbitrf.bind_mfg_id[3] + 1 + superbitrf.packet_loss_bit)) + if(packet[1] != (~superbitrf.bind_mfg_id[3] + 1 + superbitrf.packet_loss_bit)%0xFF && packet[1] != (superbitrf.bind_mfg_id[3] + 1 + superbitrf.packet_loss_bit)%0xFF) superbitrf.packet_loss = TRUE; else superbitrf.packet_loss = FALSE; diff --git a/sw/airborne/subsystems/datalink/superbitrf.h b/sw/airborne/subsystems/datalink/superbitrf.h index 4312c0f3002..907cbb52228 100644 --- a/sw/airborne/subsystems/datalink/superbitrf.h +++ b/sw/airborne/subsystems/datalink/superbitrf.h @@ -35,7 +35,7 @@ /* The timings in microseconds */ #define SUPERBITRF_BIND_RECV_TIME 10000 /**< The time to wait for a bind packet on a channel in microseconds */ #define SUPERBITRF_SYNC_RECV_TIME 7000 /**< The time to wait for a sync packet on a channel in microseconds */ -#define SUPERBITRF_RECV_TIME 25000 /**< The time to wait for a transfer packet on a channel in microseconds */ +#define SUPERBITRF_RECV_TIME 22000 /**< The time to wait for a transfer packet on a channel in microseconds */ #define SUPERBITRF_DATAWAIT_TIME 100 /**< The time to wait after RC receive to send a data packet in microseconds */ #define SUPERBITRF_DATARECV_TIME 10000 /**< The time to wait for a data packet on a channel in microseconds */