抽象socket的细节-它直接返回让上层知道可以采取复位策略


int8_t socket_write(uint8_t id ,  uint8_t *sendData , uint16_t length , uint32_t timeout )
{
    int ret = GSOCKET_OK;
    
    gsockeArryType *socket = socket_read_obj(id);//绑定关系

    if(!devCom->isOK())//------------------它可以提前返回
    {
        printy("socket_write 直接返回id = %d\n" , id);
    	return SOCKERT_STATUS_ERR;
    }

    if(socket == NULL)
    {
    	log_err("SOCKET_SEND_NOID id = %d\n" , id);
        return SOCKET_SEND_NOID ;
    }

    if( socket->useFlag == FALSE)
    {

        return SOCKET_SEND_NOCON;
    }

//开始发送
	if( xSemaphoreTake( xSocketSemaphore, timeout ) == pdTRUE )
	{
		if( ( ret = devCom->send(id , sendData , length )) == TRUE)
		{
			xSemaphoreGive(xSocketSemaphore);
			return GSOCKET_OK;
		}
		xSemaphoreGive(xSocketSemaphore);
		return ret;
	}
	else
	{
		printy("socket %d GETFAIL xSocketSemaphore ->SOCKET_SEND_BUSY\n" , id);
		return SOCKET_SEND_BUSY;
	}

}



int8_t gsm_write_data(uint8_t socketId , uint8_t *msg , uint16_t length)
{

    uint8_t comm[64] , cmdLength =0,sendAck=0;
    memset(comm , 0x00 , sizeof(comm));


    if(GSM_INIT_OK==0) {  printy("gsm_write_data GSM_INIT_OK==0 直接返回\r\n"); return SOCKET_SEND_FAIL;}//------------------它可以提前返回 已经不要了

    cmdLength = sprintf((char *)comm , "AT+CIPSEND=%d,%d\r\n" , socketId , length);

   // printf("SIM send :%s",comm);   
    modesim_send(comm , cmdLength);

    if( xSemaphoreTake( xSocketATACKSemaphore, 60000 ) == pdTRUE )
    {    	
        //printf("SIM send AT 拿到>成功 继续\r\n");
//        log_arry("SIM send :" ,msg , length );
        modesim_send(msg ,length );
        if(xQueueReceive( xSIM800CTALKQueue, &sendAck, 60000 ) == pdTRUE)
        {
//            printf("SIM send MAG 拿到反馈%d[9-ok  10-fail]\r\n",sendAck);
            if(sendAck == GSM_SEND_OK_TYPE)
      		return 0;
            else if(sendAck == GSM_SEND_FAIL_TYPE)
            return SOCKET_SEND_FAIL;
        }
        log_err("SIM send MAG 没有拿到反馈\n" ); 
        return SOCKET_SEND_NOREADY;
    }
    log_err("SIM send AT 没有拿到>\r\n" );
    return SOCKET_SEND_NOREADY;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值