void ram() { lcdClear(); lcdPrintln("SPAM:"); while(getInputRaw() != BTN_LEFT) { char c[2] = {0, 0}; c[0] = (char)getRandom(); uint8_t pkt[32]; MO_TYPE_set(pkt, c[0]); MO_GEN_set(pkt, 0xFF); if (c[0] >= 'A' && c[0] <= 'Z') MO_TIME_set(pkt, 1313803870); else if (c[0] >= 'a' && c[0] <= 'z') MO_TIME_set(pkt, getRandom() % 16777216); else MO_TIME_set(pkt, (uint32_t)getRandom()); strcpy((char *)MO_BODY(pkt), "chaosbay.camp.ccc.de"); if (!mesh_sanity(pkt)) { lcdPrint("Sending: "); lcdPrintln(c); lcdRefresh(); MPKT *mpkt = meshGetMessage(c[0]); mpkt->flags = MF_USED; memcpy(mpkt->pkt, pkt, 32); } } }
MPKT * meshGetMessage(uint8_t type){ int free=-1; for(int i=0;i<MESHBUFSIZE;i++){ if ( ((meshbuffer[i].flags&MF_USED)==0) && free<0 ) free=i; if ( (meshbuffer[i].flags&MF_USED) && (MO_TYPE(meshbuffer[i].pkt) == type)){ free=i; break; }; }; if(free==-1){ // Buffer full. Ah well. Kill a random packet free=1; // XXX: GetRandom()? meshbuffer[free].flags=MF_FREE; }; if(meshbuffer[free].flags==MF_FREE){ memset(&meshbuffer[free],0,sizeof(MPKT)); MO_TYPE_set(meshbuffer[free].pkt,type); MO_GEN_set(meshbuffer[free].pkt,meshgen); meshbuffer[free].flags=MF_USED; }; return &meshbuffer[free]; };