Subversion Repositories HomeAutomation

Rev

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

Rev 587 Rev 588
Line 16... Line 16...
16
        channel_defs[i].value = 0;
16
        channel_defs[i].value = 0;
17
    }
17
    }
18
 
18
 
19
    /* CHANNEL_SUBCLASS_IDENTIFY */
19
    /* CHANNEL_SUBCLASS_IDENTIFY */
20
 
20
 
-
 
21
    txMsg.Id    = (CAN_CHANNEL                  << CAN_SHIFT_CLASS)
21
    txMsg.Id = (CAN_CHANNEL<<CAN_SHIFT_CLASS) | (CHANNEL_SUBCLASS_IDENTIFY<<CHANNEL_SHIFT_SUBCLASS) | NODE_ID;
22
                | (CHANNEL_SUBCLASS_IDENTIFY    << CHANNEL_SHIFT_SUBCLASS)
-
 
23
                | (NODE_ID                      << CHANNEL_SHIFT_NODEID);
22
    txMsg.ExtendedFlag = 1;
24
    txMsg.ExtendedFlag = 1;
23
    txMsg.RemoteFlag = 0;
25
    txMsg.RemoteFlag = 0;
24
 
26
 
25
    txMsg.DataLength = 1;
27
    txMsg.DataLength = 1;
26
    txMsg.Data.bytes[0] = CHANNEL_COUNT;
28
    txMsg.Data.bytes[0] = CHANNEL_COUNT;
Line 81... Line 83...
81
            }
83
            }
82
            return CHANNEL_FAIL;
84
            return CHANNEL_FAIL;
83
 
85
 
84
 
86
 
85
 
87
 
86
 
-
 
-
 
88
#if CHANNEL_ENABLE_NAME
87
        case CHANNEL_SUBCLASS_CHN_NAME:
89
        case CHANNEL_SUBCLASS_CHN_NAME:
88
            for( i=0; i<CHANNEL_COUNT; i++ ) {
90
            for( i=0; i<CHANNEL_COUNT; i++ ) {
89
                if( channel_defs[i].channel == channel ) {
91
                if( channel_defs[i].channel == channel ) {
90
                    for( j=0; j<msg->DataLength; j++) {
92
                    for( j=0; j<msg->DataLength; j++) {
91
                        channel_defs[i].name[j]=msg->Data.bytes[j];
93
                        channel_defs[i].name[j]=msg->Data.bytes[j];
92
                    }
94
                    }
93
                    channel_defs[i].name[j]='\0';
95
                    channel_defs[i].name[j]='\0';
94
                }
96
                }
95
            }
97
            }
96
            return CHANNEL_OK;
98
            return CHANNEL_OK;
-
 
99
#endif
97
 
100
 
98
 
-
 
99
 
-
 
-
 
101
#if CHANNEL_ENABLE_TYPE
100
        case CHANNEL_SUBCLASS_CHN_TYPE:
102
        case CHANNEL_SUBCLASS_CHN_TYPE:
101
            for( i=0; i<CHANNEL_COUNT; i++ ) {
103
            for( i=0; i<CHANNEL_COUNT; i++ ) {
102
                if( channel_defs[i].channel == channel ) {
104
                if( channel_defs[i].channel == channel ) {
103
                    channel_defs[i].type_k = msg->Data.words[0];
105
                    channel_defs[i].type_k = msg->Data.words[0];
104
                    channel_defs[i].type_m = msg->Data.words[1];
106
                    channel_defs[i].type_m = msg->Data.words[1];
105
 
-
 
-
 
107
#if CHANNEL_ENABLE_TYPE_NAME
106
                    for( j=0; j<msg->DataLength-4; j++) {
108
                    for( j=0; j<msg->DataLength-4; j++) {
107
                        channel_defs[i].type[j]=msg->Data.bytes[j+4];
109
                        channel_defs[i].type[j]=msg->Data.bytes[j+4];
108
                    }
110
                    }
109
                    channel_defs[i].type[j]='\0';
111
                    channel_defs[i].type[j]='\0';
-
 
112
#endif
110
                }
113
                }
111
            }
114
            }
112
            break;
115
            break;
-
 
116
#endif
113
    }
117
    }
114
 
118
 
115
    return CHANNEL_FAIL;
119
    return CHANNEL_FAIL;
116
}
120
}
117
 
121
 
118
void Channel_Bind( uint8_t id, uint8_t channel ) {
122
void Channel_Bind( uint8_t id, uint8_t channel ) {
119
    channel_defs[id].channel = channel;
123
    channel_defs[id].channel = channel;
120
}
124
}
121
 
125
 
122
uint16_t Channel_GetValue( uint8_t id ) {
126
uint16_t Channel_GetValue( uint8_t id ) {
123
    return channel_defs[id].value;
127
    return channel_defs[id].value;
-
 
128
}
-
 
129
 
-
 
130
uint8_t Channel_SetValue( uint8_t id, uint16_t value ) {
-
 
131
    uint16_t channel;
-
 
132
    Can_Message_t txMsg;
-
 
133
 
-
 
134
    channel = channel_defs[id].channel;
-
 
135
    if( channel == 0 ) return CHANNEL_FAIL;
-
 
136
 
-
 
137
    txMsg.Id    = (CAN_CHANNEL              << CAN_SHIFT_CLASS)
-
 
138
                | (CHANNEL_SUBCLASS_DATA    << CHANNEL_SHIFT_SUBCLASS)
-
 
139
                | (channel                  << CHANNEL_SHIFT_CHANNEL)
-
 
140
                | (NODE_ID                  << CHANNEL_SHIFT_NODEID);
-
 
141
 
-
 
142
    txMsg.ExtendedFlag = 1;
-
 
143
    txMsg.RemoteFlag = 0;
-
 
144
    txMsg.DataLength = 2;
-
 
145
    txMsg.Data.words[0] = value;
-
 
146
 
-
 
147
    BIOS_CanSend( &txMsg );
-
 
148
 
-
 
149
    channel_defs[id].value = value;
-
 
150
 
-
 
151
#if CHANNEL_SET_SELF
-
 
152
    Channel_Callback_Value( id, value );
-
 
153
#endif
-
 
154
 
-
 
155
    return CHANNEL_OK;
124
}
156
}