Lines Matching refs:client
297 int at_obj_exec_cmd(at_client_t client, at_response_t resp, const char *cmd_expr, ...) in at_obj_exec_cmd() argument
304 if (client == RT_NULL) in at_obj_exec_cmd()
311 if (client->status == AT_STATUS_CLI && resp) in at_obj_exec_cmd()
316 rt_mutex_take(&client->lock, RT_WAITING_FOREVER); in at_obj_exec_cmd()
318 client->resp_status = AT_RESP_OK; in at_obj_exec_cmd()
326 client->resp = resp; in at_obj_exec_cmd()
327 …rt_event_recv(&client->event, at_client_resp_notice_event, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR… in at_obj_exec_cmd()
330 …client->last_cmd_len = at_vprintfln(client->device, client->send_buf, client->send_bufsz, cmd_expr… in at_obj_exec_cmd()
331 if (client->last_cmd_len > 2) in at_obj_exec_cmd()
333 client->last_cmd_len -= 2; /* "\r\n" */ in at_obj_exec_cmd()
339 …if (rt_event_recv(&client->event, at_client_resp_notice_event, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_C… in at_obj_exec_cmd()
341 …LOG_W("execute command (%.*s) timeout (%d ticks)!", client->last_cmd_len, client->send_buf, resp->… in at_obj_exec_cmd()
342 client->resp_status = AT_RESP_TIMEOUT; in at_obj_exec_cmd()
345 else if (client->resp_status != AT_RESP_OK) in at_obj_exec_cmd()
347 LOG_E("execute command (%.*s) failed!", client->last_cmd_len, client->send_buf); in at_obj_exec_cmd()
352 client->resp = RT_NULL; in at_obj_exec_cmd()
354 rt_mutex_release(&client->lock); in at_obj_exec_cmd()
375 int at_obj_exec_cmd_format(at_client_t client, at_response_t resp, const char *format, const char *… in at_obj_exec_cmd_format() argument
382 if (client == RT_NULL) in at_obj_exec_cmd_format()
389 if (client->status == AT_STATUS_CLI && resp) in at_obj_exec_cmd_format()
394 rt_mutex_take(&client->lock, RT_WAITING_FOREVER); in at_obj_exec_cmd_format()
396 client->resp_status = AT_RESP_OK; in at_obj_exec_cmd_format()
404 client->resp = resp; in at_obj_exec_cmd_format()
405 …rt_event_recv(&client->event, at_client_resp_notice_event, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR… in at_obj_exec_cmd_format()
411 …client->last_cmd_len = at_vprintfln(client->device, client->send_buf, client->send_bufsz, cmd_expr… in at_obj_exec_cmd_format()
415 …client->last_cmd_len = at_vprintf(client->device, client->send_buf, client->send_bufsz, cmd_expr, … in at_obj_exec_cmd_format()
419 …client->last_cmd_len = at_vprintfcr(client->device, client->send_buf, client->send_bufsz, cmd_expr… in at_obj_exec_cmd_format()
423 …client->last_cmd_len = at_vprintflf(client->device, client->send_buf, client->send_bufsz, cmd_expr… in at_obj_exec_cmd_format()
430 …if (rt_event_recv(&client->event, at_client_resp_notice_event, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_C… in at_obj_exec_cmd_format()
432 …LOG_W("execute command (%.*s) timeout (%d ticks)!", client->last_cmd_len, client->send_buf, resp->… in at_obj_exec_cmd_format()
433 client->resp_status = AT_RESP_TIMEOUT; in at_obj_exec_cmd_format()
436 else if (client->resp_status != AT_RESP_OK) in at_obj_exec_cmd_format()
438 LOG_E("execute command (%.*s) failed!", client->last_cmd_len, client->send_buf); in at_obj_exec_cmd_format()
443 client->resp = RT_NULL; in at_obj_exec_cmd_format()
445 rt_mutex_release(&client->lock); in at_obj_exec_cmd_format()
460 int at_client_obj_wait_connect(at_client_t client, rt_uint32_t timeout) in at_client_obj_wait_connect() argument
466 if (client == RT_NULL) in at_client_obj_wait_connect()
475 LOG_E("no memory for AT client(%s) response object.", client->device->parent.name); in at_client_obj_wait_connect()
486 … LOG_E("wait AT client(%s) connect timeout(%d tick).", client->device->parent.name, timeout); in at_client_obj_wait_connect()
491 if (at_obj_exec_cmd(client, resp, "AT") == RT_EOK) in at_client_obj_wait_connect()
511 rt_size_t at_client_obj_send(at_client_t client, const char *buf, rt_size_t size) in at_client_obj_send() argument
517 if (client == RT_NULL) in at_client_obj_send()
527 rt_mutex_take(&client->lock, RT_WAITING_FOREVER); in at_client_obj_send()
529 len = at_utils_send(client->device, 0, buf, size); in at_client_obj_send()
531 rt_mutex_release(&client->lock); in at_client_obj_send()
549 rt_size_t at_client_obj_recv(at_client_t client, char *buf, rt_size_t size, rt_int32_t timeout) in at_client_obj_recv() argument
555 if (client == RT_NULL) in at_client_obj_recv()
566 …rt_event_recv(&client->event, at_client_rx_notice_event, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLEAR, … in at_client_obj_recv()
568 read_len = rt_device_read(client->device, 0, buf + read_idx, size); in at_client_obj_recv()
576 …if (rt_event_recv(&client->event, at_client_rx_notice_event, RT_EVENT_FLAG_AND | RT_EVENT_FLAG_CLE… in at_client_obj_recv()
582 rt_device_control(client->device, RT_SERIAL_CTRL_SET_RX_TIMEOUT, (void *)&rx_timeout); in at_client_obj_recv()
583 read_idx = rt_device_read(client->device, 0, buf, size); in at_client_obj_recv()
585 rt_device_control(client->device, RT_SERIAL_CTRL_SET_RX_TIMEOUT, (void *)&rx_timeout); in at_client_obj_recv()
601 void at_obj_set_end_sign(at_client_t client, char ch) in at_obj_set_end_sign() argument
603 if (client == RT_NULL) in at_obj_set_end_sign()
609 client->end_sign = ch; in at_obj_set_end_sign()
619 int at_obj_set_urc_table(at_client_t client, const struct at_urc *urc_table, rt_size_t table_sz) in at_obj_set_urc_table() argument
623 if (client == RT_NULL) in at_obj_set_urc_table()
635 if (client->urc_table_size == 0) in at_obj_set_urc_table()
637 client->urc_table = (struct at_urc_table *)rt_calloc(1, sizeof(struct at_urc_table)); in at_obj_set_urc_table()
638 if (client->urc_table == RT_NULL) in at_obj_set_urc_table()
643 client->urc_table[0].urc = urc_table; in at_obj_set_urc_table()
644 client->urc_table[0].urc_size = table_sz; in at_obj_set_urc_table()
645 client->urc_table_size++; in at_obj_set_urc_table()
652 …new_urc_table = (struct at_urc_table *)rt_realloc(client->urc_table, client->urc_table_size * size… in at_obj_set_urc_table()
657 client->urc_table = new_urc_table; in at_obj_set_urc_table()
658 client->urc_table[client->urc_table_size].urc = urc_table; in at_obj_set_urc_table()
659 client->urc_table[client->urc_table_size].urc_size = table_sz; in at_obj_set_urc_table()
660 client->urc_table_size++; in at_obj_set_urc_table()
678 at_client_t client; in at_client_get() local
683 client = rt_slist_entry(node, struct at_client, list); in at_client_get()
684 if (rt_strcmp(client->device->parent.name, dev_name) == 0) in at_client_get()
687 return client; in at_client_get()
702 at_client_t client = RT_NULL; in at_client_get_first() local
707 client = rt_slist_first_entry(&g_at_client_list, struct at_client, list); in at_client_get_first()
711 return client; in at_client_get_first()
714 static const struct at_urc *get_urc_obj(at_client_t client) in get_urc_obj() argument
722 if (client->urc_table == RT_NULL) in get_urc_obj()
727 buffer = client->recv_line_buf; in get_urc_obj()
728 bufsz = client->recv_line_len; in get_urc_obj()
730 for (i = 0; i < client->urc_table_size; i++) in get_urc_obj()
732 for (j = 0; j < client->urc_table[i].urc_size; j++) in get_urc_obj()
734 urc_table = client->urc_table + i; in get_urc_obj()
754 static rt_err_t at_client_getchar(at_client_t client, char *ch) in at_client_getchar() argument
760 recvLen = rt_device_read(client->device, 0, ch, 1); in at_client_getchar()
766 recvLen = rt_device_read(client->device, 0, ch, 1); in at_client_getchar()
776 static int at_recv_readline(at_client_t client) in at_recv_readline() argument
782 rt_memset(client->recv_line_buf, 0x00, client->recv_bufsz); in at_recv_readline()
783 client->recv_line_len = 0; in at_recv_readline()
788 rt_event_recv(&client->event, at_client_rx_notice_event | at_client_deInit_event, in at_recv_readline()
793 rt_event_send(&client->event, at_client_deInit_over_event); in at_recv_readline()
799 while (RT_EOK == at_client_getchar(client, &ch)) in at_recv_readline()
801 if (client->recv_line_len < client->recv_bufsz) in at_recv_readline()
803 client->recv_line_buf[client->recv_line_len++] = ch; in at_recv_readline()
811 client->urc = get_urc_obj(client); in at_recv_readline()
812 if (client->urc != RT_NULL || (ch == '\n' && last_ch == '\r') in at_recv_readline()
813 || (client->end_sign != 0 && ch == client->end_sign)) in at_recv_readline()
817 … LOG_E("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); in at_recv_readline()
818 rt_memset(client->recv_line_buf, 0x00, client->recv_bufsz); in at_recv_readline()
819 client->recv_line_len = 0; in at_recv_readline()
824 rt_event_send(&client->event, at_client_rx_notice_event); in at_recv_readline()
834 at_print_raw_cmd("recvline", client->recv_line_buf, client->recv_line_len); in at_recv_readline()
837 return client->recv_line_len; in at_recv_readline()
840 static void client_parser(at_client_t client) in client_parser() argument
844 if (at_recv_readline(client) > 0) in client_parser()
846 if (client->urc != RT_NULL) in client_parser()
849 if (client->urc->func != RT_NULL) in client_parser()
851 client->urc->func(client, client->recv_line_buf, client->recv_line_len); in client_parser()
853 client->urc = RT_NULL; in client_parser()
855 else if (client->resp != RT_NULL) in client_parser()
857 at_response_t resp = client->resp; in client_parser()
859 char end_ch = client->recv_line_buf[client->recv_line_len - 1]; in client_parser()
862 client->recv_line_buf[client->recv_line_len - 1] = '\0'; in client_parser()
863 if (resp->buf_len + client->recv_line_len < resp->buf_size) in client_parser()
866 … rt_memcpy(resp->buf + resp->buf_len, client->recv_line_buf, client->recv_line_len); in client_parser()
869 resp->buf_len += client->recv_line_len; in client_parser()
874 client->resp_status = AT_RESP_BUFF_FULL; in client_parser()
878 … if ((client->end_sign != 0) && (end_ch == client->end_sign) && (resp->line_num == 0)) in client_parser()
881 client->resp_status = AT_RESP_OK; in client_parser()
883 … else if (rt_memcmp(client->recv_line_buf, AT_RESP_END_OK, rt_strlen(AT_RESP_END_OK)) == 0 in client_parser()
887 client->resp_status = AT_RESP_OK; in client_parser()
889 else if (rt_strstr(client->recv_line_buf, AT_RESP_END_ERROR) in client_parser()
890 … || (rt_memcmp(client->recv_line_buf, AT_RESP_END_FAIL, rt_strlen(AT_RESP_END_FAIL)) == 0)) in client_parser()
892 client->resp_status = AT_RESP_ERROR; in client_parser()
897 client->resp_status = AT_RESP_OK; in client_parser()
904 client->resp = RT_NULL; in client_parser()
905 rt_event_send(&client->event, at_client_resp_notice_event); in client_parser()
909 LOG_D("unrecognized line: %.*s", client->recv_line_len, client->recv_line_buf); in client_parser()
918 at_client_t client; in at_client_rx_ind() local
928 client = rt_slist_entry(node, struct at_client, list); in at_client_rx_ind()
929 if (client->device == dev) in at_client_rx_ind()
931 rt_event_send(&client->event, at_client_rx_notice_event); in at_client_rx_ind()
942 static int at_client_para_init(at_client_t client) in at_client_para_init() argument
956 client->parser = rt_thread_create(name, in at_client_para_init()
958 client, in at_client_para_init()
962 if (client->parser == RT_NULL) in at_client_para_init()
969 rt_mutex_init(&client->lock, name, RT_IPC_FLAG_PRIO); in at_client_para_init()
972 rt_event_init(&client->event, name, RT_IPC_FLAG_FIFO); in at_client_para_init()
993 at_client_t client = RT_NULL; in at_client_init() local
1004 client = rt_malloc(sizeof(struct at_client) + recv_bufsz + send_bufsz); in at_client_init()
1005 if (client == RT_NULL) in at_client_init()
1010 rt_memset(client, 0, sizeof(struct at_client) + recv_bufsz + send_bufsz); in at_client_init()
1011 client->status = AT_STATUS_UNINITIALIZED; in at_client_init()
1013 client->recv_bufsz = recv_bufsz; in at_client_init()
1014 client->recv_line_buf = ((char *)client) + sizeof(struct at_client); in at_client_init()
1016 client->send_bufsz = send_bufsz; in at_client_init()
1017 client->send_buf = ((char *)client) + sizeof(struct at_client) + client->recv_bufsz; in at_client_init()
1019 result = at_client_para_init(client); in at_client_init()
1026 client->device = rt_device_find(dev_name); in at_client_init()
1027 if (client->device) in at_client_init()
1029 RT_ASSERT(client->device->type == RT_Device_Class_Char); in at_client_init()
1032 open_result = rt_device_open(client->device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_DMA_RX); in at_client_init()
1036 … open_result = rt_device_open(client->device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX); in at_client_init()
1040 …open_result = rt_device_open(client->device, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_RX_BLOCKING | R… in at_client_init()
1043 rt_device_control(client->device, RT_SERIAL_CTRL_SET_RX_TIMEOUT, (void *)&rx_timeout); in at_client_init()
1055 rt_slist_init(&client->list); in at_client_init()
1057 rt_slist_append(&g_at_client_list, &client->list); in at_client_init()
1060 rt_device_set_rx_indicate(client->device, at_client_rx_ind); in at_client_init()
1062 client->status = AT_STATUS_INITIALIZED; in at_client_init()
1063 rt_thread_startup(client->parser); in at_client_init()
1069 if (RT_NULL != client->parser) in at_client_init()
1071 rt_thread_delete(client->parser); in at_client_init()
1074 if (RT_NULL != client) in at_client_init()
1076 rt_free(client); in at_client_init()
1087 at_client_t client = RT_NULL; in at_client_deInit() local
1091 client = at_client_get(dev_name); in at_client_deInit()
1092 if (client == RT_NULL) in at_client_deInit()
1098 rt_slist_remove(&g_at_client_list, &client->list); in at_client_deInit()
1101 rt_event_send(&client->event, at_client_deInit_event); in at_client_deInit()
1102 …rt_event_recv(&client->event, at_client_deInit_over_event, RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR,… in at_client_deInit()
1104 rt_event_detach(&client->event); in at_client_deInit()
1105 rt_mutex_detach(&client->lock); in at_client_deInit()
1107 result = rt_device_close(client->device); in at_client_deInit()
1109 rt_free(client); in at_client_deInit()