Subversion Repositories HomeAutomation

Rev

Rev 1103 | Rev 1105 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. #include "sns_TC1047A.h"
  3.  
  4. uint8_t sns_TC1047A_ReportInterval = (uint8_t)sns_TC1047A_SEND_PERIOD;
  5.  
  6. void sns_TC1047A_Init(void)
  7. {
  8.     ///TODO: Initialize hardware etc here
  9.     ADC_Init();
  10.     Timer_SetTimeout(sns_TC1047A_TIMER, sns_TC1047A_ReportInterval*1000 , TimerTypeFreeRunning, 0);
  11. }
  12.  
  13. void sns_TC1047A_Process(void)
  14. {
  15.     ///TODO: Stuff that needs doing is done here
  16.     if (Timer_Expired(sns_TC1047A_TIMER)) {
  17.         uint16_t temperature = ADC_Get(TC1047AAD);
  18.         uint32_t test = 0;
  19.         /* Use 5 volt as reference */
  20.         temperature = (((temperature * 500)/(16))-50);
  21.         //temperature = temperature * 5;
  22.         //temperature = ((uint16_t)(((uint32_t)temperature * 100) / 1024) - 50);
  23.         StdCan_Msg_t txMsg;
  24.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS);
  25.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  26.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_TC1047A;
  27.         txMsg.Header.ModuleId = sns_TC1047A_ID;
  28.         txMsg.Header.Command = CAN_MODULE_CMD_PHYSICAL_TEMPERATURE_CELSIUS;
  29.         txMsg.Length = 3;
  30.         txMsg.Data[0] = 0;
  31.         txMsg.Data[1] = (temperature>>8)&0xff;
  32.         txMsg.Data[2] = (temperature)&0xff;
  33.  
  34.         StdCan_Put(&txMsg);
  35.     }
  36. }
  37.  
  38. void sns_TC1047A_HandleMessage(StdCan_Msg_t *rxMsg)
  39. {
  40.     if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_SNS &&
  41.         StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
  42.         rxMsg->Header.ModuleType == CAN_MODULE_TYPE_SNS_TC1047A &&
  43.         rxMsg->Header.ModuleId == sns_TC1047A_ID)
  44.     {
  45.         switch (rxMsg->Header.Command)
  46.         {
  47.         case CAN_MODULE_CMD_GLOBAL_REPORT_INTERVAL:
  48.         if (rxMsg->Length > 0)
  49.         {
  50.             sns_TC1047A_ReportInterval = rxMsg->Data[0];
  51.             Timer_SetTimeout(sns_TC1047A_TIMER, sns_TC1047A_ReportInterval*1000 , TimerTypeFreeRunning, 0);
  52.         }
  53.  
  54.         StdCan_Msg_t txMsg;
  55.  
  56.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS);
  57.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  58.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_TC1047A;
  59.         txMsg.Header.ModuleId = sns_TC1047A_ID;
  60.         txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_REPORT_INTERVAL;
  61.         txMsg.Length = 1;
  62.  
  63.         txMsg.Data[0] = sns_TC1047A_ReportInterval;
  64.  
  65.         StdCan_Put(&txMsg);
  66.         break;
  67.         }
  68.     }
  69. }
  70.  
  71. void sns_TC1047A_List(uint8_t ModuleSequenceNumber)
  72. {
  73.     StdCan_Msg_t txMsg;
  74.    
  75.     StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS); ///TODO: Change this to the actual class type
  76.     StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  77.     txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_TC1047A; ///TODO: Change this to the actual module type
  78.     txMsg.Header.ModuleId = sns_TC1047A_ID;
  79.     txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST;
  80.     txMsg.Length = 6;
  81.  
  82.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  83.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  84.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  85.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  86.    
  87.     txMsg.Data[4] = NUMBER_OF_MODULES;
  88.     txMsg.Data[5] = ModuleSequenceNumber;
  89.    
  90.     while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  91. }
  92.