【RTL8720CF】BW15 module socket local communication code

RTL8720CF WiFi Bluetooth chip, ported socket communication client code.


#include "FreeRTOS.h"

#include "task.h"

#include "diag.h"

#include "main.h"

#include "gpio_api.h"

#include "example_entry.h"

#include "pwmout_api.h"

#include "stdio.h"

extern void console_init(void);



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



#include "sockets.h"

#include "netdb.h"







#define COMPILE_TIME                    __DATE__","__TIME__

#define LOG_MSG                         "\r\n\r\n######################################\r\n\r\n"\

										"this is a socket test!\r\n"\

										"SOCKET CLIENT\r\n"\

                                        "compile time:"COMPILE_TIME"\r\n"\

										"\r\n######################################\r\n\r\n"



#define SOCKET_HOST                     "192.xxx.xxx.xxx"// 填自己的

#define SOCKET_PORT                     5051

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





#define DEBUG_INFO               2 



#if(DEBUG_INFO == 1)

	#define LOG(...)             printf(__VA_ARGS__)

	#define AT_LOG(...)          printf(__VA_ARGS__)

	#define ERR_LOG(fmt,...)     printf("ERR:%s:In Fun '%s',Line[%d] #"fmt,__FILE__, __FUNCTION__, __LINE__,##__VA_ARGS__)

#elif(DEBUG_INFO == 2)

	#define LOG(...)             

	#define AT_LOG(...)  		 printf(__VA_ARGS__)

	#define ERR_LOG(fmt,...)     printf("ERR:%s:In Fun '%s',Line[%d] #"fmt,__FILE__, __FUNCTION__, __LINE__,##__VA_ARGS__)

#elif(DEBUG_INFO == 3)

	#define LOG(...)             

	#define AT_LOG(...)         

	#define ERR_LOG(fmt,...)     printf("ERR:%s:In Fun '%s',Line[%d] #"fmt,__FILE__, __FUNCTION__, __LINE__,##__VA_ARGS__)

#else

	#define LOG(...)   

	#define AT_LOG(...)

	#define ERR_LOG(fmt,...)

#endif





#define GPIO_LED_PIN       PA_19

#define GPIO_PUSHBT_PIN    PA_18

#define PWM_5              PA_17

#define PWM_PERIOD         20000

void example_led(void);

void example_led_thread(void);



/*         PWM            */

pwmout_t pwm_led;

void my_pwm_init(void);

void example_pwm(void);

void example_pwm_thread(void);



void test_socket_creat(void);

void test_socket_thread(void);





//任务优先级

#define START_TASK_PRIO		1

//任务堆栈大小	

#define START_STK_SIZE 		128  

//任务句柄

TaskHandle_t StartTask_Handler;

//任务函数

void start_task(void *pvParameters);



// socket 通信处理

char test_socket_handle(void);



/**

  * @brief  Main program.

  * @param  None

  * @retval None

  */

int main(void)

{
    
    

	/* Initialize log uart and at command service */

	console_init();



	/* pre-processor of application example */

	pre_example_entry();



	/* wlan intialization */

	wlan_network();



	/* Execute application example */

	example_entry();

	



	/*     user test          */

	xTaskCreate((TaskFunction_t )start_task,            //任务函数

                (const char*    )"start_task",          //任务名称

                (uint16_t       )START_STK_SIZE,        //任务堆栈大小

                (void*          )NULL,                  //传递给任务函数的参数

                (UBaseType_t    )START_TASK_PRIO,       //任务优先级

                (TaskHandle_t*  )&StartTask_Handler);   //任务句柄 

                

	/* Enable Schedule, Start Kernel */

	vTaskStartScheduler();



	/* Should NEVER reach here */

	return 0;

}



//开始任务任务函数

void start_task(void *pvParameters)

{
    
    

    taskENTER_CRITICAL();           //进入临界区

	

	//example_led();

	example_pwm();

	AT_LOG("\r\n######################test_socket_creat######################\r\n");

	test_socket_creat();

    vTaskDelete(StartTask_Handler); //删除开始任务

    taskEXIT_CRITICAL();            //退出临界区

}





void example_led(void)

{
    
    

	if(xTaskCreate(example_led_thread, ((const char*)"example_led_thread"),1024, NULL, tskIDLE_PRIORITY + 1, NULL) != pdPASS)

		printf("\n\r%s xTaskCreate failed\n", __FUNCTION__);

}



void example_led_thread(void)

{
    
    

	AT_LOG("\r\n   GPIO DEMO   \r\n");

	gpio_t gpio_led;

    gpio_t gpio_btn;

    // Init LED control pin

    gpio_init(&gpio_led, GPIO_LED_PIN);

    gpio_dir(&gpio_led, PIN_OUTPUT);        // Direction: Output

    gpio_mode(&gpio_led, PullNone);         // No pull





    // Initial Push Button pin

    gpio_init(&gpio_btn, GPIO_PUSHBT_PIN);

    gpio_dir(&gpio_btn, PIN_INPUT);         // Direction: Input

    gpio_mode(&gpio_btn, PullUp);           // Pull-High



//	my_pwm_init();

//	pwmout_pulsewidth_us(&pwm_led, PWM_PERIOD/2);

	

    while (1) {
    
    

		

        // turn off LED

        gpio_write(&gpio_led, 0);

		vTaskDelay(2900);

        // turn on LED

        gpio_write(&gpio_led, 1);

		vTaskDelay(10);   

    }

}

void my_pwm_init()

{
    
    

	pwmout_init(&pwm_led, PWM_5); // obj,pin

	pwmout_period_us(&pwm_led, PWM_PERIOD);

	//  pwmout_pulsewidth_us(&pwm_led, pwms);

}



void example_pwm(void)

{
    
    

	if(xTaskCreate(example_pwm_thread, ((const char*)"pwm_thread"), 1024, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS)

		printf("\n\r%s xTaskCreate failed\n", __FUNCTION__);

}



void example_pwm_thread(void)

{
    
    

	static int pwms = 0;

	my_pwm_init();

	pwmout_pulsewidth_us(&pwm_led, PWM_PERIOD);

	while(1)

	{
    
    

		

		if(pwms >= PWM_PERIOD)

		{
    
    

			pwms = 0;

			LOG("pwms =%d   \r\n",pwms);

		}

		else

			pwms += PWM_PERIOD/200;

		

		if(pwms%1000)

			LOG("\n\rpwms = %d \r\n",pwms);

		pwmout_pulsewidth_us(&pwm_led, pwms);

		vTaskDelay(10);   

    }

}



void test_socket_creat(void)

{
    
    

	if(xTaskCreate(test_socket_thread, ((const char*)"test_socket_thread"),1024, NULL, tskIDLE_PRIORITY + 2, NULL) != pdPASS)

		printf("\n\r%s xTaskCreate failed\n", __FUNCTION__);

}

extern void fATPN(void *arg);





void test_socket_thread(void)

{
    
    

	vTaskDelay(2000);

	AT_LOG("start connect wifi\r\n");

	fATPN("iQOO,123456789");



	AT_LOG("\r\nend connect wifi\r\n");

	if(test_socket_handle() != 0) 

	{
    
    

		ERR_LOG("test_socket_handle\r\n");

	}

 	vTaskDelete(NULL); //删除任务

}



char test_socket_handle(void)

{
    
    

	char exit_num = 0;// 退出编码

	// 第1步:创建客户端socket

	int sockfd = socket(AF_INET,SOCK_STREAM,0);



	// 第2步:向服务器发起请求

	struct hostent* h = gethostbyname(SOCKET_HOST);



	if(h == 0)

	{
    
    

		exit_num = 1;

		ERR_LOG("gethostbyname ERR:%d\r\n",exit_num);

		goto exit;

	}

	

	struct sockaddr_in servaddr;

	memset(&servaddr,0,sizeof(servaddr));

	servaddr.sin_family = AF_INET;

	servaddr.sin_port = htons(SOCKET_PORT);	// 指定端口

	memcpy(&servaddr.sin_addr,h->h_addr,h->h_length);

	if(connect(sockfd, (struct sockaddr *)&servaddr,sizeof(servaddr)) != 0) // 向服务器发起连接请求

	{
    
    

		exit_num = 2;

		ERR_LOG("connect sockfd ERR:%d\r\n",exit_num);

		goto exit;

	}



	char buffer[256];

	char i = 0;

	AT_LOG("**********************************start socket test\r\n");

	sprintf(buffer,"connect sockfd sucess msg%d\r\n",i);

	if(send(sockfd,buffer,strlen(buffer),0)<=0)

	{
    
    

		exit_num = 3;

		ERR_LOG("connect sockfd ERR:%d\r\n",exit_num);

		goto exit;

	}	

	// 第3步:与服务端天下,发送一个报文后等待回复,然后发送下一个报文

	for(;;)

	{
    
    

		memset(buffer,0,sizeof(buffer));



		// 接受服务器的消息,阻塞

		memset(buffer,0,sizeof(buffer));

		if( recv(sockfd,buffer,sizeof(buffer),0) <= 0 ){
    
    

			AT_LOG("recv error");

			exit_num = -1;

			goto exit;

		}

		else

		{
    
    

			AT_LOG("LOG recv %d:%s",i++,buffer);

			if(strcmp(buffer,"+++\r\n") == 0)

			{
    
    

				AT_LOG("user exit socket\r\n");

				break;

			}	

		}

		// sprintf(buffer,"test msg %d\r\n",i++);

		if(send(sockfd,buffer,strlen(buffer),0)<=0) 

		{
    
    

			AT_LOG("send error\r\n");

			exit_num = -1;

			goto exit;

		}	

		else{
    
    

			AT_LOG("LOG client send sucess:%s\r\n",buffer);

		}

		vTaskDelay(1); 

	}



	if(sockfd)

		close(sockfd);

	return 0;

exit:

	if(exit_num!= 0)

		ERR_LOG("%d",exit_num);

	if(sockfd)

		close(sockfd);	

	return exit_num;	

}

Guess you like

Origin blog.csdn.net/qq_44078824/article/details/119866291