game: added jitter and interval fields, added text display
This commit is contained in:
parent
4534c46aff
commit
6697274019
|
@ -125,3 +125,5 @@ i2cInit
|
||||||
timer32Callback0
|
timer32Callback0
|
||||||
lcdRead
|
lcdRead
|
||||||
lcdInit
|
lcdInit
|
||||||
|
lcdSetCrsr
|
||||||
|
|
||||||
|
|
|
@ -51,22 +51,29 @@ struct packet{
|
||||||
uint8_t gameMac[5];
|
uint8_t gameMac[5];
|
||||||
uint8_t gameChannel;
|
uint8_t gameChannel;
|
||||||
//uint8_t playerMac[5]; playerMac = gameMac+1;
|
//uint8_t playerMac[5]; playerMac = gameMac+1;
|
||||||
uint32_t gameId;
|
uint16_t gameId;
|
||||||
uint8_t gameFlags;
|
uint8_t gameFlags;
|
||||||
|
uint8_t interval;
|
||||||
|
uint8_t jitter;
|
||||||
uint8_t gameTitle[8];
|
uint8_t gameTitle[8];
|
||||||
}__attribute__((packed)) announce;
|
}__attribute__((packed)) announce;
|
||||||
struct join{
|
struct join{
|
||||||
uint32_t gameId;
|
uint16_t gameId;
|
||||||
uint8_t reserved[15];
|
uint8_t reserved[17];
|
||||||
}__attribute__((packed)) join;
|
}__attribute__((packed)) join;
|
||||||
}c;
|
}c;
|
||||||
uint16_t crc;
|
uint16_t crc;
|
||||||
}__attribute__((packed));
|
}__attribute__((packed));
|
||||||
|
|
||||||
#define FLAGS_MASS_GAME 1
|
#define FLAGS_MASS_GAME 1
|
||||||
|
#define FLAGS_SHORT_PACKET 2
|
||||||
|
#define FLAGS_LONG_RECV 4
|
||||||
|
|
||||||
#define FLAGS_ACK_JOINOK 1
|
#define FLAGS_ACK_JOINOK 1
|
||||||
#define MASS_ID 1
|
#define MASS_ID 1
|
||||||
|
|
||||||
|
#define FLAGS_CLS 1
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/* l0dable for playing games which are announced by other r0kets with the l0dabel r_game */
|
/* l0dable for playing games which are announced by other r0kets with the l0dabel r_game */
|
||||||
/* Values of buf[3]:
|
/* Values of buf[3]:
|
||||||
|
@ -82,12 +89,16 @@ struct packet{
|
||||||
|
|
||||||
uint32_t ctr;
|
uint32_t ctr;
|
||||||
uint32_t id;
|
uint32_t id;
|
||||||
uint32_t gameId;
|
uint16_t gameId;
|
||||||
|
uint8_t interval;
|
||||||
|
uint8_t jitter;
|
||||||
|
uint8_t flags;
|
||||||
|
|
||||||
void sendButton(uint8_t button);
|
void sendButton(uint8_t button);
|
||||||
void sendJoin(uint32_t game);
|
void sendJoin(uint32_t game);
|
||||||
void processPacket(struct packet *p);
|
void processPacket(struct packet *p);
|
||||||
void processAnnounce(struct announce *a);
|
void processAnnounce(struct announce *a);
|
||||||
|
void processText(struct text *t);
|
||||||
|
|
||||||
uint8_t selectGame();
|
uint8_t selectGame();
|
||||||
void playGame();
|
void playGame();
|
||||||
|
@ -124,14 +135,19 @@ void playGame(void)
|
||||||
sendButton(button);
|
sendButton(button);
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
len = nrf_rcv_pkt_time(32,sizeof(p),(uint8_t*)&p);
|
if( flags & FLAGS_LONG_RECV )
|
||||||
|
len = nrf_rcv_pkt_time(64,sizeof(p),(uint8_t*)&p);
|
||||||
|
else
|
||||||
|
len = nrf_rcv_pkt_time(32,sizeof(p),(uint8_t*)&p);
|
||||||
|
|
||||||
if(len==sizeof(p)){
|
if(len==sizeof(p)){
|
||||||
processPacket(&p);
|
processPacket(&p);
|
||||||
}else{
|
}else{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delayms(20);
|
int rnd = getRandom() % jitter;
|
||||||
|
delayms(interval+rnd);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -247,6 +263,9 @@ uint8_t selectGame()
|
||||||
memcpy(config.mac0, games[selected].gameMac, 5);
|
memcpy(config.mac0, games[selected].gameMac, 5);
|
||||||
config.mac0[4]++;
|
config.mac0[4]++;
|
||||||
config.channel = games[selected].gameChannel;
|
config.channel = games[selected].gameChannel;
|
||||||
|
interval = games[selected].interval;
|
||||||
|
jitter = games[selected].jitter;
|
||||||
|
flags = games[selected].gameFlags;
|
||||||
nrf_config_set(&config);
|
nrf_config_set(&config);
|
||||||
if( games[selected].gameFlags & FLAGS_MASS_GAME )
|
if( games[selected].gameFlags & FLAGS_MASS_GAME )
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -274,7 +293,15 @@ void processPacket(struct packet *p)
|
||||||
{
|
{
|
||||||
if ((p->len==32) && (p->protocol=='G') && (p->id == id || p->id == 0) ){ //check sanity, protocol, id
|
if ((p->len==32) && (p->protocol=='G') && (p->id == id || p->id == 0) ){ //check sanity, protocol, id
|
||||||
if (p->command=='T'){
|
if (p->command=='T'){
|
||||||
//processText(&(p->c.text));
|
struct packet ack;
|
||||||
|
ack.len=sizeof(p);
|
||||||
|
ack.protocol='G';
|
||||||
|
ack.command='a';
|
||||||
|
ack.id= id;
|
||||||
|
ack.ctr= p->ctr;
|
||||||
|
ack.c.ack.flags = 0;
|
||||||
|
nrf_snd_pkt_crc(sizeof(ack),(uint8_t*)&ack);
|
||||||
|
processText(&(p->c.text));
|
||||||
}
|
}
|
||||||
else if (p->command=='N'){
|
else if (p->command=='N'){
|
||||||
processNickRequest(&(p->c.nickrequest));
|
processNickRequest(&(p->c.nickrequest));
|
||||||
|
@ -293,6 +320,17 @@ void processAnnounce(struct announce *a)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void processText(struct text *t)
|
||||||
|
{
|
||||||
|
|
||||||
|
if( t->flags & FLAGS_CLS )
|
||||||
|
lcdClear() ;
|
||||||
|
lcdSetCrsr(t->x, t->y);
|
||||||
|
t->text[16] = 0;
|
||||||
|
lcdPrint(t->text);
|
||||||
|
lcdRefresh();
|
||||||
|
}
|
||||||
|
|
||||||
//increment ctr and send button state, id and ctr
|
//increment ctr and send button state, id and ctr
|
||||||
void sendButton(uint8_t button)
|
void sendButton(uint8_t button)
|
||||||
{
|
{
|
||||||
|
@ -306,7 +344,9 @@ void sendButton(uint8_t button)
|
||||||
|
|
||||||
//lcdClear();
|
//lcdClear();
|
||||||
//lcdPrint("Key:"); lcdPrintInt(buf[2]); lcdNl();
|
//lcdPrint("Key:"); lcdPrintInt(buf[2]); lcdNl();
|
||||||
|
if( flags & FLAGS_SHORT_PACKET )
|
||||||
nrf_snd_pkt_crc(sizeof(p),(uint8_t*)&p);
|
nrf_snd_pkt_crc(16,(uint8_t*)&p);
|
||||||
|
else
|
||||||
|
nrf_snd_pkt_crc(sizeof(p),(uint8_t*)&p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class Game:
|
||||||
self.gamemac = [int(random.random()*254) for x in range(1,6)]
|
self.gamemac = [int(random.random()*254) for x in range(1,6)]
|
||||||
self.playermac = list(self.gamemac)
|
self.playermac = list(self.gamemac)
|
||||||
self.playermac[4]+=1
|
self.playermac[4]+=1
|
||||||
self.gameid = int(random.random()*(2**31))
|
self.gameid = int(random.random()*(2**15))
|
||||||
|
|
||||||
self.bridge = bridge.Bridge(device, self.channel, self.gamemac)
|
self.bridge = bridge.Bridge(device, self.channel, self.gamemac)
|
||||||
self.announce = packets.Announce(self.gamemac, self.channel,
|
self.announce = packets.Announce(self.gamemac, self.channel,
|
||||||
|
|
|
@ -4,6 +4,9 @@ def inttouint32(v):
|
||||||
def uint32toint(v):
|
def uint32toint(v):
|
||||||
return (ord(v[3])<< 24) + (ord(v[2])<<16) + (ord(v[1])<<8) + (ord(v[0]))
|
return (ord(v[3])<< 24) + (ord(v[2])<<16) + (ord(v[1])<<8) + (ord(v[0]))
|
||||||
|
|
||||||
|
def inttouint16(v):
|
||||||
|
return chr(v&0xff)+chr((v>>8)&0xff)
|
||||||
|
|
||||||
class Packet:
|
class Packet:
|
||||||
def __init__(self, command, id=None):
|
def __init__(self, command, id=None):
|
||||||
self.ctr = 0
|
self.ctr = 0
|
||||||
|
@ -55,7 +58,7 @@ class Button(Packet):
|
||||||
return s
|
return s
|
||||||
|
|
||||||
class Announce(Packet):
|
class Announce(Packet):
|
||||||
def __init__(self, gameMac, gameChannel, gameId, gameFlags, gameTitle):
|
def __init__(self, gameMac, gameChannel, gameId, gameFlags, gameTitle, interval=30, jitter=16):
|
||||||
#always a broadcast
|
#always a broadcast
|
||||||
Packet.__init__(self, 'A', 0)
|
Packet.__init__(self, 'A', 0)
|
||||||
self.gameMac = gameMac
|
self.gameMac = gameMac
|
||||||
|
@ -63,14 +66,18 @@ class Announce(Packet):
|
||||||
self.gameId = gameId
|
self.gameId = gameId
|
||||||
self.gameFlags = gameFlags
|
self.gameFlags = gameFlags
|
||||||
self.gameTitle = gameTitle[0:8]
|
self.gameTitle = gameTitle[0:8]
|
||||||
|
self.interval = interval
|
||||||
|
self.jitter = jitter
|
||||||
self.priority = 3
|
self.priority = 3
|
||||||
|
|
||||||
def toMessage(self):
|
def toMessage(self):
|
||||||
message = Packet.toMessage(self)
|
message = Packet.toMessage(self)
|
||||||
message += ''.join([chr(x) for x in self.gameMac])
|
message += ''.join([chr(x) for x in self.gameMac])
|
||||||
message += chr(self.gameChannel)
|
message += chr(self.gameChannel)
|
||||||
message += inttouint32(self.gameId)
|
message += inttouint16(self.gameId)
|
||||||
message += chr(self.gameFlags)
|
message += chr(self.gameFlags)
|
||||||
|
message += chr(self.interval)
|
||||||
|
message += chr(self.jitter)
|
||||||
message += self.gameTitle
|
message += self.gameTitle
|
||||||
if len(self.gameTitle) < 8:
|
if len(self.gameTitle) < 8:
|
||||||
message += '\x00'*(8-len(self.gameTitle))
|
message += '\x00'*(8-len(self.gameTitle))
|
||||||
|
|
Loading…
Reference in New Issue