/* * Author: Volnys Bernal * * Adaptado do software de Jessica Gomez * Copyright (c) 2015 Intel Corporation. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "mraa.h" #include #include #include #include #include #include #include #include #define BUFFERSIZE 256 extern int errno; int main() { int sd; int status; size_t sizet; struct sockaddr_in serversocketaddr; struct sockaddr_in fromaddr; char buffer[BUFFERSIZE]; // select onboard LED pin based on the platform type // create a GPIO object from MRAA using it mraa_platform_t platform = mraa_get_platform_type(); mraa_gpio_context d_pin = NULL; switch (platform) { case MRAA_INTEL_GALILEO_GEN1: d_pin = mraa_gpio_init_raw(3); break; case MRAA_INTEL_GALILEO_GEN2: d_pin = mraa_gpio_init(13); break ; case MRAA_INTEL_EDISON_FAB_C: d_pin = mraa_gpio_init(13); break; default: fprintf(stderr, "Unsupported platform, exiting"); return MRAA_ERROR_INVALID_PLATFORM; } if (d_pin == NULL) { fprintf(stderr, "MRAA couldn't initialize GPIO, exiting"); return MRAA_ERROR_UNSPECIFIED; } // set the pin as output if (mraa_gpio_dir(d_pin, MRAA_GPIO_OUT) != MRAA_SUCCESS) { fprintf(stderr, "Can't set digital pin as output, exiting"); return MRAA_ERROR_UNSPECIFIED; }; /* socket */ sd = socket(PF_INET,SOCK_DGRAM,0); if (sd < 0) { printf("Erro na criação do socket. \n"); perror("Descricao do erro"); exit(1); } /* preenche campos serversocketaddr */ serversocketaddr.sin_family = AF_INET; serversocketaddr.sin_port = htons((unsigned short int) 5000); serversocketaddr.sin_addr.s_addr = INADDR_ANY; /* bind */ status = bind(sd,(struct sockaddr *)&serversocketaddr,sizeof(struct sockaddr_in)); if (status < 0) { perror("Erro na chamada bind()"); exit(1); } /* Liga LED por 1 segundo */ mraa_gpio_write(d_pin, 1); sleep(1); mraa_gpio_write(d_pin, 0); while (1) { /* Aguarda datagrama UDP*/ sizet = sizeof(fromaddr); status = recvfrom(sd,buffer,BUFFERSIZE,0,(struct sockaddr *)&fromaddr,&sizet); if (status < 0) { perror("ERRO no recebimento de datagramas UDP \n"); exit(1); } printf("RECEBIDO: [%s]\n",buffer); fflush(stdout); /* Envia datagrama UDP de resposta */ status = sendto(sd,buffer,strlen(buffer)+1,0,(struct sockaddr *) &fromaddr,sizeof(fromaddr)); if (status < 0) { printf("ERRO no envio de datagramas UDP \n"); exit(1); } /* Liga LED por 1 segundo */ mraa_gpio_write(d_pin, 1); sleep(1); mraa_gpio_write(d_pin, 0); } return MRAA_SUCCESS; }