1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openLuat-luatos-soc-air101

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Клонировать/Скачать
luat_shell_air101.c 3.3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Dozingfiretruck Отправлено 3 лет назад 6158faa
#include "luat_shell.h"
#include "wm_include.h"
#define LUAT_LOG_TAG "luat.shell"
#include "luat_log.h"
#include "wm_uart.h"
#include "luat_uart.h"
typedef struct {
size_t len;
char buff[0];
}uart_data;
void luat_shell_write(char* buff, size_t len) {
int i=0;
while (i < len){
while(tls_reg_read32(HR_UART0_FIFO_STATUS) & 0x3F);
tls_reg_write32(HR_UART0_TX_WIN, (unsigned int)buff[i++]);
}
}
void luat_shell_notify_recv(void) {
}
static tls_os_queue_t *shell_queue = NULL;
static int16_t luat_shell_uart_cb(uint16_t len, void* user_data){
// printf("luat_shell_uart_cb\r");
int uartid = (int)user_data;
if(uartid >= 100)
{
// printf("before tls_os_queue_send\r");
tls_os_queue_send(shell_queue, (void *)user_data, 0);
// printf("after tls_os_queue_send\r");
}
return 0;
}
static void luat_shell(void *sdata){
int* tag;
// char* receive_buf;
char buff[512];
int ret = 0;
int len = 1;
while (1) {
// printf("tls_os_queue_receive \r");
ret = tls_os_queue_receive(shell_queue, (void **) &tag, 0, 0);
if (ret) {
// printf("tls_os_queue_receive ret = %d\r", ret);
break;
}
len = 1;
while (len > 0 && len < 512) {
// printf("before luat_uart_read\r");
memset(buff, 0, 512);
len = luat_uart_read(0, buff, 511);
// printf("after luat_uart_read %d\r", len);
if (len > 0 && len < 512) {
buff[511] = 0x00; // 确保结尾
// printf("before luat_shell_push %d\r", len);
luat_shell_push(buff, len);
// printf("after luat_shell_push %d\r", len);
}
}
// printf("shell loop end\r");
}
}
// static int16_t luat_shell_uart_cb(uint16_t len, void* user_data){
// printf("luat_shell_uart_cb len %d uartid %d\n", len,(int)user_data);
// int uartid = (int)user_data;
// char buff[512] = {0};
// if(uartid >= 100)
// {
// int l = 1;
// while (l > 0 && l <= 512) {
// l = luat_uart_read(0, buff, 512);
// //printf("uart read buff %d %s\n", l, buff);
// if (l > 0 && l <= 512){
// // luat_shell_push(buff, l);
// // 多一个字节放\0
// uart_data* send_buf = (uart_data*)luat_heap_malloc(sizeof(uart_data)+l+1);
// if(send_buf == NULL)
// break;
// send_buf->len = l;
// memmove(send_buf->buff, buff, l);
// send_buf->buff[l] = 0; // 放个0x0, 确认一下
// tls_os_queue_send(shell_queue, (void *)send_buf, sizeof(uart_data)+l);
// }
// }
// }
// return 0;
// }
// static void luat_shell(void *sdata){
// uart_data* receive_buf;
// // char* receive_buf;
// int ret = 0;
// while (1) {
// ret = tls_os_queue_receive(shell_queue, (void **) &receive_buf, 0, 0);
// if (ret) {
// break;
// }
// printf(">>> before luat_shell_push\r\n");
// luat_shell_push(receive_buf->buff, receive_buf->len);
// printf("<<< after luat_shell_push\r\n");
// luat_heap_free(receive_buf);
// }
// }
#define TASK_START_STK_SIZE 512
static OS_STK __attribute__((aligned(4))) TaskStartStk[TASK_START_STK_SIZE] = {0};
void luat_shell_poweron(int _drv) {
tls_uart_rx_callback_register(0, luat_shell_uart_cb, NULL);
tls_os_queue_create(&shell_queue, 256);
tls_os_task_create(NULL, NULL,
luat_shell,
NULL,
(void *)TaskStartStk, /* task's stack start address */
TASK_START_STK_SIZE * sizeof(u32), /* task's stack size, unit:byte */
10,
0);
}

Комментарий ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://gitlife.ru/oschina-mirror/openLuat-luatos-soc-air101.git
git@gitlife.ru:oschina-mirror/openLuat-luatos-soc-air101.git
oschina-mirror
openLuat-luatos-soc-air101
openLuat-luatos-soc-air101
master