2021-01-20 14:18:32 +00:00
|
|
|
|
/******************************************************************************
|
|
|
|
|
* @brief wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(AT-command<EFBFBD><EFBFBD>ʾ, ʹ<EFBFBD>õ<EFBFBD>ģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>M169WI-FI)
|
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 2020, <morro_luo@163.com>
|
|
|
|
|
*
|
|
|
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
*
|
|
|
|
|
* Change Logs:
|
|
|
|
|
* Date Author Notes
|
|
|
|
|
* 2021/01/20 Morro
|
|
|
|
|
******************************************************************************/
|
|
|
|
|
#include "at_chat.h"
|
|
|
|
|
#include "wifi_uart.h"
|
|
|
|
|
#include "public.h"
|
|
|
|
|
#include "module.h"
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Private variables ---------------------------------------------------------*/
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>AT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static at_obj_t at;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
|
|
|
void wifi_open(void);
|
|
|
|
|
void wifi_close(void);
|
|
|
|
|
static void at_error(void);
|
|
|
|
|
void wifi_query_version(void);
|
|
|
|
|
|
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
|
/*
|
|
|
|
|
* @brief wifi urc<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
//static unsigned char wifi_urcbuf[256];
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief wifi <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static unsigned char wifi_recvbuf[256];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief AT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static const at_adapter_t at_adapter = {
|
|
|
|
|
.write = wifi_uart_write,
|
|
|
|
|
.read = wifi_uart_read,
|
|
|
|
|
.error = at_error,
|
|
|
|
|
.utc_tbl = NULL,
|
|
|
|
|
.urc_buf = NULL,
|
|
|
|
|
.recv_buf = wifi_recvbuf,
|
|
|
|
|
.urc_tbl_count = 0,
|
|
|
|
|
.urc_bufsize = 0,
|
|
|
|
|
.recv_bufsize = sizeof(wifi_recvbuf)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi
|
|
|
|
|
*/
|
|
|
|
|
void wifi_open(void)
|
|
|
|
|
{
|
|
|
|
|
GPIO_SetBits(GPIOA, GPIO_Pin_4);
|
|
|
|
|
printf("wifi open\r\n");
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD>ر<EFBFBD>wifi
|
|
|
|
|
*/
|
|
|
|
|
void wifi_close(void)
|
|
|
|
|
{
|
|
|
|
|
GPIO_ResetBits(GPIOA, GPIO_Pin_4);
|
|
|
|
|
printf("wifi close\r\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief WIFI<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>
|
|
|
|
|
* @return true - <EFBFBD>˳<EFBFBD>״̬<EFBFBD><EFBFBD>, false - <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>,
|
|
|
|
|
*/
|
|
|
|
|
static int wifi_reset_work(at_env_t *e)
|
|
|
|
|
{
|
|
|
|
|
at_obj_t *a = (at_obj_t *)e->params;
|
|
|
|
|
switch (e->state) {
|
|
|
|
|
case 0: //<2F>ر<EFBFBD>WIFI<46><49>Դ
|
|
|
|
|
wifi_close();
|
|
|
|
|
e->reset_timer(a);
|
|
|
|
|
e->state++;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
if (e->is_timeout(a, 2000)) //<2F><>ʱ<EFBFBD>ȴ<EFBFBD>2s
|
|
|
|
|
e->state++;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
wifi_open(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi
|
2021-02-19 14:21:05 +00:00
|
|
|
|
e->state++;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
if (e->is_timeout(a, 2000)) //<2F><>ʱ<EFBFBD>ȴ<EFBFBD>2s
|
|
|
|
|
return true;
|
|
|
|
|
break;
|
2021-01-20 14:18:32 +00:00
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* @brief wifi ͨ<EFBFBD><EFBFBD><EFBFBD>쳣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static void at_error(void)
|
|
|
|
|
{
|
|
|
|
|
printf("wifi AT communication error\r\n");
|
|
|
|
|
//ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ҵ
|
|
|
|
|
at_do_work(&at, wifi_reset_work, &at);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static void at_init_callbatk(at_response_t *r)
|
|
|
|
|
{
|
|
|
|
|
if (r->ret == AT_RET_OK ) {
|
|
|
|
|
printf("wifi Initialization successfully...\r\n");
|
|
|
|
|
|
|
|
|
|
/* <20><>ѯ<EFBFBD>汾<EFBFBD><E6B1BE>*/
|
|
|
|
|
wifi_query_version();
|
|
|
|
|
|
|
|
|
|
} else
|
|
|
|
|
printf("wifi Initialization failure...\r\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief wifi<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static const char *wifi_init_cmds[] = {
|
|
|
|
|
"AT+GPIO_WR=1,1\r\n",
|
|
|
|
|
"AT+GPIO_WR=2,0\r\n",
|
|
|
|
|
"AT+GPIO_WR=3,1\r\n",
|
|
|
|
|
NULL
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief wifi<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
void wifi_init(void)
|
|
|
|
|
{
|
|
|
|
|
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
|
|
|
|
|
gpio_conf(GPIOA, GPIO_Mode_OUT, GPIO_PuPd_NOPULL, GPIO_Pin_4);
|
|
|
|
|
|
|
|
|
|
wifi_uart_init(115200);
|
|
|
|
|
at_obj_init(&at, &at_adapter);
|
|
|
|
|
|
2021-02-19 14:21:05 +00:00
|
|
|
|
//<2F><><EFBFBD><EFBFBD>WIFI
|
|
|
|
|
at_do_work(&at, wifi_reset_work, &at);
|
2021-01-20 14:18:32 +00:00
|
|
|
|
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC>wifi
|
|
|
|
|
at_send_multiline(&at, at_init_callbatk, wifi_init_cmds);
|
|
|
|
|
|
|
|
|
|
//GPIO<49><4F><EFBFBD><EFBFBD>
|
|
|
|
|
at_send_singlline(&at, NULL, "AT+GPIO_TEST_EN=1\r\n");
|
|
|
|
|
|
|
|
|
|
}driver_init("wifi", wifi_init);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief wifi<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(10ms <EFBFBD><EFBFBD>ѯ1<EFBFBD><EFBFBD>)
|
|
|
|
|
*/
|
|
|
|
|
void wifi_task(void)
|
|
|
|
|
{
|
|
|
|
|
at_poll_task(&at);
|
|
|
|
|
}task_register("wifi", wifi_task, 10);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** <20>DZ<EFBFBD>AT<41><54><EFBFBD><EFBFBD>----------------------------------------------------------------
|
|
|
|
|
* <EFBFBD>Բ<EFBFBD>ѯ<EFBFBD>汾<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>:
|
|
|
|
|
* -> AT+VER\r\n
|
|
|
|
|
* <- VERSION:M169-YH01
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
//<2F><>ʽ1, ʹ<><CAB9>at_do_cmd<6D>ӿ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>AT<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static void at_ver_sender(at_env_t *e)
|
|
|
|
|
{
|
|
|
|
|
e->printf(&at, "AT+VER\r\n");
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
* @brief <EFBFBD>汾<EFBFBD><EFBFBD>ѯ<EFBFBD>ص<EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
static void query_version_callback(at_response_t *r)
|
|
|
|
|
{
|
|
|
|
|
if (r->ret == AT_RET_OK ) {
|
|
|
|
|
printf("wifi version info : %s\r\n", r->recvbuf);
|
|
|
|
|
} else
|
|
|
|
|
printf("wifi version query failure...\r\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* <20><><EFBFBD><EFBFBD>AT<41><54><EFBFBD><EFBFBD>*/
|
|
|
|
|
static const at_cmd_t at_cmd_ver = {
|
|
|
|
|
at_ver_sender, //<2F>Զ<EFBFBD><D4B6><EFBFBD>AT<41><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
"VERSION:", //<2F><><EFBFBD><EFBFBD>ƥ<EFBFBD><C6A5>ǰ
|
|
|
|
|
query_version_callback, //<2F><>ѯ<EFBFBD>ص<EFBFBD>
|
|
|
|
|
3, 3000 //<2F><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* @brief ִ<EFBFBD>а汾<EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*/
|
|
|
|
|
void wifi_query_version(void)
|
|
|
|
|
{
|
|
|
|
|
at_do_cmd(&at, NULL, &at_cmd_ver);
|
|
|
|
|
}
|