コード例 #1
0
ファイル: rn2903.c プロジェクト: mihaitghstefanescu/upm
int rn2903_read(const rn2903_context dev, char *buffer, size_t len)
{
    assert(dev != NULL);

    // uart
    return mraa_uart_read(dev->uart, buffer, len);
}
コード例 #2
0
ファイル: Modem.cpp プロジェクト: em-p/foneOS
std::string Modem_SIM800::Read()
{
    std::string returnString = "";
    int ni = 0;
    while (true)
    {
        char miniBuf[2] = {0};
        mraa_uart_read(this->_serial, miniBuf, 1);
        if (miniBuf[0] == '\n')
        {
            if (ni >= 3)
            {
                break;
            }
            else
            {
                ni++; // Ignore the first 3 newlines.
                continue;
            }
        }
        if (miniBuf[0] != '\r')
        {
            returnString = returnString + std::string(miniBuf);
        }
        Utils::Delay(1);
    }
    Logging::LogMessage(std::string("<-- ") + returnString);
    return returnString;
}
コード例 #3
0
ファイル: uart.c プロジェクト: pbosetti/mruby-mraa
mrb_value mrb_mraa_uart_read_to_prompt(mrb_state *mrb, mrb_value self) {
  mraa_uart_context uart;
  mrb_int timeout, nargs, i;
  char prompt, str_arg[1], buf[1];
  mrb_value result;  
  
  timeout = mrb_fixnum(IV_GET("@timeout"));
  
  nargs = mrb_get_args(mrb, "|z", &str_arg);
  if (nargs == 0) {
    char *str = mrb_str_to_cstr(mrb, IV_GET("@prompt"));
    prompt = str[0];
  }
  else
    prompt = str_arg[0];
  
  uart = (mraa_uart_context)mrb_data_get_ptr(mrb, self, &mrb_mraa_uart_ctx_type);
  result = mrb_str_buf_new(mrb, mrb_fixnum(IV_GET("@read_bufsize")));
  
  while (mraa_uart_data_available(uart, timeout) > 0) {
    i = mraa_uart_read(uart, buf, 1);
    if (i == 0)         break;
    if (*buf == prompt) break;
    result = mrb_str_cat_cstr(mrb, result, buf);
  }

  return result;
}
コード例 #4
0
int main(int argc, char** argv)
{
    mraa_uart_context uart;
    uart = mraa_uart_init(0);
	mraa_uart_set_baudrate(uart, 9600);
    if (uart == NULL) {
        fprintf(stderr, "UART failed to setup\n");
        printf("UART fialed");
	return EXIT_FAILURE;
    }

    char buffer[] = "Hello Mraa!";
//    mraa_uart_write(uart, buffer, sizeof(buffer));
	printf("buffer: ");
    char* current;
	while(1){
	printf("%c",buffer[1]);
    	mraa_uart_read(uart, buffer, 9);
	printf("buff:%c %c %c %c %c %c %c %c %c\n",buffer[0], buffer[1], 
buffer[2], buffer[3], buffer[4], buffer[5], buffer[6], buffer[7], 
buffer[8] );
	sleep(1);

    }
//    mraa_uart_stop(uart);

    mraa_deinit();

    return EXIT_SUCCESS;
}
コード例 #5
0
ファイル: uart.hpp プロジェクト: nicosoap/mraa
 /**
  * Read bytes from the device into a String object
  *
  * @param length to read
  * @return string of data
  */
 std::string
 readStr(int length)
 {
     char* data = (char*) malloc(sizeof(char) * length);
     int v = mraa_uart_read(m_uart, data, (size_t) length);
     std::string ret(data, v);
     free(data);
     return ret;
 }
コード例 #6
0
ファイル: Modem.cpp プロジェクト: em-p/foneOS
void Modem_SIM800::WriteLine(std::string line)
{
    while(mraa_uart_data_available(this->_serial, 100))
    {
        char deadBuf[2] = {0};
        mraa_uart_read(this->_serial, deadBuf, 1);
    } // clear responses
    mraa_uart_write(this->_serial, line.c_str(), strlen(line.c_str()));
    mraa_uart_write(this->_serial, "\r\n", strlen("\r\n"));
    Logging::LogMessage(std::string("--> ") + line);
}
void readCharAry(mraa_uart_context uart, char* data)
{
	int size = sizeof(data);
	printf("Flushing size of %d",size);
	int i=0;
	for(i=0; i<size; i++)
	{	
		mraa_uart_read(uart, data+i,1);
		printf("%c",data[i]);
		if(data[i]=='\0')	break;
	}
	if(mraa_uart_data_available)
	{
		mraa_uart_read(uart, data,1);
		mraa_uart_read(uart, data+1,1);
		mraa_uart_read(uart, data+2,1);
		mraa_uart_read(uart, data+3,1);

		printf("data avail: %c %c %c %c",data[0],data[1],data[2],data[3]);
	}
	printf("|");
	return;
}
コード例 #8
0
ファイル: ecezo.c プロジェクト: g-vidal/upm
int ecezo_read(const ecezo_context dev, char *buffer, size_t len)
{
    assert(dev != NULL);

    upm_delay_ms(CMD_DELAY); // delay CMD_DELAY ms to make sure cmd completed

    // i2c
    if (dev->i2c)
    {
        return readBytes(dev, (uint8_t *)buffer, len);
    }
    else
    {
        // UART
        size_t bytesRead = 0;

        while(bytesRead < len)
        {
            // we read one byte at a time, exiting when either len is
            // reached, or a '\r' is found indicating the end of a
            // sentence. Most commands (except 'R') require a minimum
            // of 300ms to execute, so we wait up to CMD_DELAY ms after all
            // data (if any) is read.
            if (ecezo_data_available(dev, CMD_DELAY))
            {
                int br = mraa_uart_read(dev->uart, &buffer[bytesRead], 1);

                if (br <= 0)
                    return br;

                if (buffer[bytesRead] == '\r')
                {
                    // if we found a CR, replace it with a 0 byte
                    buffer[bytesRead++] = 0;
                    return bytesRead;
                }
                bytesRead++;
            }
            else
            {
                // timed out - ok with responses disabled
                return 0;
            }
        }
    }

    // anything else is an error
    return -1;
}
コード例 #9
0
ファイル: uart.c プロジェクト: byyangyang/drone
void serial_readln(char *buffer, int len)
{
	char c;
	char *b = buffer;
  //int length = len;
	int rx_length = -1;
	while(1)
    {rx_length = mraa_uart_read(uart, &c, 1);
		if(rx_length <= 0){
			sleep(1);
	      		}
		else{
		if(c == '\n'){
			*b++ = '\0';
			break;
			}
		*b++ = c;
   }}
}   
コード例 #10
0
ファイル: uart.c プロジェクト: pbosetti/mruby-mraa
mrb_value mrb_mraa_uart_read(mrb_state *mrb, mrb_value self) {
  mraa_uart_context uart;
  mraa_result_t result;
  char *string;
  mrb_value mrb_result;
  int bufsize;

  if ((bufsize = mrb_fixnum(IV_GET("@read_bufsize"))) <= 0)
    bufsize = UART_DEFAULT_BUFSIZE;

  string = calloc(bufsize, sizeof(char));

  uart = (mraa_uart_context)mrb_data_get_ptr(mrb, self, &mrb_mraa_uart_ctx_type);
  result = mraa_uart_read(uart, string, bufsize);
  if (result < 0) {
    mrb_raisef(mrb, E_RUNTIME_ERROR, "Could not read (err %S)",
               mrb_fixnum_value(result));
  }
  mrb_result = mrb_str_new_cstr(mrb, string);
  free(string);
  return mrb_result;
}
コード例 #11
0
ファイル: Modem.cpp プロジェクト: em-p/foneOS
void Modem_SIM800::Init()
{
    _enabled = true;
    this->_serial = mraa_uart_init(0);
    mraa_uart_set_baudrate(this->_serial, 9600);

    // TODO: Error handling
    while(mraa_uart_data_available(this->_serial, 0)) {this->Read();} // clear anything the modem sent on startup

    // get the auto-bauder started
    this->WriteLine("ATE0"); this->Read(); // disable echo of commands

    if (mraa_uart_data_available(this->_serial, 100))
    {
         this->Read(); // read extra echo
    }

    this->WriteLine("AT"); this->Read();

    this->WriteLine("AT"); this->Read();

    this->WriteLine("AT"); this->Read();


    while(mraa_uart_data_available(this->_serial, 100))
    {
        char deadBuf[2] = {0};
        mraa_uart_read(this->_serial, deadBuf, 1);
    } // clear responses

    if(!this->CheckReply("ATE0", "OK"))
    {
        // TODO: error handle
    }

    Logging::LogMessage(this->GetOperator());
}
コード例 #12
0
ファイル: uart.hpp プロジェクト: emutex/mraa
 /**
  * Read bytes from the device into char* buffer
  *
  * @param data buffer pointer
  * @param length maximum size of buffer
  * @return numbers of bytes read
  */
 int
 read(char* data, int length)
 {
     return mraa_uart_read(m_uart, data, (size_t) length);
 }
コード例 #13
0
ファイル: uart_bbb.c プロジェクト: byyangyang/drone
/**
 * n_direction_flag: 0 from edison to beaglebone
 *                  1 from beaglebone to edison
 * check https://github.com/peidong/drone/blob/master/Edison/main/edison-bbb-communication-code.md for commands
 */
int communication_with_beaglebone_uart(int nflag_direction, struct T_drone *pT_drone, int nflag_receive_success){
    /**
     * check if uart available
     */
    while (pT_drone->nflag_enable_uart != 1){
        usleep(1300);
    }
    pT_drone->nflag_enable_uart = 0;
    mraa_uart_context beaglebone_uart;
    if (nflag_direction == 1){
        /**
         * From beaglebone to edison
         */
        beaglebone_uart = mraa_uart_init_raw("/dev/ttyO4");
        mraa_uart_set_baudrate(beaglebone_uart, 38400);
        mraa_uart_set_mode(beaglebone_uart, 8, MRAA_UART_PARITY_NONE , 1);
        while (mraa_uart_data_available(beaglebone_uart, 10000) != 1){
            printf("data not available\n");
            /*usleep(10000);*/
        }
        /**
         * Start receive
         */
        char c_flag[1];
        char arrc_buffer[20];
        int nflag_find_beginning = 0;
        int nflag_find_end = 0;
        int n_index = 0;
        /**
         * Read the message array
         */
        while (nflag_find_beginning != 1){
            mraa_uart_read(beaglebone_uart, c_flag, 1);
            if (c_flag[0] == '~'){
                nflag_find_beginning = 1;
                n_index = 0;
                while (nflag_find_end != 1){
                    mraa_uart_read(beaglebone_uart, arrc_buffer + n_index, 1);
                    if (arrc_buffer[n_index] == '$'){
                        arrc_buffer[n_index] = '\0';
                        nflag_find_end = 1;
                        //break;
                    }else if (arrc_buffer[n_index] == '~'){
                        nflag_find_end = -1;
                        nflag_find_beginning = 1;
                        n_index = 0;
                        //continue;
                    }else{
                        n_index++;
                    }
                }
            }
        }
         /**
         * Process the message
         */
        int n_command_index = -1;
        if (arrc_buffer[0] == '0'){
            /**
             * stop
             */
            n_command_index = 0;
            printf("stop received\n");
        }else if (arrc_buffer[0] == '1'){
            /**
             * auto control
             */
            char arrc_command_index[4];
            int n_temp_index;
            for (n_temp_index = 0; n_temp_index <= 2; n_temp_index++){
                arrc_command_index[n_temp_index] = arrc_buffer[n_temp_index];
            }
            arrc_command_index[3] = '\0';
            n_command_index = atoi(arrc_command_index);
            printf("auto control received: %d\n", n_command_index);
        }else if (arrc_buffer[0] == '2'){
            /**
             * manual control command
             */
            char arrc_command_index[4];
            int n_temp_index;
            for (n_temp_index = 0; n_temp_index <= 2; n_temp_index++){
                arrc_command_index[n_temp_index] = arrc_buffer[n_temp_index];
            }
            arrc_command_index[3] = '\0';
            n_command_index = atoi(arrc_command_index);
            printf("manual control received: %d\n", n_command_index);
        }else if (arrc_buffer[0] == '3'){
            /**
             * pid tuning
             */
            char arrc_command_index[4];
            int n_temp_index;
            for (n_temp_index = 0; n_temp_index <= 2; n_temp_index++){
                arrc_command_index[n_temp_index] = arrc_buffer[n_temp_index];
            }
            arrc_command_index[3] = '\0';
            n_command_index = atoi(arrc_command_index);
            printf("pid tuning received: %d\n", n_command_index);

            char arrc_pid_value[9];
            for (n_temp_index = 0; n_temp_index <= 7; n_temp_index++){
                arrc_pid_value[n_temp_index] = arrc_buffer[n_temp_index + 3];
            }
            arrc_buffer[8] = '\0';
            if (n_command_index == 301){
                pT_drone->d_kp_pitch = atof(arrc_pid_value);
            }else if (n_command_index == 302){
                pT_drone->d_ki_pitch = atof(arrc_pid_value);
            }else if (n_command_index == 303){
                pT_drone->d_kd_pitch = atof(arrc_pid_value);
            }else if (n_command_index == 304){
                pT_drone->d_kp_roll = atof(arrc_pid_value);
            }else if (n_command_index == 305){
                pT_drone->d_ki_roll = atof(arrc_pid_value);
            }else if (n_command_index == 306){
                pT_drone->d_kd_roll = atof(arrc_pid_value);
            }else if (n_command_index == 307){
                pT_drone->d_kp_yaw = atof(arrc_pid_value);
            }else if (n_command_index == 308){
                pT_drone->d_kd_yaw = atof(arrc_pid_value);
            }else if (n_command_index == 309){
                pT_drone->d_ki_yaw = atof(arrc_pid_value);
            }else if (n_command_index == 310){
                pT_drone->d_kp_second_pitch = atof(arrc_pid_value);
            }else if (n_command_index == 311){
                pT_drone->d_kd_second_pitch = atof(arrc_pid_value);
            }else if (n_command_index == 312){
                pT_drone->d_kp_second_roll = atof(arrc_pid_value);
            }else if (n_command_index == 313){
                pT_drone->d_kd_second_roll = atof(arrc_pid_value);
            }else if (n_command_index == 314){
                pT_drone->d_kp_second_yaw = atof(arrc_pid_value);
            }else if (n_command_index == 315){
                pT_drone->d_kd_second_yaw = atof(arrc_pid_value);
            }
            printf("pid tuning value: %lf\n", atof(arrc_pid_value));
        }else if (arrc_buffer[0] == '4'){
            /**
             * feedback
             */
            printf("feedback received\n");
        }
    }else if (nflag_direction == 0){
        /**
         * From edison to beaglebone
         */
    }
    pT_drone->nflag_enable_uart = 1;
    return 0;
}
int main(){
 








/**********************************************************************/
/**********************************************************************/
/* Begin. */
	mraa_uart_context uart;
	uart = mraa_uart_init(0);
	mraa_uart_set_baudrate(uart, 115200);
	char buffer[] = "hhh";
	char flush[]="xxxxxxxxxxxx";
	char str[] = "HELLO";
	if (uart == NULL) {
        	fprintf(stderr, "UART failed to setup\n");
        	printf("UART failed");
		return 1;
    	}
	printf("firstavail:%d\n",mraa_uart_data_available(uart,0));
	while (mraa_uart_data_available(uart,0))
	{
		mraa_uart_read(uart, flush, sizeof(uart));
		printf("Flush: %c %c %c %c %c %c %c %c",flush[0], flush[1], flush[2],flush[3],flush[4],flush[5],flush[6],flush[7]);
		usleep(150);
	}
	printf("available: %d",mraa_uart_data_available(uart,0));
        char speed_user_input[MAXBUFSIZ];
        char turn_user_input[MAXBUFSIZ];
        mraa_pwm_context speed_pwm_in1, speed_pwm_in2, turn_pwm;
        speed_pwm_in1 = mraa_pwm_init(3);
        speed_pwm_in2 = mraa_pwm_init(5);
        turn_pwm = mraa_pwm_init(6);
        if (speed_pwm_in1 == NULL || speed_pwm_in2 == NULL || turn_pwm == NULL) {
                fprintf(stderr, "Failed to initialized.\n");
                return 1;
        }

        mraa_pwm_period_us(speed_pwm_in1,870); //1150Hz
        mraa_pwm_enable(speed_pwm_in1, 1);
        mraa_pwm_period_us(speed_pwm_in2,870);
        mraa_pwm_enable(speed_pwm_in2, 1);

        mraa_pwm_period_ms(turn_pwm,20);
        mraa_pwm_enable(turn_pwm, 1);

        mraa_pwm_write(turn_pwm, CENTER);
        mraa_pwm_write(speed_pwm_in1, 1.0f);
        mraa_pwm_write(speed_pwm_in2, 1.0f);

        int n = 5;
        int spd = 0;
        char direction = 'C';
	char cross_clr = 'B';
        float angle = 0.0f;
	while (1)
        {
	//sleep(2);
        //readCharAry(uart,flush);
	spd = 50;
	mraa_uart_read(uart, buffer, 1);
	if(buffer[0]=='\n')
	{
		printf("new line ");	
		mraa_uart_read(uart, buffer, 1);
		if(buffer[0]=='\n')
		{
			printf("new line ");
                	mraa_uart_read(uart, buffer, 1);
		}
	}
	mraa_uart_read(uart, buffer+1, 1);
	if(buffer[1]=='\n')
        {
		buffer[0] = 'h';
		buffer[1] = 'h';
        }
	int sign = 0;
	if(cross_clr == 'M')	
	{
		speed_control(speed_pwm_in1, speed_pwm_in2, 0.0f);
		sleep(1);
		char* nearestBeaconID = (char*)malloc(5);
		getStrongestBeacon(nearestBeaconID);
		printf("the nearestBeaconID is: %s\n", nearestBeaconID);
		sign = 1;
		angle = CENTER + 0.015f;
        mraa_pwm_write(turn_pwm, angle);
        usleep(15000);
        speed_control(speed_pwm_in1, speed_pwm_in2, 54);
        printf("speed: %d",spd);
        usleep(5500000);
                speed_control(speed_pwm_in1, speed_pwm_in2, 0.0f);
		//sleep(1);
		mraa_uart_write(uart, str, 1);
		//while(!mraa_uart_data_available(uart, 10)){};
        mraa_uart_read(uart, buffer, 1);
        while(buffer[0] == '\n')
		{
			mraa_uart_read(uart, buffer, 1);
		}
		if(buffer[0] == '\0') direction = 'C';
                mraa_uart_read(uart, buffer + 1, 1);
                cross_clr = buffer[1];
	}
	printf("buff:%c %c %c \n",buffer[0], buffer[1],buffer[2]);
	if(!sign){
        if (direction == 'L')   angle = CENTER - 0.005f;
        if (direction == 'R')   angle = CENTER + 0.005f;
        if (direction == 'C')   angle = CENTER;}
	else
	{
		if (direction == 'C')	angle = CENTER +0.013f; 
		if (direction == 'L')   angle = CENTER +0.005f;
        	if (direction == 'R')   angle = CENTER + 0.019f;
	}
	mraa_pwm_write(turn_pwm, angle);
        speed_control(speed_pwm_in1, speed_pwm_in2, spd);
	printf("speed: %d",spd);
	usleep(250000);

	direction = buffer[0];
	cross_clr = buffer[1];
        }
        return 0;
}
コード例 #15
0
ファイル: port5_trans.c プロジェクト: barlesh/ISG
int get_modem_frame(unsigned char* uart_buffer){
	return mraa_uart_read(uart, uart_buffer, 200);
}
コード例 #16
0
ファイル: uart_gps.c プロジェクト: byyangyang/drone
int main()
{
	mraa_uart_context gps;
	load_device_tree("ADAFRUIT-UART1");
	gps = mraa_uart_init_raw("/dev/ttyO1");
    mraa_uart_set_baudrate(gps, 9600);
    char buf[1000];
    char search[7];
    gprmc_t readGPS;
   // char *p = buf;
    while(1){//gprmc_t readGPS;
             int i=0;
            mraa_uart_read(gps, search, 1);
            if(search[0] == '$'){
            	for(i=1; i<7;i++){
            		mraa_uart_read(gps, search+i, 1);	
            	}
            if(strstr(search, "$GPRMC,")){
           		for(i=0; i<100;i++){
           			mraa_uart_read(gps, buf+i, 1);
           			if(buf[i] == '\n'){
           				buf[i]='\0';
           				break;
           			}
            		
            	}
            	// printf("%s\n", buf);
            	nmea_parse_gprmc(buf, &readGPS);
            	gps_convert_deg_to_dec(&(readGPS.latitude), readGPS.lat, &(readGPS.longitude), readGPS.lon);
            	printf("%d\n", readGPS.state);
            	printf("%f\n", readGPS.latitude);
            	printf("%f\n", readGPS.longitude);
    	    	
    	    
    	    }
				
				
			
    	 //    mraa_uart_read(gps, buf+1, 1);
	    	// mraa_uart_read(gps, buf+2, 1);
	    	// mraa_uart_read(gps, buf+3, 1);
	    	// mraa_uart_read(gps, buf+4, 1);
	    	// mraa_uart_read(gps, buf+5, 1);
	    	// mraa_uart_read(gps, buf+6, 1);
	    	// mraa_uart_read(gps, buf+7, 1);
	    	// mraa_uart_read(gps, buf+8, 1);
	    	// mraa_uart_read(gps, buf+9, 1);
	    	// mraa_uart_read(gps, buf+10, 1);
	    	// mraa_uart_read(gps, buf+11, 1);
	    	// mraa_uart_read(gps, buf+12, 1);
	    	// mraa_uart_read(gps, buf+13, 1);
	    	// mraa_uart_read(gps, buf+14, 1);
	    	// mraa_uart_read(gps, buf+15, 1);
	    	// mraa_uart_read(gps, buf+16, 1);
	    // printf("%s\n",buf);	
    	 // if(buf[0]=='$')
    	  // {        
    	  //	printf("%s\n", buf);
    	       //buf = strchr(buf, ',')+1; 
    	        //printf("%s\n", buf);
    // }

    	// if (strchr(buf, '$GPRMC')!=NULL){
    	// 	//buf = strchr(buf, ',')+1; 
    	//         //printf("%s\n", buf);
    	// }
    	       //buf = strchr(buf, ',')+1; 
    	        //printf("%s\n", buf);
     
	    	   //mraa_uart_read(gps, buf, 1);
	    	// mraa_uart_read(gps, buf+1, 1);
	    	// mraa_uart_read(gps, buf+2, 1);
	    	// mraa_uart_read(gps, buf+3, 1);
	    	// mraa_uart_read(gps, buf+4, 1);
	    	// mraa_uart_read(gps, buf+5, 1);
	    	// mraa_uart_read(gps, buf+6, 1);
	    	// mraa_uart_read(gps, buf+7, 1);
	    	// mraa_uart_read(gps, buf+8, 1);
	    	// mraa_uart_read(gps, buf+9, 1);
	    	// mraa_uart_read(gps, buf+10, 1);
	    	// mraa_uart_read(gps, buf+11, 1);
	    	// mraa_uart_read(gps, buf+12, 1);
	    	// mraa_uart_read(gps, buf+13, 1);
	    	// mraa_uart_read(gps, buf+14, 1);
	    	// mraa_uart_read(gps, buf+15, 1);
	    	// mraa_uart_read(gps, buf+16, 1);
	    	// mraa_uart_read(gps, buf+17, 1);
    		//int i=0;
    		//for(i = 0; i<100)
    		// if(nmea_get_message_type(buf)==NMEA_GPRMC){
	    	// nmea_parse_gprmc(buf, &readGPS);
	    	// printf("%d\n", readGPS.speed);}
	    // }
	}
}
}