Blame view

Tangible/tangibleInterface.c 2.28 KB
67b73333   amoreau   Ajout du squelette
1
2
3
  #include <avr/io.h>
  #include <util/delay.h>
  #include <stdio.h>
df742988   pifou   Modif tangible
4
5
6
  #include <string.h>
  #include <stdlib.h>
  #include <stdbool.h>
67b73333   amoreau   Ajout du squelette
7
8
9
10
11
12
13
  #include "serial.h"
  #include "ethernet.h"
  #include "w5100.h"
  #include "socket.h"
  
  #define MAC_SIZE	6
  #define IPV4_SIZE	4
3e25c332   pifou   Big upload
14
15
16
  bool isComMem = false; // Commande déjà enregistrée ou non?
  bool sleep = true; //Etat de l'interface : true = mode sommeil / false = mode eveillé
  
df742988   pifou   Modif tangible
17
18
  SOCKET sUDP=0;
  SOCKET sTCP=1;
3e25c332   pifou   Big upload
19
20
21
  
  uint8 comMem[2]; //Commande en mémoire
  
df742988   pifou   Modif tangible
22
23
  uint8_t addr[IPV4_SIZE];
  uint16_t port;
3e25c332   pifou   Big upload
24
  
df742988   pifou   Modif tangible
25
26
  
  void request(uint8 rq [2])
67b73333   amoreau   Ajout du squelette
27
  {
bb11e508   pifou   tangible test
28
29
30
31
32
33
34
    
    if (!isComMem) //Aucune commande en mémoire
      {
        isComMem = true;
        comMem[0] = rq[0]; comMem[1] = rq [1];
      }
    
3e25c332   pifou   Big upload
35
36
37
38
39
40
41
    uint8 x = rq [0] & 0xE0; //Récupération de la commande
    x = x >> 5;
    uint16 y = rq[0] & 0x1F; //Récupération du pourcentage
    y = y << 8;
    y += rq[1];
    uint16 per = (100*y)/8192; //2^13 = 100 %
    switch(x)
df742988   pifou   Modif tangible
42
      {
bb11e508   pifou   tangible test
43
        
df742988   pifou   Modif tangible
44
      case 0:
3e25c332   pifou   Big upload
45
46
47
        printf("REQUEST STATUS\n");
        //ENVOI TCP ICI , renvoi x = 0x01
        comMem[0] = rq[0]; comMem[1] = rq [1]; //save
df742988   pifou   Modif tangible
48
49
50
        break;
  
      case 2:
3e25c332   pifou   Big upload
51
52
        printf("SET / UNSET SLEEP\n");
        if (y == 0x0001)
bb11e508   pifou   tangible test
53
  	{
3e25c332   pifou   Big upload
54
55
  	      sleep = false;
  	      printf("MODE EVEILLE\n");
bb11e508   pifou   tangible test
56
  	}
3e25c332   pifou   Big upload
57
        else if (y == 0x0000)
bb11e508   pifou   tangible test
58
  	{
3e25c332   pifou   Big upload
59
60
  	      sleep = true;
  	      printf("MODE SOMMEIL\n");
bb11e508   pifou   tangible test
61
62
  	}
        comMem[0] = rq[0]; comMem[1] = rq [1]; //save 
df742988   pifou   Modif tangible
63
64
65
        break;
        
      case 3:
3e25c332   pifou   Big upload
66
        // ENVOI TCP ICI , envoi de comMem[2]    
df742988   pifou   Modif tangible
67
68
        break;
      case 5:
3e25c332   pifou   Big upload
69
        //Envoi à l'interface secondaire ordre + pourcentage.
df742988   pifou   Modif tangible
70
71
72
73
74
75
76
77
78
79
        
        break;
      }
  
  
    
  }
  
  int main(void)
  { 
b34a6f00   pifou   modif socket .h .c
80
    uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD};
94783af9   Antoine Moreau   tangible maj
81
82
    uint8_t ip[IPV4_SIZE] = {192,168,1,205};
    uint8_t gateway[4] = {192,168,1,254};
b34a6f00   pifou   modif socket .h .c
83
    uint8_t mask[4] = {255,255,255,0};
94783af9   Antoine Moreau   tangible maj
84
85
86
87
88
  
    /* uint8_t mac[MAC_SIZE] = {0xA0,0xBD,0xCD,0xDD,0xED,0xFD}; */
    /* uint8_t ip[IPV4_SIZE] = {172,26,145,205}; */
    /* uint8_t gateway[4] = {172,26,145,254}; */
    /* uint8_t mask[4] = {255,255,255,0}; */
b34a6f00   pifou   modif socket .h .c
89
    
df742988   pifou   Modif tangible
90
    uint8 buf[2];
d12f48f7   pifou   Prise en compte d...
91
    uint16 datasize;
df742988   pifou   Modif tangible
92
  
3e25c332   pifou   Big upload
93
94
95
96
97
98
99
100
101
102
    init_printf();
    ethernet_init(mac,ip,gateway,mask); 
    if (!socket(sUDP,Sn_MR_UDP,2020,0))
      {
        return -1;
      }
    if (!socket(sTCP,Sn_MR_TCP,2020,0))
      {
        return -1;
      }
df742988   pifou   Modif tangible
103
      
3e25c332   pifou   Big upload
104
105
    while(1)
      {
94783af9   Antoine Moreau   tangible maj
106
        if((datasize=recvfrom(sUDP,buf,sizeof(buf),addr,&port)) == 8)
d12f48f7   pifou   Prise en compte d...
107
        {
3e25c332   pifou   Big upload
108
          request(buf);
d12f48f7   pifou   Prise en compte d...
109
        }
3e25c332   pifou   Big upload
110
111
112
113
      }
    close(sTCP);
    close(sUDP);
    return 0;
67b73333   amoreau   Ajout du squelette
114
  }