初始化仓库
This commit is contained in:
666
libraries/zf_device/zf_device_wifi_spi.c
Normal file
666
libraries/zf_device/zf_device_wifi_spi.c
Normal file
@@ -0,0 +1,666 @@
|
||||
/*********************************************************************************************************************
|
||||
* TC264 Opensourec Library <20><><EFBFBD><EFBFBD>TC264 <20><>Դ<EFBFBD>⣩<EFBFBD><E2A3A9>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ڹٷ<DAB9> SDK <20>ӿڵĵ<DAB5><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>
|
||||
* Copyright (c) 2022 SEEKFREE <20><><EFBFBD>ɿƼ<C9BF>
|
||||
*
|
||||
* <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD> TC264 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
||||
*
|
||||
* TC264 <20><>Դ<EFBFBD><D4B4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD>Ը<EFBFBD><D4B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᷢ<EFBFBD><E1B7A2><EFBFBD><EFBFBD> GPL<50><4C>GNU General Public License<73><65><EFBFBD><EFBFBD> GNUͨ<55>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* <20><> GPL <20>ĵ<EFBFBD>3<EFBFBD>棨<EFBFBD><E6A3A8> 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>/<2F><><EFBFBD><EFBFBD><DEB8><EFBFBD>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κεı<CEB5>֤
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD><D4BB>ʺ<EFBFBD><CABA>ض<EFBFBD><D8B6><EFBFBD>;<EFBFBD>ı<EFBFBD>֤
|
||||
* <20><><EFBFBD><EFBFBD>ϸ<EFBFBD><CFB8><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD> GPL
|
||||
*
|
||||
* <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>ͬʱ<CDAC>յ<EFBFBD>һ<EFBFBD><D2BB> GPL <20>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>û<EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><https://www.gnu.org/licenses/>
|
||||
*
|
||||
* <20><><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>ʹ<EFBFBD><CAB9> GPL3.0 <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>֤Э<D6A4><D0AD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>İ汾
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӣ<EFBFBD>İ<EFBFBD><C4B0><EFBFBD> libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> GPL3_permission_statement.txt <20>ļ<EFBFBD><C4BC><EFBFBD>
|
||||
* <20><><EFBFBD><EFBFBD>֤<EFBFBD><D6A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD> libraries <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>µ<EFBFBD> LICENSE <20>ļ<EFBFBD>
|
||||
* <20><>ӭ<EFBFBD><D3AD>λʹ<CEBB>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>뱣<EFBFBD><EBB1A3><EFBFBD><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC>İ<EFBFBD>Ȩ<EFBFBD><C8A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*
|
||||
* <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> zf_device_wifi_spi
|
||||
* <20><>˾<EFBFBD><CBBE><EFBFBD><EFBFBD> <20>ɶ<EFBFBD><C9B6><EFBFBD><EFBFBD>ɿƼ<C9BF><C6BC><EFBFBD><EFBFBD><EFBFBD>˾
|
||||
* <20>汾<EFBFBD><E6B1BE>Ϣ <20>鿴 libraries/doc <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD> version <20>ļ<EFBFBD> <20>汾˵<E6B1BE><CBB5>
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ADS v1.10.2
|
||||
* <20><><EFBFBD><EFBFBD>ƽ̨ TC264D
|
||||
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> https://seekfree.taobao.com/
|
||||
*
|
||||
* <20>ļ<DEB8>¼
|
||||
* <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ע
|
||||
* 2022-09-21 SeekFree first version
|
||||
********************************************************************************************************************/
|
||||
/*********************************************************************************************************************
|
||||
* <20><><EFBFBD>߶<EFBFBD><DFB6>壺
|
||||
* ------------------------------------
|
||||
* ģ<><C4A3><EFBFBD>ܽ<EFBFBD> <20><>Ƭ<EFBFBD><C6AC><EFBFBD>ܽ<EFBFBD>
|
||||
* RST <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_RST_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* INT <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_INT_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* CS <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_CS_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* MISO <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_MISO_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* SCK <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_SCK_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* MOSI <20>鿴 zf_device_wifi_spi.h <20><> WIFI_SPI_MOSI_PIN <20>궨<EFBFBD><EAB6A8>
|
||||
* 5V 5V <20><>Դ
|
||||
* GND <20><>Դ<EFBFBD><D4B4>
|
||||
* <20><><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_driver_delay.h"
|
||||
#include "zf_driver_gpio.h"
|
||||
#include "zf_driver_spi.h"
|
||||
#include "zf_device_type.h"
|
||||
|
||||
#include "zf_device_wifi_spi.h"
|
||||
|
||||
#define WIFI_CONNECT_TIME_OUT 10000 // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
#define SOCKET_CONNECT_TIME_OUT 50000 // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
#define OTHER_TIME_OUT 1000 // <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
|
||||
char wifi_spi_version[12]; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD>̼<EFBFBD><CCBC>汾<EFBFBD><E6B1BE>Ϣ
|
||||
char wifi_spi_mac_addr[20]; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>MAC<41><43>ַ<EFBFBD><D6B7>Ϣ
|
||||
char wifi_spi_ip_addr_port[25]; // <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿<EFBFBD><CBBF><EFBFBD>Ϣ
|
||||
|
||||
static fifo_struct wifi_spi_fifo;
|
||||
static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
|
||||
static volatile wifi_spi_state_enum wifi_spi_mutex;
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȴ<EFBFBD>WIFI SPI<50><49><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wait_time <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 wifi_spi_wait_idle (uint32 wait_time)
|
||||
{
|
||||
uint32 time = 0;
|
||||
|
||||
wait_time = wait_time*100;
|
||||
while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
|
||||
{
|
||||
system_delay_us(10);
|
||||
time++;
|
||||
if(wait_time <= time)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return (wait_time <= time);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>WIFI SPI
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length1 <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length2 <20>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
|
||||
{
|
||||
gpio_low(WIFI_SPI_CS_PIN);
|
||||
if(NULL != buffer1)
|
||||
{
|
||||
spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
|
||||
}
|
||||
if(NULL != buffer2)
|
||||
{
|
||||
spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
|
||||
}
|
||||
gpio_high(WIFI_SPI_CS_PIN);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD><D5B7><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *packets <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յĵ<D5B5>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յij<D5B5><C4B3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
|
||||
{
|
||||
gpio_low(WIFI_SPI_CS_PIN);
|
||||
|
||||
spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
|
||||
|
||||
if(length)
|
||||
{
|
||||
spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
|
||||
}
|
||||
|
||||
gpio_high(WIFI_SPI_CS_PIN);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD>շ<EFBFBD>)
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *write_data <20><><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *read_data <20><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĴ洢<C4B4><E6B4A2>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>Ҫ<EFBFBD><D2AA><EFBFBD>յij<D5B5><C4B3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> void
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
|
||||
{
|
||||
gpio_low(WIFI_SPI_CS_PIN);
|
||||
|
||||
read_data->head.command = WIFI_SPI_DATA;
|
||||
read_data->head.length = length;
|
||||
|
||||
spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
|
||||
|
||||
if(WIFI_SPI_RECVIVE_SIZE < length)
|
||||
{
|
||||
spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
|
||||
spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
|
||||
}
|
||||
else
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>write_dataԽ<61><D4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
memcpy(read_data->buffer, write_data, length);
|
||||
spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
|
||||
}
|
||||
gpio_high(WIFI_SPI_CS_PIN);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> command <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wait_time <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ100<30><CEA2>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
|
||||
{
|
||||
uint8 return_state;
|
||||
wifi_spi_head_struct head;
|
||||
return_state = 1;
|
||||
do
|
||||
{
|
||||
head.command = command;
|
||||
head.length = length;
|
||||
|
||||
// <20>ȴ<EFBFBD><C8B4>ӻ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(wifi_spi_wait_idle(wait_time))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
|
||||
if(wifi_spi_wait_idle(wait_time))
|
||||
{
|
||||
break;
|
||||
}
|
||||
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
|
||||
head.command = WIFI_SPI_DATA;
|
||||
head.length = 0;
|
||||
wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
|
||||
system_delay_us(20);
|
||||
if(WIFI_SPI_REPLY_OK == head.command)
|
||||
{
|
||||
return_state = 0;
|
||||
}
|
||||
}while(0);
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI ģ<><C4A3><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2>ȡ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> command <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buffer <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> wait_time <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>ʱ<EFBFBD><CAB1> <20><>λ100<30><CEA2>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> <20>ڲ<EFBFBD>ʹ<EFBFBD>ã<EFBFBD><C3A3>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
|
||||
{
|
||||
uint8 return_state;
|
||||
|
||||
return_state = 1;
|
||||
do
|
||||
{
|
||||
// <20>ȴ<EFBFBD><C8B4>ӻ<EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(wifi_spi_wait_idle(wait_time))
|
||||
{
|
||||
break;
|
||||
}
|
||||
read_data->head.command = command;
|
||||
wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
|
||||
|
||||
if(wifi_spi_wait_idle(wait_time))
|
||||
{
|
||||
break;
|
||||
}
|
||||
read_data->head.command = WIFI_SPI_DATA;
|
||||
read_data->head.length = 0;
|
||||
wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
|
||||
return_state = 0;
|
||||
}while(0);
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20>̼<EFBFBD><CCBC>汾<EFBFBD><E6B1BE>ȡ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20>˿ں<CBBF>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>֮<EFBFBD>̼<F3A3ACB9><CCBC>汾<EFBFBD><E6B1BE>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_version<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 wifi_spi_get_version (void)
|
||||
{
|
||||
uint8 return_state;
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
|
||||
return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
|
||||
if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
|
||||
{
|
||||
memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI MAC<41><43>ַ<EFBFBD><D6B7>ȡ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20>˿ں<CBBF>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>MAC<41><43>ַ<EFBFBD><D6B7>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_mac_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 wifi_spi_get_mac_addr (void)
|
||||
{
|
||||
uint8 return_state;
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
|
||||
return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
|
||||
if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
|
||||
{
|
||||
memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ںŻ<DABA>ȡ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void <20>˿ں<CBBF>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><><EFBFBD>ú<EFBFBD><C3BA><EFBFBD>֮<EFBFBD><D6AE><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF><DABA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_ip_addr_port<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Socket֮<74><D6AE><EFBFBD><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
static uint8 wifi_spi_get_ip_addr_port (void)
|
||||
{
|
||||
uint8 return_state;
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
|
||||
return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
|
||||
if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
|
||||
{
|
||||
memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>WiFi<46><69>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WiFi
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *wifi_ssid WIFI<46><49><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *pass_word WIFI<46><49><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ wifi_spi_wifi_connect("SEEKFREE", NULL); // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI<46>ȵ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
|
||||
{
|
||||
uint8 return_state;
|
||||
uint8 temp_buffer[64];
|
||||
uint16 length;
|
||||
|
||||
if(NULL != pass_word)
|
||||
{
|
||||
// WIFI<46>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>뷢<EFBFBD><EBB7A2><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
|
||||
}
|
||||
else
|
||||
{
|
||||
// WIFI<46>ȵ<EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
|
||||
}
|
||||
|
||||
return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF><DABA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_ip_addr_port<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wifi_spi_get_ip_addr_port();
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Socket<65><74>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Socket
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *transport_type <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *ip_addr IP<49><50>ַ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *port Ŀ<><C4BF><EFBFBD>˿ں<CBBF>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *local_port <20><><EFBFBD><EFBFBD><EFBFBD>˿ں<CBBF>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
|
||||
{
|
||||
uint8 return_state;
|
||||
uint8 temp_buffer[41];
|
||||
uint16 length;
|
||||
|
||||
length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
|
||||
|
||||
return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>IP<49><50>ַ<EFBFBD><D6B7><EFBFBD>˿ں<CBBF><DABA><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_ip_addr_port<72><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wifi_spi_get_ip_addr_port();
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20>Ͽ<EFBFBD>Socket<65><74><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_socket_disconnect();
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 wifi_spi_socket_disconnect (void)
|
||||
{
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
|
||||
return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD><EFBFBD>λ
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 wifi_spi_reset (void)
|
||||
{
|
||||
uint8 return_state;
|
||||
wifi_spi_head_struct head;
|
||||
return_state = 1;
|
||||
do
|
||||
{
|
||||
head.command = WIFI_SPI_RESET;
|
||||
head.length = 0xA5A5;
|
||||
return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
|
||||
if(return_state)
|
||||
{
|
||||
break;
|
||||
}
|
||||
wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
|
||||
}while(0);
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI UDPģʽʱ<CABD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> void
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint8 ״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE>
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ <20><>UDPģʽ<C4A3><CABD>ģ<EFBFBD><C4A3><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD>ݺ<EFBFBD><DDBA><EFBFBD><EFBFBD>ȴ<EFBFBD>2<EFBFBD><32><EFBFBD>룬2<EBA3AC><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>socket<65><74><EFBFBD>͵<EFBFBD><CDB5><EFBFBD><EFBFBD>磬<EFBFBD><E7A3AC><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϻ<EFBFBD><CFBA><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 wifi_spi_udp_send_now (void)
|
||||
{
|
||||
uint8 return_state = 1;
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
|
||||
if(WIFI_SPI_IDLE == wifi_spi_mutex)
|
||||
{
|
||||
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊæ
|
||||
wifi_spi_mutex = WIFI_SPI_BUSY;
|
||||
do
|
||||
{
|
||||
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼsocket<65><74><EFBFBD><EFBFBD>
|
||||
temp_packets.head.command = WIFI_SPI_UDP_SEND;
|
||||
temp_packets.head.length = 0;
|
||||
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(temp_packets.head.length)
|
||||
{
|
||||
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
}
|
||||
|
||||
// <20>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ź<EFBFBD>
|
||||
temp_packets.head.command = WIFI_SPI_DATA;
|
||||
temp_packets.head.length = 0;
|
||||
wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
|
||||
|
||||
if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
|
||||
{
|
||||
return_state = 0;
|
||||
}
|
||||
|
||||
}while(0);
|
||||
|
||||
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
wifi_spi_mutex = WIFI_SPI_IDLE;
|
||||
}
|
||||
|
||||
return return_state;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><><EFBFBD>ݿ鷢<DDBF>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><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> length <20><><EFBFBD>ͳ<EFBFBD><CDB3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʣ<><CAA3>δ<EFBFBD><CEB4><EFBFBD>͵ij<CDB5><C4B3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_send_buffer(buffer, 100);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
|
||||
{
|
||||
uint16 send_length;
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>WIFI SPI״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻ<D0B6><CFBB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD>β<F2B1BEB4><CEB2>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(WIFI_SPI_IDLE == wifi_spi_mutex)
|
||||
{
|
||||
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊæ
|
||||
wifi_spi_mutex = WIFI_SPI_BUSY;
|
||||
|
||||
while(length)
|
||||
{
|
||||
send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
|
||||
|
||||
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
wifi_spi_transfer_data(buffer, &temp_packets, send_length);
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(temp_packets.head.length)
|
||||
{
|
||||
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
}
|
||||
|
||||
length -= send_length;
|
||||
buffer += send_length;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>εĽ<CEB5><C4BD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
|
||||
{
|
||||
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡģ<C8A1><C4A3>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
temp_packets.head.command = WIFI_SPI_DATA;
|
||||
temp_packets.head.length = 0;
|
||||
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(temp_packets.head.length)
|
||||
{
|
||||
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
}
|
||||
}
|
||||
wifi_spi_mutex = WIFI_SPI_IDLE;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> WIFI SPI <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> *buff <20><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>
|
||||
// <20><><EFBFBD><EFBFBD>˵<EFBFBD><CBB5> length <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// <20><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD> uint32 ʵ<>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_read_buffer(buffer, 100);
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
|
||||
{
|
||||
zf_assert(NULL != buffer);
|
||||
uint32 data_len = length;
|
||||
|
||||
#if(1 == WIFI_SPI_READ_TRANSFER)
|
||||
|
||||
wifi_spi_packets_struct temp_packets;
|
||||
// <20><><EFBFBD><EFBFBD>WIFI SPI״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϻ<D0B6><CFBB><EFBFBD><EFBFBD>߳<EFBFBD><DFB3><EFBFBD><EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶ<CDA8><D1B6><EFBFBD>β<F2B1BEB4><CEB2>ܷ<EFBFBD><DCB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(WIFI_SPI_IDLE == wifi_spi_mutex)
|
||||
{
|
||||
// <20><>ͨѶ״̬<D7B4><CCAC><EFBFBD><EFBFBD>Ϊæ
|
||||
wifi_spi_mutex = WIFI_SPI_BUSY;
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>ͨѶ<CDA8>鿴ģ<E9BFB4><C4A3><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4>ȡ
|
||||
do
|
||||
{
|
||||
if(wifi_spi_wait_idle(OTHER_TIME_OUT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
temp_packets.head.command = WIFI_SPI_DATA;
|
||||
temp_packets.head.length = 0;
|
||||
wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5>İ<EFBFBD><C4B0><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
|
||||
{
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(temp_packets.head.length)
|
||||
{
|
||||
fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
|
||||
}
|
||||
}
|
||||
}while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
|
||||
wifi_spi_mutex = WIFI_SPI_IDLE;
|
||||
}
|
||||
#endif
|
||||
|
||||
fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
|
||||
return data_len;
|
||||
}
|
||||
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
// <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><D8B2><EFBFBD> uint8 ģ<><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>״̬ 0-<2D>ɹ<EFBFBD> 1-<2D><><EFBFBD><EFBFBD>
|
||||
// ʹ<><CAB9>ʾ<EFBFBD><CABE> wifi_spi_init("SEEKFREE", "SEEKFREE123");
|
||||
// <20><>ע<EFBFBD><D7A2>Ϣ wifi_spi_init("SEEKFREE", NULL); // <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI<46>ȵ<EFBFBD>
|
||||
//-------------------------------------------------------------------------------------------------------------------
|
||||
uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
|
||||
{
|
||||
uint8 return_state = 0;
|
||||
|
||||
fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
|
||||
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>
|
||||
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
|
||||
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
|
||||
gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
|
||||
|
||||
// <20><>λ
|
||||
gpio_set_level(WIFI_SPI_RST_PIN, 0);
|
||||
system_delay_ms(10);
|
||||
gpio_set_level(WIFI_SPI_RST_PIN, 1);
|
||||
|
||||
// <20>ȴ<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
system_delay_ms(100);
|
||||
wifi_spi_mutex = WIFI_SPI_IDLE;
|
||||
|
||||
do
|
||||
{
|
||||
// <20>̼<EFBFBD><CCBC>汾<EFBFBD><E6B1BE>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_version<6F><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
return_state = wifi_spi_get_version();
|
||||
if(return_state)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// MAC<41><43>ַ<EFBFBD><D6B7>Ϣ<EFBFBD><CFA2><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>wifi_spi_mac_addr<64><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
wifi_spi_get_mac_addr();
|
||||
|
||||
|
||||
return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
|
||||
if(return_state)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
#if(1 == WIFI_SPI_AUTO_CONNECT)
|
||||
return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
|
||||
if(return_state)
|
||||
{
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if(2 == WIFI_SPI_AUTO_CONNECT)
|
||||
return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
|
||||
if(return_state)
|
||||
{
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}while(0);
|
||||
|
||||
return return_state;
|
||||
}
|
||||
Reference in New Issue
Block a user