int SendPacket(char dest, char* Spacket) { /* Packet length = 122 => max 6 frames split packet into frames, send frame, await acknowledgement */ struct frame data[FRAMECOUNT]; int no_frames; put_number(millis()); put_char('\n'); no_frames = makeframe(&data, dest, Spacket, 0); put_number(millis()); put_char('\n'); uint8_t *bufptr; char temp[50]; int i,k, send_complete; struct frame ack; unsigned long time; for(i = 0; i < no_frames; i++) { send_complete = 0; char test[FRAMELEN] = "0123456789012345678901234"; while(!send_complete) { ///////////////////send////////////////////// rfm12_tx(strlen(data[i].frame), 0, (uint8_t*)data[i].frame); for (uint8_t j = 0; j < 100; j++) { //put_string(". "); rfm12_tick(); _delay_us(500); } time = millis() + 500; while((millis() != time)) { ///////////check for acknowledgemt///////////////// if(rfm12_rx_status() == STATUS_COMPLETE) { //send_complete = 1; bufptr = rfm12_rx_buffer(); for(k = 0; k < (rfm12_rx_len()); k++) { temp[k] = bufptr[k]; } temp[rfm12_rx_len()] = '\0'; rfm12_rx_clear(); // put_string("\nRECEIVED: "); // put_string(temp); // put_string("\n\n"); ////////////////check if acknowledgemnt valid//////////////// if(decode_frame(ack, temp) & (1<<1)) { //if(ack.checksum[0] == data[i].checksum[0]) { put_string("\nSend Complete!\n"); send_complete = 1; break; //} } } } if(!send_complete) { put_string("\nTIMEOUT\n"); } } } /* for frame in frames: send_complete = 0; while not send complete: send frame start timer while timer: if acknowledgement: send_complete = 1; */ return 0; }
int SendPacket(char dest, char* Spacket) { /* Packet length = 122 => max 6 frames split packet into frames, send frame, await acknowledgement */ put_string("\r\nstring passed to DLL: "); put_string(Spacket); struct frame data[FRAMECOUNT]; int no_frames; no_frames = makeframe(&data, dest, Spacket, 0); put_string("\r\n\nnumber of frames generated: "); put_number(no_frames); uint8_t *bufptr; char temp[50]; int i,k, send_complete; struct frame ack; unsigned long time; for(i = 0; i < no_frames; i++) { send_complete = 0; if((uint8_t)dest != (uint8_t)BROADCAST) { put_string("\r\nSend message and await acknowledgement: "); while(!send_complete) { ///////////////////send////////////////////// put_frame(data[i]); SendFrame(data[i].frame); time = millis() + 1000; while((millis() != time)) { ///////////check for acknowledgemt///////////////// //put_char(':'); if(ReceiveFrame()) { //send_complete = 1; ReceiveFrame(temp); // bufptr = rfm12_rx_buffer(); // for(k = 0; k < (rfm12_rx_len()); k++) { // temp[k] = bufptr[k]; // } // temp[rfm12_rx_len()] = '\0'; // rfm12_rx_clear(); // put_string("\r\nRECEIVED: "); // put_string(temp); // put_string("\r\n\r\n"); ////////////////check if acknowledgemnt valid//////////////// int check_ack = decode_frame(&ack, temp); if((check_ack & (1<<1)) && !(check_ack & 1<<2)) { //if(strcmp(ack.data, data[i].data)) { put_string("\r\nSend Complete!\r\n"); send_complete = 1; break; //} } } } if(!send_complete) { put_string("\r\ntimeout\r\n"); } } } else { put_frame(data[i]); put_string("\n\rBROADCAST frame now : "); SendFrame(data[i].frame); _delay_ms(400); } } /* for frame in frames: send_complete = 0; while not send complete: send frame start timer while timer: if acknowledgement: send_complete = 1; */ return 0; }
void main() { short val; int menu, pres; float p, mx, my; curmass = 0.5; curdrag = 0.15; prefsize(800,640); initbuzz(); winopen("dynadraw"); glcompat(GLC_OLDPOLYGON,1); subpixel(1); shademodel(FLAT); gconfig(); qdevice(LEFTMOUSE); qdevice(MIDDLEMOUSE); qdevice(MENUBUTTON); qdevice(RIGHTSHIFTKEY); qdevice(UPARROWKEY); qdevice(DOWNARROWKEY); qdevice(RIGHTSHIFTKEY); makeframe(); menu = defpup("dynadraw %t|toggle line style|save PostScript"); width = initwidth; mouse.fixedangle = 1; while(1) { switch(qread(&val)) { case REDRAW: makeframe(); break; case MIDDLEMOUSE: if(val) clearscreen(); break; case UPARROWKEY: if(val) initwidth *= 1.414213; width = initwidth; break; case DOWNARROWKEY: if(val) initwidth /= 1.414213; width = initwidth; break; case MENUBUTTON: if(val) { switch(dopup(menu)) { case 1: mouse.fixedangle = 1-mouse.fixedangle; break; case 2: savepolys(); break; } } break; case LEFTMOUSE: if(val) { my = getmousey(); if(my>0*SLIDERHIGH && my<2*SLIDERHIGH) { if(my>SLIDERHIGH) { while(getbutton(LEFTMOUSE)) { p = paramval(); if(p != curmass) { curmass = p; showsettings(); } } } else { while(getbutton(LEFTMOUSE)) { p = paramval(); if(p != curdrag) { curdrag = p; showsettings(); } } } } else { mx = 1.25*fgetmousex(); my = fgetmousey(); filtersetpos(&mouse,mx,my); odelx = 0.0; odely = 0.0; while(getbutton(LEFTMOUSE)) { mx = 1.25*fgetmousex(); my = fgetmousey(); if(filterapply(&mouse,mx,my)) { drawsegment(&mouse); color(0); buzz(); } } } } break; } } }
int RecievePacket(char* Rpacket) { /* see http://www.hansinator.de/rfm12lib/ for rfm12b libray details receive frame, send acknowledgement if received a frame: de-bytestuff check crc if recipient: acknowledge pass to network */ int i = 0; put_string("\r\n>>>Begin receive packet: \r\n"); if (ReceiveFrame()) { //Status complete 1 - passes this section put_char('.'); uint8_t* bufptr; char Rframe[50], ackstr[50]; struct frame ack, decode; struct frame Nrframe[FRAMECOUNT]; struct frame ackarr[FRAMECOUNT]; int Received_Final_frame = 0; unsigned long timeout = millis() + 20000; while(!Received_Final_frame && (millis() < timeout)){ //never passes this while statement //Also maybe add RFM12B tick?? //int Rframe_len; put_string("Trying to receive data"); if (ReceiveFrame()) { //Status complete 2 - why? ReceiveFrame(Rframe); // bufptr = rfm12_rx_buffer(); // put_string("Raw data received: "); // put_string((char*)bufptr); // for(uint8_t k = 0; k < (rfm12_rx_len()); k++) { // Rframe[k] = bufptr[k]; // } // Rframe[rfm12_rx_len()] = '\0'; // rfm12_rx_clear(); put_string("\r\nRframe: "); put_string(Rframe); //strcpy(ackstr, Rframe); decode = Nrframe[i]; int Rframe_check = decode_frame(&decode, Rframe); Nrframe[i] = decode; put_string("\r\nReceived Data: "); put_frame(Nrframe[i]); if(Rframe_check & (1<<1)) { if(Rframe_check & 1<<4) { Received_Final_frame = 1; } put_string("\r\nFrame Number; "); put_number(i); /* frame received, frame for me acknowledge */ if(!(Rframe_check & 1<<5)) { put_string("\n\r>>>>START MAKE AND SEND ACKNOWLEDGEMENT\r\n"); ackarr[0] = Nrframe[i]; int framecount = makeframe(&ackarr, Nrframe[i].address[0], Nrframe[i].data, 1, 1); put_string("\r\nNumber of acknowledgement frames generated: "); put_number(framecount); put_string("\r\nacknowledgement: "); put_frame(ackarr[0]); //_delay_ms(100); SendFrame(ackarr[0].frame); // rfm12_tx(strlen(ackarr[0].frame), 0, (uint8_t*)ackarr[0].frame); // for (uint8_t j = 0; j < 100; j++) // { // //put_string(". "); // rfm12_tick(); // _delay_us(500); // } } i++; timeout = millis() + 20000; } else if(!Rframe_check) { ; } else { break; } } } if(i && i < FRAMECOUNT) { put_string("\r\nPacketComplete\n\r"); strcpy(Rpacket, Nrframe[0].data); for(int l = 1; l<i; l++) { strcat(Rpacket, Nrframe[l].data); } strcat(Rpacket, "\0"); put_string("\r\nReceived packet: "); put_string(Rpacket); } } put_string("\r\n>>>End ReceivePacket\r\n"); return i; }