Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
		}
	}
}
Пример #4
0
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;

}