1382 lines
50 KiB
C
1382 lines
50 KiB
C
|
|
/*********************************************************************************************************************
|
|||
|
|
* CH32V307VCT6 Opensourec Library <EFBFBD><EFBFBD><EFBFBD><EFBFBD>CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD>⣩<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹٷ<EFBFBD> SDK <EFBFBD>ӿڵĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
|
|||
|
|
* Copyright (c) 2022 SEEKFREE <EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* CH32V307VCT6 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GPL<EFBFBD><EFBFBD>GNU General Public License<EFBFBD><EFBFBD><EFBFBD><EFBFBD> GNUͨ<EFBFBD>ù<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD> GPL <EFBFBD>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><EFBFBD> GPL3.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><EFBFBD>κκ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>İ汾<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<EFBFBD>֤
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><EFBFBD>ʺ<EFBFBD><EFBFBD>ض<EFBFBD><EFBFBD><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<EFBFBD>յ<EFBFBD>һ<EFBFBD><EFBFBD> GPL <EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD> GPL3.0 <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤Э<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD>İ汾
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><EFBFBD><EFBFBD> libraries/doc <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <EFBFBD>ļ<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD>ӭ<EFBFBD><EFBFBD>λʹ<EFBFBD>ò<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD>뱣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD><EFBFBD>İ<EFBFBD>Ȩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*
|
|||
|
|
* <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> zf_device_wifi_spi
|
|||
|
|
* <EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ɶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɿƼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˾
|
|||
|
|
* <EFBFBD>汾<EFBFBD><EFBFBD>Ϣ <EFBFBD>鿴 libraries/doc <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> version <EFBFBD>ļ<EFBFBD> <EFBFBD>汾˵<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> MounRiver Studio V1.8.1
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ̨ CH32V307VCT6
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
|||
|
|
*
|
|||
|
|
* <EFBFBD>ļ<EFBFBD>¼
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ע
|
|||
|
|
* 2023-05-25 <EFBFBD><EFBFBD>W first version
|
|||
|
|
********************************************************************************************************************/
|
|||
|
|
/*********************************************************************************************************************
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><EFBFBD>壺
|
|||
|
|
* ------------------------------------
|
|||
|
|
* ģ<EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD> <EFBFBD><EFBFBD>Ƭ<EFBFBD><EFBFBD><EFBFBD>ܽ<EFBFBD>
|
|||
|
|
* RST <EFBFBD>鿴 zf_device_wifi_spi.h <EFBFBD><EFBFBD> WIFI_SPI_RST_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* INT <EFBFBD>鿴 zf_device_wifi_spi.h <EFBFBD><EFBFBD> WIFI_SPI_INT_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* CS <EFBFBD>鿴 zf_device_wifi_spi.h <EFBFBD><EFBFBD> WIFI_SPI_CS_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* MISO <EFBFBD>鿴 zf_device_wifi_spi.h <EFBFBD><EFBFBD> WIFI_SPI_MISO_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* SCK <EFBFBD>鿴 zf_device_wifi_spi.h <EFBFBD><EFBFBD> WIFI_SPI_SCK_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* MOSI <EFBFBD>鿴 zf_device_wifi_spi.h <EFBFBD><EFBFBD> WIFI_SPI_MOSI_PIN <EFBFBD>궨<EFBFBD><EFBFBD>
|
|||
|
|
* 5V 5V <EFBFBD><EFBFBD>Դ
|
|||
|
|
* GND <EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* ------------------------------------
|
|||
|
|
*********************************************************************************************************************/
|
|||
|
|
|
|||
|
|
#include "stdio.h"
|
|||
|
|
#include "zf_common_clock.h"
|
|||
|
|
#include "zf_common_debug.h"
|
|||
|
|
#include "zf_common_fifo.h"
|
|||
|
|
#include "zf_common_function.h"
|
|||
|
|
#include "zf_driver_delay.h"
|
|||
|
|
#include "zf_driver_gpio.h"
|
|||
|
|
#include "zf_common_interrupt.h"
|
|||
|
|
#include "zf_driver_exti.h"
|
|||
|
|
#include "zf_driver_spi.h"
|
|||
|
|
#include "zf_device_type.h"
|
|||
|
|
|
|||
|
|
#include "zf_device_wifi_spi.h"
|
|||
|
|
|
|||
|
|
#define WAIT_TIME_OUT (10000) // <20><>ָ<EFBFBD><D6B8><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB>ms
|
|||
|
|
|
|||
|
|
#define WIFI_SPI_WRITE_MAX 4092 // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>SPIͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
|
|||
|
|
#define WIFI_SPI_WRITE_REQUEST 0x01
|
|||
|
|
#define WIFI_SPI_CHECK_STATE 0x02
|
|||
|
|
#define WIFI_SPI_WRITE_DATA 0x03
|
|||
|
|
#define WIFI_SPI_READ_DATA 0x04
|
|||
|
|
#define WIFI_SPI_WRITE_END 0x07
|
|||
|
|
#define WIFI_SPI_READ_END 0x08
|
|||
|
|
|
|||
|
|
#define WIFI_SPI_WRITE_ADDR 0x00
|
|||
|
|
#define WIFI_SPI_STATE_ADDR 0x04
|
|||
|
|
|
|||
|
|
volatile wifi_spi_buffer_state_enum wifi_buffer_state;
|
|||
|
|
volatile wifi_spi_transmit_state_enum wifi_transmit_state;
|
|||
|
|
|
|||
|
|
static fifo_struct wifi_spi_fifo;
|
|||
|
|
static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // <20><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
vuint8 wifi_spi_ack_flag = 0; // 0<><30>ģ<EFBFBD><C4A3>δӦ<CEB4><D3A6> 1<><31>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
|
uint8 wifi_spi_init_flag; // 0<><30>ģ<EFBFBD><C4A3>δ<EFBFBD><CEB4>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD> 1<><31>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ɹ<EFBFBD><C9B9><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
vuint8 wifi_spi_packet_num; // <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݰ<EFBFBD>ID
|
|||
|
|
vuint32 wifi_spi_send_remain_length; // ʣ<><CAA3><EFBFBD>ķ<EFBFBD><C4B7>ͳ<EFBFBD><CDB3><EFBFBD>
|
|||
|
|
|
|||
|
|
uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
|
|||
|
|
|
|||
|
|
wifi_spi_information_struct wifi_spi_information;
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
// @param length <20><>Ҫд<D2AA><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_write_request(uint16 length)
|
|||
|
|
{
|
|||
|
|
wifi_spi_buffer_struct head;
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_WRITE_REQUEST;
|
|||
|
|
head.addr = WIFI_SPI_WRITE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
head.magic = 0xFE;
|
|||
|
|
head.sequence = wifi_spi_packet_num++;
|
|||
|
|
head.length = length;
|
|||
|
|
|
|||
|
|
wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><>ȡģ<C8A1><C4A3>״̬
|
|||
|
|
// @param *length <20><>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
|||
|
|
// @return WIFI_SPI_BUFFER_STATE_enum ģ<><C4A3>״̬
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
|
|||
|
|
{
|
|||
|
|
wifi_spi_buffer_struct head = {0};
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_CHECK_STATE;
|
|||
|
|
head.addr = WIFI_SPI_STATE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
|
|||
|
|
wifi_spi_ack_flag = 0;
|
|||
|
|
wifi_transmit_state = TRANSMIT_READ_STATE;
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
|
|||
|
|
if(BUFFER_WRITE == head.magic)
|
|||
|
|
{
|
|||
|
|
wifi_spi_packet_num = head.sequence;
|
|||
|
|
}
|
|||
|
|
*length = head.length;
|
|||
|
|
|
|||
|
|
return (wifi_spi_buffer_state_enum)head.magic;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// @param void
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_send_done(void)
|
|||
|
|
{
|
|||
|
|
wifi_spi_buffer_struct head;
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_WRITE_END;
|
|||
|
|
head.addr = WIFI_SPI_WRITE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
wifi_transmit_state = TRANSMIT_IDLE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// @param void
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_receive_done(void)
|
|||
|
|
{
|
|||
|
|
wifi_spi_buffer_struct head;
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_READ_END;
|
|||
|
|
head.addr = WIFI_SPI_WRITE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
wifi_transmit_state = TRANSMIT_IDLE;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
// @param *buff <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD>ַ
|
|||
|
|
// @param length <20><>Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_send_data(const uint8 *buff, uint16 length)
|
|||
|
|
{
|
|||
|
|
wifi_spi_buffer_struct head;
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_WRITE_DATA;
|
|||
|
|
head.addr = WIFI_SPI_WRITE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
|
|||
|
|
wifi_transmit_state = TRANSMIT_WRITE;
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
|
|||
|
|
spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
wifi_spi_send_done();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ģ<EFBFBD>飨<EFBFBD><E9A3A8><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7>
|
|||
|
|
// @param *multi_buffer <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD>Լ<EFBFBD>ÿ<EFBFBD><C3BF>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
|
|||
|
|
{
|
|||
|
|
uint8 i;
|
|||
|
|
wifi_spi_buffer_struct head;
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_WRITE_DATA;
|
|||
|
|
head.addr = WIFI_SPI_WRITE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
|
|||
|
|
wifi_transmit_state = TRANSMIT_WRITE;
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
|
|||
|
|
|
|||
|
|
for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
|
|||
|
|
{
|
|||
|
|
if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
|
|||
|
|
}
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
wifi_spi_send_done();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD>ģ<EFBFBD>鷢<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// @param *buff <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
// @param length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յij<D5B5><C4B3><EFBFBD>
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_receive_data(uint8 *buff, uint16 length)
|
|||
|
|
{
|
|||
|
|
wifi_spi_buffer_struct head;
|
|||
|
|
|
|||
|
|
head.cmd = WIFI_SPI_READ_DATA;
|
|||
|
|
head.addr = WIFI_SPI_WRITE_ADDR;
|
|||
|
|
head.dummy = 0x00;
|
|||
|
|
|
|||
|
|
wifi_transmit_state = TRANSMIT_READ;
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 0);
|
|||
|
|
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 3);
|
|||
|
|
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)buff, buff, length);
|
|||
|
|
gpio_set_level(WIFI_SPI_CS_PIN, 1);
|
|||
|
|
wifi_spi_receive_done();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EEB5BD><C4A3>
|
|||
|
|
// @param *str <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_send_command(const char *str)
|
|||
|
|
{
|
|||
|
|
uint8 state = 0;
|
|||
|
|
uint16 send_length;
|
|||
|
|
uint16 wait_time = 0;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
send_length = (uint16)strlen(str);
|
|||
|
|
|
|||
|
|
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while(TRANSMIT_IDLE != wifi_transmit_state);
|
|||
|
|
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD><D0BD>뷢<EFBFBD><EBB7A2>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while(BUFFER_WRITE != wifi_buffer_state)
|
|||
|
|
{
|
|||
|
|
wifi_spi_ack_flag = 0;
|
|||
|
|
wifi_spi_write_request(send_length);
|
|||
|
|
while(!wifi_spi_ack_flag)
|
|||
|
|
{
|
|||
|
|
wait_time++;
|
|||
|
|
if((WAIT_TIME_OUT / 4) <= wait_time)
|
|||
|
|
{
|
|||
|
|
state = 1;
|
|||
|
|
wifi_spi_init_flag = 0; // ģ<><C4A3><EFBFBD>ѶϿ<D1B6>
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
system_delay_ms(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(1 == state)
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_buffer_state = BUFFER_IDLE;
|
|||
|
|
|
|||
|
|
if(0 == state) // ͨѶδ<D1B6><CEB4>ʱ
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_remain_length = send_length;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
wifi_spi_send_data((const uint8 *)str, send_length);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>״̬<D7B4><CCAC><EFBFBD><EFBFBD>ȡģ<C8A1>鷢<EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// @param void
|
|||
|
|
// @return void
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
void wifi_spi_check_state_read_buffer(void)
|
|||
|
|
{
|
|||
|
|
uint16 wifi_spi_receive_length; // <20><><EFBFBD>ν<EFBFBD><CEBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><>ѯWIFIģ<49><C4A3><EFBFBD><EFBFBD>״̬
|
|||
|
|
wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ȡWIFIģ<49><C4A3><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><F2B1A3B4><EFBFBD>Ҫ<EFBFBD><D2AA>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
|||
|
|
if(BUFFER_READ == wifi_buffer_state)
|
|||
|
|
{
|
|||
|
|
wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
|
|||
|
|
fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // <20><><EFBFBD><EFBFBD> FIFO
|
|||
|
|
}
|
|||
|
|
else if(BUFFER_IDLE == wifi_buffer_state)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬Ҳ<CCAC><D2B2><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|||
|
|
wifi_transmit_state = TRANSMIT_IDLE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ģ<EFBFBD><C4A3>
|
|||
|
|
// @param *buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|||
|
|
// @param length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
|
// @return uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
|||
|
|
// Sample usage:
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
|
|||
|
|
{
|
|||
|
|
uint16 send_length;
|
|||
|
|
uint32 wait_time;
|
|||
|
|
|
|||
|
|
// <20><>¼<EFBFBD><C2BC>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
|
wifi_spi_send_remain_length = length;
|
|||
|
|
|
|||
|
|
while(wifi_spi_send_remain_length)
|
|||
|
|
{
|
|||
|
|
send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_ack_flag = 0;
|
|||
|
|
wifi_spi_write_request(send_length);
|
|||
|
|
|
|||
|
|
// <20><EFBFBD>ȴ<EFBFBD>5<EFBFBD><35>
|
|||
|
|
wait_time = 5000;
|
|||
|
|
while(!wifi_spi_ack_flag)
|
|||
|
|
{
|
|||
|
|
wait_time--;
|
|||
|
|
if(0 == wait_time) break;
|
|||
|
|
system_delay_ms(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(BUFFER_WRITE == wifi_buffer_state)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
wifi_spi_send_data(buff, send_length);
|
|||
|
|
buff += send_length;
|
|||
|
|
wifi_spi_send_remain_length -= send_length;
|
|||
|
|
wifi_buffer_state = BUFFER_IDLE;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return wifi_spi_send_remain_length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ģ<EFBFBD><C4A3>(<28><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ)
|
|||
|
|
// @param *multi_buffer <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD>Լ<EFBFBD>ÿ<EFBFBD><C3BF>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
|
// @return uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
|||
|
|
// Sample usage: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3>Ȳ<EFBFBD><C8B2>ܳ<EFBFBD><DCB3><EFBFBD>4092<39><32>
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
|
|||
|
|
{
|
|||
|
|
uint16 send_length;
|
|||
|
|
uint32 wait_time;
|
|||
|
|
|
|||
|
|
// <20><>¼<EFBFBD><C2BC>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
|
send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
|
|||
|
|
|
|||
|
|
if(WIFI_SPI_WRITE_MAX >= send_length)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_ack_flag = 0;
|
|||
|
|
wifi_spi_write_request(send_length);
|
|||
|
|
|
|||
|
|
// <20><EFBFBD>ȴ<EFBFBD>5<EFBFBD><35>
|
|||
|
|
wait_time = 5000;
|
|||
|
|
while(!wifi_spi_ack_flag)
|
|||
|
|
{
|
|||
|
|
wait_time--;
|
|||
|
|
if(0 == wait_time) break;
|
|||
|
|
system_delay_ms(1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(BUFFER_WRITE == wifi_buffer_state)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
wifi_spi_send_data_multi(multi_buffer);
|
|||
|
|
send_length = 0;
|
|||
|
|
wifi_buffer_state = BUFFER_IDLE;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return send_length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *wait_buffer <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> timeout <20><>ʱʱ<CAB1><CAB1>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧָ<D3A6><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1<><31>ģ<EFBFBD><C4A3>δ<EFBFBD><CEB4>Ӧָ<D3A6><D6B8><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD>ʱ
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 1;
|
|||
|
|
char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
|||
|
|
uint32 receiver_len = 8;
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
system_delay_ms(1);
|
|||
|
|
// <20>жϽ<D0B6><CFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>Ӧ<EFBFBD><D3A6>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>0
|
|||
|
|
receiver_len = 8;
|
|||
|
|
fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
|
|||
|
|
|
|||
|
|
if(strstr(receiver_buffer, wait_buffer))
|
|||
|
|
{
|
|||
|
|
return_state = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>æ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD>ҷ<EFBFBD><D2B7><EFBFBD>1
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}while(timeout --);
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_clear_receive_buffer();
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static void wifi_spi_clear_receive_buffer (void)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
fifo_clear(&wifi_spi_fifo);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *target_buffer Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ַָ<D6B7><D6B8> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *origin_buffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַָ<D6B7><D6B8> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> start_char <20><>ʼ<EFBFBD><CABC>ȡ<EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "1234" <20>д<EFBFBD> '2' <20><>ʼ<EFBFBD><CABC>ȡ <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '2'
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> end_char <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>ֽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> "1234" <20><><EFBFBD><EFBFBD> '4' <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '\0'(0x00 <20><><EFBFBD>ַ<EFBFBD> һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>β)
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // <20><><EFBFBD>û<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>mac<61><63>ַ<EFBFBD><EFBFBD><F3A3ACB5>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD>ȡmac<61><63>ַ
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
char *location1;
|
|||
|
|
char *location2;
|
|||
|
|
location1 = strchr((char *)origin_buffer, start_char);
|
|||
|
|
if(location1)
|
|||
|
|
{
|
|||
|
|
location1 ++;
|
|||
|
|
location2 = strchr(location1, end_char);
|
|||
|
|
if(location2)
|
|||
|
|
{
|
|||
|
|
memcpy(target_buffer, location1, location2-location1);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
}
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>鿴ģ<E9BFB4><C4A3><EFBFBD>汾<EFBFBD><E6B1BE>Ϣ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_get_version();
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_get_version (void)
|
|||
|
|
{
|
|||
|
|
char *location1;
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
uint8 receiver_buffer[256];
|
|||
|
|
uint32 receiver_len = 256;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_send_command("AT+GMR\r\n");
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
|
|||
|
|
location1 = strrchr((char *)receiver_buffer, ':');
|
|||
|
|
if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}while(0);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model 0:<3A>ر<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ļ<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>д
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_echo_set("1");//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_echo_set (char *model)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if('1' == *model)
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("ATE1\r\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("ATE0\r\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ѯģ<D1AF><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> MAC <20><>ַ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(wifi_spi_get_mac()){}
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_get_mac (void)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
uint8 receiver_buffer[64];
|
|||
|
|
uint32 receiver_len = 64;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_send_command("AT+CIPAPMAC?\r\n");
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
|
|||
|
|
if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}while(0);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ѯģ<D1AF><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF>WIFI <20><> IP <20><>ַ(ȡ<><C8A1><EFBFBD><EFBFBD>ģ<EFBFBD>鵱ǰ<E9B5B1>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ)
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(wifi_spi_get_ip()){}
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_get_ip (void)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(WIFI_SPI_STATION == wifi_spi_information.mode)
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("AT+CIPSTA?\r\n");
|
|||
|
|
}
|
|||
|
|
else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("AT+CIPAP?\r\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
uint8 receiver_buffer[128];
|
|||
|
|
uint32 receiver_len = 128;
|
|||
|
|
fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
|
|||
|
|
if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}while(0);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ѯģ<D1AF><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> if(wifi_spi_get_information()){}
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_get_information (void)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
// <20><>ȡģ<C8A1><C4A3><EFBFBD>汾<EFBFBD><E6B1BE>
|
|||
|
|
if(wifi_spi_get_version())
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// <20><>ȡģ<C8A1><C4A3>IP<49><50>ַ
|
|||
|
|
if(wifi_spi_get_ip())
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// <20><>ȡģ<C8A1><C4A3>MAC<41><43>Ϣ
|
|||
|
|
if(wifi_spi_get_mac())
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
memcpy(wifi_spi_information.local_port, "no port", 7);
|
|||
|
|
}while(0);
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> WiFi
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wifi_ssid WiFi<46><69><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> pass_word WiFi<46><69><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model 0:<3A><>ѯWiFi<46><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WiFi
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
|
|||
|
|
{
|
|||
|
|
sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
}
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ϵ<EFBFBD><CFB5>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>WiFi
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model 0:<3A>ϵ粻<CFB5>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>wifi <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>wifi
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_auto_connect_wifi(0); //<2F>ϵ粻<CFB5>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>wifi
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_auto_connect_wifi (char *model)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model 0: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ 1<><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_set_connect_model("1");
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_set_connect_model (char *model)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sprintf(temp, "AT+CIPMUX=%s\r\n", model);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ģʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model <20>C 0: <20><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ģʽ IP<49>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20>C 1: Wi-Fi <><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7> TCP <20><><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>UDP <20>̶<EFBFBD>ͨ<EFBFBD>ŶԶˡ<D4B6>SSL <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD> IP<49>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_set_transfer_model("1");
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
static uint8 wifi_spi_set_transfer_model (char *model)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sprintf(temp, "AT+CIPMODE=%s\r\n", model);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>ģʽ (Station/SoftAP/Station+SoftAP)
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> state 0:<3A><> Wi-Fi ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>ҹر<D2B9> Wi-Fi RF----1: Station ģʽ----2: SoftAP ģʽ----3: SoftAP+Station ģʽ
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_set_model("1");
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
if(WIFI_SPI_SOFTAP == mode)
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("AT+CWMODE=2\r\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("AT+CWMODE=1\r\n");
|
|||
|
|
}
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ģ<EFBFBD>鹤<EFBFBD><E9B9A4>ģʽ
|
|||
|
|
wifi_spi_information.mode = mode;
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD>wifi<66><69><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_disconnected_wifi();
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_disconnected_wifi (void)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_send_command("AT+CWQAP\r\n");
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_entry_serianet();
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_entry_serianet (void)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_send_command("AT+CIPSEND\r\n");
|
|||
|
|
return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>˳<EFBFBD><EFBFBD><CDB8>ģʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> model 0:<3A>ر<EFBFBD><EFBFBD><CDB8>ģʽ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8>ģʽ
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_exit_serianet(1);
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_exit_serianet (void)
|
|||
|
|
{
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
system_delay_ms(20);
|
|||
|
|
wifi_spi_send_command("+++");
|
|||
|
|
system_delay_ms(1000);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> ip Զ<><D4B6> IPv4 <20><>ַ<EFBFBD><D6B7>IPv6 <20><>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> port Զ<>˶˿<CBB6>ֵ
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2>ϵ<EFBFBD><CFB5>Ե<EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Գ<EFBFBD><D4B3><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>WiFi<46><69><EFBFBD><EFBFBD> <20><><EFBFBD>ܻᵼ<DCBB><E1B5BC>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4>ϳ<EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_set_connect_model("0"))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ģʽ
|
|||
|
|
if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_send_command("AT+CIPSTATE?\r\n");
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
uint8 receiver_buffer[128];
|
|||
|
|
uint32 receiver_len = 128;
|
|||
|
|
fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
|
|||
|
|
char* buffer_index = (char *)receiver_buffer;
|
|||
|
|
char* end_index;
|
|||
|
|
|
|||
|
|
buffer_index += 22;
|
|||
|
|
buffer_index += strlen(ip);
|
|||
|
|
buffer_index += strlen(port);
|
|||
|
|
end_index = strchr(buffer_index, ',');
|
|||
|
|
|
|||
|
|
memcpy(wifi_spi_information.local_port, " ", 7);
|
|||
|
|
memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
|
|||
|
|
wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
|
|||
|
|
wifi_spi_information.transfer_mode = mode;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(WIFI_SPI_SERIANET == mode) // <><CDB8>ģʽ<C4A3><CABD>ֱ<EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><CDB8>
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_entry_serianet())
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}while(0);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *ip Զ<><D4B6> IPv4 <20><>ַ<EFBFBD><D6B7>IPv6 <20><>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *port Զ<>˶˿<CBB6>ֵ <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *local_port Զ<><D4B6> IPv4 <20><>ַ<EFBFBD><D6B7>IPv6 <20><>ַ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> mode ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ģʽ
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ID
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_set_connect_model("0"))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD>ģʽ
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(WIFI_SPI_SERIANET == mode) // <><CDB8>ģʽ<C4A3><CABD>ֱ<EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><CDB8>
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_entry_serianet())
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
memcpy(wifi_spi_information.local_port, " ", 7);
|
|||
|
|
memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
|
|||
|
|
wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
|
|||
|
|
wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
|
|||
|
|
wifi_spi_information.transfer_mode = mode;
|
|||
|
|
}while(0);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD> TCP Server ʹ<>ñ<EFBFBD><C3B1>ӿڽ<D3BF><DABD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 0<><30><EFBFBD>ɹ<EFBFBD> 1<><31>ʧ<EFBFBD><CAA7>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_disconnect_link();
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_disconnect_link (void)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
wifi_spi_send_command("AT+CIPCLOSE\r\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
|
|||
|
|
{
|
|||
|
|
return_state = 1;
|
|||
|
|
wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}while(0);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFiģ<69><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ֽں<D6BD><DABA><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> data <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_send_byte(0xa5);
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ΪTCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ŀͻ<C4BF><CDBB><EFBFBD>
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_send_byte (uint8 data)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 temp_length;
|
|||
|
|
uint16 send_length;
|
|||
|
|
|
|||
|
|
send_length = 1;
|
|||
|
|
if(wifi_spi_init_flag)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
|
|||
|
|
{
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
|
|||
|
|
|
|||
|
|
if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
|
|||
|
|
{
|
|||
|
|
temp_length += sprintf(&temp[temp_length], "0,");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
|
|||
|
|
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧ
|
|||
|
|
{
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_write_data(&data, send_length);
|
|||
|
|
wifi_spi_wait_ack("bytes", 50);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
send_length = (uint16)wifi_spi_write_data(&data, send_length);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return send_length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFiģ<69><C4A3> <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buff <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_send_buffer("123", 3);
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ΪTCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ŀͻ<C4BF><CDBB><EFBFBD>
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 temp_length;
|
|||
|
|
uint16 send_length;
|
|||
|
|
|
|||
|
|
if(wifi_spi_init_flag)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
|
|||
|
|
{
|
|||
|
|
while(len)
|
|||
|
|
{
|
|||
|
|
if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
send_length = (uint16)len;
|
|||
|
|
}
|
|||
|
|
len -= send_length;
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
|
|||
|
|
|
|||
|
|
if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
|
|||
|
|
{
|
|||
|
|
temp_length += sprintf(&temp[temp_length], "0,");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
|
|||
|
|
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧ
|
|||
|
|
{
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_write_data(buff, send_length);
|
|||
|
|
wifi_spi_wait_ack("bytes", 50);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
}
|
|||
|
|
buff += send_length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
len = wifi_spi_write_data(buff, len);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFiģ<69><C4A3> <20><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ)
|
|||
|
|
// @param *multi_buffer <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ַ<EFBFBD>Լ<EFBFBD>ÿ<EFBFBD><C3BF>Դ<EFBFBD><D4B4>ַ<EFBFBD><D6B7>Ҫ<EFBFBD><D2AA><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>Ҫ<EFBFBD><D2AA><EFBFBD>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>ͨѶʱ<D1B6>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܳ<EFBFBD><DCB3>Ȳ<EFBFBD><C8B2>ܳ<EFBFBD><DCB3><EFBFBD>4092
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
|
|||
|
|
{
|
|||
|
|
uint8 i;
|
|||
|
|
uint16 remain_length;
|
|||
|
|
|
|||
|
|
if(wifi_spi_init_flag)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
|
|||
|
|
{
|
|||
|
|
for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
|
|||
|
|
{
|
|||
|
|
if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return remain_length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFiģ<69><C4A3> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *str <20><>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_send_string("123");
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ΪTCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD>Ĭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>Ŀͻ<C4BF><CDBB><EFBFBD>
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_send_string (const char *str)
|
|||
|
|
{
|
|||
|
|
char temp[64];
|
|||
|
|
uint8 temp_length;
|
|||
|
|
uint16 send_length;
|
|||
|
|
|
|||
|
|
send_length = (uint16)strlen(str);
|
|||
|
|
if(wifi_spi_init_flag)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
|
|||
|
|
{
|
|||
|
|
if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
|
|||
|
|
{
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
|
|||
|
|
|
|||
|
|
if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
|
|||
|
|
{
|
|||
|
|
temp_length += sprintf(&temp[temp_length], "0,");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
|
|||
|
|
|
|||
|
|
wifi_spi_send_command(temp);
|
|||
|
|
if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ӧ
|
|||
|
|
{
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_write_data((uint8 *)str, send_length);
|
|||
|
|
wifi_spi_wait_ack("bytes", 50);
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
wifi_spi_clear_receive_buffer(); // <20><><EFBFBD><EFBFBD>WiFi<46><69><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return send_length;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFi ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>պ<EFBFBD><D5BA><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> buffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ<DDB5><C4B4>ŵ<EFBFBD>ַ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> len <20><><EFBFBD>鳤<EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>sizeof<6F><66><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 <20><><EFBFBD><EFBFBD>ʵ<EFBFBD>ʽ<EFBFBD><CABD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
|
|||
|
|
{
|
|||
|
|
fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
|
|||
|
|
return len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> wifi spi handshake<6B>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//--------------------------------------------------------------------------------------------------
|
|||
|
|
void wifi_spi_callback (void)
|
|||
|
|
{
|
|||
|
|
wifi_spi_check_state_read_buffer();
|
|||
|
|
wifi_spi_ack_flag = 1; // ACK<43><4B>־λ<D6BE><CEBB>1
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WiFi ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *wifi_ssid Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> WiFi <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *pass_word Ŀ<><C4BF><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> WiFi <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wifi_mode ģ<><C4A3><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ģʽ <20><><EFBFBD><EFBFBD> zf_device_wireless_spi.h <20><> wifi_spi_mode_enum ö<><C3B6>
|
|||
|
|
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
|||
|
|
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
|
|||
|
|
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> zf_device_wireless_spi.h <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
//-------------------------------------------------------------------------------------------------------------------
|
|||
|
|
uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
|
|||
|
|
{
|
|||
|
|
uint8 return_state = 0;
|
|||
|
|
uint32 temp_isr;
|
|||
|
|
|
|||
|
|
spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//Ӳ<><D3B2>SPI<50><49>ʼ<EFBFBD><CABC>
|
|||
|
|
set_wireless_type(WIFI_SPI, wifi_spi_callback);
|
|||
|
|
fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
|
|||
|
|
|
|||
|
|
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
|
|||
|
|
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
|
|||
|
|
|
|||
|
|
|
|||
|
|
temp_isr = interrupt_global_disable();
|
|||
|
|
|
|||
|
|
exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
|
|||
|
|
interrupt_set_priority(EXTI1_IRQn, (0<<5) || 1);
|
|||
|
|
|
|||
|
|
gpio_set_level(WIFI_SPI_RST_PIN, 0);
|
|||
|
|
system_delay_ms(50);
|
|||
|
|
gpio_set_level(WIFI_SPI_RST_PIN, 1);
|
|||
|
|
system_delay_ms(1000);
|
|||
|
|
|
|||
|
|
EXTI_ClearITPendingBit(EXTI_Line1);
|
|||
|
|
NVIC_ClearPendingIRQ(EXTI1_IRQn);
|
|||
|
|
interrupt_global_enable(temp_isr);
|
|||
|
|
|
|||
|
|
do
|
|||
|
|
{
|
|||
|
|
if(wifi_spi_echo_set("0")) // <20>ر<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>д
|
|||
|
|
{
|
|||
|
|
zf_log(0, "exit echo failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(wifi_spi_auto_connect_wifi("0")) // <20>ر<EFBFBD><D8B1>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
zf_log(0, "close auto connect failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(wifi_spi_set_model(wifi_mode)) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
|
{
|
|||
|
|
zf_log(0, "set run mode failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // <20><><EFBFBD><EFBFBD> wifi <20><><EFBFBD>߿<EFBFBD><DFBF><EFBFBD><EFBFBD>ȵ<EFBFBD>
|
|||
|
|
{
|
|||
|
|
zf_log(0, "wifi set failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(wifi_spi_get_information()) // ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ
|
|||
|
|
{
|
|||
|
|
zf_log(0, "get module information failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// zf_log(0, "seekfree wifi spi init succeed");
|
|||
|
|
#if WIFI_SPI_AUTO_CONNECT == 1
|
|||
|
|
if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // <20><><EFBFBD><EFBFBD>TCP<43><50><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
zf_log(0, "connect TCP server failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// zf_log(0, "connect TCP client succeed");
|
|||
|
|
#endif
|
|||
|
|
#if WIFI_SPI_AUTO_CONNECT == 2
|
|||
|
|
if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // <20><><EFBFBD><EFBFBD>UDP<44><50><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
zf_log(0, "connect UDP server failed");
|
|||
|
|
return_state = 1;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
// zf_log(0, "connect UDP server succeed");
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>
|
|||
|
|
wifi_spi_init_flag = 1;
|
|||
|
|
}while(0);
|
|||
|
|
|
|||
|
|
return return_state;
|
|||
|
|
}
|