Subversion Repositories HomeAutomation

Rev

Rev 863 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1.  
  2. #include "sns_FOST02.h"
  3.  
  4.  
  5.  
  6. void GetTemperature(void);
  7. void GetTemperature_callback(uint8_t timer);
  8. void GetHumidity(void);
  9. void GetHumidity_callback(uint8_t timer);
  10.  
  11. uint8_t FlagGetTemperature = 0, FlagGetHumidity = 0, byte1 = 0, byte2 = 0;
  12.  
  13. void GetTemperature_callback(uint8_t timer)
  14. {
  15.     FlagGetTemperature = 1;
  16.     sendCommand(0x03);
  17. }
  18.  
  19. void GetHumidity_callback(uint8_t timer)
  20. {
  21.     FlagGetHumidity = 1;
  22.     sendCommand(0x05);
  23. }
  24.  
  25. void GetTemperature(void)
  26. {
  27.     uint16_t TmpV;
  28.     if (getFOST02PinStatus() == 0) {
  29.         StdCan_Msg_t txMsg;
  30.         StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_SNS);
  31.         StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  32.         txMsg.Header.ModuleType = CAN_TYPE_MODULE_sns_FOST02;
  33.         txMsg.Header.ModuleId = sns_FOST02_ID;
  34.         txMsg.Header.Command = CAN_CMD_MODULE_PHYS_TEMPERATURE_CELSIUS;
  35.         txMsg.Length = 3;
  36.         txMsg.Data[0] = FOST02_ID;
  37.    
  38.        
  39.         getFOST02DataByte(&byte1, &byte2);
  40.         TmpV = (uint16_t) (byte1<<8) + byte2;
  41.         TmpV = TmpV << 4;
  42.         TmpV = TmpV/25;
  43.         TmpV= TmpV <<4;
  44.         TmpV = TmpV-0x2800;
  45.         txMsg.Data[2]= (uint8_t) (TmpV & 0x00FF);
  46.         txMsg.Data[1]= (uint8_t) ((TmpV >> 8) & 0x00FF);
  47.         StdCan_Put(&txMsg);
  48.        
  49.         FlagGetTemperature = 0;
  50.     }
  51.    
  52. }
  53.  
  54. void GetHumidity(void)
  55. {
  56.     uint16_t TmpV;
  57.     if (getFOST02PinStatus() == 0) {
  58.         StdCan_Msg_t txMsg;
  59.         StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_SNS);
  60.         StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  61.         txMsg.Header.ModuleType = CAN_TYPE_MODULE_sns_FOST02;
  62.         txMsg.Header.ModuleId = sns_FOST02_ID;
  63.         txMsg.Header.Command = CAN_CMD_MODULE_PHYS_HUMIDITY_PERCENT;
  64.         txMsg.Length = 3;
  65.         txMsg.Data[0] = FOST02_ID;
  66.    
  67.         getFOST02DataByte(&byte1, &byte2);
  68.         TmpV = HumidityTable[byte2];
  69.         txMsg.Data[2]= (uint8_t) ((TmpV>>2) & 0x00FF);
  70.         txMsg.Data[1]= (uint8_t) ((TmpV >> 10) & 0x00FF);
  71.  
  72.         StdCan_Put(&txMsg);
  73.  
  74.         FlagGetHumidity = 0;
  75.     }
  76. }
  77.  
  78. void InitTemp_callback(uint8_t timer)
  79. {
  80.     Timer_SetTimeout(sns_FOST02_TEMP_TIMER, sns_FOST02_TEMP_SEND_PERIOD , TimerTypeFreeRunning, &GetTemperature_callback);
  81. }
  82.  
  83. void sns_FOST02_Init(void)
  84. {
  85.     FlagGetTemperature = 0;
  86.     FlagGetHumidity = 0;
  87.     FOST02Init();
  88.  
  89.     Timer_SetTimeout(sns_FOST02_HYDRO_TIMER, sns_FOST02_HYDRO_SEND_PERIOD , TimerTypeFreeRunning, &GetHumidity_callback);
  90.     // The reson for using sns_FOST02_HYDRO_SEND_PERIOD/2 as time out for this is to spread out the communication with the sensor if
  91.     // both temp and humi has the same send period time.
  92.     Timer_SetTimeout(sns_FOST02_TEMP_TIMER, sns_FOST02_HYDRO_SEND_PERIOD/2 , TimerTypeFreeRunning, &InitTemp_callback);
  93. }
  94.  
  95. void sns_FOST02_Process(void)
  96. {
  97.  
  98.     if (FlagGetHumidity)
  99.     {
  100.         GetHumidity();
  101.     }
  102.  
  103.     if (FlagGetTemperature)
  104.     {
  105.         GetTemperature();
  106.     }
  107. }
  108.  
  109. void sns_FOST02_HandleMessage(StdCan_Msg_t *rxMsg)
  110. {
  111. }
  112.  
  113. void sns_FOST02_List(uint8_t ModuleSequenceNumber)
  114. {
  115.     StdCan_Msg_t txMsg;
  116.    
  117.     StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_SNS);
  118.     StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  119.     txMsg.Header.ModuleType = CAN_TYPE_MODULE_sns_FOST02;
  120.     txMsg.Header.ModuleId = sns_FOST02_ID;
  121.     txMsg.Header.Command = CAN_CMD_MODULE_NMT_LIST;
  122.     txMsg.Length = 6;
  123.  
  124.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  125.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  126.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  127.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  128.    
  129.     txMsg.Data[4] = NUMBER_OF_MODULES;
  130.     txMsg.Data[5] = ModuleSequenceNumber;
  131.    
  132.     StdCan_Put(&txMsg);
  133. }
  134.