@@ -638,6 +638,19 @@ static int8_t ws_llc_mpx_init(mpx_class_t *mpx_class, int8_t interface_id)
638
638
return lowpan_adaptation_interface_mpx_register (interface_id , & mpx_class -> mpx_api , MPX_LOWPAN_ENC_USER_ID );
639
639
}
640
640
641
+ static void ws_llc_clean (llc_data_base_t * base )
642
+ {
643
+ //Clean Message queue's
644
+ mcps_purge_t purge_req ;
645
+ ns_list_foreach_safe (llc_message_t , message , & base -> llc_message_list ) {
646
+ purge_req .msduHandle = message -> msg_handle ;
647
+ llc_message_free (message , base );
648
+ base -> interface_ptr -> mac_api -> mcps_purge_req (base -> interface_ptr -> mac_api , & purge_req );
649
+
650
+ }
651
+ memset (& base -> ie_params , 0 , sizeof (llc_ie_params_t ));
652
+ }
653
+
641
654
642
655
int8_t ws_llc_create (struct protocol_interface_info_entry * interface , ws_asynch_ind * asynch_ind_cb , ws_asynch_confirm * asynch_cnf_cb )
643
656
{
@@ -667,21 +680,33 @@ int8_t ws_llc_create(struct protocol_interface_info_entry *interface, ws_asynch_
667
680
return 0 ;
668
681
}
669
682
670
- void ws_llc_reset (struct protocol_interface_info_entry * interface )
683
+ int8_t ws_llc_delete (struct protocol_interface_info_entry * interface )
671
684
{
672
685
llc_data_base_t * base = ws_llc_discover_by_interface (interface );
673
686
if (!base ) {
674
- return ;
687
+ return -1 ;
675
688
}
676
- //Clean Message queue's
677
- mcps_purge_t purge_req ;
678
- ns_list_foreach_safe (llc_message_t , message , & base -> llc_message_list ) {
679
- purge_req .msduHandle = message -> msg_handle ;
680
- llc_message_free (message , base );
681
- base -> interface_ptr -> mac_api -> mcps_purge_req (base -> interface_ptr -> mac_api , & purge_req );
682
689
690
+ ws_llc_clean (base );
691
+
692
+ ns_list_remove (& llc_data_base_list , base );
693
+ //Disable Mac extension
694
+ base -> interface_ptr -> mac_api -> mac_mcps_extension_enable (base -> interface_ptr -> mac_api , NULL , NULL );
695
+ //Disable Adaptation MPX
696
+ lowpan_adaptation_interface_mpx_register (base -> interface_ptr -> id , NULL , 0 );
697
+ ns_dyn_mem_free (base );
698
+ return 0 ;
699
+ }
700
+
701
+
702
+
703
+ void ws_llc_reset (struct protocol_interface_info_entry * interface )
704
+ {
705
+ llc_data_base_t * base = ws_llc_discover_by_interface (interface );
706
+ if (!base ) {
707
+ return ;
683
708
}
684
- memset ( & base -> ie_params , 0 , sizeof ( llc_ie_params_t ) );
709
+ ws_llc_clean ( base );
685
710
}
686
711
687
712
int8_t ws_llc_asynch_request (struct protocol_interface_info_entry * interface , asynch_request_t * request )
@@ -834,7 +859,7 @@ void ws_llc_set_broadcast_schecudule_info(struct protocol_interface_info_entry *
834
859
}
835
860
836
861
837
- void ws_llc_set_unitcast_schecudule_info (struct protocol_interface_info_entry * interface , uint8_t * schedule_info , uint16_t length )
862
+ void ws_llc_set_unicast_schecudule_info (struct protocol_interface_info_entry * interface , uint8_t * schedule_info , uint16_t length )
838
863
{
839
864
llc_data_base_t * base = ws_llc_discover_by_interface (interface );
840
865
if (!base ) {
0 commit comments