sdk-ameba-v4.0b-gcc/component/common/example/uart_firmware_update/example_uart_update.c
Tautvydas Belgeras 60a7afcc83 initial commit
2018-06-05 16:16:17 +03:00

59 lines
1.5 KiB
C

#include "FreeRTOS.h"
#include "task.h"
#include "example_uart_update.h"
#include <platform/platform_stdlib.h>
#define XMODEM_UART_IDX 0
#define XMODEM_UART_MUX 2
#define XMODEM_UART_BAUDRATE 115200
extern void OTU_FW_Update(u8, u8, u32);
int is_update_image_enable(gpio_t *gpio_uart_update_eable)
{
GPIO_InitTypeDef GPIO_Pin;
u32 active_state;
// gpio_t gpio_uart_update_eable;
int ret = 0;
gpio_init(gpio_uart_update_eable, PIN_NAME);
gpio_dir(gpio_uart_update_eable, PIN_INPUT); // Direction: Input
gpio_mode(gpio_uart_update_eable, PullUp); // Pull-High
// ret = gpio_read(&gpio_uart_update_eable);
return ret;
}
void example_uart_update_thread(void *param)
{
int count = 0;
gpio_t gpio_uart_update_eable;
is_update_image_enable(&gpio_uart_update_eable);
//polling MAX_WAIT_TIME*50ms
while(count <= MAX_WAIT_TIME)
{
printf("waitting update enable\r\n");
if(gpio_read(&gpio_uart_update_eable) == 0){
printf("update image enabled with xmodem protocol!\r\n");
//uart_ymodem();
OTU_FW_Update(XMODEM_UART_IDX, XMODEM_UART_MUX, XMODEM_UART_BAUDRATE);
break;
}
else{
//RtlMsleepOS(50);
rtw_msleep_os(50);
count++;
}
}
vTaskDelete(NULL);
}
void example_uart_update(void)
{
if(xTaskCreate(example_uart_update_thread, ((const char*)"example_uart_update_thread"), 512, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS)
printf("\n\r%s xTaskCreate(init_thread) failed", __FUNCTION__);
}