# print "$seq\n";
my $bitcount=0;
my @binarydata;
- for my $bits (split /,/,$seq)
+ for my $bits (reverse split /,/,$seq)
{
$binarydata[int($bitcount/8)]<<=1;
$binarydata[int($bitcount/8)]|=$bits;
$binarydata[int($bitcount/8)]<<= 7 - ($bitcount % 8);
my @chars = map { chr($_) } @binarydata;
print STDERR join '',@chars;
+# print STDERR "\ns\x04"; # send 4 times
+# print STDERR chr(8-($bitcount % 8)) if $bitcount % 8;
+ print "$bitcount total, offset ".($bitcount % 8)." bits\n";
+ print ($bitcount/8 ," bytes (must be <= 63)\n");
}
static char get_keystroke(void);
-int main()
+int main (int argc, char *argv[])
{
int i, r, num;
char c, buf[64];
}
}
// printf("found rawhid device\n");
-
- while (1) {
- // check if any Raw HID packet has arrived
- num = rawhid_recv(0, buf, 64, 220);
- if (num < 0) {
- printf("\nerror reading, device went offline\n");
- rawhid_close(0);
- return 0;
- }
- if (num == 64) {
- // printf("\nrecv %d bytes:\n", num);
- for (i=0; i<64*8; i++) {
- if (buf[i/8] & 0x80)
- {
- printf("1");
- } else {
- printf("0");
+ if (argc>1)
+ {
+ FILE * f = fopen (argv[1], "r");
+ if (!f)
+ return -3;
+ buf[0]='f';
+ size_t len= fread(buf+1, 63, 1, f);
+ rawhid_send(0, buf, 1+len, 100);
+ buf[0]='s';
+ buf[1]=4;
+ rawhid_send(0, buf, 2, 100);
+ return 0;
+ } else {
+ while (1) {
+ // check if any Raw HID packet has arrived
+ num = rawhid_recv(0, buf, 64, 220);
+ if (num < 0) {
+ printf("\nerror reading, device went offline\n");
+ rawhid_close(0);
+ return 0;
+ }
+ if (num == 64) {
+ // printf("\nrecv %d bytes:\n", num);
+ for (i=0; i<64*8; i++) {
+ if (buf[i/8] & 0x80)
+ {
+ printf("1");
+ } else {
+ printf("0");
+ }
+ printf(",");
+ buf[i/8]<<=1;
}
- printf(",");
- buf[i/8]<<=1;
+ }
+ // check if any input on stdin
+ while ((c = get_keystroke()) >= 32) {
+ printf("\ngot key '%c', sending...\n", c);
+ buf[0] = c;
+ for (i=1; i<64; i++) {
+ buf[i] = 0;
}
- }
- // check if any input on stdin
- while ((c = get_keystroke()) >= 32) {
- printf("\ngot key '%c', sending...\n", c);
- buf[0] = c;
- for (i=1; i<64; i++) {
- buf[i] = 0;
- }
- rawhid_send(0, buf, 64, 100);
- }
- }
+ rawhid_send(0, buf, 64, 100);
+ }
+ }
+ }
}
#if defined(OS_LINUX) || defined(OS_MACOSX)
# Program the device.
program: $(TARGET).hex $(TARGET).eep
+ echo -n r | ../pc/rawhid_test
~/teensy_loader_cli/teensy_loader_cli -mmcu=atmega32u4 -w $(TARGET).hex
uint8_t rf_send_buffer[RF_SEND_BUFFER_LEN_MAX]; // buffer for sending rf433 signals
uint8_t rf_send_buffer_len=0;
+
+void reset()
+{
+ cli();
+ // disable watchdog, if enabled
+ // disable all peripherals
+ UDCON = 1;
+ USBCON = (1<<FRZCLK); // disable USB
+ UCSR1B = 0;
+ _delay_ms(5);
+ #if defined(__AVR_AT90USB162__) // Teensy 1.0
+ EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0;
+ TIMSK0 = 0; TIMSK1 = 0; UCSR1B = 0;
+ DDRB = 0; DDRC = 0; DDRD = 0;
+ PORTB = 0; PORTC = 0; PORTD = 0;
+ asm volatile("jmp 0x3E00");
+ #elif defined(__AVR_ATmega32U4__) // Teensy 2.0
+ EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
+ TIMSK0 = 0; TIMSK1 = 0; TIMSK3 = 0; TIMSK4 = 0; UCSR1B = 0; TWCR = 0;
+ DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0; TWCR = 0;
+ PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
+ asm volatile("jmp 0x7E00");
+ #elif defined(__AVR_AT90USB646__) // Teensy++ 1.0
+ EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
+ TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
+ DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
+ PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
+ asm volatile("jmp 0xFC00");
+ #elif defined(__AVR_AT90USB1286__) // Teensy++ 2.0
+ EIMSK = 0; PCICR = 0; SPCR = 0; ACSR = 0; EECR = 0; ADCSRA = 0;
+ TIMSK0 = 0; TIMSK1 = 0; TIMSK2 = 0; TIMSK3 = 0; UCSR1B = 0; TWCR = 0;
+ DDRA = 0; DDRB = 0; DDRC = 0; DDRD = 0; DDRE = 0; DDRF = 0;
+ PORTA = 0; PORTB = 0; PORTC = 0; PORTD = 0; PORTE = 0; PORTF = 0;
+ asm volatile("jmp 0x1FC00");
+ #endif
+}
+
int main(void)
{
// set for 16 MHz clock
int8_t r = usb_rawhid_recv(read_buffer, 0);
if (r>0)
{
- if (read_buffer[0]=='b') //begin capture
+ if (read_buffer[0]=='r') //reset
+ reset();
+ else if (read_buffer[0]=='b') //begin capture
capture=1;
else if (read_buffer[0]=='e') //end capture
capture=0;
rf_send--;
} else if (rf_send_reload_count) {
rf_send=rf_send_reload;
- } else if (capture) {
- write_buffer[active_buffer][output_count/8]<<=1;
- write_buffer[active_buffer][output_count++/8]|=PINB&1;
- if (output_count>=64*8)
- {
- output_count=0;
- active_buffer=active_buffer?0:1;
- send_buffer=1;
+ } else {
+ PORTF&=~1;
+ if (capture) {
+ write_buffer[active_buffer][output_count/8]<<=1;
+ write_buffer[active_buffer][output_count++/8]|=PINB&1;
+ if (output_count>=64*8)
+ {
+ output_count=0;
+ active_buffer=active_buffer?0:1;
+ send_buffer=1;
+ }
}
}
}
-
-