Subversion Repositories HomeAutomation

Rev

Rev 280 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 280 Rev 281
Line 46... Line 46...
46
 
46
 
47
#define SEND_BUFFER_SIZE 20
47
#define SEND_BUFFER_SIZE 20
48
static char sendbuf[SEND_BUFFER_SIZE+1];
48
static char sendbuf[SEND_BUFFER_SIZE+1];
49
static uint8_t buffpoint;
49
static uint8_t buffpoint;
50
 
50
 
-
 
51
#define C2S_START_BYTE 253
-
 
52
#define C2S_END_BYTE 250
-
 
53
 
51
/*----------------------------------------------------------------------------
54
/*----------------------------------------------------------------------------
52
 * Putchar for udp
55
 * Putchar for udp
53
 * Implements a small buffer, sends packet over udp if buffer is full or
56
 * Implements a small buffer, sends packet over udp if buffer is full or
54
 * \n-char is sent.
57
 * \n-char is sent.
55
 * Needs a timeout to force send.
58
 * Needs a timeout to force send.
Line 157... Line 160...
157
           
160
           
158
        }
161
        }
159
       
162
       
160
        /* check if any messages have been received */
163
        /* check if any messages have been received */
161
        while (Can_Receive(&rxMsg) == CAN_OK) {
164
        while (Can_Receive(&rxMsg) == CAN_OK) {
-
 
165
            uint8_t i;
162
            printf("MSG Received: ID=%lx, DLC=%u, EXT=%u, RTR=%u, ", rxMsg.Id, (uint16_t)(rxMsg.DataLength), (uint16_t)(rxMsg.ExtendedFlag), (uint16_t)(rxMsg.RemoteFlag));
166
            printf("MSG Received: ID=%lx, DLC=%u, EXT=%u, RTR=%u, ", rxMsg.Id, (uint16_t)(rxMsg.DataLength), (uint16_t)(rxMsg.ExtendedFlag), (uint16_t)(rxMsg.RemoteFlag));
163
            printf("data={ ");
167
            printf("data={ ");
164
            for (uint8_t i=0; i<rxMsg.DataLength; i++) {
168
            for (i=0; i<rxMsg.DataLength; i++) {
165
                printf("%x ", rxMsg.Data.bytes[i]);
169
                printf("%x ", rxMsg.Data.bytes[i]);
166
            }
170
            }
167
            printf("}\n");
171
            printf("}\n");
168
           
172
           
-
 
173
            //skicka ocksĂ„ som udppaket till rmCan2SerPrt
-
 
174
            char sendbuf2[17];
-
 
175
            sendbuf2[0] = C2S_START_BYTE;
-
 
176
            sendbuf2[1] = (uint8_t)rxMsg.Id;
-
 
177
            sendbuf2[2] = (uint8_t)(rxMsg.Id>>8);
-
 
178
            sendbuf2[3] = (uint8_t)(rxMsg.Id>>16);
-
 
179
            sendbuf2[4] = (uint8_t)(rxMsg.Id>>24);
-
 
180
            sendbuf2[5] = rxMsg.ExtendedFlag;
-
 
181
            sendbuf2[6] = rxMsg.RemoteFlag;
-
 
182
            sendbuf2[7] = rxMsg.DataLength;
-
 
183
            for (uint8_t i=0; i<8; i++) {
-
 
184
                sendbuf2[8+i] = rxMsg.Data.bytes[i];
-
 
185
            }
-
 
186
            sendbuf2[16] = C2S_END_BYTE;
-
 
187
            send_udp(buf, sendbuf2, 17, rmCan2SerPrt, remotemac, remoteip);
169
        }
188
        }
170
       
189
       
171
        //test-debug-kod
190
        //test-debug-kod
172
        if ((enc28j60Read(EIR) & EIR_TXERIF)) {
191
        if ((enc28j60Read(EIR) & EIR_TXERIF)) {
173
            //printf("EIR_TXERIF set!\n");
192
            //printf("EIR_TXERIF set!\n");
Line 206... Line 225...
206
                            //Can_Send(&txMsg);
225
                            //Can_Send(&txMsg);
207
                           
226
                           
208
                    }
227
                    }
209
                    if (buf[IP_PROTO_P]==IP_PROTO_UDP_V){
228
                    if (buf[IP_PROTO_P]==IP_PROTO_UDP_V){
210
                        payloadlen=buf[UDP_LEN_L_P]-UDP_HEADER_LEN;
229
                        payloadlen=buf[UDP_LEN_L_P]-UDP_HEADER_LEN;
211
                            printf("hej %x %x\n", buf[UDP_DST_PORT_H_P], buf[UDP_DST_PORT_L_P]);
230
                        //printf("hej %x %x\n", buf[UDP_DST_PORT_H_P], buf[UDP_DST_PORT_L_P]);
212
                        if ((buf[UDP_DST_PORT_H_P]==((locCan2SerPrt>>8) & 0xff)) && (buf[UDP_DST_PORT_L_P] == (locCan2SerPrt & 0xff))) {
231
                        if ((buf[UDP_DST_PORT_H_P]==((locCan2SerPrt>>8) & 0xff)) && (buf[UDP_DST_PORT_L_P] == (locCan2SerPrt & 0xff))) {
-
 
232
                            if (payloadlen==17) {   //ifsats ska in i ovan eller nedan ifsats kanske? nedan
-
 
233
                                if (buf[UDP_DATA_P]==C2S_START_BYTE && buf[UDP_DATA_P+16]==C2S_END_BYTE) {
-
 
234
                                    Can_Message_t cm;
-
 
235
                                    //cm.Id = 0;
-
 
236
                                    cm.DataLength = buf[UDP_DATA_P+7];
-
 
237
                                    cm.RemoteFlag = buf[UDP_DATA_P+6];
-
 
238
                                    cm.ExtendedFlag = buf[UDP_DATA_P+5];
-
 
239
                                    cm.Id = (uint32_t)buf[UDP_DATA_P+1] + ((uint32_t)buf[UDP_DATA_P+2] << 8) + ((uint32_t)buf[UDP_DATA_P+3] << 16) + ((uint32_t)buf[UDP_DATA_P+4] << 24);
-
 
240
                                    uint8_t i;
-
 
241
                                    for (i = 0; i < cm.DataLength; i++) {
-
 
242
                                        cm.Data.bytes[i] = buf[UDP_DATA_P+8+i];
-
 
243
                                    }
-
 
244
                                    Can_Send(&cm);
-
 
245
                                }
213
                            printf("hoj\n");
246
                                printf("hoj\n");
-
 
247
                            }
214
                        } else if (buf[UDP_DATA_P]=='t' && payloadlen==5){
248
                        } else if (buf[UDP_DATA_P]=='t' && payloadlen==5){
215
                            uint8_t i=0;
249
                            uint8_t i=0;
216
                            if (gotserver == 0) {
250
                            if (gotserver == 0) {
217
                                while(i<6){
251
                                while(i<6){
218
                                    remotemac[i]=buf[ETH_SRC_MAC +i];
252
                                    remotemac[i]=buf[ETH_SRC_MAC +i];