@@ -167,6 +167,7 @@ class ROM():
167167    MODEL_B9             =  0xB9 
168168    MODEL_B4_TCXO        =  0x04  # The TCXO model codes are only used here to select the correct firmware, 
169169    MODEL_B9_TCXO        =  0x09  # actual model codes in firmware is still 0xB4 and 0xB9. 
170+     
170171    PRODUCT_H32_V2       =  0xC0 
171172    MODEL_C4             =  0xC4 
172173    MODEL_C9             =  0xC9 
@@ -175,6 +176,9 @@ class ROM():
175176    MODEL_C5             =  0xC5 
176177    MODEL_CA             =  0xCA 
177178
179+     PRODUCT_H32_V4       =  0xC3 
180+     MODEL_C8             =  0xC8  # 868/915/923 MHz with PA 
181+ 
178182    PRODUCT_TBEAM        =  0xE0 
179183    MODEL_E4             =  0xE4 
180184    MODEL_E9             =  0xE9 
@@ -270,6 +274,7 @@ class ROM():
270274    ROM .PRODUCT_T32_21 : "LilyGO LoRa32 v2.1" ,
271275    ROM .PRODUCT_H32_V2 : "Heltec LoRa32 v2" ,
272276    ROM .PRODUCT_H32_V3 : "Heltec LoRa32 v3" ,
277+     ROM .PRODUCT_H32_V4 : "Heltec LoRa32 v4" ,
273278    ROM .PRODUCT_TECHO :  "LilyGO T-Echo" ,
274279    ROM .PRODUCT_RAK4631 : "RAK4631" ,
275280    ROM .PRODUCT_OPENCOM_XL : "openCom XL" ,
@@ -314,6 +319,7 @@ class ROM():
314319    0xC9 : [850000000 , 950000000 , 17 , "850 - 950 MHz" , "rnode_firmware_heltec32v2.zip" , "SX1276" ],
315320    0xC5 : [420000000 , 520000000 , 22 , "420 - 520 MHz" , "rnode_firmware_heltec32v3.zip" , "SX1268" ],
316321    0xCA : [850000000 , 950000000 , 22 , "850 - 950 MHz" , "rnode_firmware_heltec32v3.zip" , "SX1262" ],
322+     0xC8 : [850000000 , 950000000 , 22 , "850 - 950 MHz" , "rnode_firmware_heltec32v4pa.zip" , "SX1262" ],
317323    0xC6 : [420000000 , 520000000 , 22 , "420 - 520 MHz" , "rnode_firmware_heltec_t114.zip" , "SX1268" ],
318324    0xC7 : [850000000 , 950000000 , 22 , "850 - 950 MHz" , "rnode_firmware_heltec_t114.zip" , "SX1262" ],
319325    0xE4 : [420000000 , 520000000 , 17 , "420 - 520 MHz" , "rnode_firmware_tbeam.zip" , "SX1278" ],
@@ -1730,13 +1736,14 @@ def print_donation_block():
17301736            print ("[6]  LilyGO T-Beam" )
17311737            print ("[7]  Heltec LoRa32 v2" )
17321738            print ("[8]  Heltec LoRa32 v3" )
1733-             print ("[9]  LilyGO LoRa T3S3" )
1734-             print ("[10] RAK4631" )
1735-             print ("[11] LilyGo T-Echo" )
1736-             print ("[12] LilyGO T-Beam Supreme" )
1737-             print ("[13] LilyGO T-Deck" )
1738-             print ("[14] Heltec T114" )
1739-             print ("[15] Seeed XIAO ESP32S3 Wio-SX1262" )
1739+             print ("[9]  Heltec LoRa32 v4" )
1740+             print ("[10]  LilyGO LoRa T3S3" )
1741+             print ("[11] RAK4631" )
1742+             print ("[12] LilyGo T-Echo" )
1743+             print ("[13] LilyGO T-Beam Supreme" )
1744+             print ("[14] LilyGO T-Deck" )
1745+             print ("[15] Heltec T114" )
1746+             print ("[16] Seeed XIAO ESP32S3 Wio-SX1262" )
17401747            print ("" )
17411748            print ("---------------------------------------------------------------------------" )
17421749            print ("\n Enter the number that matches your device type:\n ? " , end = "" )
@@ -1745,7 +1752,7 @@ def print_donation_block():
17451752            try :
17461753                c_dev  =  int (input ())
17471754                c_mod  =  False 
1748-                 if  c_dev  <  1  or  c_dev  >  15 :
1755+                 if  c_dev  <  1  or  c_dev  >  16 :
17491756                    raise  ValueError ()
17501757                elif  c_dev  ==  1 :
17511758                    selected_product  =  ROM .PRODUCT_RNODE 
@@ -1782,7 +1789,7 @@ def print_donation_block():
17821789                    print ("who would like to experiment with it. Hit enter to continue." )
17831790                    print ("---------------------------------------------------------------------------" )
17841791                    input ()
1785-                 elif  c_dev  ==  12 :
1792+                 elif  c_dev  ==  13 :
17861793                    selected_product  =  ROM .PRODUCT_TBEAM_S_V1 
17871794                    clear ()
17881795                    print ("" )
@@ -1798,7 +1805,7 @@ def print_donation_block():
17981805                    print ("who would like to experiment with it. Hit enter to continue." )
17991806                    print ("---------------------------------------------------------------------------" )
18001807                    input ()
1801-                 elif  c_dev  ==  13 :
1808+                 elif  c_dev  ==  14 :
18021809                    selected_product  =  ROM .PRODUCT_TDECK 
18031810                    clear ()
18041811                    print ("" )
@@ -1873,7 +1880,7 @@ def print_donation_block():
18731880                    print ("who would like to experiment with it. Hit enter to continue." )
18741881                    print ("---------------------------------------------------------------------------" )
18751882                    input ()
1876-                 elif  c_dev  ==  9 :
1883+                 elif  c_dev  ==  10 :
18771884                    selected_product  =  ROM .PRODUCT_RNODE 
18781885                    c_mod  =  True 
18791886                    clear ()
@@ -1902,7 +1909,21 @@ def print_donation_block():
19021909                    print ("who would like to experiment with it. Hit enter to continue." )
19031910                    print ("---------------------------------------------------------------------------" )
19041911                    input ()
1905-                 elif  c_dev  ==  10 :
1912+                 elif  c_dev  ==  9 :
1913+                     selected_product  =  ROM .PRODUCT_H32_V4 
1914+                     clear ()
1915+                     print ("" )
1916+                     print ("---------------------------------------------------------------------------" )
1917+                     print ("                      Heltec LoRa32 v4 RNode Installer" )
1918+                     print ("" )
1919+                     print ("Important! Using RNode firmware on Heltec devices should currently be" )
1920+                     print ("considered experimental. It is not intended for production or critical use." )
1921+                     print ("" )
1922+                     print ("The currently supplied firmware is provided AS-IS as a courtesy to those" )
1923+                     print ("who would like to experiment with it. Hit enter to continue." )
1924+                     print ("---------------------------------------------------------------------------" )
1925+                     input ()
1926+                 elif  c_dev  ==  11 :
19061927                    selected_product  =  ROM .PRODUCT_RAK4631 
19071928                    clear ()
19081929                    print ("" )
@@ -1915,7 +1936,7 @@ def print_donation_block():
19151936                    print ("who would like to experiment with it. Hit enter to continue." )
19161937                    print ("---------------------------------------------------------------------------" )
19171938                    input ()
1918-                 elif  c_dev  ==  11 :
1939+                 elif  c_dev  ==  12 :
19191940                    selected_product  =  ROM .PRODUCT_TECHO 
19201941                    clear ()
19211942                    print ("" )
@@ -1928,7 +1949,7 @@ def print_donation_block():
19281949                    print ("who would like to experiment with it. Hit enter to continue." )
19291950                    print ("---------------------------------------------------------------------------" )
19301951                    input ()
1931-                 elif  c_dev  ==  14 :
1952+                 elif  c_dev  ==  15 :
19321953                    selected_product  =  ROM .PRODUCT_HELTEC_T114 
19331954                    clear ()
19341955                    print ("" )
@@ -1941,7 +1962,7 @@ def print_donation_block():
19411962                    print ("who would like to experiment with it. Hit enter to continue." )
19421963                    print ("---------------------------------------------------------------------------" )
19431964                    input ()
1944-                 elif  c_dev  ==  15 :
1965+                 elif  c_dev  ==  16 :
19451966                    selected_product  =  ROM .PRODUCT_XIAO_S3 
19461967                    clear ()
19471968                    print ("" )
@@ -2264,6 +2285,7 @@ def print_donation_block():
22642285                print ("[2] 868 MHz" )
22652286                print ("[3] 915 MHz" )
22662287                print ("[4] 923 MHz" )
2288+                 print ("\n ? " , end = "" )
22672289                try :
22682290                    c_model  =  int (input ())
22692291                    if  c_model  <  1  or  c_model  >  4 :
@@ -2278,13 +2300,32 @@ def print_donation_block():
22782300                    print ("That band does not exist, exiting now." )
22792301                    exit ()
22802302
2303+             elif  selected_product  ==  ROM .PRODUCT_H32_V4 :
2304+                 selected_mcu  =  ROM .MCU_ESP32 
2305+                 print ("\n What band is this Heltec LoRa32 V4 for?\n " )
2306+                 print ("[1] 868 MHz (28 dBm output)" )
2307+                 print ("[2] 915 MHz (28 dBm output)" )
2308+                 print ("[3] 923 MHz (28 dBm output)" )
2309+                 print ("\n ? " , end = "" )
2310+                 try :
2311+                     c_model  =  int (input ())
2312+                     if  c_model  <  1  or  c_model  >  3 :
2313+                         raise  ValueError ()
2314+                     else :
2315+                         selected_model  =  ROM .MODEL_C8 
2316+                         selected_platform  =  ROM .PLATFORM_ESP32 
2317+                 except  Exception  as  e :
2318+                     print ("That band does not exist, exiting now." )
2319+                     exit ()
2320+             
22812321            elif  selected_product  ==  ROM .PRODUCT_HELTEC_T114 :
22822322                selected_mcu  =  ROM .MCU_NRF52 
22832323                print ("\n What band is this Heltec T114 for?\n " )
22842324                print ("[1] 433 MHz" )
22852325                print ("[2] 868 MHz" )
22862326                print ("[3] 915 MHz" )
22872327                print ("[4] 923 MHz" )
2328+                 print ("\n ? " , end = "" )
22882329                try :
22892330                    c_model  =  int (input ())
22902331                    if  c_model  <  1  or  c_model  >  4 :
@@ -2304,6 +2345,7 @@ def print_donation_block():
23042345                print ("\n What band is this XIAO esp32s3 wio module for?\n " )
23052346                print ("[1] 433 MHz" )
23062347                print ("[2] 868 MHz" )
2348+                 print ("\n ? " , end = "" )
23072349                try :
23082350                    c_model  =  int (input ())
23092351                    if  c_model  <  1  or  c_model  >  2 :
@@ -2875,6 +2917,24 @@ def get_flasher_call(platform, fw_filename):
28752917                            "0x210000" ,UPD_DIR + "/" + selected_version + "/console_image.bin" ,
28762918                            "0x8000" ,  UPD_DIR + "/" + selected_version + "/rnode_firmware_heltec32v3.partitions" ,
28772919                        ]
2920+                     elif  fw_filename  ==  "rnode_firmware_heltec32v4pa.zip" :
2921+                         return  [
2922+                             sys .executable , flasher ,
2923+                             "--chip" , "esp32-s3" ,
2924+                             "--port" , args .port ,
2925+                             "--baud" , args .baud_flash ,
2926+                             "--before" , "default_reset" ,
2927+                             "--after" , "hard_reset" ,
2928+                             "write_flash" , "-z" ,
2929+                             "--flash_mode" , "dio" ,
2930+                             "--flash_freq" , "80m" ,
2931+                             "--flash_size" , "16MB" ,
2932+                             "0xe000" ,  UPD_DIR + "/" + selected_version + "/rnode_firmware_heltec32v4pa.boot_app0" ,
2933+                             "0x0" ,     UPD_DIR + "/" + selected_version + "/rnode_firmware_heltec32v4pa.bootloader" ,
2934+                             "0x10000" , UPD_DIR + "/" + selected_version + "/rnode_firmware_heltec32v4pa.bin" ,
2935+                             "0x210000" ,UPD_DIR + "/" + selected_version + "/console_image.bin" ,
2936+                             "0x8000" ,  UPD_DIR + "/" + selected_version + "/rnode_firmware_heltec32v4pa.partitions" ,
2937+                         ]
28782938                    elif  fw_filename  ==  "rnode_firmware_featheresp32.zip" :
28792939                        if  numeric_version  >=  1.55 :
28802940                            return  [
0 commit comments