Merge branch 'UNLEASHED' into 420

This commit is contained in:
RogueMaster
2022-10-20 16:06:52 -04:00
36 changed files with 3860 additions and 68 deletions

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,4.11,,
Version,+,4.13,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
@@ -1006,6 +1006,9 @@ Function,+,furi_hal_console_tx_with_new_line,void,"const uint8_t*, size_t"
Function,+,furi_hal_cortex_delay_us,void,uint32_t
Function,-,furi_hal_cortex_init_early,void,
Function,+,furi_hal_cortex_instructions_per_microsecond,uint32_t,
Function,+,furi_hal_cortex_timer_get,FuriHalCortexTimer,uint32_t
Function,+,furi_hal_cortex_timer_is_expired,_Bool,FuriHalCortexTimer
Function,+,furi_hal_cortex_timer_wait,void,FuriHalCortexTimer
Function,+,furi_hal_crypto_decrypt,_Bool,"const uint8_t*, uint8_t*, size_t"
Function,+,furi_hal_crypto_encrypt,_Bool,"const uint8_t*, uint8_t*, size_t"
Function,-,furi_hal_crypto_init,void,
@@ -2328,13 +2331,19 @@ Function,-,subghz_keystore_raw_encrypted_save,_Bool,"const char*, const char*, u
Function,-,subghz_keystore_raw_get_data,_Bool,"const char*, size_t, uint8_t*, size_t"
Function,-,subghz_keystore_save,_Bool,"SubGhzKeystore*, const char*, uint8_t*"
Function,+,subghz_protocol_blocks_add_bit,void,"SubGhzBlockDecoder*, uint8_t"
Function,+,subghz_protocol_blocks_crc16,uint16_t,"const uint8_t[], unsigned, uint16_t, uint16_t"
Function,+,subghz_protocol_blocks_crc16lsb,uint16_t,"const uint8_t[], unsigned, uint16_t, uint16_t"
Function,+,subghz_protocol_blocks_crc4,uint8_t,"const uint8_t[], unsigned, uint8_t, uint8_t"
Function,+,subghz_protocol_blocks_crc7,uint8_t,"const uint8_t[], unsigned, uint8_t, uint8_t"
Function,+,subghz_protocol_blocks_crc8,uint8_t,"const uint8_t[], unsigned, uint8_t, uint8_t"
Function,+,subghz_protocol_blocks_crc8le,uint8_t,"const uint8_t[], unsigned, uint8_t, uint8_t"
Function,+,subghz_protocol_blocks_get_bit_array,_Bool,"uint8_t[], size_t"
Function,+,subghz_protocol_blocks_get_hash_data,uint8_t,"SubGhzBlockDecoder*, size_t"
Function,+,subghz_protocol_blocks_get_parity,uint8_t,"uint64_t, uint8_t"
Function,+,subghz_protocol_blocks_get_upload,size_t,"uint8_t[], size_t, LevelDuration*, size_t, uint32_t"
Function,+,subghz_protocol_blocks_lfsr_digest16,uint16_t,"const uint8_t[], unsigned, uint16_t, uint16_t"
Function,+,subghz_protocol_blocks_lfsr_digest8,uint8_t,"const uint8_t[], unsigned, uint8_t, uint8_t"
Function,+,subghz_protocol_blocks_lfsr_digest8_reflect,uint8_t,"const uint8_t[], int, uint8_t, uint8_t"
Function,+,subghz_protocol_blocks_reverse_key,uint64_t,"uint64_t, uint8_t"
Function,+,subghz_protocol_blocks_set_bit_array,void,"_Bool, uint8_t[], size_t, size_t"
Function,-,subghz_protocol_decoder_base_deserialize,_Bool,"SubGhzProtocolDecoderBase*, FlipperFormat*"
1 entry status name type params
2 Version + 4.11 4.13
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
1006 Function + furi_hal_cortex_delay_us void uint32_t
1007 Function - furi_hal_cortex_init_early void
1008 Function + furi_hal_cortex_instructions_per_microsecond uint32_t
1009 Function + furi_hal_cortex_timer_get FuriHalCortexTimer uint32_t
1010 Function + furi_hal_cortex_timer_is_expired _Bool FuriHalCortexTimer
1011 Function + furi_hal_cortex_timer_wait void FuriHalCortexTimer
1012 Function + furi_hal_crypto_decrypt _Bool const uint8_t*, uint8_t*, size_t
1013 Function + furi_hal_crypto_encrypt _Bool const uint8_t*, uint8_t*, size_t
1014 Function - furi_hal_crypto_init void
2331 Function - subghz_keystore_raw_get_data _Bool const char*, size_t, uint8_t*, size_t
2332 Function - subghz_keystore_save _Bool SubGhzKeystore*, const char*, uint8_t*
2333 Function + subghz_protocol_blocks_add_bit void SubGhzBlockDecoder*, uint8_t
2334 Function + subghz_protocol_blocks_crc16 uint16_t const uint8_t[], unsigned, uint16_t, uint16_t
2335 Function + subghz_protocol_blocks_crc16lsb uint16_t const uint8_t[], unsigned, uint16_t, uint16_t
2336 Function + subghz_protocol_blocks_crc4 uint8_t const uint8_t[], unsigned, uint8_t, uint8_t
2337 Function + subghz_protocol_blocks_crc7 uint8_t const uint8_t[], unsigned, uint8_t, uint8_t
2338 Function + subghz_protocol_blocks_crc8 uint8_t const uint8_t[], unsigned, uint8_t, uint8_t
2339 Function + subghz_protocol_blocks_crc8le uint8_t const uint8_t[], unsigned, uint8_t, uint8_t
2340 Function + subghz_protocol_blocks_get_bit_array _Bool uint8_t[], size_t
2341 Function + subghz_protocol_blocks_get_hash_data uint8_t SubGhzBlockDecoder*, size_t
2342 Function + subghz_protocol_blocks_get_parity uint8_t uint64_t, uint8_t
2343 Function + subghz_protocol_blocks_get_upload size_t uint8_t[], size_t, LevelDuration*, size_t, uint32_t
2344 Function + subghz_protocol_blocks_lfsr_digest16 uint16_t const uint8_t[], unsigned, uint16_t, uint16_t
2345 Function + subghz_protocol_blocks_lfsr_digest8 uint8_t const uint8_t[], unsigned, uint8_t, uint8_t
2346 Function + subghz_protocol_blocks_lfsr_digest8_reflect uint8_t const uint8_t[], int, uint8_t, uint8_t
2347 Function + subghz_protocol_blocks_reverse_key uint64_t uint64_t, uint8_t
2348 Function + subghz_protocol_blocks_set_bit_array void _Bool, uint8_t[], size_t, size_t
2349 Function - subghz_protocol_decoder_base_deserialize _Bool SubGhzProtocolDecoderBase*, FlipperFormat*

View File

@@ -2,6 +2,8 @@
#include <stm32wbxx.h>
#define FURI_HAL_CORTEX_INSTRUCTIONS_PER_MICROSECOND (SystemCoreClock / 1000000)
void furi_hal_cortex_init_early() {
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
@@ -13,11 +15,26 @@ void furi_hal_cortex_init_early() {
void furi_hal_cortex_delay_us(uint32_t microseconds) {
uint32_t start = DWT->CYCCNT;
uint32_t time_ticks = SystemCoreClock / 1000000 * microseconds;
uint32_t time_ticks = FURI_HAL_CORTEX_INSTRUCTIONS_PER_MICROSECOND * microseconds;
while((DWT->CYCCNT - start) < time_ticks) {
};
}
uint32_t furi_hal_cortex_instructions_per_microsecond() {
return SystemCoreClock / 1000000;
return FURI_HAL_CORTEX_INSTRUCTIONS_PER_MICROSECOND;
}
FuriHalCortexTimer furi_hal_cortex_timer_get(uint32_t timeout_us) {
FuriHalCortexTimer cortex_timer = {0};
cortex_timer.start = DWT->CYCCNT;
cortex_timer.value = FURI_HAL_CORTEX_INSTRUCTIONS_PER_MICROSECOND * timeout_us;
return cortex_timer;
}
bool furi_hal_cortex_timer_is_expired(FuriHalCortexTimer cortex_timer) {
return !((DWT->CYCCNT - cortex_timer.start) < cortex_timer.value);
}
void furi_hal_cortex_timer_wait(FuriHalCortexTimer cortex_timer) {
while(!furi_hal_cortex_timer_is_expired(cortex_timer));
}

View File

@@ -1,6 +1,7 @@
#include <furi_hal_i2c.h>
#include <furi_hal_version.h>
#include <furi_hal_power.h>
#include <furi_hal_cortex.h>
#include <stm32wbxx_ll_i2c.h>
#include <stm32wbxx_ll_gpio.h>
@@ -60,11 +61,11 @@ bool furi_hal_i2c_tx(
furi_assert(timeout > 0);
bool ret = true;
uint32_t timeout_tick = furi_get_tick() + timeout;
FuriHalCortexTimer timer = furi_hal_cortex_timer_get(timeout * 1000);
do {
while(LL_I2C_IsActiveFlag_BUSY(handle->bus->i2c)) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
ret = false;
break;
}
@@ -89,7 +90,7 @@ bool furi_hal_i2c_tx(
size--;
}
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
ret = false;
break;
}
@@ -111,11 +112,11 @@ bool furi_hal_i2c_rx(
furi_assert(timeout > 0);
bool ret = true;
uint32_t timeout_tick = furi_get_tick() + timeout;
FuriHalCortexTimer timer = furi_hal_cortex_timer_get(timeout * 1000);
do {
while(LL_I2C_IsActiveFlag_BUSY(handle->bus->i2c)) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
ret = false;
break;
}
@@ -140,7 +141,7 @@ bool furi_hal_i2c_rx(
size--;
}
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
ret = false;
break;
}
@@ -175,11 +176,11 @@ bool furi_hal_i2c_is_device_ready(FuriHalI2cBusHandle* handle, uint8_t i2c_addr,
furi_assert(timeout > 0);
bool ret = true;
uint32_t timeout_tick = furi_get_tick() + timeout;
FuriHalCortexTimer timer = furi_hal_cortex_timer_get(timeout * 1000);
do {
while(LL_I2C_IsActiveFlag_BUSY(handle->bus->i2c)) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
return false;
}
}
@@ -190,14 +191,14 @@ bool furi_hal_i2c_is_device_ready(FuriHalI2cBusHandle* handle, uint8_t i2c_addr,
while((!LL_I2C_IsActiveFlag_NACK(handle->bus->i2c)) &&
(!LL_I2C_IsActiveFlag_STOP(handle->bus->i2c))) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
return false;
}
}
if(LL_I2C_IsActiveFlag_NACK(handle->bus->i2c)) {
while(!LL_I2C_IsActiveFlag_STOP(handle->bus->i2c)) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
return false;
}
}
@@ -214,7 +215,7 @@ bool furi_hal_i2c_is_device_ready(FuriHalI2cBusHandle* handle, uint8_t i2c_addr,
}
while(!LL_I2C_IsActiveFlag_STOP(handle->bus->i2c)) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
return false;
}
}
@@ -308,11 +309,11 @@ bool furi_hal_i2c_write_mem(
bool ret = true;
uint8_t size = len + 1;
uint32_t timeout_tick = furi_get_tick() + timeout;
FuriHalCortexTimer timer = furi_hal_cortex_timer_get(timeout * 1000);
do {
while(LL_I2C_IsActiveFlag_BUSY(handle->bus->i2c)) {
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
ret = false;
break;
}
@@ -341,7 +342,7 @@ bool furi_hal_i2c_write_mem(
size--;
}
if(furi_get_tick() >= timeout_tick) {
if(furi_hal_cortex_timer_is_expired(timer)) {
ret = false;
break;
}