Subversion Repositories HomeAutomation

Rev

Rev 1133 | Rev 1910 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 1133 Rev 1616
Line 5... Line 5...
5
uint8_t sns_irTransmit_repeatCount = 0;
5
uint8_t sns_irTransmit_repeatCount = 0;
6
uint8_t sns_irTransmit_stop = 0;
6
uint8_t sns_irTransmit_stop = 0;
7
Ir_Protocol_Data_t sns_irTransmit_proto;
7
Ir_Protocol_Data_t sns_irTransmit_proto;
8
uint16_t sns_irTransmit_txbuffer[MAX_NR_TIMES];
8
uint16_t sns_irTransmit_txbuffer[MAX_NR_TIMES];
9
uint8_t sns_irTransmit_length = 0;
9
uint8_t sns_irTransmit_length = 0;
-
 
10
uint8_t sns_irTransmit_burst_mode = 0;
10
 
11
 
11
void sns_irTransmit_Init(void)
12
void sns_irTransmit_Init(void)
12
{
13
{
13
    IrTransceiver_Init();
14
    IrTransceiver_Init();
14
    sns_irTransmit_proto.timeout = 0;
15
    sns_irTransmit_proto.timeout = 0;
Line 39... Line 40...
39
        else
40
        else
40
        {
41
        {
41
            sns_irTransmit_state = sns_irTransmit_STATE_IDLE;
42
            sns_irTransmit_state = sns_irTransmit_STATE_IDLE;
42
        }
43
        }
43
    }
44
    }
44
    else if (sns_irTransmit_state == sns_irTransmit_STATE_TRANSMITTING){
45
    else if (sns_irTransmit_state == sns_irTransmit_STATE_TRANSMITTING)
-
 
46
    {
45
        //polla om den är klar, om klar gå till sns_irTransmit_STATE_START_PAUSE
47
        //polla om den är klar, om klar gå till sns_irTransmit_STATE_START_PAUSE
46
        if (IrTransceiver_Transmit_Poll() != IR_NOT_FINISHED)
48
        if (IrTransceiver_Transmit_Poll() != IR_NOT_FINISHED)
-
 
49
        {
-
 
50
            if (sns_irTransmit_burst_mode)
-
 
51
            {
-
 
52
                sns_irTransmit_state = sns_irTransmit_STATE_STOP;
-
 
53
            }
-
 
54
            else
47
        {
55
            {
48
            sns_irTransmit_state = sns_irTransmit_STATE_START_PAUSE;
56
                sns_irTransmit_state = sns_irTransmit_STATE_START_PAUSE;
49
        }
57
            }
-
 
58
        }
50
    }
59
    }
51
    else if (sns_irTransmit_state == sns_irTransmit_STATE_START_PAUSE)
60
    else if (sns_irTransmit_state == sns_irTransmit_STATE_START_PAUSE)
52
    {
61
    {
53
        if (sns_irTransmit_repeatCount < sns_irTransmit_proto.repeats)
62
        if (sns_irTransmit_repeatCount < sns_irTransmit_proto.repeats)
54
        {
63
        {
55
            sns_irTransmit_repeatCount++;
64
            sns_irTransmit_repeatCount++;
56
        }
65
        }
57
       
66
       
58
        Timer_SetTimeout(sns_irTransmit_REPEAT_TIMER, sns_irTransmit_proto.timeout, TimerTypeOneShot, 0);
67
        Timer_SetTimeout(sns_irTransmit_REPEAT_TIMER, sns_irTransmit_proto.timeout, TimerTypeOneShot, 0);
59
       
68
       
60
        if (sns_irTransmit_proto.framecnt != 255)
69
        if (sns_irTransmit_proto.framecnt != 255)
61
        {
70
        {
62
            sns_irTransmit_proto.framecnt++;
71
            sns_irTransmit_proto.framecnt++;
63
        }
72
        }
64
       
73
       
65
        sns_irTransmit_state = sns_irTransmit_STATE_PAUSING;
74
        sns_irTransmit_state = sns_irTransmit_STATE_PAUSING;
66
    }
75
    }
67
    else if (sns_irTransmit_state == sns_irTransmit_STATE_PAUSING)
76
    else if (sns_irTransmit_state == sns_irTransmit_STATE_PAUSING)
68
    {
77
    {
69
        //när timeout har gått (timebase) så gå till sns_irTransmit_STATE_START_TRANSMIT
78
        //när timeout har gått (timebase) så gå till sns_irTransmit_STATE_START_TRANSMIT
70
        if (Timer_Expired(sns_irTransmit_REPEAT_TIMER))
79
        if (Timer_Expired(sns_irTransmit_REPEAT_TIMER))
71
        {
80
        {
72
            sns_irTransmit_state = sns_irTransmit_STATE_START_TRANSMIT;
81
            sns_irTransmit_state = sns_irTransmit_STATE_START_TRANSMIT;
73
        }
82
        }
74
       
83
       
75
        if (sns_irTransmit_stop == 1 && sns_irTransmit_repeatCount >= sns_irTransmit_proto.repeats)
84
        if (sns_irTransmit_stop == 1 && sns_irTransmit_repeatCount >= sns_irTransmit_proto.repeats)
76
        {
85
        {
77
            sns_irTransmit_state = sns_irTransmit_STATE_STOP;
86
            sns_irTransmit_state = sns_irTransmit_STATE_STOP;
78
        }
87
        }
79
    }
88
    }
80
    else if (sns_irTransmit_state == sns_irTransmit_STATE_STOP)
89
    else if (sns_irTransmit_state == sns_irTransmit_STATE_STOP)
81
    {
90
    {
-
 
91
        sns_irTransmit_burst_mode = 0;
82
        sns_irTransmit_stop = 0;
92
        sns_irTransmit_stop = 0;
83
        sns_irTransmit_proto.timeout = 0;
93
        sns_irTransmit_proto.timeout = 0;
84
        sns_irTransmit_proto.framecnt = 0;
94
        sns_irTransmit_proto.framecnt = 0;
85
        sns_irTransmit_repeatCount = 0;
95
        sns_irTransmit_repeatCount = 0;
86
        sns_irTransmit_state = sns_irTransmit_STATE_IDLE;
96
        sns_irTransmit_state = sns_irTransmit_STATE_IDLE;
87
    }
97
    }
88
}
98
}
89
 
99
 
90
void sns_irTransmit_HandleMessage(StdCan_Msg_t *rxMsg)
100
void sns_irTransmit_HandleMessage(StdCan_Msg_t *rxMsg)
91
{
101
{
92
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_SNS &&
102
    if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_SNS &&
93
        StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
103
        StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
Line 96... Line 106...
96
    {
106
    {
97
        switch (rxMsg->Header.Command)
107
        switch (rxMsg->Header.Command)
98
        {
108
        {
99
        case CAN_MODULE_CMD_PHYSICAL_IR:
109
        case CAN_MODULE_CMD_PHYSICAL_IR:
100
       
110
       
-
 
111
        if (    sns_irTransmit_state == sns_irTransmit_STATE_IDLE &&
101
        if (sns_irTransmit_state == sns_irTransmit_STATE_IDLE && rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_PRESSED)
112
            (rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_PRESSED ||
-
 
113
            rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_BURST))
102
        {
114
        {
-
 
115
            sns_irTransmit_burst_mode = (uint8_t)(rxMsg->Data[0] == CAN_MODULE_ENUM_PHYSICAL_IR_STATUS_BURST);
-
 
116
           
103
            sns_irTransmit_proto.protocol = rxMsg->Data[1];
117
            sns_irTransmit_proto.protocol = rxMsg->Data[1];
104
 
118
 
105
            sns_irTransmit_proto.data = rxMsg->Data[2];
119
            sns_irTransmit_proto.data = rxMsg->Data[2];
106
            sns_irTransmit_proto.data = sns_irTransmit_proto.data<<8;
120
            sns_irTransmit_proto.data = sns_irTransmit_proto.data<<8;
107
            sns_irTransmit_proto.data |= rxMsg->Data[3];
121
            sns_irTransmit_proto.data |= rxMsg->Data[3];