feat: 添加杰理 JL7016 SOC 代码生成模板

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-19 16:05:36 +08:00
co-authored by Cursor
parent 0eda925f58
commit 16bffd16b2
914 changed files with 254709 additions and 45 deletions
@@ -0,0 +1,667 @@
/**
* \file tuya_ble_port.c
*
* \brief
*/
/*
* Copyright (C) 2014-2019, Tuya Inc., All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of tuya ble sdk
*/
#include "tuya_ble_port.h"
#include "tuya_ble_type.h"
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_gap_advertising_adv_data_update(uint8_t const *p_ad_data, uint8_t ad_len)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_gap_advertising_scan_rsp_data_update(uint8_t const *p_sr_data, uint8_t sr_len)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief Function for update the device information characteristic value.
*@param[in] p_data The pointer to the data to be updated.
*@param[in] data_len The length of the data to be updated.
*
*@note The device information characteristic uuid : 00000003-0000-1001-8001-00805F9B07D0
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_device_info_characteristic_value_update(uint8_t const *p_data, uint8_t data_len)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_gap_disconnect(void)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_gatt_send_data(const uint8_t *p_data, uint16_t len)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_timer_create(void **p_timer_id, uint32_t timeout_value_ms, tuya_ble_timer_mode mode, tuya_ble_timer_handler_t timeout_handler)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_timer_delete(void *timer_id)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_timer_start(void *timer_id)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_timer_restart(void *timer_id, uint32_t timeout_value_ms)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_timer_stop(void *timer_id)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK void tuya_ble_device_delay_ms(uint32_t ms)
{
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK void tuya_ble_device_delay_us(uint32_t us)
{
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_rand_generator(uint8_t *p_buf, uint8_t len)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_device_reset(void)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_gap_addr_get(tuya_ble_gap_addr_t *p_addr)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_gap_addr_set(tuya_ble_gap_addr_t *p_addr)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_rtc_get_timestamp(uint32_t *timestamp, int32_t *timezone)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_rtc_set_timestamp(uint32_t timestamp, int32_t timezone)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_nv_init(void)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_nv_erase(uint32_t addr, uint32_t size)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_nv_write(uint32_t addr, const uint8_t *p_data, uint32_t size)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_nv_read(uint32_t addr, uint8_t *p_data, uint32_t size)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_common_uart_init(void)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_common_uart_send_data(const uint8_t *p_data, uint16_t len)
{
return TUYA_BLE_SUCCESS;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_task_create(void **pp_handle, const char *p_name, void (*p_routine)(void *), void *p_param, uint16_t stack_size, uint16_t priority)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_task_delete(void *p_handle)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_task_suspend(void *p_handle)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_task_resume(void *p_handle)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_msg_queue_create(void **pp_handle, uint32_t msg_num, uint32_t msg_size)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_msg_queue_delete(void *p_handle)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_msg_queue_peek(void *p_handle, uint32_t *p_msg_num)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_msg_queue_send(void *p_handle, void *p_msg, uint32_t wait_ms)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_os_msg_queue_recv(void *p_handle, void *p_msg, uint32_t wait_ms)
{
return true;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK bool tuya_ble_event_queue_send_port(tuya_ble_evt_param_t *evt, uint32_t wait_ms)
{
return true;
}
/**
* @brief 128 bit AES ECB encryption on speicified plaintext and keys
* @param input specifed plain text to be encypted
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @param key keys to encrypt the plaintext
* @param output output buffer to store encrypted data
* @return encryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
__TUYA_BLE_WEAK bool tuya_ble_aes128_ecb_encrypt(uint8_t *key, uint8_t *input, uint16_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief 128 bit AES ECB decryption on speicified encrypted data and keys
* @param input specifed encypted data to be decypted
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @param key keys to decrypt the data
* @param output output buffer to store plain data
* @return decryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
__TUYA_BLE_WEAK bool tuya_ble_aes128_ecb_decrypt(uint8_t *key, uint8_t *input, uint16_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief 128 bit AES CBC encryption on speicified plaintext and keys
* @param input specifed plain text to be encypted
* @param key keys to encrypt the plaintext
* @param output output buffer to store encrypted data
* @param iv initialization vector (IV) for CBC mode
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @return encryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
__TUYA_BLE_WEAK bool tuya_ble_aes128_cbc_encrypt(uint8_t *key, uint8_t *iv, uint8_t *input, uint16_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief 128 bit AES CBC descryption on speicified plaintext and keys
* @param input specifed encypted data to be decypted
* @param key keys to decrypt the data
* @param output output buffer to store plain data
* @param iv initialization vector (IV) for CBC mode
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @return encryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
__TUYA_BLE_WEAK bool tuya_ble_aes128_cbc_decrypt(uint8_t *key, uint8_t *iv, uint8_t *input, uint16_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief MD5 checksum
* @param input specifed plain text to be encypted
* @param output output buffer to store md5 result data,output data len is always 16
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
__TUYA_BLE_WEAK bool tuya_ble_md5_crypt(uint8_t *input, uint16_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief SHA256 checksum
* @param input specifed plain text to be encypted
* @param output output buffer to store sha256 result data,output data len is always 32
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
__TUYA_BLE_WEAK bool tuya_ble_sha256_crypt(const uint8_t *input, uint16_t input_len, uint8_t *output)
{
return true;
}
/**
*@brief storage private data, for example: token/dev cert/keys
*@param private_data_type describe private data type, see the tuay_ble_private_data_type enum define
*@param p_data storage data point
*@param data_size p_data size
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_storage_private_data(tuya_ble_private_data_type private_data_type, uint8_t *p_data, uint32_t data_size)
{
return 0;
}
/**
*@brief Get device certificate length
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK uint32_t tuya_ble_get_dev_crt_len(void)
{
return 0;
}
/**
*@brief Get device certificate data
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_get_dev_crt_der(uint8_t *p_der, uint32_t der_len)
{
return TUYA_BLE_ERR_NOT_FOUND;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_ecc_keypair_gen_secp256r1(uint8_t *public_key, uint8_t *private_key)
{
return TUYA_BLE_ERR_INVALID_STATE;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_ecc_shared_secret_compute_secp256r1(uint8_t *public_key, uint8_t *private_key, uint8_t *secret_key)
{
return TUYA_BLE_ERR_INVALID_STATE;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_ecc_sign_secp256r1(const uint8_t *p_sk, const uint8_t *p_data, uint32_t data_size, uint8_t *p_sig)
{
return TUYA_BLE_ERR_INVALID_STATE;
}
/**
*@brief
*@param
*
*@note
*
* */
__TUYA_BLE_WEAK tuya_ble_status_t tuya_ble_ecc_verify_secp256r1(const uint8_t *p_pk, const uint8_t *p_data, uint32_t data_size, const uint8_t *p_sig)
{
return TUYA_BLE_ERR_RESOURCES;
}
/**
* @brief This function calculates the full generic HMAC
* on the input buffer with the provided key.
* @param key The HMAC secret key.
* @param key_len The length of the HMAC secret key in Bytes.
* @param input specifed plain text to be encypted
* @param output output buffer to store the result data
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
__TUYA_BLE_WEAK bool tuya_ble_hmac_sha1_crypt(const uint8_t *key, uint32_t key_len, const uint8_t *input, uint32_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief This function calculates the full generic HMAC
* on the input buffer with the provided key.
* @param key The HMAC secret key.
* @param key_len The length of the HMAC secret key in Bytes.
* @param input specifed plain text to be encypted
* @param output output buffer to store the result data
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
__TUYA_BLE_WEAK bool tuya_ble_hmac_sha256_crypt(const uint8_t *key, uint32_t key_len, const uint8_t *input, uint32_t input_len, uint8_t *output)
{
return true;
}
/**
* @brief Allocate a memory block with required size.
*
*
* @param[in] size Required memory size.
*
* @return The address of the allocated memory block. If the address is NULL, the
* memory allocation failed.
*/
__TUYA_BLE_WEAK void *tuya_ble_port_malloc(uint32_t size);
/**
*
* @brief Free a memory block that had been allocated.
*
* @param[in] pv The address of memory block being freed.
*
* @return None.
*/
__TUYA_BLE_WEAK void tuya_ble_port_free(void *pv);
@@ -0,0 +1,710 @@
/**
* \file tuya_ble_port.h
*
* \brief
*/
/*
* Copyright (C) 2014-2019, Tuya Inc., All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of tuya ble sdk
*/
#ifndef TUYA_BLE_PORT_H__
#define TUYA_BLE_PORT_H__
#include "tuya_ble_stdlib.h"
#include "tuya_ble_type.h"
#include "tuya_ble_config.h"
#include "tuya_ble_port_peripheral.h"
void tuya_ble_device_enter_critical(void);
void tuya_ble_device_exit_critical(void);
#if defined(TUYA_BLE_PORT_PLATFORM_HEADER_FILE)
/**
* @file TUYA_BLE_PORT_PLATFORM_HEADER_FILE
*
* @brief Platform header file
* @note
* Must declare or define 'tuya_ble_device_enter_critical' and 'tuya_ble_device_exit_critical' in the platform header file.
* An example on the nrf52832 platform is as follows
* @example
* @code
#define TUYA_BLE_PORT_PLATFORM_HEADER_FILE "tuya_ble_port_nrf52832.h" ///<in custom_tuya_ble_config.h file.
* @endcode
* Defined in the tuya_ble_port_nrf52832.h file as follows
*
* @code
#define tuya_ble_device_enter_critical() \
{ \
uint8_t __CR_NESTED = 0; \
app_util_critical_region_enter(&__CR_NESTED);
#define tuya_ble_device_exit_critical() \
app_util_critical_region_exit(__CR_NESTED); \
}
* @endcode
*/
#include TUYA_BLE_PORT_PLATFORM_HEADER_FILE
#else
#define TUYA_BLE_PRINTF(...)
#define TUYA_BLE_HEXDUMP(...)
/**@brief Macro for entering and leaving a critical region.
*
* @note Due to implementation details, there must exist one and only one call to
* tuya_ble_device_exit_critical() for each call to tuya_ble_device_enter_critical(), and they must be located
* in the same scope.
*/
//#define tuya_ble_device_enter_critical()
//#define tuya_ble_device_exit_critical()
#endif
tuya_ble_status_t tuya_ble_gap_advertising_adv_data_update(uint8_t const *p_ad_data, uint8_t ad_len);
tuya_ble_status_t tuya_ble_gap_advertising_scan_rsp_data_update(uint8_t const *p_sr_data, uint8_t sr_len);
tuya_ble_status_t tuya_ble_gap_disconnect(void);
tuya_ble_status_t tuya_ble_gatt_send_data(const uint8_t *p_data, uint16_t len);
/**
*@brief Function for update the device information characteristic value.
*@param[in] p_data The pointer to the data to be updated.
*@param[in] data_len The length of the data to be updated.
*
*@note The device information characteristic uuid : 00000003-0000-1001-8001-00805F9B07D0
*
* */
tuya_ble_status_t tuya_ble_device_info_characteristic_value_update(uint8_t const *p_data, uint8_t data_len);
/**
* @brief Create a timer.
* @param [out] p_timer_id: a pointer to timer id address which can uniquely identify the timer.
[in] timeout_value_ms Number of milliseconds to time-out event
* [in] timeout_handler: a pointer to a function which can be
* called when the timer expires.
* [in] mode: repeated or single shot.
* @return TUYA_BLE_SUCCESS If the timer was successfully created.
* TUYA_BLE_ERR_INVALID_PARAM Invalid timer id supplied.
* TUYA_BLE_ERR_INVALID_STATE timer module has not been initialized or the
* timer is running.
* TUYA_BLE_ERR_NO_MEM timer pool is full.
*
* */
tuya_ble_status_t tuya_ble_timer_create(void **p_timer_id, uint32_t timeout_value_ms, tuya_ble_timer_mode mode, tuya_ble_timer_handler_t timeout_handler);
/**
* @brief Delete a timer.
* @param [in] timer_id: timer id
* @return TUYA_BLE_SUCCESS If the timer was successfully deleted.
* TUYA_BLE_ERR_INVALID_PARAM Invalid timer id supplied..
* */
tuya_ble_status_t tuya_ble_timer_delete(void *timer_id);
/**
* @brief Start a timer.
* @param [in] timer_id: timer id
*
* @return TUYA_BLE_SUCCESS If the timer was successfully started.
* TUYA_BLE_ERR_COMMON Invalid timer id supplied.
* @note If the timer has already started, it will start counting again.
* */
tuya_ble_status_t tuya_ble_timer_start(void *timer_id);
/**
* @brief Restart a timer.
* @param [in] timer_id: timer id
* [in] timeout_value_ms: New number of milliseconds to time-out event
* @return TUYA_BLE_SUCCESS If the timer was successfully started.
* TUYA_BLE_ERR_COMMON Invalid timer id supplied.
* @note If the timer has already started, it will start counting again.
* */
tuya_ble_status_t tuya_ble_timer_restart(void *timer_id, uint32_t timeout_value_ms);
/**
* @brief Stop a timer.
* @param [in] timer_id: timer id
* @return TUYA_BLE_SUCCESS If the timer was successfully stopped.
* TUYA_BLE_ERR_INVALID_PARAM Invalid timer id supplied.
*
* */
tuya_ble_status_t tuya_ble_timer_stop(void *timer_id);
/**
* @brief Function for delaying execution for a number of milliseconds.
*
* @param ms_time Number of milliseconds to wait.
*/
void tuya_ble_device_delay_ms(uint32_t ms);
/**
* @brief Function for delaying execution for a number of microseconds.
*
* @param us_time Number of microseconds to wait.
*/
void tuya_ble_device_delay_us(uint32_t us);
/**
* @brief Function for RESET device.
*
* @note
*.
* */
tuya_ble_status_t tuya_ble_device_reset(void);
/**
* @brief Function for get mac addr.
*
* @note
*.
* */
tuya_ble_status_t tuya_ble_gap_addr_get(tuya_ble_gap_addr_t *p_addr);
/**
* @brief Function for update mac addr.
*
* @note
*.
* */
tuya_ble_status_t tuya_ble_gap_addr_set(tuya_ble_gap_addr_t *p_addr);
/**
* @brief Get ture random bytes .
* @param [out] p_buf: pointer to data
* [in] len: Number of bytes to take from pool and place in
* p_buff
* @return TUYA_BLE_SUCCESS The requested bytes were written to
* p_buff
* TUYA_BLE_ERR_NO_MEM No bytes were written to the buffer, because
* there were not enough random bytes available.
* @note SHOULD use TRUE random num generator
* */
tuya_ble_status_t tuya_ble_rand_generator(uint8_t *p_buf, uint8_t len);
/**
* @brief Function for get the unix timestamp.
*
* @note timezone: 100 times the actual time zone
*.
* */
tuya_ble_status_t tuya_ble_rtc_get_timestamp(uint32_t *timestamp, int32_t *timezone);
/**
* @brief Function for set the unix timestamp.
*
* @note timezone: 100 times the actual time zone,Eastern eight zones:8x100
*.
* */
tuya_ble_status_t tuya_ble_rtc_set_timestamp(uint32_t timestamp, int32_t timezone);
/**
* @brief Initialize the NV module.
* @note
* @note
*
* @param
* @param
*
* @return result
*/
tuya_ble_status_t tuya_ble_nv_init(void);
/**
* @brief Erase data on flash.
* @note This operation is irreversible.
* @note This operation's units is different which on many chips.
*
* @param addr flash address
* @param size erase bytes size
*
* @return result
*/
tuya_ble_status_t tuya_ble_nv_erase(uint32_t addr, uint32_t size);
/**
* @brief Write data to flash.
*
* @note This operation must after erase. @see tuya_ble_nv_erase.
*
* @param addr flash address
* @param p_data the write data buffer
* @param size write bytes size
*
* @return result
*/
tuya_ble_status_t tuya_ble_nv_write(uint32_t addr, const uint8_t *p_data, uint32_t size);
/**
* @brief Read data from flash.
* @note
*
* @param addr flash address
* @param buf buffer to store read data
* @param size read bytes size
*
* @return result
*/
tuya_ble_status_t tuya_ble_nv_read(uint32_t addr, uint8_t *p_data, uint32_t size);
/**
* @brief Initialize uart peripheral.
* @note UART_PARITY_NO_PARTY,UART_STOP_BITS_1,UART_WROD_LENGTH_8BIT;
* 9600 baud rate.
* @param No parameter.
*
* @return tuya_ble_status_t
*/
tuya_ble_status_t tuya_ble_common_uart_init(void);
/**
* @brief Send data to uart.
* @note
*
* @param p_data the send data buffer
* @param len to send bytes size
*
* @return result
*/
tuya_ble_status_t tuya_ble_common_uart_send_data(const uint8_t *p_data, uint16_t len);
/**
*
*
* \brief Create a new task and add it to the list of tasks that are ready to run.
*
* \param[out] pp_handle Used to pass back a handle by which the created task
* can be referenced.
*
* \param[in] p_name A descriptive name for the task.
*
* \param[in] p_routine Pointer to task routine function that must be implemented
* to never return.
*
* \param[in] p_param Pointer parameter passed to the task routine function.
*
* \param[in] stack_size The size of the task stack that is specified as the number
* of bytes.
*
* \param[in] priority The priority at which the task should run. Higher priority
* task has higher priority value.
*
* \return The status of the task creation.
* \retval true Task was created successfully and added to task ready list.
* \retval false Task was failed to create.
*/
bool tuya_ble_os_task_create(void **pp_handle, const char *p_name, void (*p_routine)(void *), void *p_param, uint16_t stack_size, uint16_t priority);
/**
*
*
* \brief Remove a task from RTOS's task management. The task being deleted will be removed
* from RUNNING, READY or WAITING state.
*
* \param[in] p_handle The handle of the task to be deleted.
*
* \return The status of the task deletion.
* \retval true Task was deleted successfully.
* \retval false Task was failed to delete.
*/
bool tuya_ble_os_task_delete(void *p_handle);
/**
*
*
* \brief Suspend the task. The suspended task will not be scheduled and never get
* any microcontroller processing time.
*
* \param[in] p_handle The handle of the task to be suspended.
*
* \return The status of the task suspension.
* \retval true Task was suspended successfully.
* \retval false Task was failed to suspend.
*/
bool tuya_ble_os_task_suspend(void *p_handle);
/**
*
*
* \brief Resume the suspended task.
*
* \param[in] p_handle The handle of the task to be resumed.
*
* \return The status of the task resume.
* \retval true Task was resumed successfully.
* \retval false Task was failed to resume.
*/
bool tuya_ble_os_task_resume(void *p_handle);
/**
*
*
* \brief Creates a message queue instance. This allocates the storage required by the
* new queue and passes back a handle for the queue.
*
* \param[out] pp_handle Used to pass back a handle by which the message queue
* can be referenced.
*
* \param[in] msg_num The maximum number of items that the queue can contain.
*
* \param[in] msg_size The number of bytes each item in the queue will require. Items
* are queued by copy, not by reference, so this is the number of
* bytes that will be copied for each posted item. Each item on the
* queue must be the same size.
*
* \return The status of the message queue creation.
* \retval true Message queue was created successfully.
* \retval false Message queue was failed to create.
*/
bool tuya_ble_os_msg_queue_create(void **pp_handle, uint32_t msg_num, uint32_t msg_size) ;
/**
*
*
* \brief Delete the specified message queue, and free all the memory allocated for
* storing of items placed on the queue.
*
* \param[in] p_handle The handle to the message queue being deleted.
*
* \return The status of the message queue deletion.
* \retval true Message queue was deleted successfully.
* \retval false Message queue was failed to delete.
*/
bool tuya_ble_os_msg_queue_delete(void *p_handle);
/**
*
*
* \brief Peek the number of items sent and resided on the message queue.
*
* \param[in] p_handle The handle to the message queue being peeked.
*
* \param[out] p_msg_num Used to pass back the number of items residing on the message queue.
*
* \return The status of the message queue peek.
* \retval true Message queue was peeked successfully.
* \retval false Message queue was failed to peek.
*/
bool tuya_ble_os_msg_queue_peek(void *p_handle, uint32_t *p_msg_num);
/**
*
*
* \brief Send an item to the back of the specified message queue. The item is
* queued by copy, not by reference.
*
* \param[in] p_handle The handle to the message queue on which the item is to be sent.
*
* \param[in] p_msg Pointer to the item that is to be sent on the queue. The referenced
* item rather than pointer itself will be copied on the queue.
*
* \param[in] wait_ms The maximum amount of time in milliseconds that the task should
* block waiting for the item to sent on the queue.
* \arg \c 0 No blocking and return immediately.
* \arg \c 0xFFFFFFFF Block infinitely until the item sent.
* \arg \c others The timeout value in milliseconds.
*
* \return The status of the message item sent.
* \retval true Message item was sent successfully.
* \retval false Message item was failed to send.
*/
bool tuya_ble_os_msg_queue_send(void *p_handle, void *p_msg, uint32_t wait_ms);
/**
*
*
* \brief Receive an item from the specified message queue. The item is received by
* copy rather than by reference, so a buffer of adequate size must be provided.
*
* \param[in] p_handle The handle to the message queue from which the item is to be received.
*
* \param[out] p_msg Pointer to the buffer into which the received item will be copied.
* item rather than pointer itself will be copied on the queue.
*
* \param[in] wait_ms The maximum amount of time in milliseconds that the task should
* block waiting for an item to be received from the queue.
* \arg \c 0 No blocking and return immediately.
* \arg \c 0xFFFFFFFF Block infinitely until the item received.
* \arg \c others The timeout value in milliseconds.
*
* \return The status of the message item received.
* \retval true Message item was received successfully.
* \retval false Message item was failed to receive.
*/
bool tuya_ble_os_msg_queue_recv(void *p_handle, void *p_msg, uint32_t wait_ms);
/*
*
*
* \brief If undefine TUYA_BLE_SELF_BUILT_TASK ,application should provide the task to sdk to process the event.
* SDK will use this port to send event to the task of provided by application.
*
* \param[in] evt the message data point to be send.
*
*
* \param[in] wait_ms The maximum amount of time in milliseconds that the task should
* block waiting for an item to be received from the queue.
* \arg \c 0 No blocking and return immediately.
* \arg \c 0xFFFFFFFF Block infinitely until the item received.
* \arg \c others The timeout value in milliseconds.
*
* \return The status of the message item received.
* \retval true Message item was received successfully.
* \retval false Message item was failed to receive.
* */
bool tuya_ble_event_queue_send_port(tuya_ble_evt_param_t *evt, uint32_t wait_ms);
/**
* @brief 128 bit AES ECB encryption on speicified plaintext and keys
* @param input specifed plain text to be encypted
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @param key keys to encrypt the plaintext
* @param output output buffer to store encrypted data
* @return encryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
bool tuya_ble_aes128_ecb_encrypt(uint8_t *key, uint8_t *input, uint16_t input_len, uint8_t *output);
/**
* @brief 128 bit AES ECB decryption on speicified encrypted data and keys
* @param input specifed encypted data to be decypted
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @param key keys to decrypt the data
* @param output output buffer to store plain data
* @return decryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
bool tuya_ble_aes128_ecb_decrypt(uint8_t *key, uint8_t *input, uint16_t input_len, uint8_t *output);
/**
* @brief 128 bit AES CBC encryption on speicified plaintext and keys
* @param input specifed plain text to be encypted
* @param key keys to encrypt the plaintext
* @param output output buffer to store encrypted data
* @param iv initialization vector (IV) for CBC mode
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @return encryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
bool tuya_ble_aes128_cbc_encrypt(uint8_t *key, uint8_t *iv, uint8_t *input, uint16_t input_len, uint8_t *output);
/**
* @brief 128 bit AES CBC descryption on speicified plaintext and keys
* @param input specifed encypted data to be decypted
* @param key keys to decrypt the data
* @param output output buffer to store plain data
* @param iv initialization vector (IV) for CBC mode
* @param input_len byte length of the data to be descrypted, must be multiples of 16
* @return encryption results
* @retval true successful
* @retval false fail
* @note least significant octet of encrypted data corresponds to encypted[0]
*/
bool tuya_ble_aes128_cbc_decrypt(uint8_t *key, uint8_t *iv, uint8_t *input, uint16_t input_len, uint8_t *output);
/**
* @brief MD5 checksum
* @param input specifed plain text to be encypted
* @param output output buffer to store md5 result data,output data len is always 16
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
bool tuya_ble_md5_crypt(uint8_t *input, uint16_t input_len, uint8_t *output);
/**
* @brief SHA256 checksum
* @param input specifed plain text to be encypted
* @param output output buffer to store sha256 result data,output data len is always 32
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
bool tuya_ble_sha256_crypt(const uint8_t *input, uint16_t input_len, uint8_t *output);
/*
*@brief storage private data, for example: token/dev cert/keys
*@param private_data_type describe data type
*@param p_data storage data point
*@param data_size p_data size
*
*@note
*
* */
tuya_ble_status_t tuya_ble_storage_private_data(tuya_ble_private_data_type private_data_type, uint8_t *p_data, uint32_t data_size);
/*
*@brief Get device certificate length
*@param
*
*@note
*
* */
uint32_t tuya_ble_get_dev_crt_len(void);
/*
*@brief Get device certificate data
*@param
*
*@note
*
* */
tuya_ble_status_t tuya_ble_get_dev_crt_der(uint8_t *p_der, uint32_t der_len);
/*
*@brief
*@param
*
*@note
*
* */
tuya_ble_status_t tuya_ble_ecc_keypair_gen_secp256r1(uint8_t *public_key, uint8_t *private_key);
/*
*@brief
*@param
*
*@note
*
* */
tuya_ble_status_t tuya_ble_ecc_shared_secret_compute_secp256r1(uint8_t *public_key, uint8_t *private_key, uint8_t *secret_key);
/*
*@brief
*@param
*
*@note
*
* */
tuya_ble_status_t tuya_ble_ecc_sign_secp256r1(const uint8_t *p_sk, const uint8_t *p_data, uint32_t data_size, uint8_t *p_sig);
/*
*@brief
*@param
*
*@note
*
* */
tuya_ble_status_t tuya_ble_ecc_verify_secp256r1(const uint8_t *p_pk, const uint8_t *p_hash, uint32_t hash_size, const uint8_t *p_sig);
/**
* @brief This function calculates the full generic HMAC
* on the input buffer with the provided key.
* @param key The HMAC secret key.
* @param key_len The length of the HMAC secret key in Bytes.
* @param input specifed plain text to be encypted
* @param output output buffer to store the result data
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
bool tuya_ble_hmac_sha1_crypt(const uint8_t *key, uint32_t key_len, const uint8_t *input, uint32_t input_len, uint8_t *output);
/**
* @brief This function calculates the full generic HMAC
* on the input buffer with the provided key.
* @param key The HMAC secret key.
* @param key_len The length of the HMAC secret key in Bytes.
* @param input specifed plain text to be encypted
* @param output output buffer to store the result data
* @param input_len byte length of the data to be encypted
* @return encryption results
* @retval true successful
* @retval false fail
* @note
*/
bool tuya_ble_hmac_sha256_crypt(const uint8_t *key, uint32_t key_len, const uint8_t *input, uint32_t input_len, uint8_t *output);
/**
* \brief Allocate a memory block with required size.
*
*
* \param[in] size Required memory size.
*
* \return The address of the allocated memory block. If the address is NULL, the
* memory allocation failed.
*/
void *tuya_ble_port_malloc(uint32_t size);
/**
*
* \brief Free a memory block that had been allocated.
*
* \param[in] pv The address of memory block being freed.
*
* \return None.
*/
void tuya_ble_port_free(void *pv);
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,32 @@
/**
* \file tuya_ble_port_peripheral.c
*
* \brief
*/
/*
* Copyright (C) 2014-2019, Tuya Inc., All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of tuya ble sdk
*/
#include "tuya_ble_port.h"
#include "tuya_ble_type.h"
@@ -0,0 +1,43 @@
/**
* \file tuya_ble_port_peripheral.h
*
* \brief
*/
/*
* Copyright (C) 2014-2019, Tuya Inc., All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of tuya ble sdk
*/
#ifndef TUYA_BLE_PORT_PERIPHERAL_H__
#define TUYA_BLE_PORT_PERIPHERAL_H__
#include "tuya_ble_stdlib.h"
#include "tuya_ble_type.h"
#endif
@@ -0,0 +1,86 @@
/**
* \file tuya_ble_stdlib.h
*
* \brief
*/
/*
* Copyright (C) 2014-2019, Tuya Inc., All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of tuya ble sdk
*/
#ifndef TUYA_BLE_STDLIB_H__
#define TUYA_BLE_STDLIB_H__
/*
* If not using the standard library,please set to 0 . Then implement the library functions required by the TUYA BLE SDK in other files and declare in this file.
*/
#define TUYA_BLE_USE_STDLIB 1
#if TUYA_BLE_USE_STDLIB
#include "cpu.h"
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
#else
//
typedef unsigned char uint8_t ;
typedef signed char int8_t;
typedef unsigned short uint16_t;
typedef signed short int16_t;
typedef int int32_t;
typedef unsigned int uint32_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
#define true 1
#define false 0
..........
void *memset(void *str, int32_t c, uint32_t n);
void *memcpy(void *str1, const void *str2, uint32_t n);
int32_t memcmp(const void *str1, const void *str2, uint32_t n);
uint32_t strlen(const char *str);
int32_t rand(void);
int64_t atoll(const char *str);
.............
#endif
#endif