summaryrefslogtreecommitdiff
path: root/n/avr/twi-master/test_twi_master.c
blob: 9b8adac3b43416134145d2b9fa234db48f2d166e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* test_twi_master.c */

#include "twi_master.h"

#include <n/avr/rs232/rs232.h>
#include <n/avr/proto/proto.h>
#include <avr/io.h>
#include <avr/interrupt.h>

void proto_callback (uint8_t cmd, uint8_t size, uint8_t *args)
{
    uint8_t data[1] = {0x00};
    int8_t c;
    sei ();
    switch (cmd)
      {
      case 's':
	if (size == 2)
	  {
	    proto_send ('s', 0, 0);
	    twi_master_send (args[0], &args[1], 1);
	    while (!twi_master_is_finished ())
		;
	    proto_send ('f', 0, 0);
	  }
	else
	    proto_send ('e', 0, 0);
	break;
      case 'r':
	if (size == 2)
	  {
	    rs232_putc ('r');
	    c = twi_master_read (args[0], data, 1);
	    if (c != 0)
		proto_send ('e', 1 , 0);
	    else
	      {
		while (!twi_master_is_finished ())
		    ;
		proto_send ('f', 1, data);
	      }
	  }
	else
	    proto_send ('e', 1, 0);
	break;
      default:
	proto_send ('e', 1, 0);
      }
}

int
main (void)
{
    uint8_t c;
    rs232_init ();
    twi_master_init ();
    rs232_putc ('m');
    rs232_putc ('s');
    rs232_putc ('s');
    rs232_putc ('\n');
    //DDRC = 1;
    //PORTC = 1;
    while (42)
      {
	c = rs232_getc ();
	proto_accept (c);
      }
    return 0;
}