Subversion Repositories HomeAutomation

Rev

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