@@ -167,8 +167,7 @@ struct modem_cellular_data {
167167 /* Event dispatcher */
168168 struct k_work event_dispatch_work ;
169169 uint8_t event_buf [8 ];
170- struct ring_buf event_rb ;
171- struct k_mutex event_rb_lock ;
170+ struct k_pipe event_pipe ;
172171
173172 struct k_mutex api_lock ;
174173 struct modem_cellular_event_cb cb ;
@@ -723,26 +722,18 @@ static void modem_cellular_event_dispatch_handler(struct k_work *item)
723722 struct modem_cellular_data * data =
724723 CONTAINER_OF (item , struct modem_cellular_data , event_dispatch_work );
725724
726- uint8_t events [ sizeof ( data -> event_buf )] ;
727- uint8_t events_cnt ;
725+ enum modem_cellular_event event ;
726+ const size_t len = sizeof ( event ) ;
728727
729- k_mutex_lock (& data -> event_rb_lock , K_FOREVER );
730-
731- events_cnt = (uint8_t )ring_buf_get (& data -> event_rb , events , sizeof (data -> event_buf ));
732-
733- k_mutex_unlock (& data -> event_rb_lock );
734-
735- for (uint8_t i = 0 ; i < events_cnt ; i ++ ) {
736- modem_cellular_event_handler (data , (enum modem_cellular_event )events [i ]);
728+ while (k_pipe_read (& data -> event_pipe , (uint8_t * )& event , len , K_NO_WAIT ) == len ) {
729+ modem_cellular_event_handler (data , (enum modem_cellular_event )event );
737730 }
738731}
739732
740733static void modem_cellular_delegate_event (struct modem_cellular_data * data ,
741734 enum modem_cellular_event evt )
742735{
743- k_mutex_lock (& data -> event_rb_lock , K_FOREVER );
744- ring_buf_put (& data -> event_rb , (uint8_t * )& evt , 1 );
745- k_mutex_unlock (& data -> event_rb_lock );
736+ k_pipe_write (& data -> event_pipe , (const uint8_t * )& evt , sizeof (evt ), K_NO_WAIT );
746737 k_work_submit (& data -> event_dispatch_work );
747738}
748739
@@ -2196,7 +2187,7 @@ static int modem_cellular_init(const struct device *dev)
21962187 k_mutex_init (& data -> api_lock );
21972188 k_work_init_delayable (& data -> timeout_work , modem_cellular_timeout_handler );
21982189 k_work_init (& data -> event_dispatch_work , modem_cellular_event_dispatch_handler );
2199- ring_buf_init (& data -> event_rb , sizeof ( data -> event_buf ), data -> event_buf );
2190+ k_pipe_init (& data -> event_pipe , data -> event_buf , sizeof ( data -> event_buf ) );
22002191
22012192 k_sem_init (& data -> suspended_sem , 0 , 1 );
22022193
0 commit comments