Subversion Repositories HomeAutomation

Rev

Rev 108 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 108 Rev 109
Line 2... Line 2...
2
 *
2
 *
3
 *                  Main application
3
 *                  Main application
4
 *
4
 *
5
 *********************************************************************
5
 *********************************************************************
6
 * FileName:        $HeadURL: https://svn.auml.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canBase/Source/Main.c $
6
 * FileName:        $HeadURL: https://svn.auml.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/canBase/Source/Main.c $
7
 * Last changed:    $LastChangedDate: 2006-11-15 17:32:31 +0100 (Wed, 15 Nov 2006) $
7
 * Last changed:    $LastChangedDate: 2006-11-15 18:49:55 +0100 (Wed, 15 Nov 2006) $
8
 * By:              $LastChangedBy: johboh $
8
 * By:              $LastChangedBy: johboh $
9
 * Revision:        $Revision: 108 $
9
 * Revision:        $Revision: 109 $
10
 ********************************************************************/
10
 ********************************************************************/
11
 
11
 
12
 
12
 
13
#include <compiler.h>
13
#include <compiler.h>
14
#include <stackTasks.h>
14
#include <stackTasks.h>
Line 45... Line 45...
45
    if (EERead(NODE_ID_EE)==NODE_HAS_ID)
45
    if (EERead(NODE_ID_EE)==NODE_HAS_ID)
46
    {
46
    {
47
        MY_ID=(((WORD)EERead(NODE_ID_EE + 1))<<8)+EERead(NODE_ID_EE + 2);
47
        MY_ID=(((WORD)EERead(NODE_ID_EE + 1))<<8)+EERead(NODE_ID_EE + 2);
48
        MY_NID=EERead(NODE_ID_EE + 3);
48
        MY_NID=EERead(NODE_ID_EE + 3);
49
    }
49
    }
-
 
50
 
-
 
51
    // Send user program startup heatbeat
-
 
52
    outCm.funct                     = FUNCT_BOOTLOADER;
-
 
53
    outCm.funcc                     = FUNCC_BOOT_HEARTBEAT;
-
 
54
    outCm.nid                       = MY_NID;
-
 
55
    outCm.sid                       = MY_ID;
-
 
56
    outCm.data_length               = 1;
-
 
57
    outCm.data[BOOT_DATA_HEARTBEAT_INDEX] = HEARTBEAT_USER_STARTUP;
-
 
58
    while(!canSendMessage(outCm,PRIO_HIGH));
-
 
59
 
50
 
60
 
51
    while(1)
61
    while(1)
52
    {
62
    {
53
        static TICK t = 0;
63
        static TICK t = 0;
54
        static TICK heartbeat = 0;
64
        static TICK heartbeat = 0;
55
 
65
 
56
       
66
       
57
        if ((tickGet()-heartbeat)>TICK_SECOND*5)
67
        if ((tickGet()-heartbeat)>TICK_SECOND*5)
58
        {
68
        {
-
 
69
            // Send alive heartbeat
59
            outCm.funct                     = FUNCT_BOOTLOADER;
70
            outCm.funct                     = FUNCT_BOOTLOADER;
60
            outCm.funcc                     = FUNCC_BOOT_HEARTBEAT;
71
            outCm.funcc                     = FUNCC_BOOT_HEARTBEAT;
61
            outCm.nid                       = MY_NID;
72
            outCm.nid                       = MY_NID;
62
            outCm.sid                       = MY_ID;
73
            outCm.sid                       = MY_ID;
63
            outCm.data_length               = 0;
74
            outCm.data_length               = 1;
-
 
75
            outCm.data[BOOT_DATA_HEARTBEAT_INDEX] = HEARTBEAT_ALIVE;
64
            while(!canSendMessage(outCm,PRIO_HIGH));
76
            while(!canSendMessage(outCm,PRIO_HIGH));
65
           
77
           
66
            heartbeat = tickGet();
78
            heartbeat = tickGet();
67
        }
79
        }
68
        if ((tickGet()-t)>TICK_SECOND)
80
        if ((tickGet()-t)>TICK_SECOND)
Line 143... Line 155...
143
                switch(cm.funcc)
155
                switch(cm.funcc)
144
                {
156
                {
145
                    case FUNCC_BOOT_INIT: Reset(); break; //User whant to program me, reset me.
157
                    case FUNCC_BOOT_INIT: Reset(); break; //User whant to program me, reset me.
146
                    case FUNCC_BOOT_SET_ID:
158
                    case FUNCC_BOOT_SET_ID:
147
                        // Change my ID and NID
159
                        // Change my ID and NID
148
                        MY_ID=(((WORD)cm.data[BOOT_DATA_NEW_ID_HIGH])<<8)+cm.data[BOOT_DATA_NEW_ID_LOW];
160
                        MY_ID=(((WORD)cm.data[BOOT_DATA_NEW_ID_HIGH_INDEX])<<8)+cm.data[BOOT_DATA_NEW_ID_LOW_INDEX];
149
                        MY_NID=cm.data[BOOT_DATA_NEW_NID];
161
                        MY_NID=cm.data[BOOT_DATA_NEW_NID_INDEX];
150
                        EEWrite(NODE_ID_EE+1,cm.data[BOOT_DATA_NEW_ID_HIGH]);
162
                        EEWrite(NODE_ID_EE+1,cm.data[BOOT_DATA_NEW_ID_HIGH_INDEX]);
151
                        EEWrite(NODE_ID_EE+2,cm.data[BOOT_DATA_NEW_ID_LOW]);
163
                        EEWrite(NODE_ID_EE+2,cm.data[BOOT_DATA_NEW_ID_LOW_INDEX]);
152
                        EEWrite(NODE_ID_EE+3,cm.data[BOOT_DATA_NEW_NID]);
164
                        EEWrite(NODE_ID_EE+3,cm.data[BOOT_DATA_NEW_NID_INDEX]);
153
                        EEWrite(NODE_ID_EE,NODE_HAS_ID);
165
                        EEWrite(NODE_ID_EE,NODE_HAS_ID);
154
                        // Send ack with new id.
166
                        // Send ack with new id.
155
                        outCm.funct                     = FUNCT_BOOTLOADER;
167
                        outCm.funct                     = FUNCT_BOOTLOADER;
156
                        outCm.funcc                     = FUNCC_BOOT_ACK;
168
                        outCm.funcc                     = FUNCC_BOOT_ACK;
157
                        outCm.nid                       = MY_NID;
169
                        outCm.nid                       = MY_NID;