Subversion Repositories HomeAutomation

Rev

Go to most recent revision | Details | Last modification | View Log | SVN | RSS feed

Rev Author Line No. Line
868 migan 1
 
2
#include "sns_SimpleDTMF.h"
3
 
4
uint8_t rxbuffer[MT_MAX_TONES];
5
uint8_t state = SNS_SIMPLEDTMF_STATE_IDLE;
6
uint8_t rxlen = 0;
7
 
8
void sns_SimpleDTMF_Init(void)
9
{
10
    DTMFin_Init();
11
}
12
 
13
void sns_SimpleDTMF_Process(void)
14
{
15
    uint8_t retval;
16
    StdCan_Msg_t txMsg;
17
 
18
    switch (state)
19
    {
20
    case SNS_SIMPLEDTMF_STATE_IDLE:
21
    DTMFin_Start(rxbuffer);
22
    state = SNS_SIMPLEDTMF_STATE_START_WAIT;
23
    break;
24
 
25
    case SNS_SIMPLEDTMF_STATE_START_WAIT:
26
    state = SNS_SIMPLEDTMF_STATE_WAIT;
27
    break;
28
 
29
    case SNS_SIMPLEDTMF_STATE_WAIT:
30
    retval = DTMFin_Poll(&rxlen);
31
 
32
    if (retval == MT8870_Ret_Finished)
33
        state = SNS_SIMPLEDTMF_STATE_STOP;
34
    else if (retval == MT8870_Ret_Overflow)
35
        state = SNS_SIMPLEDTMF_STATE_IDLE;
36
 
37
    break;
38
 
39
    case SNS_SIMPLEDTMF_STATE_STOP:
40
    //if ((rxbuffer[0] == 0xa || rxbuffer[0] == 0xb) && rxbuffer[rxlen-1] == 0xc) {
41
 
42
        StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_SNS);
43
        StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
44
        txMsg.Header.ModuleType = CAN_TYPE_MODULE_sns_SimpleDTMF;
45
        txMsg.Header.ModuleId = sns_SimpleDTMF_ID;
46
        txMsg.Header.Command = CAN_CMD_MODULE_PHYS_PHONENUMBER;
47
 
48
        for (uint8_t i = 0; i < 16; i=i+2) {
49
            txMsg.Data[i>>1] = rxbuffer[i]<<4;
50
 
51
            if (i+1 < rxlen)
52
                txMsg.Data[i>>1] |= rxbuffer[i+1];
53
        }
54
        txMsg.Length = (rxlen>>1)+(rxlen&1);
55
 
56
        StdCan_Put(&txMsg);
57
 
58
    //}
59
    state = SNS_SIMPLEDTMF_STATE_IDLE;
60
    break;
61
    }
62
}
63
 
64
void sns_SimpleDTMF_HandleMessage(StdCan_Msg_t *rxMsg)
65
{
66
    /*if (  StdCan_Ret_class(rxMsg->Header) == CAN_CLASS_MODULE_SNS && ///TODO: Change this to the actual class type
67
        StdCan_Ret_direction(rxMsg->Header) == DIR_TO_OWNER &&
68
        rxMsg->Header.ModuleType == CAN_TYPE_MODULE_sns_SimpleDTMF && ///TODO: Change this to the actual module type
69
        rxMsg->Header.ModuleId == sns_SimpleDTMF_ID)
70
    {
71
        switch (rxMsg->Header.Command)
72
        {
73
        case CAN_CMD_MODULE_DUMMY:
74
        ///TODO: Do something dummy
75
        break;
76
        }
77
    }*/
78
}
79
 
80
void sns_SimpleDTMF_List(uint8_t ModuleSequenceNumber)
81
{
82
    StdCan_Msg_t txMsg;
83
 
84
    StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_SNS);
85
    StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
86
    txMsg.Header.ModuleType = CAN_TYPE_MODULE_sns_SimpleDTMF;
87
    txMsg.Header.ModuleId = sns_SimpleDTMF_ID;
88
    txMsg.Header.Command = CAN_CMD_MODULE_NMT_LIST;
89
    txMsg.Length = 6;
90
 
91
    txMsg.Data[0] = NODE_HW_ID_BYTE0;
92
    txMsg.Data[1] = NODE_HW_ID_BYTE1;
93
    txMsg.Data[2] = NODE_HW_ID_BYTE2;
94
    txMsg.Data[3] = NODE_HW_ID_BYTE3;
95
 
96
    txMsg.Data[4] = NUMBER_OF_MODULES;
97
    txMsg.Data[5] = ModuleSequenceNumber;
98
 
99
    StdCan_Put(&txMsg);
100
}