@@ -88,14 +88,13 @@ static void __attribute__((unused)) MOULDKG_send_packet()
8888
8989static void __attribute__ ((unused)) MOULDKG_initialize_txid()
9090{
91- rx_tx_addr[0 ]=rx_tx_addr[3 ]; // Use RX_num;
91+ rx_tx_addr[0 ] = rx_tx_addr[3 ]; // Use RX_num;
92+
9293 #ifdef FORCE_MOULDKG_ORIGINAL_ID
9394 rx_tx_addr[0 ]=0x57 ;
9495 rx_tx_addr[1 ]=0x1B ;
9596 rx_tx_addr[2 ]=0xF8 ;
9697 #endif
97- // Are the frequencies constant??? If not where are they coming from???
98- memcpy (hopping_frequency,(uint8_t *)" \x0F\x1C\x39\x3C " , MOULDKG_RF_NUM_CHANNELS); // 15,28,57,60
9998}
10099
101100static void __attribute__ ((unused)) MOULDKG_RF_init()
@@ -114,23 +113,33 @@ uint16_t MOULDKG_callback()
114113 {
115114 // Example: TX: C=11 S=Y A= 4B 44 48 P(7)= C0 37 02 4F 00 00 00
116115 // RX: C=76 S=Y A= 4B 44 48 P(7)= 5A 37 02 4F 03 0D 8E
116+ // 03 0D 8E => RF channels 0F,1C,39,3C
117117 XN297_ReadPayload (packet_in, MOULDKG_BIND_PAYLOAD_SIZE);
118118 for (uint8_t i=0 ; i < MOULDKG_BIND_PAYLOAD_SIZE; i++)
119119 debug (" %02X " , packet_in[i]);
120120 debugln ();
121121 // Not sure if I should test packet_in[0]
122122 if (memcmp (&packet_in[1 ],&packet[1 ],3 )==0 )
123- {// TX ID match, use RX ID to transmit normal packets
123+ {// TX ID match
124+ // Use RX ID as address
124125 XN297_SetTXAddr (&packet_in[4 ], 3 );
125- XN297_SetTxRxMode (TXRX_OFF);
126+ // Calculate frequencies based on RX ID
127+ hopping_frequency[0 ] = 0x0C + (packet_in[4 ] & 0x0F );
128+ hopping_frequency[1 ] = 0x1C + (packet_in[4 ] >> 4 );
129+ hopping_frequency[2 ] = 0x2C + (packet_in[5 ] & 0x0F );
130+ hopping_frequency[3 ] = 0x3C + (packet_in[5 ] >> 4 );
131+ // Switch to normal mode
126132 BIND_DONE;
133+ XN297_SetTxRxMode (TXRX_OFF);
134+ phase = MOULDKG_DATA;
135+ break ;
127136 }
128137 }
129138 XN297_RFChannel (MOULDKG_TX_BIND_CHANNEL); // Set TX bind channel
130139 XN297_SetTxRxMode (TXRX_OFF);
131140 MOULDKG_send_packet ();
132141 phase++;
133- return 500 ;
142+ return 600 ;
134143 case MOULDKG_BINDRX:
135144 // Wait for the packet transmission to finish
136145 while (XN297_IsPacketSent ()==false );
@@ -139,7 +148,7 @@ uint16_t MOULDKG_callback()
139148 XN297_RFChannel (MOULDKG_RX_BIND_CHANNEL); // Set RX bind channel
140149 XN297_SetTxRxMode (RX_EN);
141150 phase = MOULDKG_BINDTX;
142- return MOULDKG_BIND_PACKET_PERIOD-500 ;
151+ return MOULDKG_BIND_PACKET_PERIOD-600 ;
143152 case MOULDKG_DATA:
144153 #ifdef MULTI_SYNC
145154 telemetry_set_input_sync (MOULDKG_PACKET_PERIOD);
@@ -156,6 +165,7 @@ void MOULDKG_init()
156165 MOULDKG_initialize_txid ();
157166 MOULDKG_RF_init ();
158167 bind_counter = MOULDKG_BIND_COUNT;
168+ phase = MOULDKG_BINDTX;
159169 packet_count = 0 ;
160170}
161171
0 commit comments