void UART1_IRQHandler(void) { while ((itid = UART_GetPendingITID(UART0)) != UART_ITID_None) { if (itid == UART_ITID_RxLineStatus) { tmp = UART_GetLineStatus(UART); if (tmp & UART_BI) { /* BREAK */ } else if (tmp & (UART_OE | UART_PE | UART_FE)) { /* Overflow / Parity / Framing Error */ } UART_Recv(UART0); continue; } else if ((itid == UART_ITID_RxDataAvailable) || (itid == UART_ITID_CharacterTimeout)) { tmp = UART_Recv(UART); } else if (itid == UART_ITID_TxEmpty) { } else if (itid == UART_ITID_ModemStatus) { } else { /* UART_ITID_CharacterTimeOut */ } } }
/** @brief Initialize a UART for communication. * * @param [in] uart The UART to initialize * @param [in] baud Baud rate to configure on the UART * * @return None. */ void init_uart(UART_Type *uart, uint32_t baud) { uint32_t uart_divisor; uint32_t apb_clock; /* Determine the UART divisor for the given baud rate. */ apb_clock = SystemCoreClock / SYSCON_GetAPBClockDivider(); uart_divisor = ((apb_clock / 16) + (baud / 2)) / baud; #if (LPC2XXX_MODEL == 2148) || (LPC2XXX_MODEL == 2138) || (LPC2XXX_MODEL == 2106) \ || (LPC2XXX_MODEL == 2103) /* Configure IO pins & power on the given UART */ if (uart == UART0) { /* Configure pins for UART0 use */ PINSEL_SetPinConfig(PINSEL_PinConfig_0_0_TXD0); PINSEL_SetPinConfig(PINSEL_PinConfig_0_1_RXD0); /* Power on UART0 */ SYSCON_EnablePeriphPowerLines(SYSCON_PeriphPowerLine_UART0); } else if (uart == UART1) { /* Configure pins for UART1 use */ PINSEL_SetPinConfig(PINSEL_PinConfig_0_8_TXD1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_9_RXD1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_10_RTS1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_11_CTS1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_12_DSR1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_13_DTR1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_14_DCD1); PINSEL_SetPinConfig(PINSEL_PinConfig_0_15_RI1); /* Power on UART1 */ SYSCON_EnablePeriphPowerLines(SYSCON_PeriphPowerLine_UART1); } #else #error No current definition set up for the given microcontroller model. #endif /* Configure baud rate & terminal settings (given baud @ 8n2) */ UART_SetDivisor(uart, uart_divisor); UART_SetWordLength(uart, UART_WordLength_8b); UART_SetStopBits(uart, UART_StopBits_2); UART_SetParity(UART, UART_Parity_No); /* Enable FIFOs (necessary) and flush them */ UART_EnableFifos(UART); UART_FlushRxFifo(UART); UART_FlushTxFifo(UART); /* Enable transmitting on the UART */ UART_EnableTx(UART); /* Clear the receive buffer register */ UART_Recv(uart); }
/** @brief Receive a character via UART * * @param [in] uart The UART on which to receive the character * * @return The received character * * Blocks until the UART has a character available to read. */ uint8_t uart_getchar(UART_Type *uart) { uint8_t c; /* Wait for a character to be ready */ while ((UART_GetLineStatus(uart) & UART_LineStatus_RxData) == 0); /* Receive it */ c = UART_Recv(uart); return c; }
int main(int argc, char **argv) { int serial_fd = 0; UART_Init(); char buf[]="hello world"; char buf1[10]; UART_Send(serial_fd, buf, 10); printf("\n"); UART_Recv(serial_fd, buf1, 10); printf("uart receive %s\n", buf1); close(serial_fd); return 0; }
int main(int argc, char **argv) { int fd = FALSE; int ret; char rcv_buf[512]; char send_buf[512]; int i; if(argc != 2){ printf("Usage: %s /dev/ttySn \n",argv[0]); return FALSE; } fd = UART_Open(fd,argv[1]); if(FALSE == fd){ printf("open error\n"); exit(1); } ret = UART_Init(fd,9600,0,8,1,'N'); if (FALSE == fd){ printf("Set Port Error\n"); exit(1); } strcpy(send_buf,"ff0161\n"); ret = UART_Send(fd,send_buf,strlen(send_buf)); if(FALSE == ret){ printf("write error!\n"); exit(1); } printf("command: %s\n",send_buf); memset(rcv_buf,0,sizeof(rcv_buf)); for(i=0;;i++) { ret = UART_Recv(fd, rcv_buf,512); if( ret > 0){ rcv_buf[ret]='\0'; printf("%s",rcv_buf); } else { printf("cannot receive data1\n"); //break; } if('\n' == rcv_buf[ret-1]) break; } UART_Close(fd); return 0; }
static int RFID_Response(int fd, void *infostruct, unsigned int blocktime, unsigned int *err) { int len = 0; unsigned char rcv_buf[1024]; len = UART_Recv(fd, rcv_buf, blocktime, err); if (len == -1 || len == 's') { goto end; } if (rcv_buf[0] != 0xBB) { *err = ERR_CODE_FRAME_HEAD; len = -1; goto end; } else if (rcv_buf[len - 1] != 0x0A) { *err = ERR_CODE_FRAME_TAIL_2ND; len = -1; goto end; } else if (rcv_buf[len - 2] != 0x0D) { *err = ERR_CODE_FRAME_TAIL_1ST; len = -1; goto end; } #ifdef DEBUG int i=0; printf("recv %d:",len); for(i=0; i<len; i++) { printf("%.2X ",rcv_buf[i]); } printf("\n"); #endif // DEBUG LOGD("type:%x", rcv_buf[1]); switch (rcv_buf[1]) { case 0x80: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x81: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x82: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x83: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x87: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x88: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x89: my_setstate((unsigned char*) infostruct, rcv_buf); break; case 0x8A: gethardware((prfid) infostruct, rcv_buf); break; case 0x8B: getfirmware((prfid) infostruct, rcv_buf); break; case 0x8C: gettxpower((prfid) infostruct, rcv_buf); break; case 0x8D: getradiostate((prfid) infostruct, rcv_buf); break; case 0x8E: getrflinkprofile((prfid) infostruct, rcv_buf); break; case 0x90: getcurrentantenna((prfid) infostruct, rcv_buf); break; case 0x91: gethzzone((prfid) infostruct, rcv_buf); break; case 0x92: getcurrenttemperature((prfid) infostruct, rcv_buf); break; case 0x93: getgpiostate((char *) infostruct, rcv_buf); break; case 0x94: getgen2((prfid) infostruct, rcv_buf); break; case 0x96: getepcsingle((pepc) infostruct, rcv_buf); break; case 0x97: getepcmulti((pepc) infostruct, rcv_buf); break; case 0x98: //my_setstate((unsigned char *) infostruct, rcv_buf); len = -8; break; case 0x99: getlabeldata((plabeldata) infostruct, rcv_buf); break; case 0x9A: my_setstate((unsigned char *) infostruct, rcv_buf); break; case 0x9B: my_setstate((unsigned char *) infostruct, rcv_buf); break; case 0x9C: my_setstate((unsigned char *) infostruct, rcv_buf); break; case 0x9D: my_setstate((unsigned char *) infostruct, rcv_buf); break; case 0x9E: getmlabertimer((unsigned short*) infostruct, rcv_buf); break; case 0x9F: my_setstate((unsigned char *) infostruct, rcv_buf); break; case 0xA0: getantandwaittime((unsigned short *) infostruct, rcv_buf); break; case 0xFF: geterrorinfo(err, rcv_buf); len = -1; break; default: *err = ERR_CODE_FRAME_CMD; len = -1; break; } end: return len; }
int main(int argc, char **argv) { ros::init(argc, argv, "nav"); ros::NodeHandle n; //ros::Publisher chatter_pub = n.advertise<mini::naviLoc>("navmsg", 1); tf::TransformBroadcaster br; tf::Transform transform_v2c,transform_w2v; tf::Quaternion q(-sqrt(2)/2,0,0,sqrt(2)/2); //need calibration transform_v2c.setOrigin(tf::Vector3(-0.025,0.125,0.23)); //need calibration transform_v2c.setRotation(q); transform_v2c = transform_v2c.inverse(); int fd = -1; fd = UART_Open(fd,"/dev/ttyS4"); UART_Init(fd,115200,0,8,1,'N'); int data_len = 10; char rcv_buf[100]; //FILE* fp = fopen("/home/haha/catkin_ws/odom.txt","w"); int ret; while (ros::ok()) { mini::naviLoc msg; struct timeval tv; while(1) { //ROS_INFO(" "); ret = UART_Recv(fd, rcv_buf,1); //ROS_INFO("[%d]",ret); //usleep(10000); if(ret==1) { //ROS_INFO("[%02X]",rcv_buf[0]); } if(ret==1 && rcv_buf[0]==char(0xA2)) { break; } } int counter = 1; while(counter<data_len) { //ROS_INFO(" "); ret = UART_Recv(fd, &rcv_buf[counter],1); //ROS_INFO("[%d]",ret); /*for(int i=0;i<ret;i++) { printf("%02X ",rcv_buf[i]); } printf("\n");*/ if(ret==-1) { continue; } counter++; } gettimeofday(&tv,0); if(rcv_buf[data_len-1]!=char(0x2A)) { continue; } unsigned int timeStamp = tv.tv_sec%100000*1000+tv.tv_usec/1000; SerialData2Msg(timeStamp, rcv_buf, data_len, msg); ros::Time ros_time = ros::Time::now(); transform_w2v.setOrigin(tf::Vector3(msg.x,msg.y,0.0)); q.setRPY(0.0,0.0,msg.theta); transform_w2v.setRotation(q); transform_w2v = transform_w2v.inverse(); br.sendTransform(tf::StampedTransform(transform_w2v, ros_time, "/base_frame","/odom_frame")); br.sendTransform(tf::StampedTransform(transform_v2c, ros_time, "/camera_rgb_optical_frame","/base_frame")); //chatter_pub.publish(msg); ROS_INFO("[%d],[%f],[%f],[%f]",msg.timestamp,msg.x,msg.y,msg.theta); //fprintf(fp,"%d %f %f %f\n",msg.timestamp,msg.x,msg.y,msg.theta); //fflush(fp); ros::spinOnce(); } UART_Close(fd); //fclose(fp); return 0; }
int main(int argc, char *argv[]) { /******MQTT*******/ MQTTPacket_connectData data = MQTTPacket_connectData_initializer; int rc = 0; char buf[200]; int buflen = sizeof(buf); int mysock = 0; MQTTString topicString = MQTTString_initializer; char* payload = "mypayload"; int payloadlen = strlen(payload); int len = 0; char *host = "192.168.8.241"; int port = 1883; /******UART*******/ int fd = FALSE; int ret; char rcv_buf[512]; int i; if(argc < 2){ printf("Usage: %s /dev/ttySn \n",argv[0]); return FALSE; } if (argc > 2) host = argv[2]; if (argc > 3) port = atoi(argv[3]); fd = UART_Open(fd,argv[1]); if(FALSE == fd){ printf("open error\n"); exit(1); } ret = UART_Init(fd,9600,0,8,1,'N'); if (FALSE == fd){ printf("Set Port Error\n"); exit(1); } ret = UART_Send(fd,"*IDN?\n",6); if(FALSE == ret){ printf("write error!\n"); exit(1); } printf("command: %s\n","*IDN?"); memset(rcv_buf,0,sizeof(rcv_buf)); /**************MQTT tansport*************/ mysock = transport_open(host,port); if(mysock < 0) return mysock; printf("Sending to hostname %s port %d\n", host, port); data.clientID.cstring = "me"; data.keepAliveInterval = 20; data.cleansession = 1; data.username.cstring = "testuser"; data.password.cstring = "testpassword"; data.MQTTVersion = 4; for(i=0;;i++) { ret = UART_Recv(fd, rcv_buf,512); if(ret > 0) { rcv_buf[ret]='\0'; printf("%s",rcv_buf); len = MQTTSerialize_connect((unsigned char *)buf, buflen, &data); topicString.cstring = "mytopic"; len += MQTTSerialize_publish((unsigned char *)(buf + len), buflen - len, 0, 0, 0, 0, topicString, (unsigned char *)rcv_buf, ret+1); len += MQTTSerialize_disconnect((unsigned char *)(buf + len), buflen - len); rc = transport_sendPacketBuffer(mysock, buf, len); if (rc == len) printf("Successfully published\n"); else printf("Publish failed\n"); } else { printf("cannot receive data1\n"); break; } } exit: UART_Close(fd); transport_close(mysock); return 0; }