Subversion Repositories HomeAutomation

Rev

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

  1.  
  2. #include "sns_heatPower.h"
  3.  
  4. const char sns_heatPower_request[sns_heatPower_REQ_STRING_LEN] = sns_heatPower_REQ_STRING;
  5.  
  6. typedef enum {
  7.     PARITY_NONE = 0,
  8.     PARITY_EVEN = 1,
  9.     PARITY_ODD = 2,
  10. } parityMode_t;
  11.  
  12. void sns_heatPower_Init(void)
  13. {
  14.     uart_setDatabits(sns_heatPower_CNF_DATABITS);
  15.     uart_setStopbits(sns_heatPower_CNF_STOPBITS);
  16.     uart_setParity(sns_heatPower_CNF_PARITY!=PARITY_NONE, sns_heatPower_CNF_PARITY==PARITY_ODD);
  17.     uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(sns_heatPower_BAUD_RX, F_CPU));
  18.  
  19.     Timer_SetTimeout(sns_heatPower_REQ_TIMER, sns_heatPower_REQ_INTERVAL_S*1000 , TimerTypeFreeRunning, 0);
  20. }
  21.  
  22. void sns_heatPower_Process(void)
  23. {
  24.     /* At timer timeout send a new request */
  25.     if (Timer_Expired(sns_heatPower_REQ_TIMER))
  26.     {
  27.         /* Set baudrate to transmit baudrate */
  28.         uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(sns_heatPower_BAUD_TX, F_CPU));
  29.        
  30.         /* Send request string */
  31.         uart_puts(sns_heatPower_request);
  32.        
  33.         /* TX buffer must be empty before we change buadrate */
  34.         while(!uart_txbufempty()) {}
  35.         /* Set baudrate to receive baudrate */
  36.         uart_init(UART_BAUD_SELECT_DOUBLE_SPEED(sns_heatPower_BAUD_RX, F_CPU));
  37.     }
  38.    
  39.     unsigned char status;
  40.     do
  41.     {
  42.         /* ask uart driver for more data */
  43.         unsigned int data = uart_getc();
  44.         /* character is contained in LSB */
  45.         unsigned char c = (unsigned char)(data & 0x00FF);
  46.  
  47.         /* status is contained in MSB */
  48.         status = (unsigned char)((data & 0xFF00) >> 8);
  49.        
  50.         /* status == 0 means we just received a new char */
  51.         if (status == 0)
  52.         {
  53.             //printf("RX \n"); ADD c !
  54.             // TODO c contains data, use it! filter with config.inc parameters and send can package
  55.            
  56.         }
  57.     /* keep going until uart RXBUF is empty */
  58.     } while (status == 0);
  59. }
  60.  
  61. void sns_heatPower_HandleMessage(StdCan_Msg_t *rxMsg)
  62. {
  63.     if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_SNS &&
  64.         StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_FROM_OWNER &&
  65.         rxMsg->Header.ModuleType == CAN_MODULE_TYPE_SNS_HEATPOWER &&
  66.         rxMsg->Header.ModuleId == sns_heatPower_ID)
  67.     {
  68.         switch (rxMsg->Header.Command)
  69.         {
  70.         //case CAN_CMD_MODULE_DUMMY:
  71.         ///TODO: Do something dummy
  72.         break;
  73.         }
  74.     }
  75. }
  76.  
  77. void sns_heatPower_List(uint8_t ModuleSequenceNumber)
  78. {
  79.     StdCan_Msg_t txMsg;
  80.  
  81.     StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_SNS);
  82.     StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  83.     txMsg.Header.ModuleType = CAN_MODULE_TYPE_SNS_HEATPOWER;
  84.     txMsg.Header.ModuleId = sns_heatPower_ID;
  85.     txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST;
  86.     txMsg.Length = 6;
  87.  
  88.     uint32_t HwId=BIOS_GetHwId();
  89.     txMsg.Data[0] = HwId&0xff;
  90.     txMsg.Data[1] = (HwId>>8)&0xff;
  91.     txMsg.Data[2] = (HwId>>16)&0xff;
  92.     txMsg.Data[3] = (HwId>>24)&0xff;
  93.  
  94.     txMsg.Data[4] = NUMBER_OF_MODULES;
  95.     txMsg.Data[5] = ModuleSequenceNumber;
  96.  
  97.     while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  98. }
  99.