/******************************* joinlink **************************/
#ifndef __JOINLINK_H
#define __JOINLINK_H

#include "autoconf.h"
#include "platform_stdlib.h"
#include "wifi_conf.h"
#include "wifi_structures.h"
#include "osdep_service.h"
#include "lwip_netconf.h"
#include "task.h"
#include "hal_crypto.h"

#define SSID_SWITCH_TIME    500  //ssid switch time in phase1,units:ms, 50
#define CHANNEL_SWITCH_TIME 500	//channel switch time in phase2,units:ms, 50
#define JOINLINK_TIME       120  //timeout for joinlink process, units: s

/*
 * store AP profile after successfully decode
 * SUM +£¨length£¬pass£©+£¨IP+Port£©+£¨length£¬SSID)
 */
typedef struct
{
	unsigned char sum;
	unsigned char pwd_length;
	char pwd[65];						
  int source_ip[4];
  unsigned int source_port;
  unsigned char ssid_length;
	char ssid[65];						
} joinlink_result_t;

/*
 * return value of joinlink_recv()
 */
typedef enum
{
	JOINLINK_STATUS_CONTINUE = 0,
	JOINLINK_STATUS_CHANNEL_LOCKED = 1,
	JOINLINK_STATUS_COMPLETE = 2
} joinlink_status_t;

//initialize the related data structure
int joinlink_init();
/*
  handler to decode pkt
 */
joinlink_status_t joinlink_recv(unsigned char *da, unsigned char *sa, int len, void *user_data);

/*
 * get the AP profile after decode
 */
int joinlink_get_result(joinlink_result_t *result);

/*
 * set the aes_key, the max len should be 16
 * ret 1: success; ret 0: the len is invalid;
 */ 
int set_aes_key(char *key, int len);

// call this after finish join_link process
void joinlink_deinit();

#endif //__JOINLINK_H