5252#include "lora/mac/region/RegionUS915.h"
5353#include "lora/mac/region/RegionUS915-Hybrid.h"
5454#include "lora/mac/region/RegionEU868.h"
55+ #include "lora/mac/region/RegionCN470.h"
56+ #include "lora/mac/region/RegionIN865.h"
5557
5658// openThread includes
5759#ifdef LORA_OPENTHREAD_ENABLED
@@ -1317,6 +1319,20 @@ static void lora_validate_frequency (uint32_t frequency) {
13171319 goto freq_error ;
13181320 }
13191321 break ;
1322+ case LORAMAC_REGION_CN470 :
1323+ #if defined(LOPY4 )
1324+ if (frequency < 470000000 || frequency > 510000000 ) {
1325+ goto freq_error ;
1326+ }
1327+ #else
1328+ goto freq_error ;
1329+ #endif
1330+ break ;
1331+ case LORAMAC_REGION_IN865 :
1332+ if (frequency < 865000000 || frequency > 867000000 ) {
1333+ goto freq_error ;
1334+ }
1335+ break ;
13201336 case LORAMAC_REGION_EU868 :
13211337 #if defined(LOPY4 )
13221338 if (frequency < 410000000 || frequency > 870000000 ) {
@@ -1362,6 +1378,16 @@ static void lora_validate_channel (uint32_t index) {
13621378 goto channel_error ;
13631379 }
13641380 break ;
1381+ case LORAMAC_REGION_CN470 :
1382+ if (index >= CN470_MAX_NB_CHANNELS ) {
1383+ goto channel_error ;
1384+ }
1385+ break ;
1386+ case LORAMAC_REGION_IN865 :
1387+ if (index >= IN865_MAX_NB_CHANNELS ) {
1388+ goto channel_error ;
1389+ }
1390+ break ;
13651391 default :
13661392 break ;
13671393 }
@@ -1383,6 +1409,8 @@ static bool lora_validate_data_rate (uint32_t data_rate) {
13831409 case LORAMAC_REGION_AS923 :
13841410 case LORAMAC_REGION_EU868 :
13851411 case LORAMAC_REGION_AU915 :
1412+ case LORAMAC_REGION_CN470 :
1413+ case LORAMAC_REGION_IN865 :
13861414 if (data_rate > DR_6 ) {
13871415 return false;
13881416 }
@@ -1432,7 +1460,8 @@ static void lora_validate_device_class (DeviceClass_t device_class) {
14321460
14331461static void lora_validate_region (LoRaMacRegion_t region ) {
14341462 if (region != LORAMAC_REGION_AS923 && region != LORAMAC_REGION_AU915
1435- && region != LORAMAC_REGION_EU868 && region != LORAMAC_REGION_US915 ) {
1463+ && region != LORAMAC_REGION_EU868 && region != LORAMAC_REGION_US915
1464+ && region != LORAMAC_REGION_CN470 && region != LORAMAC_REGION_IN865 ) {
14361465 nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_ValueError , "invalid region %d" , region ));
14371466 }
14381467}
@@ -1653,6 +1682,10 @@ static mp_obj_t lora_init_helper(lora_obj_t *self, const mp_arg_val_t *args) {
16531682 case LORAMAC_REGION_EU868 :
16541683 cmd_data .info .init .frequency = 868000000 ;
16551684 break ;
1685+ case LORAMAC_REGION_CN470 :
1686+ cmd_data .info .init .frequency = 470000000 ;
1687+ case LORAMAC_REGION_IN865 :
1688+ cmd_data .info .init .frequency = 865000000 ;
16561689 default :
16571690 break ;
16581691 }
@@ -1666,9 +1699,11 @@ static mp_obj_t lora_init_helper(lora_obj_t *self, const mp_arg_val_t *args) {
16661699 case LORAMAC_REGION_AS923 :
16671700 case LORAMAC_REGION_AU915 :
16681701 case LORAMAC_REGION_US915 :
1702+ case LORAMAC_REGION_IN865 :
16691703 case LORAMAC_REGION_US915_HYBRID :
16701704 cmd_data .info .init .tx_power = 20 ;
16711705 break ;
1706+ case LORAMAC_REGION_CN470 :
16721707 case LORAMAC_REGION_EU868 :
16731708 cmd_data .info .init .tx_power = 14 ;
16741709 break ;
@@ -1829,7 +1864,9 @@ STATIC mp_obj_t lora_join(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *
18291864 case LORAMAC_REGION_US915_HYBRID :
18301865 dr = DR_4 ;
18311866 break ;
1867+ case LORAMAC_REGION_CN470 :
18321868 case LORAMAC_REGION_EU868 :
1869+ case LORAMAC_REGION_IN865 :
18331870 dr = DR_5 ;
18341871 break ;
18351872 default :
@@ -1860,6 +1897,7 @@ STATIC mp_obj_t lora_join(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *
18601897 goto dr_error ;
18611898 }
18621899 break ;
1900+ case LORAMAC_REGION_CN470 :
18631901 case LORAMAC_REGION_EU868 :
18641902 if (dr > DR_5 ) {
18651903 goto dr_error ;
@@ -2406,6 +2444,8 @@ STATIC const mp_map_elem_t lora_locals_dict_table[] = {
24062444 { MP_OBJ_NEW_QSTR (MP_QSTR_AU915 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_AU915 ) },
24072445 { MP_OBJ_NEW_QSTR (MP_QSTR_EU868 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_EU868 ) },
24082446 { MP_OBJ_NEW_QSTR (MP_QSTR_US915 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_US915 ) },
2447+ { MP_OBJ_NEW_QSTR (MP_QSTR_CN470 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_CN470 ) },
2448+ { MP_OBJ_NEW_QSTR (MP_QSTR_IN865 ), MP_OBJ_NEW_SMALL_INT (LORAMAC_REGION_IN865 ) },
24092449};
24102450
24112451STATIC MP_DEFINE_CONST_DICT (lora_locals_dict , lora_locals_dict_table );
@@ -2451,6 +2491,7 @@ static int lora_socket_socket (mod_network_socket_obj_t *s, int *_errno) {
24512491 switch (lora_obj .region ) {
24522492 case LORAMAC_REGION_AS923 :
24532493 case LORAMAC_REGION_EU868 :
2494+ case LORAMAC_REGION_CN470 :
24542495 dr = DR_5 ;
24552496 break ;
24562497 case LORAMAC_REGION_AU915 :
0 commit comments