/****************************************************************************************************
* created by sunpeng 2017 all rights reserved!
****************************************************************************************************/
#ifndef __WIRELESS_H__
#define __WIRELESS_H__

/* Includes ------------------------------------------------------------------*/
#include "datatypes.h"

typedef enum
{
	COM_TYPE_CUB_WHO_RPL = 10,
	COM_TYPE_APP_WHO_ASK = 110,
	COM_TYPE_CUB_WHO_ASK = 11,
	COM_TYPE_APP_WHO_RPL = 111
}COM_TYPE_ENUM;

/*************************************************************************/
//日志缓冲队列
#define LOG_RECORD_MAX				56					/*72 36 记录最大条数*/
#define LOG_PER_RECORD_LEN_MAX		48					/*每条记录最大长度*/

typedef enum
{
	LOG_DATA_TYPE_MIN = -1,
	LOG_DATA_TYPE_Send,				//发送的数据
	LOG_DATA_TYPE_Recv,				//接收的数据
	LOG_DATA_TYPE_MAX
}LOG_DATA_TYPE_ENUM;		//存储的数据类型

typedef struct
{
	u8 data[LOG_PER_RECORD_LEN_MAX+1];	//存储开始指针
	u16 dataLen;						//数据长度
	s8 flag;							//信息是否有效
	LOG_DATA_TYPE_ENUM type;			//数据类型
	u16 writeTime;						//写入时间，数值越大，时间越晚
}LOG_RECORD_STRUCT;   		//单条存储记录信息

typedef struct
{
	LOG_RECORD_STRUCT record[LOG_RECORD_MAX];		//所有存储记录
	u16 writeOffset;								//记录存储偏移量，写入
	u16 readOffset;									//记录存储偏移量，读取
	u16 writeTimeCnt;								//写入时间递增记录
}LOG_INFO_STRUCT;			//日志信息结构体，集中管理多条记录

/*************************************************************************/

/* Macros ------------------------------------------------------------------*/

/* Extern vars ------------------------------------------------------------------*/
extern uint8_t sta_id;// = 1;

/* Functions ------------------------------------------------------------------*/
#if ARCH_MODE == CC254x_Slave_Mode
void Init_CC254x_Slave_Client(void);
#elif ARCH_MODE == ESP8266_Station_Mode
void debug_wifiConnection(void);

void Init_ESP8266_Station_Client(void);
u8 startConnectRouterlink(void);
u8 connectRouter(void);

u8 startConnectServerlink(void);
u8 connectServerPort(void);
u8 changeConnectServerPort(void);//  //通过wifi Server 调试TCP客户端发送更改App Server IP Port指令重新连接App Server

void get_wifi_info(void);
void Init_ESP8266_AP_Server(void);
void Sta_Send(int id, int len, uint8_t *Str);

#endif
/**
  * print_wifi  
  * Esp8266 Station Mode
  * sta_id=1
  * auto detect send len
  */
extern void print_wifi(uint8_t *str);
//发送特定长度的字符串
extern void print_wifi_len(uint8_t *str, uint16_t len);
extern void debug_print_wifi(uint8_t *str);
extern void print_wifi_num(uint8_t num);

void AP_Send(int len, uint8_t *Str);

int SendReplyByCmdcode(int Cmdcode, char *CmdStr);

//初始化日志存储数据
u8 init_LOG_INFO_STRUCT(LOG_INFO_STRUCT *pInfo);
//写入一条日志到日志存储中
u8 write_LOG_INFO_STRUCT(u8 *str, LOG_DATA_TYPE_ENUM type, u16 strLen);
//读取日志缓冲中数据
//str 	: 指向日志存储有效记录
//flag  : 指向日志存储数据有效标志, 数据使用完成后外部清空flag
//type  : 数据类型
//strLen: 数据长度
u8 read_LOG_INFO_STRUCT(u8 **str, u8 **flag, LOG_DATA_TYPE_ENUM *type, u16 *strLen);
//初始化日志缓冲队列
void init_log_queue(void);
//定时检测日志缓冲队列中是否有未发送的数据，若有则上传APP
void cycle_process_log_queue(void);


#endif /* */

/*********************************************end of file*********************************************/
