mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-17 04:34:44 -07:00
Merge branch 'UNLEASHED' into 420
This commit is contained in:
@@ -102,8 +102,8 @@ static bool subghz_tx(SubGhz* subghz, uint32_t frequency) {
|
||||
furi_assert(subghz->txrx->txrx_state != SubGhzTxRxStateSleep);
|
||||
furi_hal_subghz_idle();
|
||||
furi_hal_subghz_set_frequency_and_path(frequency);
|
||||
furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
||||
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
|
||||
furi_hal_gpio_write(&gpio_cc1101_g0, true);
|
||||
bool ret = furi_hal_subghz_tx();
|
||||
subghz->txrx->txrx_state = SubGhzTxRxStateTx;
|
||||
return ret;
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
#define MAX_HISTORY 4
|
||||
|
||||
static const uint32_t subghz_frequency_list[] = {
|
||||
300000000, 302757000, 303875000, 304250000, 307000000, 307500000, 307800000,
|
||||
309000000, 310000000, 312000000, 312100000, 313000000, 313850000, 314000000,
|
||||
314350000, 315000000, 318000000, 345000000, 348000000, 387000000, 390000000,
|
||||
418000000, 433075000, 433220000, 433420000, 433657070, 433889000, 433920000,
|
||||
434176948, 434420000, 434775000, 438900000, 464000000, 779000000, 868350000,
|
||||
868400000, 868950000, 906400000, 915000000, 925000000, 928000000};
|
||||
300000000, 302757000, 303875000, 304250000, 307000000, 307500000, 307800000, 309000000,
|
||||
310000000, 312000000, 312100000, 313000000, 313850000, 314000000, 314350000, 315000000,
|
||||
318000000, 330000000, 345000000, 348000000, 387000000, 390000000, 418000000, 433075000,
|
||||
433220000, 433420000, 433657070, 433889000, 433920000, 434176948, 434420000, 434775000,
|
||||
438900000, 464000000, 779000000, 868350000, 868400000, 868800000, 868950000, 906400000,
|
||||
915000000, 925000000, 928000000};
|
||||
|
||||
typedef enum {
|
||||
SubGhzFrequencyAnalyzerStatusIDLE,
|
||||
|
||||
@@ -626,9 +626,10 @@ static bool unirfremix_send_sub(UniRFRemix* app, FlipperFormat* fff_data) {
|
||||
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeInput, GpioPullNo, GpioSpeedLow);
|
||||
|
||||
furi_hal_subghz_idle();
|
||||
|
||||
furi_hal_subghz_set_frequency_and_path(app->txpreset->frequency);
|
||||
furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
||||
furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
|
||||
furi_hal_gpio_write(&gpio_cc1101_g0, true);
|
||||
|
||||
if(!furi_hal_subghz_tx()) {
|
||||
FURI_LOG_E(TAG, "Sending not allowed");
|
||||
|
||||
@@ -27,6 +27,7 @@ Frequency: 314000000
|
||||
Frequency: 314350000
|
||||
Frequency: 315000000
|
||||
Frequency: 318000000
|
||||
Frequency: 330000000
|
||||
Frequency: 345000000
|
||||
Frequency: 348000000
|
||||
Frequency: 387000000
|
||||
|
||||
@@ -2332,21 +2332,22 @@ Function,-,subghz_keystore_raw_get_data,_Bool,"const char*, size_t, uint8_t*, si
|
||||
Function,-,subghz_keystore_save,_Bool,"SubGhzKeystore*, const char*, uint8_t*"
|
||||
Function,+,subghz_protocol_blocks_add_bit,void,"SubGhzBlockDecoder*, uint8_t"
|
||||
Function,+,subghz_protocol_blocks_add_bytes,uint8_t,"const uint8_t[], size_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_add_to_128_bit,void,"SubGhzBlockDecoder*, uint8_t, uint64_t*"
|
||||
Function,+,subghz_protocol_blocks_crc16,uint16_t,"const uint8_t[], size_t, uint16_t, uint16_t"
|
||||
Function,+,subghz_protocol_blocks_crc16lsb,uint16_t,"const uint8_t[], size_t, uint16_t, uint16_t"
|
||||
Function,+,subghz_protocol_blocks_crc4,uint8_t,"const uint8_t[], size_t, uint8_t, uint8_t"
|
||||
Function,+,subghz_protocol_blocks_crc7,uint8_t,"const uint8_t[], size_t, uint8_t, uint8_t"
|
||||
Function,+,subghz_protocol_blocks_crc8,uint8_t,"const uint8_t[], size_t, uint8_t, uint8_t"
|
||||
Function,+,subghz_protocol_blocks_crc8le,uint8_t,"const uint8_t[], size_t, 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_parity8,int,uint8_t
|
||||
Function,+,subghz_protocol_blocks_parity_bytes,int,"const uint8_t[], size_t"
|
||||
Function,+,subghz_protocol_blocks_lfsr_digest16,uint16_t,"const uint8_t[], size_t, uint16_t, uint16_t"
|
||||
Function,+,subghz_protocol_blocks_lfsr_digest8,uint8_t,"const uint8_t[], size_t, uint8_t, uint8_t"
|
||||
Function,+,subghz_protocol_blocks_lfsr_digest8_reflect,uint8_t,"const uint8_t[], size_t, uint8_t, uint8_t"
|
||||
Function,+,subghz_protocol_blocks_parity8,uint8_t,uint8_t
|
||||
Function,+,subghz_protocol_blocks_parity_bytes,uint8_t,"const uint8_t[], size_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_blocks_xor_bytes,uint8_t,"const uint8_t[], size_t"
|
||||
|
||||
|
0
firmware/targets/f7/ble_glue/dev_info_service.c
Executable file → Normal file
0
firmware/targets/f7/ble_glue/dev_info_service.c
Executable file → Normal file
@@ -36,5 +36,6 @@ bool furi_hal_cortex_timer_is_expired(FuriHalCortexTimer cortex_timer) {
|
||||
}
|
||||
|
||||
void furi_hal_cortex_timer_wait(FuriHalCortexTimer cortex_timer) {
|
||||
while(!furi_hal_cortex_timer_is_expired(cortex_timer));
|
||||
while(!furi_hal_cortex_timer_is_expired(cortex_timer))
|
||||
;
|
||||
}
|
||||
@@ -111,7 +111,7 @@ bool furi_hal_nfc_is_busy();
|
||||
*
|
||||
* @return true if initialized
|
||||
*/
|
||||
bool furi_hal_nfc_is_init();
|
||||
bool furi_hal_nfc_is_init();
|
||||
|
||||
/** NFC field on
|
||||
*/
|
||||
@@ -234,7 +234,6 @@ void furi_hal_nfc_sleep();
|
||||
|
||||
void furi_hal_nfc_stop();
|
||||
|
||||
|
||||
/* Low level transport API, use it to implement your own transport layers */
|
||||
|
||||
#define furi_hal_nfc_ll_ms2fc rfalConvMsTo1fc
|
||||
@@ -250,7 +249,8 @@ typedef enum {
|
||||
FuriHalNfcReturnBusy = 2, /*!< device or resource busy */
|
||||
FuriHalNfcReturnIo = 3, /*!< generic IO error */
|
||||
FuriHalNfcReturnTimeout = 4, /*!< error due to timeout */
|
||||
FuriHalNfcReturnRequest = 5, /*!< invalid request or requested function can't be executed at the moment */
|
||||
FuriHalNfcReturnRequest =
|
||||
5, /*!< invalid request or requested function can't be executed at the moment */
|
||||
FuriHalNfcReturnNomsg = 6, /*!< No message of desired type */
|
||||
FuriHalNfcReturnParam = 7, /*!< Parameter error */
|
||||
FuriHalNfcReturnSystem = 8, /*!< System error */
|
||||
@@ -261,20 +261,23 @@ typedef enum {
|
||||
FuriHalNfcReturnAgain = 13, /*!< Call again */
|
||||
FuriHalNfcReturnMemCorrupt = 14, /*!< memory corruption */
|
||||
FuriHalNfcReturnNotImplemented = 15, /*!< not implemented */
|
||||
FuriHalNfcReturnPcCorrupt = 16, /*!< Program Counter has been manipulated or spike/noise trigger illegal operation */
|
||||
FuriHalNfcReturnPcCorrupt =
|
||||
16, /*!< Program Counter has been manipulated or spike/noise trigger illegal operation */
|
||||
FuriHalNfcReturnSend = 17, /*!< error sending*/
|
||||
FuriHalNfcReturnIgnore = 18, /*!< indicates error detected but to be ignored */
|
||||
FuriHalNfcReturnSemantic = 19, /*!< indicates error in state machine (unexpected cmd) */
|
||||
FuriHalNfcReturnSyntax = 20, /*!< indicates error in state machine (unknown cmd) */
|
||||
FuriHalNfcReturnCrc = 21, /*!< crc error */
|
||||
FuriHalNfcReturnNotfound = 22, /*!< transponder not found */
|
||||
FuriHalNfcReturnNotunique = 23, /*!< transponder not unique - more than one transponder in field */
|
||||
FuriHalNfcReturnNotunique =
|
||||
23, /*!< transponder not unique - more than one transponder in field */
|
||||
FuriHalNfcReturnNotsupp = 24, /*!< requested operation not supported */
|
||||
FuriHalNfcReturnWrite = 25, /*!< write error */
|
||||
FuriHalNfcReturnFifo = 26, /*!< fifo over or underflow error */
|
||||
FuriHalNfcReturnPar = 27, /*!< parity error */
|
||||
FuriHalNfcReturnDone = 28, /*!< transfer has already finished */
|
||||
FuriHalNfcReturnRfCollision = 29, /*!< collision error (Bit Collision or during RF Collision avoidance ) */
|
||||
FuriHalNfcReturnRfCollision =
|
||||
29, /*!< collision error (Bit Collision or during RF Collision avoidance ) */
|
||||
FuriHalNfcReturnHwOverrun = 30, /*!< lost one or more received bytes */
|
||||
FuriHalNfcReturnReleaseReq = 31, /*!< device requested release */
|
||||
FuriHalNfcReturnSleepReq = 32, /*!< device requested sleep */
|
||||
@@ -282,7 +285,8 @@ typedef enum {
|
||||
FuriHalNfcReturnMaxReruns = 34, /*!< blocking procedure reached maximum runs */
|
||||
FuriHalNfcReturnDisabled = 35, /*!< operation aborted due to disabled configuration */
|
||||
FuriHalNfcReturnHwMismatch = 36, /*!< expected hw do not match */
|
||||
FuriHalNfcReturnLinkLoss = 37, /*!< Other device's field didn't behave as expected: turned off by Initiator in Passive mode, or AP2P did not turn on field */
|
||||
FuriHalNfcReturnLinkLoss =
|
||||
37, /*!< Other device's field didn't behave as expected: turned off by Initiator in Passive mode, or AP2P did not turn on field */
|
||||
FuriHalNfcReturnInvalidHandle = 38, /*!< invalid or not initalized device handle */
|
||||
FuriHalNfcReturnIncompleteByte = 40, /*!< Incomplete byte rcvd */
|
||||
FuriHalNfcReturnIncompleteByte01 = 41, /*!< Incomplete byte rcvd - 1 bit */
|
||||
@@ -321,12 +325,14 @@ typedef enum {
|
||||
FuriHalNfcBitrate6780 = 6, /*!< Bit Rate 6780 kbit/s (fc/2) */
|
||||
FuriHalNfcBitrate13560 = 7, /*!< Bit Rate 13560 kbit/s (fc) */
|
||||
FuriHalNfcBitrate52p97 = 0xEB, /*!< Bit Rate 52.97 kbit/s (fc/256) Fast Mode VICC->VCD */
|
||||
FuriHalNfcBitrate26p48 = 0xEC, /*!< Bit Rate 26,48 kbit/s (fc/512) NFCV VICC->VCD & VCD->VICC 1of4 */
|
||||
FuriHalNfcBitrate26p48 =
|
||||
0xEC, /*!< Bit Rate 26,48 kbit/s (fc/512) NFCV VICC->VCD & VCD->VICC 1of4 */
|
||||
FuriHalNfcBitrate1p66 = 0xED, /*!< Bit Rate 1,66 kbit/s (fc/8192) NFCV VCD->VICC 1of256 */
|
||||
FuriHalNfcBitrateKeep = 0xFF /*!< Value indicating to keep the same previous bit rate */
|
||||
} FuriHalNfcBitrate;
|
||||
|
||||
FuriHalNfcReturn furi_hal_nfc_ll_set_mode(FuriHalNfcMode mode, FuriHalNfcBitrate txBR, FuriHalNfcBitrate rxBR);
|
||||
FuriHalNfcReturn
|
||||
furi_hal_nfc_ll_set_mode(FuriHalNfcMode mode, FuriHalNfcBitrate txBR, FuriHalNfcBitrate rxBR);
|
||||
|
||||
#define FURI_HAL_NFC_LL_GT_NFCA furi_hal_nfc_ll_ms2fc(5U) /*!< GTA Digital 2.0 6.10.4.1 & B.2 */
|
||||
#define FURI_HAL_NFC_LL_GT_NFCB furi_hal_nfc_ll_ms2fc(5U) /*!< GTB Digital 2.0 7.9.4.1 & B.3 */
|
||||
@@ -334,40 +340,57 @@ FuriHalNfcReturn furi_hal_nfc_ll_set_mode(FuriHalNfcMode mode, FuriHalNfcBitrate
|
||||
#define FURI_HAL_NFC_LL_GT_NFCV furi_hal_nfc_ll_ms2fc(5U) /*!< GTV Digital 2.0 9.7.5.1 & B.5 */
|
||||
#define FURI_HAL_NFC_LL_GT_PICOPASS furi_hal_nfc_ll_ms2fc(1U) /*!< GT Picopass */
|
||||
#define FURI_HAL_NFC_LL_GT_AP2P furi_hal_nfc_ll_ms2fc(5U) /*!< TIRFG Ecma 340 11.1.1 */
|
||||
#define FURI_HAL_NFC_LL_GT_AP2P_ADJUSTED furi_hal_nfc_ll_ms2fc(5U + 25U) /*!< Adjusted GT for greater interoperability (Sony XPERIA P, Nokia N9, Huawei P2) */
|
||||
#define FURI_HAL_NFC_LL_GT_AP2P_ADJUSTED \
|
||||
furi_hal_nfc_ll_ms2fc( \
|
||||
5U + \
|
||||
25U) /*!< Adjusted GT for greater interoperability (Sony XPERIA P, Nokia N9, Huawei P2) */
|
||||
|
||||
void furi_hal_nfc_ll_set_guard_time(uint32_t cycles);
|
||||
|
||||
typedef enum {
|
||||
FuriHalNfcErrorHandlingNone = 0, /*!< No special error handling will be performed */
|
||||
FuriHalNfcErrorHandlingNfc = 1, /*!< Error handling set to perform as NFC compliant device */
|
||||
FuriHalNfcErrorHandlingEmvco = 2 /*!< Error handling set to perform as EMVCo compliant device */
|
||||
FuriHalNfcErrorHandlingEmvco =
|
||||
2 /*!< Error handling set to perform as EMVCo compliant device */
|
||||
} FuriHalNfcErrorHandling;
|
||||
|
||||
void furi_hal_nfc_ll_set_error_handling(FuriHalNfcErrorHandling eHandling);
|
||||
|
||||
/* RFAL Frame Delay Time (FDT) Listen default values */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCA_POLLER 1172U /*!< FDTA,LISTEN,MIN (n=9) Last bit: Logic "1" - tnn,min/2 Digital 1.1 6.10 ; EMV CCP Spec Book D v2.01 4.8.1.3 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCB_POLLER 1008U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCF_POLLER 2672U /*!< TR0F,LISTEN,MIN Digital 1.1 8.7.1.1 & A.4 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCV_POLLER 4310U /*!< FDTV,LISTEN,MIN t1 min Digital 2.1 B.5 ; ISO15693-3 2009 9.1 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_PICOPASS_POLLER 3400U /*!< ISO15693 t1 min - observed adjustment */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_AP2P_POLLER 64U /*!< FDT AP2P No actual FDTListen is required as fields switch and collision avoidance */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCA_POLLER \
|
||||
1172U /*!< FDTA,LISTEN,MIN (n=9) Last bit: Logic "1" - tnn,min/2 Digital 1.1 6.10 ; EMV CCP Spec Book D v2.01 4.8.1.3 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCB_POLLER \
|
||||
1008U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCF_POLLER \
|
||||
2672U /*!< TR0F,LISTEN,MIN Digital 1.1 8.7.1.1 & A.4 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCV_POLLER \
|
||||
4310U /*!< FDTV,LISTEN,MIN t1 min Digital 2.1 B.5 ; ISO15693-3 2009 9.1 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_PICOPASS_POLLER \
|
||||
3400U /*!< ISO15693 t1 min - observed adjustment */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_AP2P_POLLER \
|
||||
64U /*!< FDT AP2P No actual FDTListen is required as fields switch and collision avoidance */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCA_LISTENER 1172U /*!< FDTA,LISTEN,MIN Digital 1.1 6.10 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCB_LISTENER 1024U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCF_LISTENER 2688U /*!< TR0F,LISTEN,MIN Digital 2.1 8.7.1.1 & B.4 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_AP2P_LISTENER 64U /*!< FDT AP2P No actual FDTListen exists as fields switch and collision avoidance */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCB_LISTENER \
|
||||
1024U /*!< TR0B,MIN Digital 1.1 7.1.3 & A.3 ; EMV CCP Spec Book D v2.01 4.8.1.3 & Table A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_NFCF_LISTENER \
|
||||
2688U /*!< TR0F,LISTEN,MIN Digital 2.1 8.7.1.1 & B.4 */
|
||||
#define FURI_HAL_NFC_LL_FDT_LISTEN_AP2P_LISTENER \
|
||||
64U /*!< FDT AP2P No actual FDTListen exists as fields switch and collision avoidance */
|
||||
|
||||
void furi_hal_nfc_ll_set_fdt_listen(uint32_t cycles);
|
||||
|
||||
/* RFAL Frame Delay Time (FDT) Poll default values */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCA_POLLER 6780U /*!< FDTA,POLL,MIN Digital 1.1 6.10.3.1 & A.2 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCA_T1T_POLLER 384U /*!< RRDDT1T,MIN,B1 Digital 1.1 10.7.1 & A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCB_POLLER 6780U /*!< FDTB,POLL,MIN = TR2B,MIN,DEFAULT Digital 1.1 7.9.3 & A.3 ; EMVCo 3.0 FDTB,PCD,MIN Table A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCA_POLLER \
|
||||
6780U /*!< FDTA,POLL,MIN Digital 1.1 6.10.3.1 & A.2 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCA_T1T_POLLER \
|
||||
384U /*!< RRDDT1T,MIN,B1 Digital 1.1 10.7.1 & A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCB_POLLER \
|
||||
6780U /*!< FDTB,POLL,MIN = TR2B,MIN,DEFAULT Digital 1.1 7.9.3 & A.3 ; EMVCo 3.0 FDTB,PCD,MIN Table A.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCF_POLLER 6800U /*!< FDTF,POLL,MIN Digital 2.1 8.7.3 & B.4 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_NFCV_POLLER 4192U /*!< FDTV,POLL Digital 2.1 9.7.3.1 & B.5 */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_PICOPASS_POLLER 1790U /*!< FDT Max */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_AP2P_POLLER 0U /*!< FDT AP2P No actual FDTPoll exists as fields switch and collision avoidance */
|
||||
#define FURI_HAL_NFC_LL_FDT_POLL_AP2P_POLLER \
|
||||
0U /*!< FDT AP2P No actual FDTPoll exists as fields switch and collision avoidance */
|
||||
|
||||
void furi_hal_nfc_ll_set_fdt_poll(uint32_t FDTPoll);
|
||||
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
Import("env")
|
||||
|
||||
env.Append(LINT_SOURCES=["furi"])
|
||||
env.Append(
|
||||
LINT_SOURCES=[
|
||||
"furi",
|
||||
"furi/core",
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
libenv = env.Clone(FW_LIB_NAME="furi")
|
||||
|
||||
@@ -86,7 +86,7 @@ void furi_timer_free(FuriTimer* instance) {
|
||||
|
||||
furi_check(xTimerDelete(hTimer, portMAX_DELAY) == pdPASS);
|
||||
|
||||
while (furi_timer_is_running(instance)) furi_delay_tick(2);
|
||||
while(furi_timer_is_running(instance)) furi_delay_tick(2);
|
||||
|
||||
if((uint32_t)callb & 1U) {
|
||||
/* Callback memory was allocated from dynamic pool, clear flag */
|
||||
|
||||
0
furi/flipper.c
Executable file → Normal file
0
furi/flipper.c
Executable file → Normal file
@@ -2,7 +2,7 @@ Import("env")
|
||||
|
||||
env.Append(
|
||||
LINT_SOURCES=[
|
||||
"#/lib/lfrfid",
|
||||
"lib/lfrfid",
|
||||
],
|
||||
CPPPATH=[
|
||||
"#/lib/lfrfid",
|
||||
|
||||
@@ -207,7 +207,7 @@ bool protocol_awid_write_data(ProtocolAwid* protocol, void* data) {
|
||||
|
||||
// Fix incorrect length byte
|
||||
if(protocol->data[0] != 26 && protocol->data[0] != 50 && protocol->data[0] != 37 &&
|
||||
protocol->data[0] != 34 && protocol->data[0] != 36 ) {
|
||||
protocol->data[0] != 34 && protocol->data[0] != 36) {
|
||||
protocol->data[0] = 26;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,16 @@ void subghz_protocol_blocks_add_bit(SubGhzBlockDecoder* decoder, uint8_t bit) {
|
||||
decoder->decode_count_bit++;
|
||||
}
|
||||
|
||||
void subghz_protocol_blocks_add_to_128_bit(
|
||||
SubGhzBlockDecoder* decoder,
|
||||
uint8_t bit,
|
||||
uint64_t* head_64_bit) {
|
||||
if(++decoder->decode_count_bit > 64) {
|
||||
(*head_64_bit) = ((*head_64_bit) << 1) | (decoder->decode_data >> 63);
|
||||
}
|
||||
decoder->decode_data = decoder->decode_data << 1 | bit;
|
||||
}
|
||||
|
||||
uint8_t subghz_protocol_blocks_get_hash_data(SubGhzBlockDecoder* decoder, size_t len) {
|
||||
uint8_t hash = 0;
|
||||
uint8_t* p = (uint8_t*)&decoder->decode_data;
|
||||
|
||||
@@ -24,6 +24,17 @@ struct SubGhzBlockDecoder {
|
||||
*/
|
||||
void subghz_protocol_blocks_add_bit(SubGhzBlockDecoder* decoder, uint8_t bit);
|
||||
|
||||
/**
|
||||
* Add data to_128 bit when decoding.
|
||||
* @param decoder Pointer to a SubGhzBlockDecoder instance
|
||||
* @param head_64_bit Pointer to a head_64_bit
|
||||
* @param bit data, 1bit
|
||||
*/
|
||||
void subghz_protocol_blocks_add_to_128_bit(
|
||||
SubGhzBlockDecoder* decoder,
|
||||
uint8_t bit,
|
||||
uint64_t* head_64_bit);
|
||||
|
||||
/**
|
||||
* Getting the hash sum of the last randomly received parcel.
|
||||
* @param decoder Pointer to a SubGhzBlockDecoder instance
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
#include "math.h"
|
||||
|
||||
uint64_t subghz_protocol_blocks_reverse_key(uint64_t key, uint8_t count_bit) {
|
||||
uint64_t key_reverse = 0;
|
||||
for(uint8_t i = 0; i < count_bit; i++) {
|
||||
key_reverse = key_reverse << 1 | bit_read(key, i);
|
||||
uint64_t subghz_protocol_blocks_reverse_key(uint64_t key, uint8_t bit_count) {
|
||||
uint64_t reverse_key = 0;
|
||||
for(uint8_t i = 0; i < bit_count; i++) {
|
||||
reverse_key = reverse_key << 1 | bit_read(key, i);
|
||||
}
|
||||
return key_reverse;
|
||||
return reverse_key;
|
||||
}
|
||||
|
||||
uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t count_bit) {
|
||||
uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t bit_count) {
|
||||
uint8_t parity = 0;
|
||||
for(uint8_t i = 0; i < count_bit; i++) {
|
||||
for(uint8_t i = 0; i < bit_count; i++) {
|
||||
parity += bit_read(key, i);
|
||||
}
|
||||
return parity & 0x01;
|
||||
@@ -18,14 +18,14 @@ uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t count_bit) {
|
||||
|
||||
uint8_t subghz_protocol_blocks_crc4(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init) {
|
||||
unsigned remainder = init << 4; // LSBs are unused
|
||||
unsigned poly = polynomial << 4;
|
||||
unsigned bit;
|
||||
uint8_t remainder = init << 4; // LSBs are unused
|
||||
uint8_t poly = polynomial << 4;
|
||||
uint8_t bit;
|
||||
|
||||
while(nBytes--) {
|
||||
while(size--) {
|
||||
remainder ^= *message++;
|
||||
for(bit = 0; bit < 8; bit++) {
|
||||
if(remainder & 0x80) {
|
||||
@@ -40,16 +40,15 @@ uint8_t subghz_protocol_blocks_crc4(
|
||||
|
||||
uint8_t subghz_protocol_blocks_crc7(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init) {
|
||||
unsigned remainder = init << 1; // LSB is unused
|
||||
unsigned poly = polynomial << 1;
|
||||
unsigned byte, bit;
|
||||
uint8_t remainder = init << 1; // LSB is unused
|
||||
uint8_t poly = polynomial << 1;
|
||||
|
||||
for(byte = 0; byte < nBytes; ++byte) {
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
remainder ^= message[byte];
|
||||
for(bit = 0; bit < 8; ++bit) {
|
||||
for(uint8_t bit = 0; bit < 8; ++bit) {
|
||||
if(remainder & 0x80) {
|
||||
remainder = (remainder << 1) ^ poly;
|
||||
} else {
|
||||
@@ -62,15 +61,14 @@ uint8_t subghz_protocol_blocks_crc7(
|
||||
|
||||
uint8_t subghz_protocol_blocks_crc8(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init) {
|
||||
uint8_t remainder = init;
|
||||
unsigned byte, bit;
|
||||
|
||||
for(byte = 0; byte < nBytes; ++byte) {
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
remainder ^= message[byte];
|
||||
for(bit = 0; bit < 8; ++bit) {
|
||||
for(uint8_t bit = 0; bit < 8; ++bit) {
|
||||
if(remainder & 0x80) {
|
||||
remainder = (remainder << 1) ^ polynomial;
|
||||
} else {
|
||||
@@ -83,16 +81,15 @@ uint8_t subghz_protocol_blocks_crc8(
|
||||
|
||||
uint8_t subghz_protocol_blocks_crc8le(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init) {
|
||||
uint8_t remainder = subghz_protocol_blocks_reverse_key(init, 8);
|
||||
unsigned byte, bit;
|
||||
polynomial = subghz_protocol_blocks_reverse_key(polynomial, 8);
|
||||
|
||||
for(byte = 0; byte < nBytes; ++byte) {
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
remainder ^= message[byte];
|
||||
for(bit = 0; bit < 8; ++bit) {
|
||||
for(uint8_t bit = 0; bit < 8; ++bit) {
|
||||
if(remainder & 1) {
|
||||
remainder = (remainder >> 1) ^ polynomial;
|
||||
} else {
|
||||
@@ -105,15 +102,14 @@ uint8_t subghz_protocol_blocks_crc8le(
|
||||
|
||||
uint16_t subghz_protocol_blocks_crc16lsb(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint16_t polynomial,
|
||||
uint16_t init) {
|
||||
uint16_t remainder = init;
|
||||
unsigned byte, bit;
|
||||
|
||||
for(byte = 0; byte < nBytes; ++byte) {
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
remainder ^= message[byte];
|
||||
for(bit = 0; bit < 8; ++bit) {
|
||||
for(uint8_t bit = 0; bit < 8; ++bit) {
|
||||
if(remainder & 1) {
|
||||
remainder = (remainder >> 1) ^ polynomial;
|
||||
} else {
|
||||
@@ -126,15 +122,14 @@ uint16_t subghz_protocol_blocks_crc16lsb(
|
||||
|
||||
uint16_t subghz_protocol_blocks_crc16(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint16_t polynomial,
|
||||
uint16_t init) {
|
||||
uint16_t remainder = init;
|
||||
unsigned byte, bit;
|
||||
|
||||
for(byte = 0; byte < nBytes; ++byte) {
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
remainder ^= message[byte] << 8;
|
||||
for(bit = 0; bit < 8; ++bit) {
|
||||
for(uint8_t bit = 0; bit < 8; ++bit) {
|
||||
if(remainder & 0x8000) {
|
||||
remainder = (remainder << 1) ^ polynomial;
|
||||
} else {
|
||||
@@ -147,18 +142,18 @@ uint16_t subghz_protocol_blocks_crc16(
|
||||
|
||||
uint8_t subghz_protocol_blocks_lfsr_digest8(
|
||||
uint8_t const message[],
|
||||
unsigned bytes,
|
||||
size_t size,
|
||||
uint8_t gen,
|
||||
uint8_t key) {
|
||||
uint8_t sum = 0;
|
||||
for(unsigned k = 0; k < bytes; ++k) {
|
||||
uint8_t data = message[k];
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
uint8_t data = message[byte];
|
||||
for(int i = 7; i >= 0; --i) {
|
||||
// XOR key into sum if data bit is set
|
||||
if((data >> i) & 1) sum ^= key;
|
||||
|
||||
// roll the key right (actually the lsb is dropped here)
|
||||
// and apply the gen (needs to include the dropped lsb as msb)
|
||||
// roll the key right (actually the LSB is dropped here)
|
||||
// and apply the gen (needs to include the dropped LSB as MSB)
|
||||
if(key & 1)
|
||||
key = (key >> 1) ^ gen;
|
||||
else
|
||||
@@ -170,22 +165,22 @@ uint8_t subghz_protocol_blocks_lfsr_digest8(
|
||||
|
||||
uint8_t subghz_protocol_blocks_lfsr_digest8_reflect(
|
||||
uint8_t const message[],
|
||||
int bytes,
|
||||
size_t size,
|
||||
uint8_t gen,
|
||||
uint8_t key) {
|
||||
uint8_t sum = 0;
|
||||
// Process message from last byte to first byte (reflected)
|
||||
for(int k = bytes - 1; k >= 0; --k) {
|
||||
uint8_t data = message[k];
|
||||
for(int byte = size - 1; byte >= 0; --byte) {
|
||||
uint8_t data = message[byte];
|
||||
// Process individual bits of each byte (reflected)
|
||||
for(int i = 0; i < 8; ++i) {
|
||||
for(uint8_t i = 0; i < 8; ++i) {
|
||||
// XOR key into sum if data bit is set
|
||||
if((data >> i) & 1) {
|
||||
sum ^= key;
|
||||
}
|
||||
|
||||
// roll the key left (actually the lsb is dropped here)
|
||||
// and apply the gen (needs to include the dropped lsb as msb)
|
||||
// roll the key left (actually the LSB is dropped here)
|
||||
// and apply the gen (needs to include the dropped lsb as MSB)
|
||||
if(key & 0x80)
|
||||
key = (key << 1) ^ gen;
|
||||
else
|
||||
@@ -197,18 +192,18 @@ uint8_t subghz_protocol_blocks_lfsr_digest8_reflect(
|
||||
|
||||
uint16_t subghz_protocol_blocks_lfsr_digest16(
|
||||
uint8_t const message[],
|
||||
unsigned bytes,
|
||||
size_t size,
|
||||
uint16_t gen,
|
||||
uint16_t key) {
|
||||
uint16_t sum = 0;
|
||||
for(unsigned k = 0; k < bytes; ++k) {
|
||||
uint8_t data = message[k];
|
||||
for(int i = 7; i >= 0; --i) {
|
||||
for(size_t byte = 0; byte < size; ++byte) {
|
||||
uint8_t data = message[byte];
|
||||
for(int8_t i = 7; i >= 0; --i) {
|
||||
// if data bit is set then xor with key
|
||||
if((data >> i) & 1) sum ^= key;
|
||||
|
||||
// roll the key right (actually the lsb is dropped here)
|
||||
// and apply the gen (needs to include the dropped lsb as msb)
|
||||
// roll the key right (actually the LSB is dropped here)
|
||||
// and apply the gen (needs to include the dropped LSB as MSB)
|
||||
if(key & 1)
|
||||
key = (key >> 1) ^ gen;
|
||||
else
|
||||
@@ -218,31 +213,31 @@ uint16_t subghz_protocol_blocks_lfsr_digest16(
|
||||
return sum;
|
||||
}
|
||||
|
||||
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t num_bytes) {
|
||||
int result = 0;
|
||||
for(size_t i = 0; i < num_bytes; ++i) {
|
||||
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t size) {
|
||||
uint32_t result = 0;
|
||||
for(size_t i = 0; i < size; ++i) {
|
||||
result += message[i];
|
||||
}
|
||||
return (uint8_t)result;
|
||||
}
|
||||
|
||||
int subghz_protocol_blocks_parity8(uint8_t byte) {
|
||||
uint8_t subghz_protocol_blocks_parity8(uint8_t byte) {
|
||||
byte ^= byte >> 4;
|
||||
byte &= 0xf;
|
||||
return (0x6996 >> byte) & 1;
|
||||
}
|
||||
|
||||
int subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t num_bytes) {
|
||||
int result = 0;
|
||||
for(size_t i = 0; i < num_bytes; ++i) {
|
||||
uint8_t subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t size) {
|
||||
uint8_t result = 0;
|
||||
for(size_t i = 0; i < size; ++i) {
|
||||
result ^= subghz_protocol_blocks_parity8(message[i]);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t num_bytes) {
|
||||
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t size) {
|
||||
uint8_t result = 0;
|
||||
for(size_t i = 0; i < num_bytes; ++i) {
|
||||
for(size_t i = 0; i < size; ++i) {
|
||||
result ^= message[i];
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -14,183 +14,201 @@
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/**
|
||||
* Flip the data bitwise.
|
||||
|
||||
/** Flip the data bitwise
|
||||
*
|
||||
* @param key In data
|
||||
* @param count_bit number of data bits
|
||||
* @param bit_count number of data bits
|
||||
*
|
||||
* @return Reverse data
|
||||
**/
|
||||
uint64_t subghz_protocol_blocks_reverse_key(uint64_t key, uint8_t count_bit);
|
||||
*/
|
||||
uint64_t subghz_protocol_blocks_reverse_key(uint64_t key, uint8_t bit_count);
|
||||
|
||||
/**
|
||||
* Get parity the data bitwise.
|
||||
/** Get parity the data bitwise
|
||||
*
|
||||
* @param key In data
|
||||
* @param count_bit number of data bits
|
||||
* @param bit_count number of data bits
|
||||
*
|
||||
* @return parity
|
||||
**/
|
||||
uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t count_bit);
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_get_parity(uint64_t key, uint8_t bit_count);
|
||||
|
||||
/**
|
||||
* CRC-4.
|
||||
/** CRC-4
|
||||
*
|
||||
* @param message array of bytes to check
|
||||
* @param nBytes number of bytes in message
|
||||
* @param size number of bytes in message
|
||||
* @param polynomial CRC polynomial
|
||||
* @param init starting crc value
|
||||
*
|
||||
* @return CRC value
|
||||
**/
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_crc4(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init);
|
||||
|
||||
/**
|
||||
* CRC-7.
|
||||
/** CRC-7
|
||||
*
|
||||
* @param message array of bytes to check
|
||||
* @param nBytes number of bytes in message
|
||||
* @param size number of bytes in message
|
||||
* @param polynomial CRC polynomial
|
||||
* @param init starting crc value
|
||||
*
|
||||
* @return CRC value
|
||||
**/
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_crc7(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init);
|
||||
|
||||
/**
|
||||
* Generic Cyclic Redundancy Check CRC-8.
|
||||
* Example polynomial: 0x31 = x8 + x5 + x4 + 1 (x8 is implicit)
|
||||
* Example polynomial: 0x80 = x8 + x7 (a normal bit-by-bit parity XOR)
|
||||
/** Generic Cyclic Redundancy Check CRC-8. Example polynomial: 0x31 = x8 + x5 +
|
||||
* x4 + 1 (x8 is implicit) Example polynomial: 0x80 = x8 + x7 (a normal
|
||||
* bit-by-bit parity XOR)
|
||||
*
|
||||
* @param message array of bytes to check
|
||||
* @param nBytes number of bytes in message
|
||||
* @param size number of bytes in message
|
||||
* @param polynomial byte is from x^7 to x^0 (x^8 is implicitly one)
|
||||
* @param init starting crc value
|
||||
*
|
||||
* @return CRC value
|
||||
**/
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_crc8(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init);
|
||||
|
||||
/**
|
||||
* "Little-endian" Cyclic Redundancy Check CRC-8 LE
|
||||
* Input and output are reflected, i.e. least significant bit is shifted in first.
|
||||
/** "Little-endian" Cyclic Redundancy Check CRC-8 LE Input and output are
|
||||
* reflected, i.e. least significant bit is shifted in first
|
||||
*
|
||||
* @param message array of bytes to check
|
||||
* @param nBytes number of bytes in message
|
||||
* @param size number of bytes in message
|
||||
* @param polynomial CRC polynomial
|
||||
* @param init starting crc value
|
||||
*
|
||||
* @return CRC value
|
||||
**/
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_crc8le(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint8_t polynomial,
|
||||
uint8_t init);
|
||||
|
||||
/**
|
||||
* CRC-16 LSB.
|
||||
* Input and output are reflected, i.e. least significant bit is shifted in first.
|
||||
* Note that poly and init already need to be reflected.
|
||||
/** CRC-16 LSB. Input and output are reflected, i.e. least significant bit is
|
||||
* shifted in first. Note that poly and init already need to be reflected
|
||||
*
|
||||
* @param message array of bytes to check
|
||||
* @param nBytes number of bytes in message
|
||||
* @param size number of bytes in message
|
||||
* @param polynomial CRC polynomial
|
||||
* @param init starting crc value
|
||||
*
|
||||
* @return CRC value
|
||||
**/
|
||||
*/
|
||||
uint16_t subghz_protocol_blocks_crc16lsb(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint16_t polynomial,
|
||||
uint16_t init);
|
||||
|
||||
/**
|
||||
* CRC-16.
|
||||
/** CRC-16
|
||||
*
|
||||
* @param message array of bytes to check
|
||||
* @param nBytes number of bytes in message
|
||||
* @param size number of bytes in message
|
||||
* @param polynomial CRC polynomial
|
||||
* @param init starting crc value
|
||||
*
|
||||
* @return CRC value
|
||||
**/
|
||||
*/
|
||||
uint16_t subghz_protocol_blocks_crc16(
|
||||
uint8_t const message[],
|
||||
unsigned nBytes,
|
||||
size_t size,
|
||||
uint16_t polynomial,
|
||||
uint16_t init);
|
||||
|
||||
/**
|
||||
* Digest-8 by "LFSR-based Toeplitz hash".
|
||||
/** Digest-8 by "LFSR-based Toeplitz hash"
|
||||
*
|
||||
* @param message bytes of message data
|
||||
* @param bytes number of bytes to digest
|
||||
* @param gen key stream generator, needs to includes the MSB if the LFSR is rolling
|
||||
* @param size number of bytes to digest
|
||||
* @param gen key stream generator, needs to includes the MSB if the
|
||||
* LFSR is rolling
|
||||
* @param key initial key
|
||||
*
|
||||
* @return digest value
|
||||
**/
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_lfsr_digest8(
|
||||
uint8_t const message[],
|
||||
unsigned bytes,
|
||||
size_t size,
|
||||
uint8_t gen,
|
||||
uint8_t key);
|
||||
|
||||
/**
|
||||
* Digest-8 by "LFSR-based Toeplitz hash", byte reflect, bit reflect.
|
||||
/** Digest-8 by "LFSR-based Toeplitz hash", byte reflect, bit reflect
|
||||
*
|
||||
* @param message bytes of message data
|
||||
* @param bytes number of bytes to digest
|
||||
* @param gen key stream generator, needs to includes the MSB if the LFSR is rolling
|
||||
* @param size number of bytes to digest
|
||||
* @param gen key stream generator, needs to includes the MSB if the
|
||||
* LFSR is rolling
|
||||
* @param key initial key
|
||||
*
|
||||
* @return digest value
|
||||
**/
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_lfsr_digest8_reflect(
|
||||
uint8_t const message[],
|
||||
int bytes,
|
||||
size_t size,
|
||||
uint8_t gen,
|
||||
uint8_t key);
|
||||
|
||||
/**
|
||||
* Digest-16 by "LFSR-based Toeplitz hash".
|
||||
/** Digest-16 by "LFSR-based Toeplitz hash"
|
||||
*
|
||||
* @param message bytes of message data
|
||||
* @param bytes number of bytes to digest
|
||||
* @param gen key stream generator, needs to includes the MSB if the LFSR is rolling
|
||||
* @param size number of bytes to digest
|
||||
* @param gen key stream generator, needs to includes the MSB if the
|
||||
* LFSR is rolling
|
||||
* @param key initial key
|
||||
*
|
||||
* @return digest value
|
||||
**/
|
||||
*/
|
||||
uint16_t subghz_protocol_blocks_lfsr_digest16(
|
||||
uint8_t const message[],
|
||||
unsigned bytes,
|
||||
size_t size,
|
||||
uint16_t gen,
|
||||
uint16_t key);
|
||||
|
||||
/**
|
||||
* Compute Addition of a number of bytes.
|
||||
/** Compute Addition of a number of bytes
|
||||
*
|
||||
* @param message bytes of message data
|
||||
* @param num_bytes number of bytes to sum
|
||||
* @param size number of bytes to sum
|
||||
*
|
||||
* @return summation value
|
||||
**/
|
||||
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t num_bytes);
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_add_bytes(uint8_t const message[], size_t size);
|
||||
|
||||
/**
|
||||
* Compute bit parity of a single byte (8 bits).
|
||||
/** Compute bit parity of a single byte (8 bits)
|
||||
*
|
||||
* @param byte single byte to check
|
||||
*
|
||||
* @return 1 odd parity, 0 even parity
|
||||
**/
|
||||
int subghz_protocol_blocks_parity8(uint8_t byte);
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_parity8(uint8_t byte);
|
||||
|
||||
/**
|
||||
* Compute bit parity of a number of bytes.
|
||||
/** Compute bit parity of a number of bytes
|
||||
*
|
||||
* @param message bytes of message data
|
||||
* @param num_bytes number of bytes to sum
|
||||
* @param size number of bytes to sum
|
||||
*
|
||||
* @return 1 odd parity, 0 even parity
|
||||
**/
|
||||
int subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t num_bytes);
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_parity_bytes(uint8_t const message[], size_t size);
|
||||
|
||||
/**
|
||||
* Compute XOR (byte-wide parity) of a number of bytes.
|
||||
/** Compute XOR (byte-wide parity) of a number of bytes
|
||||
*
|
||||
* @param message bytes of message data
|
||||
* @param num_bytes number of bytes to sum
|
||||
* @param size number of bytes to sum
|
||||
*
|
||||
* @return summation value, per bit-position 1 odd parity, 0 even parity
|
||||
**/
|
||||
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t num_bytes);
|
||||
*/
|
||||
uint8_t subghz_protocol_blocks_xor_bytes(uint8_t const message[], size_t size);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user