xref: /nrf52832-nimble/rt-thread/components/net/at/src/at_utils.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2018-04-14     chenyong     first version
9*10465441SEvalZero  */
10*10465441SEvalZero 
11*10465441SEvalZero #include <at.h>
12*10465441SEvalZero #include <stdlib.h>
13*10465441SEvalZero #include <stdio.h>
14*10465441SEvalZero 
15*10465441SEvalZero static char send_buf[AT_CMD_MAX_LEN];
16*10465441SEvalZero static rt_size_t last_cmd_len = 0;
17*10465441SEvalZero 
18*10465441SEvalZero /**
19*10465441SEvalZero  * dump hex format data to console device
20*10465441SEvalZero  *
21*10465441SEvalZero  * @param name name for hex object, it will show on log header
22*10465441SEvalZero  * @param buf hex buffer
23*10465441SEvalZero  * @param size buffer size
24*10465441SEvalZero  */
at_print_raw_cmd(const char * name,const char * buf,rt_size_t size)25*10465441SEvalZero void at_print_raw_cmd(const char *name, const char *buf, rt_size_t size)
26*10465441SEvalZero {
27*10465441SEvalZero #define __is_print(ch)       ((unsigned int)((ch) - ' ') < 127u - ' ')
28*10465441SEvalZero #define WIDTH_SIZE           32
29*10465441SEvalZero 
30*10465441SEvalZero     rt_size_t i, j;
31*10465441SEvalZero 
32*10465441SEvalZero     for (i = 0; i < size; i += WIDTH_SIZE)
33*10465441SEvalZero     {
34*10465441SEvalZero         rt_kprintf("[D/AT] %s: %04X-%04X: ", name, i, i + WIDTH_SIZE);
35*10465441SEvalZero         for (j = 0; j < WIDTH_SIZE; j++)
36*10465441SEvalZero         {
37*10465441SEvalZero             if (i + j < size)
38*10465441SEvalZero             {
39*10465441SEvalZero                 rt_kprintf("%02X ", buf[i + j]);
40*10465441SEvalZero             }
41*10465441SEvalZero             else
42*10465441SEvalZero             {
43*10465441SEvalZero                 rt_kprintf("   ");
44*10465441SEvalZero             }
45*10465441SEvalZero             if ((j + 1) % 8 == 0)
46*10465441SEvalZero             {
47*10465441SEvalZero                 rt_kprintf(" ");
48*10465441SEvalZero             }
49*10465441SEvalZero         }
50*10465441SEvalZero         rt_kprintf("  ");
51*10465441SEvalZero         for (j = 0; j < WIDTH_SIZE; j++)
52*10465441SEvalZero         {
53*10465441SEvalZero             if (i + j < size)
54*10465441SEvalZero             {
55*10465441SEvalZero                 rt_kprintf("%c", __is_print(buf[i + j]) ? buf[i + j] : '.');
56*10465441SEvalZero             }
57*10465441SEvalZero         }
58*10465441SEvalZero         rt_kprintf("\n");
59*10465441SEvalZero     }
60*10465441SEvalZero }
61*10465441SEvalZero 
at_get_last_cmd(rt_size_t * cmd_size)62*10465441SEvalZero const char *at_get_last_cmd(rt_size_t *cmd_size)
63*10465441SEvalZero {
64*10465441SEvalZero     *cmd_size = last_cmd_len;
65*10465441SEvalZero     return send_buf;
66*10465441SEvalZero }
67*10465441SEvalZero 
at_vprintf(rt_device_t device,const char * format,va_list args)68*10465441SEvalZero rt_size_t at_vprintf(rt_device_t device, const char *format, va_list args)
69*10465441SEvalZero {
70*10465441SEvalZero     last_cmd_len = vsnprintf(send_buf, sizeof(send_buf), format, args);
71*10465441SEvalZero 
72*10465441SEvalZero #ifdef AT_PRINT_RAW_CMD
73*10465441SEvalZero     at_print_raw_cmd("send", send_buf, last_cmd_len);
74*10465441SEvalZero #endif
75*10465441SEvalZero 
76*10465441SEvalZero     return rt_device_write(device, 0, send_buf, last_cmd_len);
77*10465441SEvalZero }
78*10465441SEvalZero 
at_vprintfln(rt_device_t device,const char * format,va_list args)79*10465441SEvalZero rt_size_t at_vprintfln(rt_device_t device, const char *format, va_list args)
80*10465441SEvalZero {
81*10465441SEvalZero     rt_size_t len;
82*10465441SEvalZero 
83*10465441SEvalZero     len = at_vprintf(device, format, args);
84*10465441SEvalZero 
85*10465441SEvalZero     rt_device_write(device, 0, "\r\n", 2);
86*10465441SEvalZero 
87*10465441SEvalZero     return len + 2;
88*10465441SEvalZero }
89