@@ -148,6 +148,7 @@ int32_t PIOS_DBus_Init(uint32_t *dbus_id,
148148 * dbus_id = (uint32_t )dbus_dev ;
149149
150150 /* Set rest of the parameters and enable */
151+ // there is one USART_Init before
151152 if (driver -> set_config ) {
152153 driver -> set_config (lower_id , PIOS_COM_Word_length_8b , PIOS_COM_Parity_Even , PIOS_COM_StopBits_1 , PIOS_DBUS_BAUD_RATE );
153154 }
@@ -242,7 +243,7 @@ static uint8_t PIOS_DBus_ChannelDataValid(struct pios_dbus_state *state) {
242243 }
243244 ch [5 ] = DBUS_SW_DOWN ; //sw
244245 ch [6 ] = DBUS_SW_DOWN ;
245- for (uint8_t i = 0 ; i < 6 ; i ++ ) { // mouse * 5 + key * 1
246+ for (uint8_t i = 7 ; i < 13 ; i ++ ) { // mouse * 5 + key * 1
246247 ch [i ] = 0 ;
247248 }
248249 return 0 ; // invalid
@@ -256,13 +257,23 @@ static uint16_t PIOS_DBus_RxInCallback(uint32_t context,
256257 uint16_t * headroom ,
257258 bool * need_yield )
258259{
260+ if (buf_len != DBUS_FRAME_LENGTH ) {
261+ return 0 ;
262+ }
259263 struct pios_dbus_dev * dbus_dev = (struct pios_dbus_dev * )context ;
260264 bool valid = PIOS_DBus_Validate (dbus_dev );
261265 PIOS_Assert (valid );
262266 struct pios_dbus_state * state = & (dbus_dev -> state );
267+ for (auto i = 0 ; i < buf_len ; i ++ ) {
268+ state -> received_data [i ] = buf [i ];
269+ }
263270 PIOS_DBus_UnrollChannels (state );
271+ volatile uint16_t ch [16 ];
272+ for (auto i = 0 ; i < 13 ; i ++ ) {
273+ ch [i ] = state -> channel_data [i ];
274+ }
264275 if (!PIOS_DBus_ChannelDataValid (state )) {
265- PIOS_USART_DMA_Reinit (context );
276+ // PIOS_USART_DMA_Reinit(context);
266277 return 0 ;
267278 }
268279 /* We never need a yield */
0 commit comments