[FL-1590] SubGhz: fix incorrect limits on frequency that were causing crashes #607
This commit is contained in:
		
							parent
							
								
									2313b948c6
								
							
						
					
					
						commit
						4c1ac2a13d
					
				| @ -5,17 +5,8 @@ | |||||||
| #include <stream_buffer.h> | #include <stream_buffer.h> | ||||||
| #include <lib/subghz/protocols/subghz_protocol.h> | #include <lib/subghz/protocols/subghz_protocol.h> | ||||||
| 
 | 
 | ||||||
| #define CC1101_FREQUENCY_RANGE_STR \ | #define SUBGHZ_FREQUENCY_RANGE_STR \ | ||||||
|     "300000000...348000000 or 387000000...464000000 or 779000000...928000000" |     "299999755...348000000 or 386999938...464000000 or 778999847...928000000" | ||||||
| 
 |  | ||||||
| bool subghz_check_frequency_range(uint32_t frequency) { |  | ||||||
|     if(!(frequency >= 300000000 && frequency <= 348000000) && |  | ||||||
|        !(frequency >= 387000000 && frequency <= 464000000) && |  | ||||||
|        !(frequency >= 779000000 && frequency <= 928000000)) { |  | ||||||
|         return false; |  | ||||||
|     } |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| void subghz_cli_init() { | void subghz_cli_init() { | ||||||
|     Cli* cli = furi_record_open("cli"); |     Cli* cli = furi_record_open("cli"); | ||||||
| @ -40,9 +31,9 @@ void subghz_cli_command_tx_carrier(Cli* cli, string_t args, void* context) { | |||||||
|             cli_print_usage("subghz_tx_carrier", "<Frequency in HZ>", string_get_cstr(args)); |             cli_print_usage("subghz_tx_carrier", "<Frequency in HZ>", string_get_cstr(args)); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if(!subghz_check_frequency_range(frequency)) { |         if(!api_hal_subghz_is_frequency_valid(frequency)) { | ||||||
|             printf( |             printf( | ||||||
|                 "Frequency must be in " CC1101_FREQUENCY_RANGE_STR " range, not %lu\r\n", |                 "Frequency must be in " SUBGHZ_FREQUENCY_RANGE_STR " range, not %lu\r\n", | ||||||
|                 frequency); |                 frequency); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| @ -77,9 +68,9 @@ void subghz_cli_command_rx_carrier(Cli* cli, string_t args, void* context) { | |||||||
|             cli_print_usage("subghz_tx_carrier", "<Frequency in HZ>", string_get_cstr(args)); |             cli_print_usage("subghz_tx_carrier", "<Frequency in HZ>", string_get_cstr(args)); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if(!subghz_check_frequency_range(frequency)) { |         if(!api_hal_subghz_is_frequency_valid(frequency)) { | ||||||
|             printf( |             printf( | ||||||
|                 "Frequency must be in " CC1101_FREQUENCY_RANGE_STR " range, not %lu\r\n", |                 "Frequency must be in " SUBGHZ_FREQUENCY_RANGE_STR " range, not %lu\r\n", | ||||||
|                 frequency); |                 frequency); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| @ -127,9 +118,9 @@ void subghz_cli_command_tx(Cli* cli, string_t args, void* context) { | |||||||
|                 string_get_cstr(args)); |                 string_get_cstr(args)); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if(!subghz_check_frequency_range(frequency)) { |         if(!api_hal_subghz_is_frequency_valid(frequency)) { | ||||||
|             printf( |             printf( | ||||||
|                 "Frequency must be in " CC1101_FREQUENCY_RANGE_STR " range, not %lu\r\n", |                 "Frequency must be in " SUBGHZ_FREQUENCY_RANGE_STR " range, not %lu\r\n", | ||||||
|                 frequency); |                 frequency); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
| @ -209,9 +200,9 @@ void subghz_cli_command_rx(Cli* cli, string_t args, void* context) { | |||||||
|             cli_print_usage("subghz_rx", "<Frequency in HZ>", string_get_cstr(args)); |             cli_print_usage("subghz_rx", "<Frequency in HZ>", string_get_cstr(args)); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|         if(!subghz_check_frequency_range(frequency)) { |         if(!api_hal_subghz_is_frequency_valid(frequency)) { | ||||||
|             printf( |             printf( | ||||||
|                 "Frequency must be in " CC1101_FREQUENCY_RANGE_STR " range, not %lu\r\n", |                 "Frequency must be in " SUBGHZ_FREQUENCY_RANGE_STR " range, not %lu\r\n", | ||||||
|                 frequency); |                 frequency); | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -104,6 +104,11 @@ void api_hal_subghz_tx(); | |||||||
| /** Get RSSI value in dBm */ | /** Get RSSI value in dBm */ | ||||||
| float api_hal_subghz_get_rssi(); | float api_hal_subghz_get_rssi(); | ||||||
| 
 | 
 | ||||||
|  | /** Check if frequency is in valid range
 | ||||||
|  |  * @return true if frequncy is valid, otherwise false | ||||||
|  |  */ | ||||||
|  | bool api_hal_subghz_is_frequency_valid(uint32_t value); | ||||||
|  | 
 | ||||||
| /** Set frequency and path
 | /** Set frequency and path
 | ||||||
|  * This function automatically selects antenna matching network |  * This function automatically selects antenna matching network | ||||||
|  * @param frequency in herz |  * @param frequency in herz | ||||||
|  | |||||||
| @ -242,13 +242,22 @@ float api_hal_subghz_get_rssi() { | |||||||
|     return rssi; |     return rssi; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | bool api_hal_subghz_is_frequency_valid(uint32_t value) { | ||||||
|  |     if(!(value >= 299999755 && value <= 348000335) && | ||||||
|  |        !(value >= 386999938 && value <= 464000000) && | ||||||
|  |        !(value >= 778999847 && value <= 928000000)) { | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| uint32_t api_hal_subghz_set_frequency_and_path(uint32_t value) { | uint32_t api_hal_subghz_set_frequency_and_path(uint32_t value) { | ||||||
|     value = api_hal_subghz_set_frequency(value); |     value = api_hal_subghz_set_frequency(value); | ||||||
|     if(value >= 300000000 && value <= 348000335) { |     if(value >= 299999755 && value <= 348000335) { | ||||||
|         api_hal_subghz_set_path(ApiHalSubGhzPath315); |         api_hal_subghz_set_path(ApiHalSubGhzPath315); | ||||||
|     } else if(value >= 387000000 && value <= 464000000) { |     } else if(value >= 386999938 && value <= 464000000) { | ||||||
|         api_hal_subghz_set_path(ApiHalSubGhzPath433); |         api_hal_subghz_set_path(ApiHalSubGhzPath433); | ||||||
|     } else if(value >= 779000000 && value <= 928000000) { |     } else if(value >= 778999847 && value <= 928000000) { | ||||||
|         api_hal_subghz_set_path(ApiHalSubGhzPath868); |         api_hal_subghz_set_path(ApiHalSubGhzPath868); | ||||||
|     } else { |     } else { | ||||||
|         furi_check(0); |         furi_check(0); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 あく
						あく