/*! \return 0 on success. */ int lnp_assured_write(const unsigned char *data,unsigned char length,unsigned char dest, unsigned char srcport) { int i; struct timeval timeout,now; unsigned long total,elapsed; for(i=0; i<XMIT_RETRIES; i++) { receivedAck=0; lnp_addressing_write(data,length,dest,srcport); gettimeofday(&timeout,0); total=REPLY_TIMEOUT+length*byte_time; elapsed=0; do { usleep(total-elapsed); gettimeofday(&now,0); elapsed=1000000*(now.tv_sec - timeout.tv_sec ) + now.tv_usec - timeout.tv_usec; } while((!receivedAck) && (elapsed < total)); if(i || !receivedAck) if(verbose_flag) fprintf(stderr,"try %d: ack:%d\n",i,receivedAck); if(receivedAck) return 0; } return -1; }
/*! \return 0 on success. */ int lnp_assured_write(const unsigned char *data, unsigned char length, unsigned char dest, unsigned char srcport) { int i; struct timeval timeout,now; unsigned long total,elapsed; for(i=0; i<XMIT_RETRIES; i++) { receivedAck=0; lnp_addressing_write(data,length,dest,srcport); gettimeofday(&timeout,0); total=REPLY_TIMEOUT+length*BYTE_TIME; elapsed=0; do { #if defined(_WIN32) io_handler(); #else struct timeval tv; fd_set fds; FD_ZERO(&fds); FD_SET(rcxFD(), &fds); tv.tv_sec = (total - elapsed) / 1000000; tv.tv_usec = (total - elapsed) % 1000000; select(rcxFD() + 1, &fds, NULL, NULL, &tv); if (FD_ISSET(rcxFD(), &fds)) io_handler(); #endif gettimeofday(&now,0); elapsed=1000000*(now.tv_sec - timeout.tv_sec ) + now.tv_usec - timeout.tv_usec; } while((!receivedAck) && (elapsed < total)); if(i || !receivedAck) if(verbose_flag) fprintf(stderr,"try %d: ack:%d\n",i,receivedAck); if(receivedAck) return 0; } return -1; }
int main(int argc, char *argv[]) { char data[253]; int i; lnp_tx_result result; unsigned char len; int count = 0; for (i=0;i<sizeof(data);i++) data[i] = i; if ( lnp_init(0,0,0,0,0) ) { perror("lnp_init"); exit(1); } else fprintf(stderr,"init OK\n"); lnp_addressing_set_handler (MY_PORT_1, addr_handler_1); lnp_addressing_set_handler (MY_PORT_2, addr_handler_2); lnp_integrity_set_handler (int_handler); while (1) { //sleep(1000); //continue; len = LEN; //random() % 252 + 1; result = lnp_addressing_write(data,len ,DEST_ADDR,MY_PORT_1); switch (result) { case TX_SUCCESS: printf("Tansmitted %d : %d\n",len,count++); break; case TX_FAILURE: printf("Collision\n"); break; default: perror("Transmit error"); exit(1); } } return 0; }