@@ -1898,6 +1898,47 @@ STATIC mp_obj_t lora_join(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *
1898
1898
}
1899
1899
STATIC MP_DEFINE_CONST_FUN_OBJ_KW (lora_join_obj , 1 , lora_join );
1900
1900
1901
+ STATIC mp_obj_t lora_join_multicast_group (mp_uint_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
1902
+ static const mp_arg_t allowed_args [] = {
1903
+ { MP_QSTR_mcAddress , MP_ARG_REQUIRED | MP_ARG_INT , {.u_int = -1 } },
1904
+ { MP_QSTR_mcNwkKey , MP_ARG_REQUIRED | MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
1905
+ { MP_QSTR_mcAppKey , MP_ARG_REQUIRED | MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
1906
+ };
1907
+
1908
+ // parse args
1909
+ mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
1910
+ mp_arg_parse_all (n_args - 1 , pos_args + 1 , kw_args , MP_ARRAY_SIZE (args ), allowed_args , args );
1911
+
1912
+ mp_buffer_info_t bufinfo_0 , bufinfo_1 ;
1913
+ mp_get_buffer_raise (args [1 ].u_obj , & bufinfo_0 , MP_BUFFER_READ );
1914
+ mp_get_buffer_raise (args [2 ].u_obj , & bufinfo_1 , MP_BUFFER_READ );
1915
+
1916
+ MulticastParams_t * channelParam = m_new_obj (MulticastParams_t );
1917
+ channelParam -> Next = NULL ;
1918
+ channelParam -> DownLinkCounter = 0 ;
1919
+ channelParam -> Address = args [0 ].u_int ;
1920
+ memcpy (channelParam -> NwkSKey , bufinfo_0 .buf , sizeof (channelParam -> NwkSKey ));
1921
+ memcpy (channelParam -> AppSKey , bufinfo_1 .buf , sizeof (channelParam -> AppSKey ));
1922
+
1923
+ if (LoRaMacMulticastChannelLink (channelParam ) == LORAMAC_STATUS_OK ) {
1924
+ return mp_const_true ;
1925
+ }
1926
+
1927
+ return mp_const_false ;
1928
+ }
1929
+ STATIC MP_DEFINE_CONST_FUN_OBJ_KW (lora_join_multicast_group_obj , 0 , lora_join_multicast_group );
1930
+
1931
+ STATIC mp_obj_t lora_leave_multicast_group (mp_obj_t self_in , mp_obj_t multicast_addr_obj ) {
1932
+ uint32_t mcAddr = mp_obj_get_int (multicast_addr_obj );
1933
+ MulticastParams_t * channelParam = LoRaMacMulticastGetChannel (mcAddr );
1934
+ if (LoRaMacMulticastChannelUnlink (channelParam ) == LORAMAC_STATUS_OK ) {
1935
+ m_del_obj (MulticastParams_t , channelParam );
1936
+ return mp_const_true ;
1937
+ }
1938
+ return mp_const_false ;
1939
+ }
1940
+ STATIC MP_DEFINE_CONST_FUN_OBJ_2 (lora_leave_multicast_group_obj , lora_leave_multicast_group );
1941
+
1901
1942
STATIC mp_obj_t lora_compliance_test (mp_uint_t n_args , const mp_obj_t * args ) {
1902
1943
// get
1903
1944
if (n_args == 1 ) {
@@ -2301,29 +2342,31 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(lora_airtime_obj, lora_airtime);
2301
2342
2302
2343
STATIC const mp_map_elem_t lora_locals_dict_table [] = {
2303
2344
// instance methods
2304
- { MP_OBJ_NEW_QSTR (MP_QSTR_init ), (mp_obj_t )& lora_init_obj },
2305
- { MP_OBJ_NEW_QSTR (MP_QSTR_join ), (mp_obj_t )& lora_join_obj },
2306
- { MP_OBJ_NEW_QSTR (MP_QSTR_tx_power ), (mp_obj_t )& lora_tx_power_obj },
2307
- { MP_OBJ_NEW_QSTR (MP_QSTR_bandwidth ), (mp_obj_t )& lora_bandwidth_obj },
2308
- { MP_OBJ_NEW_QSTR (MP_QSTR_frequency ), (mp_obj_t )& lora_frequency_obj },
2309
- { MP_OBJ_NEW_QSTR (MP_QSTR_coding_rate ), (mp_obj_t )& lora_coding_rate_obj },
2310
- { MP_OBJ_NEW_QSTR (MP_QSTR_preamble ), (mp_obj_t )& lora_preamble_obj },
2311
- { MP_OBJ_NEW_QSTR (MP_QSTR_sf ), (mp_obj_t )& lora_sf_obj },
2312
- { MP_OBJ_NEW_QSTR (MP_QSTR_power_mode ), (mp_obj_t )& lora_power_mode_obj },
2313
- { MP_OBJ_NEW_QSTR (MP_QSTR_stats ), (mp_obj_t )& lora_stats_obj },
2314
- { MP_OBJ_NEW_QSTR (MP_QSTR_has_joined ), (mp_obj_t )& lora_has_joined_obj },
2315
- { MP_OBJ_NEW_QSTR (MP_QSTR_add_channel ), (mp_obj_t )& lora_add_channel_obj },
2316
- { MP_OBJ_NEW_QSTR (MP_QSTR_remove_channel ), (mp_obj_t )& lora_remove_channel_obj },
2317
- { MP_OBJ_NEW_QSTR (MP_QSTR_mac ), (mp_obj_t )& lora_mac_obj },
2318
- { MP_OBJ_NEW_QSTR (MP_QSTR_compliance_test ), (mp_obj_t )& lora_compliance_test_obj },
2319
- { MP_OBJ_NEW_QSTR (MP_QSTR_callback ), (mp_obj_t )& lora_callback_obj },
2320
- { MP_OBJ_NEW_QSTR (MP_QSTR_events ), (mp_obj_t )& lora_events_obj },
2321
- { MP_OBJ_NEW_QSTR (MP_QSTR_ischannel_free ), (mp_obj_t )& lora_ischannel_free_obj },
2322
- { MP_OBJ_NEW_QSTR (MP_QSTR_set_battery_level ), (mp_obj_t )& lora_set_battery_level_obj },
2323
- { MP_OBJ_NEW_QSTR (MP_QSTR_nvram_save ), (mp_obj_t )& lora_nvram_save_obj },
2324
- { MP_OBJ_NEW_QSTR (MP_QSTR_nvram_restore ), (mp_obj_t )& lora_nvram_restore_obj },
2325
- { MP_OBJ_NEW_QSTR (MP_QSTR_nvram_erase ), (mp_obj_t )& lora_nvram_erase_obj },
2326
- { MP_OBJ_NEW_QSTR (MP_QSTR_airtime ), (mp_obj_t )& lora_airtime_obj },
2345
+ { MP_OBJ_NEW_QSTR (MP_QSTR_init ), (mp_obj_t )& lora_init_obj },
2346
+ { MP_OBJ_NEW_QSTR (MP_QSTR_join ), (mp_obj_t )& lora_join_obj },
2347
+ { MP_OBJ_NEW_QSTR (MP_QSTR_join_multicast_group ), (mp_obj_t )& lora_join_multicast_group_obj },
2348
+ { MP_OBJ_NEW_QSTR (MP_QSTR_leave_multicast_group ), (mp_obj_t )& lora_leave_multicast_group_obj },
2349
+ { MP_OBJ_NEW_QSTR (MP_QSTR_tx_power ), (mp_obj_t )& lora_tx_power_obj },
2350
+ { MP_OBJ_NEW_QSTR (MP_QSTR_bandwidth ), (mp_obj_t )& lora_bandwidth_obj },
2351
+ { MP_OBJ_NEW_QSTR (MP_QSTR_frequency ), (mp_obj_t )& lora_frequency_obj },
2352
+ { MP_OBJ_NEW_QSTR (MP_QSTR_coding_rate ), (mp_obj_t )& lora_coding_rate_obj },
2353
+ { MP_OBJ_NEW_QSTR (MP_QSTR_preamble ), (mp_obj_t )& lora_preamble_obj },
2354
+ { MP_OBJ_NEW_QSTR (MP_QSTR_sf ), (mp_obj_t )& lora_sf_obj },
2355
+ { MP_OBJ_NEW_QSTR (MP_QSTR_power_mode ), (mp_obj_t )& lora_power_mode_obj },
2356
+ { MP_OBJ_NEW_QSTR (MP_QSTR_stats ), (mp_obj_t )& lora_stats_obj },
2357
+ { MP_OBJ_NEW_QSTR (MP_QSTR_has_joined ), (mp_obj_t )& lora_has_joined_obj },
2358
+ { MP_OBJ_NEW_QSTR (MP_QSTR_add_channel ), (mp_obj_t )& lora_add_channel_obj },
2359
+ { MP_OBJ_NEW_QSTR (MP_QSTR_remove_channel ), (mp_obj_t )& lora_remove_channel_obj },
2360
+ { MP_OBJ_NEW_QSTR (MP_QSTR_mac ), (mp_obj_t )& lora_mac_obj },
2361
+ { MP_OBJ_NEW_QSTR (MP_QSTR_compliance_test ), (mp_obj_t )& lora_compliance_test_obj },
2362
+ { MP_OBJ_NEW_QSTR (MP_QSTR_callback ), (mp_obj_t )& lora_callback_obj },
2363
+ { MP_OBJ_NEW_QSTR (MP_QSTR_events ), (mp_obj_t )& lora_events_obj },
2364
+ { MP_OBJ_NEW_QSTR (MP_QSTR_ischannel_free ), (mp_obj_t )& lora_ischannel_free_obj },
2365
+ { MP_OBJ_NEW_QSTR (MP_QSTR_set_battery_level ), (mp_obj_t )& lora_set_battery_level_obj },
2366
+ { MP_OBJ_NEW_QSTR (MP_QSTR_nvram_save ), (mp_obj_t )& lora_nvram_save_obj },
2367
+ { MP_OBJ_NEW_QSTR (MP_QSTR_nvram_restore ), (mp_obj_t )& lora_nvram_restore_obj },
2368
+ { MP_OBJ_NEW_QSTR (MP_QSTR_nvram_erase ), (mp_obj_t )& lora_nvram_erase_obj },
2369
+ { MP_OBJ_NEW_QSTR (MP_QSTR_airtime ), (mp_obj_t )& lora_airtime_obj },
2327
2370
2328
2371
#ifdef LORA_OPENTHREAD_ENABLED
2329
2372
{ MP_OBJ_NEW_QSTR (MP_QSTR_Mesh ), (mp_obj_t )& lora_mesh_type },
0 commit comments