Subversion Repositories HomeAutomation

Rev

Rev 1155 | 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.     // Contrast (brightness on an oled display)
  11.     TCCR0A |= (1<<COM0B1)|(1<<WGM01)|(1<<WGM00);
  12.     TCCR0B |= (1<<CS00);
  13.     OCR0B = act_hd44780_INITIAL_CONTRAST;
  14.     DDRD |= (1<<PD5);
  15.  
  16.  
  17.     // Backlight
  18.     TCCR0A |= (1<<COM0A1)|(1<<WGM01)|(1<<WGM00);
  19.     TCCR0B |= (1<<CS00);
  20.     OCR0A = act_hd44780_INITIAL_BACKLIGHT;
  21.     DDRD |= (1<<PD6);
  22.  
  23.  
  24.     lcd_init(LCD_DISP_ON);
  25.     lcd_clrscr();
  26.     lcd_puts("HomeAutomation\n");
  27.     lcd_puts("HD44780-module\n");
  28. }
  29.  
  30. void act_hd44780_Process(void)
  31. {
  32. }
  33.  
  34. void act_hd44780_HandleMessage(StdCan_Msg_t *rxMsg)
  35. {
  36.     StdCan_Msg_t txMsg;
  37.     uint8_t n = 0;
  38.  
  39.     if (    StdCan_Ret_class(rxMsg->Header) == CAN_MODULE_CLASS_ACT &&
  40.         StdCan_Ret_direction(rxMsg->Header) == DIRECTIONFLAG_TO_OWNER &&
  41.         rxMsg->Header.ModuleType == CAN_MODULE_TYPE_ACT_HD44789 &&
  42.         rxMsg->Header.ModuleId == act_hd44780_ID)
  43.     {
  44.         switch (rxMsg->Header.Command)
  45.         {
  46.         case CAN_MODULE_CMD_HD44789_LCD_CLEAR:
  47.         lcd_clrscr();
  48.         break;
  49.  
  50.         case CAN_MODULE_CMD_HD44789_LCD_CURSOR:
  51.         lcd_gotoxy(rxMsg->Data[0], rxMsg->Data[1]);
  52.         break;
  53.  
  54.         case CAN_MODULE_CMD_HD44789_LCD_TEXTAT:
  55.         lcd_gotoxy(rxMsg->Data[0], rxMsg->Data[1]);
  56.         for (n = 2; n < rxMsg->Length; n++)
  57.         {
  58.             lcd_putc((char)rxMsg->Data[n]);
  59.         }
  60.         break;
  61. /*
  62.         case CAN_MODULE_CMD_HD44789_LCD_CLEARROW:
  63.         lcd_gotoxy(0, rxMsg->Data[0]);
  64.         for (n = 0; n < act_hd44780_WIDTH; n++)
  65.         {
  66.             lcd_putc(' ');
  67.         }
  68.         break;
  69. */
  70.         case CAN_MODULE_CMD_HD44789_LCD_TEXT:
  71.         for (n = 0; n < rxMsg->Length; n++)
  72.         {
  73.             lcd_putc((char)rxMsg->Data[n]);
  74.         }
  75.         break;
  76.  
  77.         case CAN_MODULE_CMD_HD44789_LCD_SIZE:
  78.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  79.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  80.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  81.         txMsg.Header.ModuleId = act_hd44780_ID;
  82.         txMsg.Header.Command = CAN_MODULE_CMD_HD44789_LCD_SIZE;
  83.         txMsg.Length = 2;
  84.  
  85.         txMsg.Data[0] = act_hd44780_WIDTH;
  86.         txMsg.Data[1] = act_hd44780_HEIGHT;
  87.  
  88.         while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  89.         break;
  90.  
  91.         case CAN_MODULE_CMD_HD44789_LCD_BACKLIGHT:
  92.         if (rxMsg->Length > 0) {
  93. #if (act_hd44780_TYPE==0)
  94.             OCR0A = rxMsg->Data[0];
  95. #else
  96.             OCR0B = rxMsg->Data[0];
  97. #endif
  98.         }
  99.  
  100.         StdCan_Msg_t txMsg;
  101.  
  102.         StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  103.         StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  104.         txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  105.         txMsg.Header.ModuleId = act_hd44780_ID;
  106.         txMsg.Header.Command = CAN_MODULE_CMD_HD44789_LCD_BACKLIGHT;
  107.         txMsg.Length = 1;
  108.  
  109. #if (act_hd44780_TYPE==0)
  110.             txMsg.Data[0] = OCR0A;
  111. #else
  112.             txMsg.Data[0] = OCR0B;
  113. #endif
  114.  
  115.         while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  116.         break;
  117.         }
  118.     }
  119. }
  120.  
  121. void act_hd44780_List(uint8_t ModuleSequenceNumber)
  122. {
  123.     StdCan_Msg_t txMsg;
  124.  
  125.     StdCan_Set_class(txMsg.Header, CAN_MODULE_CLASS_ACT);
  126.     StdCan_Set_direction(txMsg.Header, DIRECTIONFLAG_FROM_OWNER);
  127.     txMsg.Header.ModuleType = CAN_MODULE_TYPE_ACT_HD44789;
  128.     txMsg.Header.ModuleId = act_hd44780_ID;
  129.     txMsg.Header.Command = CAN_MODULE_CMD_GLOBAL_LIST;
  130.     txMsg.Length = 6;
  131.  
  132.     txMsg.Data[0] = NODE_HW_ID_BYTE0;
  133.     txMsg.Data[1] = NODE_HW_ID_BYTE1;
  134.     txMsg.Data[2] = NODE_HW_ID_BYTE2;
  135.     txMsg.Data[3] = NODE_HW_ID_BYTE3;
  136.  
  137.     txMsg.Data[4] = NUMBER_OF_MODULES;
  138.     txMsg.Data[5] = ModuleSequenceNumber;
  139.  
  140.     while (StdCan_Put(&txMsg) != StdCan_Ret_OK);
  141. }
  142.