monoZ docs
|
There are certain context variables provided by user to initialize all the context required by the monoZ_Lib.
i. Hardware related context[Mandatory]
ii. Modem related context[Optional]
i. Hardware related context
The definitions of all hardware context variables are present in “MZ_public.h” header file. The sample template for using is also provided in the same header file.
a. Main context variable
User must create this context variable for successful use of the library. In case the context variable is not created by user, The monoZ_Lib will not initialize and a linker error will occur.
monoZ Click tool user
Incase using tool, this variable is created and placed in "MZ_hardware_config.c"
UART Sample code implementation
extern MZ_UART_INIT_ST uart3_instance; uart_enable uart_enable_cfg = { .u3 = MZI_UART3, .u3p = &uart3_instance, .lu1 = MZI_LPUART1, .lu1p = 0, }; i2c_enable i2c_enable_cfg = { .i2 = MZI_I2C2, .i2p = 0, .i4 = MZI_I2C4, .i4p = 0, };
b. UART Peripheral context variable
User must create the peripheral context variable for the desired interface and use it in Main context variable. In case of the UART example, any free UART interface for sensor communication can be used. monoZ_Lib takes all UART related initialization context through “uart_enable_cfg“ context variable. For the UART application, we need to define a peripheral context variable. Let’s say “uart3_instance”.
monoZ Click tool user
User have to create the UART instance first in the tool and then associate the instance to the example application during UART example creation. Incase using tool, this variable is created and placed in "MZ_uartX_instance.c"
UART Sample code implementation
MZ_UART_INIT_ST uart3_instance = { .Instance = MZ_UART3_INSTANCE, .Init.BaudRate = MZ_UART3_INIT_BAUDRATE, .Init.WordLength = MZ_UART3_INIT_WORDLENGTH, .Init.StopBits = MZ_UART3_INIT_STOPBITS, .Init.Parity = MZ_UART3_INIT_PARITY, .Init.Mode = MZ_UART3_INIT_MODE, .Init.HwFlowCtl = MZ_UART3_INIT_HWFLOWCTL, .Init.OverSampling = MZ_UART3_INIT_OVERSAMPLING, .Init.OneBitSampling = MZ_UART3_INIT_ONEBITSAMPLING, .AdvancedInit.AdvFeatureInit = MZ_UART3_ADVANCEDINIT_ADVFEATUREINIT };
ii. Modem related context
User must create the modem context functions if wish to initialize modem with specific configuration. There are 2 function definitions present to provide flexibility. The names of the function are fixed. User need to define the function with this exact name. Prototype of the functions are as follows:
Note: User must define the desired AT commands need to be executed during these actions.
monoZ Click tool user
Incase using tool, these functions are created and placed in "MZ_modem_config.c"
Sample code implementation
void mz_reset_sequence(void * arg) { (void)arg; mz_power_config(); mz_apn_set(); mz_lwm2m_config(); mz_device_reboot(); mz_device_start(); mz_lwm2m_start(); } Void mz_reboot_sequence(void * arg) { (void)arg; mz_device_reboot(); mz_device_start(); mz_lwm2m_start(); }
User must initialize the monoZ_Lib before it can start using the library features. The monoZ Library can be initialized using the API MZ_init (). “MZ_main. h” header file provides a sample use of how to initialize the library.
monoZ Click tool user
Incase using tool, monoZ Library initialization code is placed inside main() API present in main.c
Sample code implementation
mz_version ver = { ._major = MZ_SW_VERSION_MAJOR, ._minor = MZ_SW_VERSION_MINOR, ._patch = MZ_SW_VERSION_PATCH }; if(MZ_OK != MZ_init(&ver)) { Error_Handler(); }
The UART Application initialization is done before the Main FreeRTOS kernel starts. User must create a user application using the monoZ Library API’s.
monoZ Click tool user
Incase using tool, the code is generated and placed in "MZ_uart_example.c" and the code is called within main in "main.c" .
UART Sample code implementation
static void uart_app(void * arg) { … }
mz_error_t uart_app_init(void) { … if(!mz_thread_create( &uart_thread_id,"Uart Scheduler",uart_app,NULL,osPriorityNormal,uart_stack,UART_APP_STACK_SIZE,&uart_cb_mem,sizeof(uart_cb_mem))) { _ret = MZ_THREAD_CREATE_FAIL; } ... }
/* creation of user task */ if(MZ_OK != uart_app_init()) { Error_Handler(); }
User must design the application based on requirements. Application should send UART data periodically.
UART Sample code implementation
if(MZ_OK != mz_tm_create_start_recursive("UART transmission timer", UART_TX_TIME, timer_cb)) { /* Timer create and start failed. */ __NOP(); /* Dummy No operation statement */ }
static void timer_cb(TimerHandle_t xTimer) { mz_puts("Timer expires\r\n"); MZ_UART_Transmit_IT(MZ_UART_INSTANCE, (uint8_t*) &send_data, sizeof(send_data)); }
a. How to use UART in interrupt mode.
User must register UART event callback to use UART in interrupt mode.
MZ_UART_register_intr_cb_rx(_USART3, uart3_rx_intr);
The callback API uart3_rx_intr () will be called by monoZ_Lib after uart receive interrupt is generated by MCU. User must first set the UART in receive interrupt mode when expecting data to be received on interface.
MZ_UART_Receive_IT(_USART3, &receive_buffer, sizeof(receive_buffer));For more details user can check "MZ_uart.h"
b. How to use UART in polling mode.
MZ_UART_Transmit(_USART3, &transmit_buffer, sizeof(transmit_buffer), 1000);
Click here to access the source code of this file.