Rev 868 | Rev 883 | Go to most recent revision | Details | Compare with Previous | 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 | } |