Subversion Repositories HomeAutomation

Rev

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

  1.  
  2. #include "act_hd44780.h"
  3.  
  4. uint8_t Command = 0;
  5.  
  6. void act_hd44780_Init(void)
  7. {
  8.     ///FIXME: What is this, this needs to be more clear by far....
  9.  
  10.     // Backlight
  11.     TCCR1A |= (1<<COM1A1)|(1<<WGM11);
  12.     TCCR1B |= (1<<WGM13)|(1<<WGM12)|(1<<CS10);
  13.     ICR1 = 0xFF; // Make it 8 bits
  14.     OCR1A = act_hd44780_INITIAL_BACKLIGHT;
  15.     DDRB |= (1<<DDB1);
  16.  
  17.  
  18.     lcd_init(LCD_DISP_ON);
  19.     lcd_clrscr();
  20.     lcd_puts("HomeAutomation\n");
  21.     lcd_puts("HD44780-module\n");
  22. }
  23.  
  24. void act_hd44780_Process(void)
  25. {
  26. }
  27.  
  28. void act_hd44780_HandleMessage(StdCan_Msg_t *rxMsg)
  29. {
  30.     StdCan_Msg_t txMsg;
  31.     uint8_t n = 0;
  32.  
  33.     if (    StdCan_Ret_class(rxMsg->Header) == CAN_CLASS_MODULE_ACT &&
  34.         StdCan_Ret_direction(rxMsg->Header) == DIR_TO_OWNER &&
  35.         rxMsg->Header.ModuleType == CAN_TYPE_MODULE_act_hd44789 &&
  36.         rxMsg->Header.ModuleId == act_hd44780_ID)
  37.     {
  38.         switch (rxMsg->Header.Command)
  39.         {
  40.         case CAN_CMD_MODULE_LCD_CLEAR:
  41.         lcd_clrscr();
  42.         break;
  43.  
  44.         case CAN_CMD_MODULE_LCD_CURSOR:
  45.         lcd_gotoxy(rxMsg->Data[0], rxMsg->Data[1]);
  46.         break;
  47.  
  48.         case CAN_CMD_MODULE_LCD_PRINT:
  49.         for(n = 0; n < rxMsg->Length; n++)
  50.         {
  51.             lcd_putc((char)rxMsg->Data[n]);
  52.         }
  53.         break;
  54.  
  55.         case CAN_CMD_MODULE_LCD_SIZE:
  56.         StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_ACT);
  57.         StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  58.         txMsg.Header.ModuleType = CAN_TYPE_MODULE_act_hd44789;
  59.         txMsg.Header.ModuleId = act_hd44780_ID;
  60.         txMsg.Header.Command = CAN_CMD_MODULE_LCD_SIZE;
  61.         txMsg.Length = 2;
  62.    
  63.         txMsg.Data[0] = act_hd44780_WIDTH;
  64.         txMsg.Data[1] = act_hd44780_HEIGHT;
  65.        
  66.         StdCan_Put(&txMsg);
  67.         break;
  68.  
  69.         case CAN_CMD_MODULE_LCD_BACKLIGHT:
  70.         if (rxMsg->Length > 0)
  71.             OCR1AL = rxMsg->Data[0];
  72.  
  73.         StdCan_Msg_t txMsg;
  74.    
  75.         StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_ACT);
  76.         StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  77.         txMsg.Header.ModuleType = CAN_TYPE_MODULE_act_hd44789;
  78.         txMsg.Header.ModuleId = act_hd44780_ID;
  79.         txMsg.Header.Command = CAN_CMD_MODULE_LCD_BACKLIGHT;
  80.         txMsg.Length = 1;
  81.    
  82.         txMsg.Data[0] = OCR1AL;
  83.        
  84.         StdCan_Put(&txMsg);
  85.         break;
  86.         }
  87.     }
  88. }
  89.  
  90. void act_hd44780_List(uint8_t ModuleSequenceNumber)
  91. {
  92.     StdCan_Msg_t txMsg;
  93.    
  94.     StdCan_Set_class(txMsg.Header, CAN_CLASS_MODULE_ACT);
  95.     StdCan_Set_direction(txMsg.Header, DIR_FROM_OWNER);
  96.     txMsg.Header.ModuleType = CAN_TYPE_MODULE_act_hd44789;
  97.     txMsg.Header.ModuleId = act_hd44780_ID;
  98.     txMsg.Header.Command = CAN_CMD_MODULE_NMT_LIST;
  99.     txMsg.Length = 6;
  100.  
  101.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  102.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  103.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  104.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  105.    
  106.     txMsg.Data[4] = NUMBER_OF_MODULES;
  107.     txMsg.Data[5] = ModuleSequenceNumber;
  108.    
  109.     StdCan_Put(&txMsg);
  110. }
  111.