int rn2903_read(const rn2903_context dev, char *buffer, size_t len) { assert(dev != NULL); // uart return mraa_uart_read(dev->uart, buffer, len); }
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; }
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; }
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; }
/** * 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; }
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; }
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; }
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; }} }
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; }
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()); }
/** * 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); }
/** * 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; }
int get_modem_frame(unsigned char* uart_buffer){ return mraa_uart_read(uart, uart_buffer, 200); }
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);} // } } } }