Esempio n. 1
0
// method socket.setblocking(flag)
STATIC mp_obj_t socket_setblocking(mp_obj_t self_in, mp_obj_t blocking) {
    if (mp_obj_is_true(blocking)) {
        return socket_settimeout(self_in, mp_const_none);
    } else {
        return socket_settimeout(self_in, MP_OBJ_NEW_SMALL_INT(0));
    }
}
Esempio n. 2
0
sys_result  comm_receive(modem_socket_t * socket)
{
	sys_result result;

	if(socket->state_handle.state == COMM_RECEIVE_RX) {

		if(socket->state_handle.substate == COMM_RECEIVE_INVOKE) {

#ifdef LOG_COMMRECEIVE
			printf("socket(%d) receive...\r\n", socket->socket_id);
#endif

			// prepare the socket receive buffer
			memset(socket->rx_buffer, '\0', SOCKET_BUFFER_LEN+1);
			socket->bytes_received = 0;

			socket_entersubstate(socket, COMM_RECEIVE_WAITREPLY);

			socket_settimeout(socket, DEFAULT_COMM_SOCKETRECEIVE_TIMEOUT);

			result = SYS_OK;
		} else if(socket->state_handle.substate == COMM_RECEIVE_WAITREPLY) {

			// if we receive bytes we need to copy the data and signal the
			// function to return
//			if(socket->bytes_received > 0) {
//				socket->event_handler->on_datareceive(socket->rx_buffer, socket->bytes_received);
//				memset(socket->rx_buffer, '\0', SOCKET_BUFFER_LEN+1);
//				xSemaphoreGive(tcp_receive_signal);
//			}

			// wait up to n seconds.
			if(socket_timeout(socket)) {
				socket->socket_error = SCK_ERR_TIMEOUT;

#ifdef LOG_COMMRECEIVE
				printf("socket(%d) receive timeout\r\n", socket->socket_id);
#endif

				// TODO: review for proper transition after receive
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_receive_signal);
				result = SYS_OK;

			}

//			// if we receive bytes we need to copy the data and signal the
//			// function to return
			if(socket->bytes_received > 0) {
				socket->event_handler->on_datareceive(socket->rx_buffer, socket->bytes_received);
				memset(socket->rx_buffer, '\0', SOCKET_BUFFER_LEN+1);
				xSemaphoreGive(tcp_receive_signal);
			}
			result = SYS_OK;
		}
	}

	return result;
}
Esempio n. 3
0
sys_result  comm_close(modem_socket_t * socket)
{
	sys_result result;

	if(socket->state_handle.state == COMM_CLOSE_CONNECTION) {

		if(socket->state_handle.substate == COMM_CLOSE_INVOKE) {
			printf("socket(%d) close...\r\n", socket->socket_id);

			modem_socketclose(socket);
			socket_entersubstate(socket, COMM_CLOSE_WAITREPLY);
			socket_settimeout(socket, DEFAULT_COMM_SOCKETCLOSE_TIMEOUT);
			result = SYS_OK;

		} else if(socket->state_handle.substate  == COMM_CLOSE_WAITREPLY) {

			if(socket_timeout(socket)) {
				printf("socket(%d) close timeout.\r\n", socket->socket_id);
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			}
			result = modem_handle_socketclose(socket);

			if(result == SYS_AT_OK) {
				socket->socket_status = SCK_CLOSED;
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			} else if (result == SYS_ERR_AT_NOCARRIER) {
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			}else if (result == SYS_ERR_AT_TIMEOUT) {
				comm_enterstate(socket, COMM_IDLE);
				socket_exitstate(socket);
				xSemaphoreGive(tcp_close_signal);
			}
		}

		return result;
	}

	return result;
}
Esempio n. 4
0
sys_result  comm_idle(modem_socket_t * socket)
{
	sys_result result;

	if(socket->state_handle.state == COMM_IDLE_SETTIMEOUT) {

		printf("socket(%d) idle.\r\n", socket->socket_id);
		printf("wait %d sec.\r\n", DEFAULT_COMM_IDLE_TIMEOUT/1000);

		socket_enterstate(socket, COMM_IDLE_WAITTIMEOUT);
		socket_settimeout(socket, DEFAULT_COMM_IDLE_TIMEOUT);
		result = SYS_OK;

	} else if(socket->state_handle.state == COMM_IDLE_WAITTIMEOUT) {

		if(socket_timeout(socket)) {
			socket_enterstate(socket, COMM_IDLE_SETTIMEOUT);
			result = SYS_OK;
		}
	}

	return result;

}