5454#include "lora/mac/region/RegionEU868.h"
5555#include "lora/mac/region/RegionCN470.h"
5656#include "lora/mac/region/RegionIN865.h"
57+ #include "lora/mac/region/RegionEU433.h"
5758
5859// openThread includes
5960#ifdef LORA_OPENTHREAD_ENABLED
@@ -1349,12 +1350,17 @@ static void lora_validate_frequency (uint32_t frequency) {
13491350 goto freq_error ;
13501351 }
13511352 break ;
1352- case LORAMAC_REGION_EU868 :
1353+ case LORAMAC_REGION_EU433 :
13531354 #if defined(LOPY4 )
1354- if (frequency < 410000000 || frequency > 870000000 ) {
1355+ if (frequency < 433000000 || frequency > 435000000 ) { // LoRa 433 - 434
1356+ goto freq_error ;
1357+ }
13551358 #else
1356- if ( frequency < 863000000 || frequency > 870000000 ) {
1359+ goto freq_error ;
13571360 #endif
1361+ break ;
1362+ case LORAMAC_REGION_EU868 :
1363+ if (frequency < 863000000 || frequency > 870000000 ) {
13581364 goto freq_error ;
13591365 }
13601366 break ;
@@ -1399,6 +1405,11 @@ static void lora_validate_channel (uint32_t index) {
13991405 goto channel_error ;
14001406 }
14011407 break ;
1408+ case LORAMAC_REGION_EU433 :
1409+ if (index >= EU433_MAX_NB_CHANNELS ) {
1410+ goto channel_error ;
1411+ }
1412+ break ;
14021413 case LORAMAC_REGION_IN865 :
14031414 if (index >= IN865_MAX_NB_CHANNELS ) {
14041415 goto channel_error ;
@@ -1425,6 +1436,7 @@ static bool lora_validate_data_rate (uint32_t data_rate) {
14251436 case LORAMAC_REGION_AS923 :
14261437 case LORAMAC_REGION_EU868 :
14271438 case LORAMAC_REGION_AU915 :
1439+ case LORAMAC_REGION_EU433 :
14281440 case LORAMAC_REGION_CN470 :
14291441 case LORAMAC_REGION_IN865 :
14301442 if (data_rate > DR_6 ) {
@@ -1477,7 +1489,11 @@ static void lora_validate_device_class (DeviceClass_t device_class) {
14771489static void lora_validate_region (LoRaMacRegion_t region ) {
14781490 if (region != LORAMAC_REGION_AS923 && region != LORAMAC_REGION_AU915
14791491 && region != LORAMAC_REGION_EU868 && region != LORAMAC_REGION_US915
1480- && region != LORAMAC_REGION_CN470 && region != LORAMAC_REGION_IN865 ) {
1492+ && region != LORAMAC_REGION_IN865
1493+ #if defined(LOPY4 )
1494+ & & region != LORAMAC_REGION_EU433 && region != LORAMAC_REGION_CN470
1495+ #endif
1496+ ) {
14811497 nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_ValueError , "invalid region %d" , region ));
14821498 }
14831499}
@@ -1698,6 +1714,9 @@ static mp_obj_t lora_init_helper(lora_obj_t *self, const mp_arg_val_t *args) {
16981714 case LORAMAC_REGION_EU868 :
16991715 cmd_data .info .init .frequency = 868000000 ;
17001716 break ;
1717+ case LORAMAC_REGION_EU433 :
1718+ cmd_data .info .init .frequency = 433175000 ;
1719+ break ;
17011720 case LORAMAC_REGION_CN470 :
17021721 cmd_data .info .init .frequency = 470000000 ;
17031722 case LORAMAC_REGION_IN865 :
@@ -1723,6 +1742,9 @@ static mp_obj_t lora_init_helper(lora_obj_t *self, const mp_arg_val_t *args) {
17231742 case LORAMAC_REGION_EU868 :
17241743 cmd_data .info .init .tx_power = 14 ;
17251744 break ;
1745+ case LORAMAC_REGION_EU433 :
1746+ cmd_data .info .init .tx_power = 12 ;
1747+ break ;
17261748 default :
17271749 break ;
17281750 }
@@ -1881,6 +1903,7 @@ STATIC mp_obj_t lora_join(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *
18811903 dr = DR_4 ;
18821904 break ;
18831905 case LORAMAC_REGION_CN470 :
1906+ case LORAMAC_REGION_EU433 :
18841907 case LORAMAC_REGION_EU868 :
18851908 case LORAMAC_REGION_IN865 :
18861909 dr = DR_5 ;
@@ -1913,6 +1936,7 @@ STATIC mp_obj_t lora_join(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *
19131936 goto dr_error ;
19141937 }
19151938 break ;
1939+ case LORAMAC_REGION_EU433 :
19161940 case LORAMAC_REGION_CN470 :
19171941 case LORAMAC_REGION_EU868 :
19181942 if (dr > DR_5 ) {
@@ -2460,6 +2484,7 @@ STATIC const mp_map_elem_t lora_locals_dict_table[] = {
24602484 { MP_OBJ_NEW_QSTR (MP_QSTR_AU915 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_AU915 ) },
24612485 { MP_OBJ_NEW_QSTR (MP_QSTR_EU868 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_EU868 ) },
24622486 { MP_OBJ_NEW_QSTR (MP_QSTR_US915 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_US915 ) },
2487+ { MP_OBJ_NEW_QSTR (MP_QSTR_EU433 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_EU433 ) },
24632488 { MP_OBJ_NEW_QSTR (MP_QSTR_CN470 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_CN470 ) },
24642489 { MP_OBJ_NEW_QSTR (MP_QSTR_IN865 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_IN865 ) },
24652490};
@@ -2507,6 +2532,7 @@ static int lora_socket_socket (mod_network_socket_obj_t *s, int *_errno) {
25072532 switch (lora_obj .region ) {
25082533 case LORAMAC_REGION_AS923 :
25092534 case LORAMAC_REGION_EU868 :
2535+ case LORAMAC_REGION_EU433 :
25102536 case LORAMAC_REGION_CN470 :
25112537 dr = DR_5 ;
25122538 break ;
0 commit comments