Subversion Repositories HomeAutomation

Rev

Rev 1145 | Rev 1147 | Go to most recent revision | 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_MODULE_CLASS_SNS);
  31.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  32.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_FOST02;
  33.         txMsg.Header.ModuleId = sns_FOST02_ID;
  34.         txMsg.Header.Command = CAN_MODULE_CMD_PHYSICAL_TEMPERATURE_CELSIUS;
  35.         txMsg.Length = 3;
  36.         txMsg.Data[0] = FOST02_ID;
  37.    
  38.         getFOST02DataByte(&byte1, &byte2);
  39.         TmpV = (uint16_t) (byte1<<8) + byte2;
  40.         TmpV = TmpV << 4;
  41.         TmpV = TmpV/25;
  42.         TmpV = TmpV << 2;
  43.         TmpV = TmpV-(40*64);
  44.         txMsg.Data[2]= (uint8_t) (TmpV & 0xFF);
  45.         txMsg.Data[1]= (uint8_t) ((TmpV >> 8) & 0xFF);
  46.         StdCan_Put(&txMsg);
  47.        
  48.         FlagGetTemperature = 0;
  49.     }
  50.    
  51. }
  52.  
  53. void GetHumidity(void)
  54. {
  55.     uint16_t TmpV;
  56.     if (getFOST02PinStatus() == 0) {
  57.         StdCan_Msg_t txMsg;
  58.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS);
  59.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  60.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_FOST02;
  61.         txMsg.Header.ModuleId = sns_FOST02_ID;
  62.         txMsg.Header.Command = CAN_MODULE_CMD_PHYSICAL_HUMIDITY_PERCENT;
  63.         txMsg.Length = 3;
  64.         txMsg.Data[0] = FOST02_ID;
  65.    
  66.         getFOST02DataByte(&byte1, &byte2);
  67.         TmpV = HumidityTable[byte2];
  68.         txMsg.Data[2]= (uint8_t) ((TmpV>>2) & 0x00FF);
  69.         txMsg.Data[1]= (uint8_t) ((TmpV >> 10) & 0x00FF);
  70.  
  71.         StdCan_Put(&txMsg);
  72.  
  73.         FlagGetHumidity = 0;
  74.     }
  75. }
  76.  
  77. void InitTemp_callback(uint8_t timer)
  78. {
  79.     Timer_SetTimeout(sns_FOST02_TEMP_TIMER, sns_FOST02_TEMP_SEND_PERIOD , TimerTypeFreeRunning, &GetTemperature_callback);
  80. }
  81.  
  82. void sns_FOST02_Init(void)
  83. {
  84.     FlagGetTemperature = 0;
  85.     FlagGetHumidity = 0;
  86.     FOST02Init();
  87.  
  88.     Timer_SetTimeout(sns_FOST02_HYDRO_TIMER, sns_FOST02_HYDRO_SEND_PERIOD , TimerTypeFreeRunning, &GetHumidity_callback);
  89.     // 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
  90.     // both temp and humi has the same send period time.
  91.     Timer_SetTimeout(sns_FOST02_TEMP_TIMER, sns_FOST02_HYDRO_SEND_PERIOD/2 , TimerTypeFreeRunning, &InitTemp_callback);
  92. }
  93.  
  94. void sns_FOST02_Process(void)
  95. {
  96.  
  97.     if (FlagGetHumidity)
  98.     {
  99.         GetHumidity();
  100.     }
  101.  
  102.     if (FlagGetTemperature)
  103.     {
  104.         GetTemperature();
  105.     }
  106. }
  107.  
  108. void sns_FOST02_HandleMessage(StdCan_Msg_t *rxMsg)
  109. {
  110. }
  111.  
  112. void sns_FOST02_List(uint8_t ModuleSequenceNumber)
  113. {
  114.     StdCan_Msg_t txMsg;
  115.    
  116.     StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS);
  117.     StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  118.     txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_FOST02;
  119.     txMsg.Header.ModuleId = sns_FOST02_ID;
  120.     txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST;
  121.     txMsg.Length = 6;
  122.  
  123.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  124.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  125.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  126.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  127.    
  128.     txMsg.Data[4] = NUMBER_OF_MODULES;
  129.     txMsg.Data[5] = ModuleSequenceNumber;
  130.    
  131.     while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  132. }
  133.