Merge branch 'master' of https://github.com/RT-Thread/rt-thread into drv_encoder

# Conflicts:
#	components/drivers/misc/encoder.c
This commit is contained in:
tangweikang
2019-08-30 16:11:46 +08:00
53 changed files with 5884 additions and 380 deletions
+8 -2
View File
@@ -853,7 +853,10 @@ void rt_hw_can_isr(struct rt_can_device *can, int event)
level = rt_hw_interrupt_disable();
rx_length = can->hdr[hdr].msgs * sizeof(struct rt_can_msg);
rt_hw_interrupt_enable(level);
can->hdr[hdr].filter.ind(&can->parent, can->hdr[hdr].filter.args, hdr, rx_length);
if (rx_length)
{
can->hdr[hdr].filter.ind(&can->parent, can->hdr[hdr].filter.args, hdr, rx_length);
}
}
else
#endif
@@ -867,7 +870,10 @@ void rt_hw_can_isr(struct rt_can_device *can, int event)
rx_length = rt_list_len(&rx_fifo->uselist)* sizeof(struct rt_can_msg);
rt_hw_interrupt_enable(level);
can->parent.rx_indicate(&can->parent, rx_length);
if (rx_length)
{
can->parent.rx_indicate(&can->parent, rx_length);
}
}
}
break;
+3 -37
View File
@@ -8,13 +8,10 @@
* 2019-08-21 zhangjun copy from minilibc
*/
#if defined(__CC_ARM) || defined(__CLANG_ARM) || defined (__IAR_SYSTEMS_ICC__)
#include <time.h>
#include <rtthread.h>
/* seconds per day */
#define SPD 24*60*60
#if !defined (__IAR_SYSTEMS_ICC__)
/* days per month -- nonleap! */
const short __spm[13] =
@@ -93,15 +90,7 @@ struct tm *gmtime_r(const time_t *timep, struct tm *r)
return r;
}
#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
#if _DLIB_TIME_USES_64
struct tm* __gmtime64(const time_t* t)
#else
struct tm* __gmtime32(const time_t* t)
#endif
#else
struct tm* gmtime(const time_t* t)
#endif
{
static struct tm tmp;
return gmtime_r(t, &tmp);
@@ -113,29 +102,13 @@ struct tm* localtime_r(const time_t* t, struct tm* r)
return gmtime_r(t, r);
}
#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
#if _DLIB_TIME_USES_64
struct tm* __localtime64(const time_t* t)
#else
struct tm* __localtime32(const time_t* t)
#endif
#else
struct tm* localtime(const time_t* t)
#endif
{
static struct tm tmp;
return localtime_r(t, &tmp);
}
#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
#if _DLIB_TIME_USES_64
time_t __mktime64(struct tm * const t)
#else
time_t __mktime32(struct tm * const t)
#endif
#else
time_t mktime(struct tm * const t)
#endif
{
register time_t day;
register time_t i;
@@ -242,15 +215,7 @@ char* asctime(const struct tm *timeptr)
return asctime_r(timeptr, buf);
}
#if defined (__IAR_SYSTEMS_ICC__) && (__VER__) >= 6020000
#if _DLIB_TIME_USES_64
char* __ctime64(const time_t *timep)
#else
char* __ctime32(const time_t *timep)
#endif
#else
char* ctime(const time_t *timep)
#endif
{
return asctime(localtime(timep));
}
@@ -285,6 +250,8 @@ int _gettimeofday( struct timeval *tv, void *ignore)
}
#endif
#endif /* __IAR_SYSTEMS_ICC__ */
/**
* Returns the current time.
*
@@ -340,4 +307,3 @@ RT_WEAK clock_t clock(void)
{
return rt_tick_get();
}
#endif
+3 -1
View File
@@ -96,7 +96,7 @@ struct at_server
rt_device_t device;
at_status_t status;
char (*get_char)(void);
rt_err_t (*get_char)(struct at_server *server, char *ch, rt_int32_t timeout);
rt_bool_t echo_mode;
char recv_buffer[AT_SERVER_RECV_BUFF_LEN];
@@ -194,6 +194,8 @@ int at_server_init(void);
void at_server_printf(const char *format, ...);
void at_server_printfln(const char *format, ...);
void at_server_print_result(at_result_t result);
rt_size_t at_server_send(at_server_t server, const char *buf, rt_size_t size);
rt_size_t at_server_recv(at_server_t server, char *buf, rt_size_t size, rt_int32_t timeout);
/* AT server request arguments parse */
int at_req_parse_args(const char *req_args, const char *req_expr, ...);
+8 -2
View File
@@ -100,6 +100,12 @@ void at_cli_deinit(void)
}
#ifdef AT_USING_SERVER
static rt_err_t at_server_console_getchar(struct at_server *server, char *ch, rt_int32_t timeout)
{
*ch = console_getchar();
return RT_EOK;
}
static void server_cli_parser(void)
{
extern at_server_t at_get_server(void);
@@ -107,7 +113,7 @@ static void server_cli_parser(void)
at_server_t server = at_get_server();
rt_base_t int_lvl;
static rt_device_t device_bak;
static char (*getchar_bak)(void);
static rt_err_t (*getchar_bak)(struct at_server *server, char *ch, rt_int32_t timeout);
static char endmark_back[AT_END_MARK_LEN];
/* backup server device and getchar function */
@@ -122,7 +128,7 @@ static void server_cli_parser(void)
/* setup server device as console device */
server->device = rt_console_get_device();
server->get_char = console_getchar;
server->get_char = at_server_console_getchar;
memset(server->end_mark, 0x00, AT_END_MARK_LEN);
server->end_mark[0] = '\r';
+93 -6
View File
@@ -167,6 +167,79 @@ void rt_at_server_print_all_cmd(void)
}
}
/**
* Send data to AT Client by uart device.
*
* @param server current AT server object
* @param buf send data buffer
* @param size send fixed data size
*
* @return >0: send data size
* =0: send failed
*/
rt_size_t at_server_send(at_server_t server, const char *buf, rt_size_t size)
{
RT_ASSERT(buf);
if (server == RT_NULL)
{
LOG_E("input AT Server object is NULL, please create or get AT Server object!");
return 0;
}
return rt_device_write(server->device, 0, buf, size);
}
/**
* AT Server receive fixed-length data.
*
* @param client current AT Server object
* @param buf receive data buffer
* @param size receive fixed data size
* @param timeout receive data timeout (ms)
*
* @note this function can only be used in execution function of AT commands
*
* @return >0: receive data size
* =0: receive failed
*/
rt_size_t at_server_recv(at_server_t server, char *buf, rt_size_t size, rt_int32_t timeout)
{
rt_size_t read_idx = 0;
rt_err_t result = RT_EOK;
char ch = 0;
RT_ASSERT(buf);
if (server == RT_NULL)
{
LOG_E("input AT Server object is NULL, please create or get AT Server object!");
return 0;
}
while (1)
{
if (read_idx < size)
{
/* check get data value */
result = server->get_char(server, &ch, timeout);
if (result != RT_EOK)
{
LOG_E("AT Server receive failed, uart device get data error.");
return 0;
}
buf[read_idx++] = ch;
}
else
{
break;
}
}
return read_idx;
}
at_server_t at_get_server(void)
{
RT_ASSERT(at_server_local);
@@ -339,17 +412,21 @@ static rt_err_t at_cmd_get_name(const char *cmd_buffer, char *cmd_name)
return -RT_ERROR;
}
static char at_server_gerchar(void)
static rt_err_t at_server_gerchar(at_server_t server, char *ch, rt_int32_t timeout)
{
char ch;
rt_err_t result = RT_EOK;
while (rt_device_read(at_server_local->device, 0, &ch, 1) == 0)
while (rt_device_read(at_server_local->device, 0, ch, 1) == 0)
{
rt_sem_control(at_server_local->rx_notice, RT_IPC_CMD_RESET, RT_NULL);
rt_sem_take(at_server_local->rx_notice, RT_WAITING_FOREVER);
result = rt_sem_take(at_server_local->rx_notice, rt_tick_from_millisecond(timeout));
if (result != RT_EOK)
{
return result;
}
}
return ch;
return result;
}
static void server_parser(at_server_t server)
@@ -365,14 +442,24 @@ static void server_parser(at_server_t server)
RT_ASSERT(server);
RT_ASSERT(server->status != AT_STATUS_UNINITIALIZED);
while (ESC_KEY != (ch = server->get_char()))
while (1)
{
server->get_char(server, &ch, RT_WAITING_FOREVER);
if (ESC_KEY == ch)
{
break;
}
if (server->echo_mode)
{
if (ch == AT_CMD_CR || (ch == AT_CMD_LF && last_ch != AT_CMD_CR))
{
at_server_printf("%c%c", AT_CMD_CR, AT_CMD_LF);
}
else if (ch == AT_CMD_LF)
{
// skip the end sign check
}
else if (ch == BACKSPACE_KEY || ch == DELECT_KEY)
{
if (server->cur_recv_len)
+20 -4
View File
@@ -355,7 +355,7 @@ void netdev_set_default(struct netdev *netdev)
/* set default network interface device in the current network stack */
netdev->ops->set_default(netdev);
}
LOG_D("Setting default network interface device name(%s) successfully.", netdev->name);
LOG_D("Setting default network interface device name(%s) successfully.", netdev->name);
}
}
@@ -1037,16 +1037,30 @@ int netdev_cmd_ping(char* target_name, rt_uint32_t times, rt_size_t size)
{
/* using first internet up status network interface device */
netdev = netdev_get_first_by_flags(NETDEV_FLAG_LINK_UP);
if (netdev == RT_NULL || NETDEV_PING_IS_COMMONICABLE(netdev) == 0)
if (netdev == RT_NULL)
{
rt_kprintf("ping: network interface device get error.\n");
rt_kprintf("ping: not found available network interface device.\n");
return -RT_ERROR;
}
else if (netdev->ops == RT_NULL || netdev->ops->ping == RT_NULL)
{
rt_kprintf("ping: network interface device(%s) not support ping feature.\n", netdev->name);
return -RT_ERROR;
}
else if (!netdev_is_up(netdev) || !netdev_is_link_up(netdev))
{
rt_kprintf("ping: network interface device(%s) status error.\n", netdev->name);
return -RT_ERROR;
}
}
for (index = 0; index < times; index++)
{
int delay_tick = 0;
rt_tick_t start_tick = 0;
rt_memset(&ping_resp, 0x00, sizeof(struct netdev_ping_resp));
start_tick = rt_tick_get();
ret = netdev->ops->ping(netdev, (const char *)target_name, size, NETDEV_PING_RECV_TIMEO, &ping_resp);
if (ret == -RT_ETIMEOUT)
{
@@ -1073,7 +1087,9 @@ int netdev_cmd_ping(char* target_name, rt_uint32_t times, rt_size_t size)
}
}
rt_thread_mdelay(NETDEV_PING_DELAY);
/* if the response time is more than NETDEV_PING_DELAY, no nead to delay */
delay_tick = ((rt_tick_get() - start_tick) > NETDEV_PING_DELAY) || (index == times) ? 0 : NETDEV_PING_DELAY;
rt_thread_delay(delay_tick);
}
return RT_EOK;