mirror of
https://github.com/travisgoodspeed/goodwatch
synced 2024-11-21 15:48:02 +00:00
Added command to export random integers as per suggestion in #63
Adds a `-R n/ --randint n` command which returns a sequence of n 16bit integers as generated by `true_rand()`.
This commit is contained in:
parent
6ba460e766
commit
eceb65a96a
@ -259,6 +259,11 @@ class GoodWatch:
|
||||
def dmesg(self):
|
||||
"""Returns the DMESG buffer."""
|
||||
return self.transact("\x04");
|
||||
def randint(self,n):
|
||||
"""Returns n random 16bit integer. """
|
||||
import struct
|
||||
r = struct.unpack("<"+"H"*n,self.transact("\x05\x00"+chr16(n)));
|
||||
return "%04x "*n%r
|
||||
def radioonoff(self,on=1):
|
||||
"""Turns the radio on or off."""
|
||||
return self.transact("\x10"+chr(on));
|
||||
@ -301,7 +306,8 @@ if __name__=='__main__':
|
||||
help='Write a string the LCD.');
|
||||
parser.add_argument('-D','--dmesg',
|
||||
help='Prints the dmesg.',action='count');
|
||||
|
||||
parser.add_argument('-R','--randint',
|
||||
help='Get RANDINT random 16bit integers.');
|
||||
parser.add_argument('-b','--beacon',
|
||||
help='Transmits a beacon.');
|
||||
parser.add_argument('-B','--beaconsniff',
|
||||
@ -330,6 +336,8 @@ if __name__=='__main__':
|
||||
|
||||
if args.dmesg>0:
|
||||
print goodwatch.dmesg();
|
||||
if args.randint != None:
|
||||
print goodwatch.randint(int(args.randint));
|
||||
|
||||
if args.beacon!=None:
|
||||
print "Turning radio on.";
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include<string.h>
|
||||
|
||||
#include "api.h"
|
||||
#include "rng.h"
|
||||
|
||||
enum {
|
||||
SETTURBOMODE = 0x00,
|
||||
@ -19,6 +20,7 @@ enum {
|
||||
POKE = 0x02,
|
||||
LCDSTRING = 0x03,
|
||||
DMESG = 0x04,
|
||||
RANDINT = 0x05,
|
||||
|
||||
RADIOONOFF = 0x10,
|
||||
RADIOCONFIG = 0x11,
|
||||
@ -48,6 +50,30 @@ static void send_dmesg(){
|
||||
uart_tx(0x00);
|
||||
}
|
||||
|
||||
//! Local command to generate and send n random integers.
|
||||
static void send_randint(uint16_t n){
|
||||
|
||||
uint16_t i;
|
||||
uint16_t len = n*2;
|
||||
uint16_t rints[n]; // are var len arrays ok here?
|
||||
|
||||
for(i = 0; i < n; i++){ //pre-generate enough ints
|
||||
rints[i] = true_rand();
|
||||
}
|
||||
//Start the frame
|
||||
uart_tx(0x00);
|
||||
uart_tx(0x80);
|
||||
//Length
|
||||
uart_tx(len&0xFF);
|
||||
uart_tx(len>>8);
|
||||
//Send integers byte by byte
|
||||
for(i=0;i<len;i++){
|
||||
uart_tx(((char*)rints)[i]);
|
||||
}
|
||||
// no checksum ?
|
||||
uart_tx(0x00);
|
||||
uart_tx(0x00);
|
||||
}
|
||||
|
||||
//! Local pointer to packet.c's buffer.
|
||||
static uint8_t *packetbuf=0;
|
||||
@ -142,6 +168,10 @@ int monitor_handle(uint8_t *buffer, int len){
|
||||
len=0;
|
||||
break;
|
||||
|
||||
case RANDINT:
|
||||
send_randint((uint16_t)buffer16[1]);
|
||||
len=0;
|
||||
break;
|
||||
|
||||
case RADIOONOFF: //One byte parameter, on or off.
|
||||
if(buffer[1]){
|
||||
|
Loading…
Reference in New Issue
Block a user