Subversion Repositories HomeAutomation

Rev

Rev 341 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 341 Rev 342
1
/*********************************************************************
1
/*********************************************************************
2
 *
2
 *
3
 *   Defines functs and funccs and other global definitions.
3
 *   Defines functs and funccs and other global definitions.
4
 *
4
 *
5
 *********************************************************************
5
 *********************************************************************
6
 * FileName:            $HeadURL: https://svn.auml.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/Include/funcdefs.h $
6
 * FileName:            $HeadURL: https://svn.auml.se/svn/HomeAutomation/trunk/EmbeddedSoftware/PIC/Include/funcdefs.h $
7
 * Last changed:    $LastChangedDate: 2007-02-25 21:15:41 +0100 (Sun, 25 Feb 2007) $
7
 * Last changed:    $LastChangedDate: 2007-02-26 21:38:37 +0100 (Mon, 26 Feb 2007) $
8
 * By:          $LastChangedBy: johboh $
8
 * By:          $LastChangedBy: johboh $
9
 * Revision:        $Revision: 341 $
9
 * Revision:        $Revision: 342 $
10
 ********************************************************************/
10
 ********************************************************************/
11
 
11
 
12
#include <typedefs.h>
12
#include <typedefs.h>
13
 
13
 
14
#define DEFAULT_ID 0x78     // Default ID for bootloader/node when no id is set.
14
#define DEFAULT_ID 0x78     // Default ID for bootloader/node when no id is set.
15
#define NODE_ID_EE  0x00    // EEPROM first index where to look for ID and NID. 
15
#define NODE_ID_EE  0x00    // EEPROM first index where to look for ID and NID. 
16
                // NODE_ID_EE = NODE_HAS_ID if has correct ID, otherwise use DEFAULT_ID and DEFAULT_NID
16
                // NODE_ID_EE = NODE_HAS_ID if has correct ID, otherwise use DEFAULT_ID and DEFAULT_NID
17
                // NODE_ID_EE + 1 = ID
17
                // NODE_ID_EE + 1 = ID
18
#define NODE_HAS_ID 0x2A    // Value which indicate valid ID and NID.
18
#define NODE_HAS_ID 0x2A    // Value which indicate valid ID and NID.
19
 
19
 
20
 
20
 
21
 
21
 
22
typedef enum _PACKET_TYPE {ptBOOT=0x0,ptPGM=0x1} PACKET_TYPE;
22
typedef enum _PACKET_TYPE {ptBOOT=0x0,ptPGM=0x1} PACKET_TYPE;
23
typedef enum _BOOT_TYPE {btADDR=0x0,btPGM=0x1,btDONE=0x2,btACK=0x4,btNACK=0x5,btCRC=0x6,btCHANGEID=0x7} BOOT_TYPE;
23
typedef enum _BOOT_TYPE {btADDR=0x0,btPGM=0x1,btDONE=0x2,btACK=0x4,btNACK=0x5,btCRC=0x6,btCHANGEID=0x7} BOOT_TYPE;
24
typedef enum _PGM_CLASS {pcCTRL=0x0,pcSENSOR=0x1,pcACTUATOR=0x2} PGM_CLASS;
24
typedef enum _PGM_CLASS {pcCTRL=0x0,pcSENSOR=0x1,pcACTUATOR=0x2} PGM_CLASS;
25
 
25
 
26
typedef struct _CAN_BOOT_PACKET
26
typedef struct _CAN_BOOT_PACKET
27
{
27
{
28
    BOOT_TYPE type; //3
28
    BOOT_TYPE type; //3
29
    BYTE    offset; //8
29
    BYTE    offset; //8
30
    BYTE       rid; //8
30
    BYTE       rid; //8
31
} CAN_BOOT_PACKET;
31
} CAN_BOOT_PACKET;
32
 
32
 
33
 
33
 
34
typedef struct _CAN_PGM_PACKET
34
typedef struct _CAN_PGM_PACKET
35
{
35
{
36
    PGM_CLASS class; //4
36
    PGM_CLASS class; //4
37
    WORD         id; //15
37
    WORD         id; //15
38
} CAN_PGM_PACKET;
38
} CAN_PGM_PACKET;
39
 
39
 
40
typedef struct _CAN_PACKET
40
typedef struct _CAN_PACKET
41
{
41
{
42
    PACKET_TYPE     type;
42
    PACKET_TYPE     type;
43
    CAN_PGM_PACKET   pgm;
43
    CAN_PGM_PACKET   pgm;
44
    CAN_BOOT_PACKET boot;
44
    CAN_BOOT_PACKET boot;
45
    BYTE             sid; //8
45
    BYTE             sid; //8
46
    BYTE          length;
46
    BYTE          length;
47
    BYTE         data[8];
47
    BYTE         data[8];
48
} CAN_PACKET;
48
} CAN_PACKET;
49
 
49
 
50
 
50
 
51
 
51
 
52
// When CAN_BOOT_PACKET.type==btADDR
52
// When CAN_BOOT_PACKET.type==btADDR
53
// data[2] = ADDRU
53
// data[2] = ADDRU
54
// data[1] = ADDRH
54
// data[1] = ADDRH
55
// data[0] = ADDRL
55
// data[0] = ADDRL
56
 
56
 
57
// When CAN_BOOT_PACKET.type==btCRC
57
// When CAN_BOOT_PACKET.type==btCRC
58
// data[4] = CRCH
58
// data[4] = CRCH
59
// data[3] = CRCL
59
// data[3] = CRCL
60
// data[2] = ADDRU
60
// data[2] = ADDRU
61
// data[1] = ADDRH
61
// data[1] = ADDRH
62
// data[0] = ADDRL
62
// data[0] = ADDRL
63
 
63
 
64
// When CAN_BOOT_PACKET.type==btCHANGEID
64
// When CAN_BOOT_PACKET.type==btCHANGEID
65
// data[0] = new id
65
// data[0] = new id
66
 
66
 
67
typedef enum _PGM_CTRL_TYPE {pctBOOTBOOT=0x0,pctAPPBOOT=0x1,pctHEARTBEAT=0x2} PGM_CTRL_TYPE;
67
typedef enum _PGM_CTRL_TYPE {pctBOOTBOOT=0x0,pctAPPBOOT=0x1,pctHEARTBEAT=0x2} PGM_CTRL_TYPE;
68
// When CAN_PGM_PACKET.type==pcCTRL
68
// When CAN_PGM_PACKET.type==pcCTRL
69
//  When CAN_PGM_PACKET.id==pctBOOTBOOT
69
//  When CAN_PGM_PACKET.id==pctBOOTBOOT
70
//      data[0] = startup reason
70
//      data[2] = startup reason
-
 
71
//      data[1] = Bootloader version high byte.
-
 
72
//      data[0] = Bootloader version low byte.
-
 
73
//  When CAN_PGM_PACKET.id==pctAPPBOOT
-
 
74
//      data[1] = Application version high byte.
-
 
75
//      data[0] = Application version low byte.
71
 
76
 
72
typedef enum _PGM_SENSOR_TYPE   {  
77
typedef enum _PGM_SENSOR_TYPE   {  
73
                    pstIR=0x0,
78
                    pstIR=0x0,
74
                    pstTEMP_INSIDE=0x1, pstTEMP_OUTSIDE=0x2, pstTEMP_FREEZER=0x3, pstTEMP_REFRIGERATOR=0x4,
79
                    pstTEMP_INSIDE=0x1, pstTEMP_OUTSIDE=0x2, pstTEMP_FREEZER=0x3, pstTEMP_REFRIGERATOR=0x4,
75
                    pstDOOR_FREEZER=0x5, pstDOOR_REFRIGERATOR=0x6,
80
                    pstDOOR_FREEZER=0x5, pstDOOR_REFRIGERATOR=0x6,
76
                    pstBLIND_TR=0x7
81
                    pstBLIND_TR=0x7
77
                } PGM_SENSOR_TYPE;
82
                } PGM_SENSOR_TYPE;
78
// When CAN_PGM_PACKET.type==pcSENSOR
83
// When CAN_PGM_PACKET.type==pcSENSOR
79
//  When CAN_PGM_PACKET.id==pstIR
84
//  When CAN_PGM_PACKET.id==pstIR
80
//      data[3] = type
85
//      data[3] = type
81
//      data[2] = toogle
86
//      data[2] = toogle
82
//      data[1] = addr
87
//      data[1] = addr
83
//      data[0] = data
88
//      data[0] = data
84
 
89
 
85
//  When CAN_PGM_PACKET.id==pstTEMP_*
90
//  When CAN_PGM_PACKET.id==pstTEMP_*
86
//      data[1] = integer value -127 to 127
91
//      data[1] = integer value -127 to 127
87
//      data[0] = decimal value 0-9
92
//      data[0] = decimal value 0-9
88
 
93
 
89
//  When CAN_PGM_PACKET.id==pstBLIND_*
94
//  When CAN_PGM_PACKET.id==pstBLIND_*
90
//      data[0] = Precent value 0-100
95
//      data[0] = Precent value 0-100
91
 
96
 
92
typedef enum _PGM_ACTUATOR_TYPE {  
97
typedef enum _PGM_ACTUATOR_TYPE {  
93
                    patBLIND_TR=0x7
98
                    patBLIND_TR=0x7
94
                } PGM_ACTUATOR_TYPE;
99
                } PGM_ACTUATOR_TYPE;
95
// When CAN_PGM_PACKET.type==pcACTUATOR
100
// When CAN_PGM_PACKET.type==pcACTUATOR
96
//  When CAN_PGM_PACKET.id==pstBLIND_*
101
//  When CAN_PGM_PACKET.id==pstBLIND_*
97
//      data[0] = Precent value 0-100
102
//      data[0] = Precent value 0-100
98
 
103
 
99
 
104
 
100
 
105
 
101
 
106
 
102
 
107
 
103
 
108
 
104
 
109
 
105
 
110