Files
zTC1/mico-os/platform/MCU/MX1290/moc/moc_api_sep.h
2025-03-11 14:10:51 +08:00

258 lines
12 KiB
C

enum {
API_VERSION_V1 = 1,
API_VERSION_MAX,
};
typedef void* mico_event;
typedef void (*ssl_log_cb)(const int logLevel, const char *const logMessage);
typedef struct Md5 {
uint32_t buffLen; /* length in bytes */
uint32_t loLen; /* length in bytes */
uint32_t hiLen; /* length in bytes */
uint32_t buffer[MD5_BLOCK_SIZE / sizeof(uint32_t)];
uint32_t digest[MD5_DIGEST_SIZE / sizeof(uint32_t)];
} Md5;
typedef void (*mgnt_handler_t)(char *buf, int buf_len);
typedef struct {
/* OS Layer*/
int (*system_config)(int type, void *value);/* system configuration */
int (*mxchipInit)();
OSStatus (*mico_rtos_create_thread)( mico_thread_t* thread, uint8_t priority, const char* name, mico_thread_function_t function, uint32_t stack_size, uint32_t arg );
OSStatus (*mico_rtos_delete_thread)( mico_thread_t* thread );
void (*mico_rtos_suspend_thread)(mico_thread_t* thread);
void (*mico_rtos_suspend_all_thread)(void);
long (*mico_rtos_resume_all_thread)(void);
OSStatus (*mico_rtos_thread_join)( mico_thread_t* thread );
OSStatus (*mico_rtos_thread_force_awake)( mico_thread_t* thread );
bool (*mico_rtos_is_current_thread)( mico_thread_t* thread );
void (*mico_thread_sleep)(uint32_t seconds);
void (*mico_thread_msleep)(uint32_t milliseconds);
OSStatus (*mico_rtos_init_semaphore)( mico_semaphore_t* semaphore, int count );
OSStatus (*mico_rtos_set_semaphore)( mico_semaphore_t* semaphore );
OSStatus (*mico_rtos_get_semaphore)( mico_semaphore_t* semaphore, uint32_t timeout_ms );
OSStatus (*mico_rtos_deinit_semaphore)( mico_semaphore_t* semaphore );
OSStatus (*mico_rtos_init_mutex)( mico_mutex_t* mutex );
OSStatus (*mico_rtos_lock_mutex)( mico_mutex_t* mutex );
OSStatus (*mico_rtos_unlock_mutex)( mico_mutex_t* mutex );
OSStatus (*mico_rtos_deinit_mutex)( mico_mutex_t* mutex );
OSStatus (*mico_rtos_init_queue)( mico_queue_t* queue, const char* name, uint32_t message_size, uint32_t number_of_messages );
OSStatus (*mico_rtos_push_to_queue)( mico_queue_t* queue, void* message, uint32_t timeout_ms );
OSStatus (*mico_rtos_pop_from_queue)( mico_queue_t* queue, void* message, uint32_t timeout_ms );
OSStatus (*mico_rtos_deinit_queue)( mico_queue_t* queue );
bool (*mico_rtos_is_queue_empty)( mico_queue_t* queue );
bool (*mico_rtos_is_queue_full)( mico_queue_t* queue );
uint32_t (*mico_get_time)(void);
OSStatus (*mico_init_timer)( mico_timer_t* timer, uint32_t time_ms, timer_handler_t function, void* arg );
OSStatus (*mico_start_timer)( mico_timer_t* timer );
OSStatus (*mico_stop_timer)( mico_timer_t* timer );
OSStatus (*mico_reload_timer)( mico_timer_t* timer );
OSStatus (*mico_deinit_timer)( mico_timer_t* timer );
bool (*mico_is_timer_running)( mico_timer_t* timer );
int (*mico_create_event_fd)(mico_event handle);
int (*mico_delete_event_fd)(int fd);
/* memory management*/
struct mxchip_mallinfo* (*mico_memory_info)(void);
void* (*malloc)(size_t size); // malloc
void* (*realloc)(void* pv, size_t size); // realloc
void (*free)(void* pv); //free
void* (*calloc)(size_t nmemb, size_t size); // calloc
void (*heap_insert)(uint8_t *pv, int len);
void (*get_random_sequence)(unsigned char *buf, unsigned int size);
int (*last_reset_reason)(void);
int (*aon_write)( uint32_t offset, uint8_t* in ,uint32_t len);
int (*aon_read )( uint32_t offset, uint8_t* out, uint32_t len);
/* uitls */
int (*debug_putchar)(char *ch, int len);
int (*debug_getchar)(char *ch);
void (*MicoSystemReboot)( void );
struct tm* (*localtime)(const time_t * time);
char * (*asctime)(const struct tm *tm);
} os_api_v1_t;
typedef struct {
/* SSL */
void (*ssl_set_cert)(const char *_cert_pem, const char *private_key_pem);
void* (*ssl_connect)(int fd, int calen, char*ca, int *errno);
void* (*ssl_accept)(int fd);
int (*ssl_send)(void* ssl, char *data, int len);
int (*ssl_recv)(void* ssl, char *data, int len);
int (*ssl_close)(void* ssl);
void (*set_ssl_client_version)(int version);
int (*ssl_pending)(void* ssl);
int (*ssl_get_error)(void* ssl, int ret);
void (*ssl_set_using_nonblock)(void* ssl, int nonblock);
int (*ssl_get_fd)(const void* ssl);
int (*ssl_loggingcb)(ssl_log_cb f);
/*crypto*/
void (*InitMd5)(Md5*md5);
void (*Md5Update)(Md5* md5, const uint8_t* data, uint32_t len);
void (*Md5Final)(Md5* md5, uint8_t* hash);
int (*Md5Hash)(const uint8_t* data, uint32_t len, uint8_t* hash);
void (*AesEncryptDirect)(Aes* aes, uint8_t* out, const uint8_t* in);
void (*AesDecryptDirect)(Aes* aes, uint8_t* out, const uint8_t* in);
int (*AesSetKeyDirect)(Aes* aes, const uint8_t* key, uint32_t len,
const uint8_t* iv, int dir);
int (*aes_encrypt)(int sz, const char * key, const char * in, char * out);
int (*aes_decrypt)(int sz, const char * key, const char * in, char * out);
int (*AesSetKey)(Aes* aes, const uint8_t* key, uint32_t len,
const uint8_t* iv, int dir);
int (*AesSetIV)(Aes* aes, const uint8_t* iv);
int (*AesCbcEncrypt)(Aes* aes, uint8_t* out,
const uint8_t* in, uint32_t sz);
int (*AesCbcDecrypt)(Aes* aes, uint8_t* out,
const uint8_t* in, uint32_t sz);
void* (*ssl_nonblock_connect)(int fd, int calen, char*ca, int *errno, int timeout);
void (*ssl_set_client_cert)(const char *_cert_pem, const char *private_key_pem);
void* (*ssl_connect_sni)(int fd, int calen, char*ca, char *sni_servername, int *errno);
} ssl_crypto_api_v1_t;
typedef struct {
/* WIFI MGR */
int (*wlan_get_mac_address)(unsigned char *dest);
int (*wlan_get_mac_address_by_interface)(wlan_if_t wlan_if, unsigned char *dest);
int (*wlan_driver_version)( char* version, int length );
OSStatus (*micoWlanStart)(network_InitTypeDef_st* inNetworkInitPara);
OSStatus (*micoWlanStartAdv)(network_InitTypeDef_adv_st* inNetworkInitParaAdv);
OSStatus (*micoWlanGetIPStatus)(IPStatusTypedef *outNetpara, WiFi_Interface inInterface);
OSStatus (*micoWlanGetLinkStatus)(LinkStatusTypeDef *outStatus);
void (*micoWlanStartScan)(void);
void (*micoWlanStartScanAdv)(void);
OSStatus (*micoWlanPowerOff)(void);
OSStatus (*micoWlanPowerOn)(void);
OSStatus (*micoWlanSuspend)(void);
OSStatus (*micoWlanSuspendStation)(void);
OSStatus (*micoWlanSuspendSoftAP)(void);
OSStatus (*micoWlanStartEasyLink)(int inTimeout);
OSStatus (*micoWlanStopEasyLink)(void);
void (*micoWlanEnablePowerSave)(void);
void (*micoWlanDisablePowerSave)(void);
void (*wifimgr_debug_enable)(bool enable);
int (*mico_wlan_monitor_rx_type)(int type);
int (*mico_wlan_start_monitor)(void);
int (*mico_wlan_stop_monitor)(void);
int (*mico_wlan_set_channel)(int channel);
void (*mico_wlan_register_monitor_cb)(monitor_cb_t fn);
void (*wlan_set_channel)(int channel);
int (*mxchip_active_scan)(char*ssid, int is_adv);
int (*send_easylink_minus)(uint32_t ip, char *ssid, char *key) ;
int (*mico_wlan_get_channel)(void);
OSStatus (*wifi_manage_custom_ie_add)(wlan_if_t wlan_if, uint8_t *custom_ie, uint32_t len);
OSStatus (*wifi_manage_custom_ie_delete)(wlan_if_t wlan_if);
int (*wlan_inject_frame)(const uint8_t *buff, size_t len);
int (*mico_wlan_monitor_no_easylink)(void);
int (*wifi_set_country)(int country_code);
int (*wlan_rx_mgnt_set)(int enable, mgnt_handler_t cb);
void (*autoconfig_start)(int seconds, int mode);
} wifi_api_v1_t;
typedef struct {
/* CLI APIs */
int (*cli_init)(void);
int (*cli_register_command)(const struct cli_command *command);
int (*cli_unregister_command)(const struct cli_command *command);
void (*wifistate_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*wifidebug_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*wifiscan_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*ifconfig_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*arp_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*ping_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*dns_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*task_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*socket_show_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*memory_show_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*memory_dump_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*memory_set_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*memp_dump_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*driver_state_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
void (*iperf_Command)(char *pcWriteBuffer, int xWriteBufferLen, int argc, char **argv);
} cli_api_v1_t;
typedef struct {
mico_logic_partition_t* (*MicoFlashGetInfo)( mico_partition_t inPartition );
OSStatus (*MicoFlashErase)(mico_partition_t inPartition, uint32_t off_set, uint32_t size);
OSStatus (*MicoFlashWrite)( mico_partition_t inPartition, volatile uint32_t* off_set, uint8_t* inBuffer ,uint32_t inBufferLength);
OSStatus (*MicoFlashRead)( mico_partition_t inPartition, volatile uint32_t* off_set, uint8_t* outBuffer, uint32_t inBufferLength);
OSStatus (*MicoFlashEnableSecurity)( mico_partition_t partition, uint32_t off_set, uint32_t size );
} flash_api_t;
typedef struct {
OSStatus (*MicoGpioInitialize)( mico_gpio_t gpio, mico_gpio_config_t configuration );
OSStatus (*MicoGpioFinalize)( mico_gpio_t gpio );
OSStatus (*MicoGpioOutputHigh)( mico_gpio_t gpio );
OSStatus (*MicoGpioOutputLow)( mico_gpio_t gpio );
OSStatus (*MicoGpioOutputTrigger)( mico_gpio_t gpio );
bool (*MicoGpioInputGet)( mico_gpio_t gpio );
OSStatus (*MicoGpioEnableIRQ)( mico_gpio_t gpio, mico_gpio_irq_trigger_t trigger, mico_gpio_irq_handler_t handler, void* arg );
OSStatus (*MicoGpioDisableIRQ)( mico_gpio_t gpio );
} gpio_api_t;
typedef struct {
OSStatus (*MicoUartInitialize)( mico_uart_t uart, const mico_uart_config_t* config, ring_buffer_t* optional_rx_buffer );
OSStatus (*MicoUartFinalize)( mico_uart_t uart );
OSStatus (*MicoUartSend)( mico_uart_t uart, const void* data, uint32_t size );
OSStatus (*MicoUartRecv)( mico_uart_t uart, void* data, uint32_t size, uint32_t timeout );
uint32_t (*MicoUartGetLengthInBuffer)( mico_uart_t uart );
void (*MicoUartPinRedirect)(mico_uart_t uart);
} uart_api_t;
typedef struct {
void (*MicoRtcInitialize)(void);
OSStatus (*MicoRtcGetTime)(mico_rtc_time_t *time);
OSStatus (*MicoRtcSetTime)(mico_rtc_time_t *time);
} rtc_api_t;
typedef struct {
/* Power management*/
int (*pm_mcu_state)(power_state_t state, uint32_t time_dur);
int (*pm_wakeup_source)();
void (*wifi_off_mcu_standby)(uint32_t seconds);
void (*MicoMcuPowerSaveConfig)( int enable );
} power_save_api_t;
typedef os_api_v1_t os_api_t;
typedef ssl_crypto_api_v1_t ssl_crypto_api_t;
typedef wifi_api_v1_t wifi_api_t;
typedef cli_api_v1_t cli_api_t;
/* API type define */
typedef struct
{
os_api_t *os_apis;
lwip_api_t *lwip_apis;
ssl_crypto_api_t *ssl_crypto_apis;
wifi_api_t *wifi_apis;
cli_api_t *cli_apis;
flash_api_t *flash_apis;
gpio_api_t *gpio_apis;
uart_api_t *uart_apis;
i2c_api_t *i2c_apis;
spi_api_t *spi_apis;
pwm_api_t *pwm_apis;
rtc_api_t *rtc_apis;
wdg_api_t *wdg_apis;
adc_api_t *adc_apis;
power_save_api_t *ps_apis;
} kernel_api_v1_t;
typedef kernel_api_v1_t kernel_api_t;
typedef struct new_mico_api_struct
{
char *library_version;
int (*mico_api_get)(int version, void *kernel_apis);
} new_mico_api_t;
mico_api_t *moc_adapter(new_mico_api_t *new_mico_api);