/*
class U8X8_SSD1306_128X64_4W_SW_SPI : public U8X8 {
  public: U8X8_SSD1306_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() {
    u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino);
    u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset);
  }
}
*/
void do_u8x8_header(int controller_idx, int display_idx, int interface_idx)
{
  FILE *fp = u8x8_cpp_header_fp;
  fprintf(fp, "class U8X8_");
  fprintf(fp, "%s_", struppercase(controller_list[controller_idx].name));
  fprintf(fp, "%s", struppercase(controller_list[controller_idx].display_list[display_idx].name));
  if ( interface_list[interface_idx].interface_name[0] != '\0' )
    fprintf(fp, "_%s", struppercase(interface_list[interface_idx].interface_name));
  fprintf(fp, " : public U8X8 {\n");
  fprintf(fp, "  public: ");
  fprintf(fp, "U8X8_");
  fprintf(fp, "%s_", struppercase(controller_list[controller_idx].name));
  fprintf(fp, "%s", struppercase(controller_list[controller_idx].display_list[display_idx].name));
  if ( interface_list[interface_idx].interface_name[0] != '\0' )
    fprintf(fp, "_%s", struppercase(interface_list[interface_idx].interface_name));
  fprintf(fp, "(%s) : U8X8() {\n", interface_list[interface_idx].pins_with_type);
  fprintf(fp, "    ");
  fprintf(fp, "u8x8_Setup(getU8x8(), u8x8_d_");
  fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].name));
  fprintf(fp, "%s, ", strlowercase(controller_list[controller_idx].display_list[display_idx].name));
  fprintf(fp, "%s, ", strlowercase(controller_list[controller_idx].cad));
  fprintf(fp, "%s, ", interface_list[interface_idx].arduino_com_procedure);  
  fprintf(fp, "%s);\n", interface_list[interface_idx].arduino_gpio_procedure);  
  fprintf(fp, "    ");
  fprintf(fp, "%s(getU8x8(), ", interface_list[interface_idx].setpin_function);  
  fprintf(fp, "%s);\n", interface_list[interface_idx].pins_plain);
  fprintf(fp, "  }\n");
  fprintf(fp, "};\n");
  
}
void do_md_display_interface(int controller_idx, int display_idx, int interface_idx)
{
  FILE *fp = md_fp;
  
  if ( !is_u8g2 ) 
  {
    if ( strcmp(controller_list[controller_idx].ll_hvline, U8X8_HVLINE ) == 0 )
    {
	    if ( is_arduino_cpp )
	    {
	      fprintf(fp, "| U8X8_");
	      fprintf(fp, "%s_", struppercase(controller_list[controller_idx].name));
	      fprintf(fp, "%s", struppercase(controller_list[controller_idx].display_list[display_idx].name));
	      if ( interface_list[interface_idx].interface_name[0] != '\0' )
		fprintf(fp, "_%s", struppercase(interface_list[interface_idx].interface_name));
	      fprintf(fp, "(%s) |\n", interface_list[interface_idx].pins_md_plain);
	    }
	    else
	    {
	      
	      fprintf(fp, "| u8x8_Setup(u8x8_d_");
	      fprintf(fp, "%s_", strlowercase(controller_list[controller_idx].name));
	      fprintf(fp, "%s, ", strlowercase(controller_list[controller_idx].display_list[display_idx].name));
	      fprintf(fp, "%s, ", strlowercase(controller_list[controller_idx].cad));
	      fprintf(fp, "%s, ", strlowercase(interface_list[interface_idx].generic_com_procedure));
	      fprintf(fp, "uC specific) |\n");
	    }  
    }
  }
  do_md_display_interface_buffer(controller_idx, display_idx, interface_idx, "1", controller_list[controller_idx].tile_width*8, 1);
  do_md_display_interface_buffer(controller_idx, display_idx, interface_idx, "2", controller_list[controller_idx].tile_width*8*2, 2);
  do_md_display_interface_buffer(controller_idx, display_idx, interface_idx, "f", controller_list[controller_idx].tile_width*8*controller_list[controller_idx].tile_height, controller_list[controller_idx].tile_height);
  
}
Example #3
0
static void handle_content_type(response_t *resp, const char *filepath) {
    char  *content_type = NULL, ext[20];
    int   dot_pos = -1;
    int   i;
    size_t  len = strlen(filepath);
    ENTRY   item, *ret;

    for (i = len - 1; i > 0; i--) {
        if (filepath[i] == '.') {
            dot_pos = i;
            break;
        }
    }

    if (dot_pos < 0) {
        // No '.' found in the file name (no extension part)
        return;
    }

    strncpy(ext, filepath + 1 + dot_pos, 20);
    strlowercase(ext, ext, 20);
    debug("File extension: %s", ext);
    
    item.key = ext;
    if (hsearch_r(item, FIND, &ret, &std_mime_type_hash) == 0) {
        return;
    }
    content_type = (char*) ret->data;
    if (content_type != NULL) {
        debug("Content type: %s", content_type);
        response_set_header(resp, "Content-Type", content_type); 
    }
}
const char *get_setup_function_name(int controller_idx, int display_idx, const char *postfix)
{
  static char s[1024];
  strcpy(s, "u8g2_Setup_");
  strcat(s, strlowercase(controller_list[controller_idx].name));
  strcat(s, "_");  
  if ( controller_list[controller_idx].cad_shortname[0] != '\0' )
  {
    strcat(s, strlowercase(controller_list[controller_idx].cad_shortname));
    strcat(s, "_");
  }
  strcat(s, strlowercase(controller_list[controller_idx].display_list[display_idx].name));
  strcat(s, "_");
  strcat(s, postfix);
  return s;
}
void do_controller_buffer_code(int idx, const char *postfix, int buf_len, int rows)
{
  int display_idx;
  char s[1024];
  sprintf(s, "u8g2_m_%s_%d_%s", strlowercase(controller_list[idx].name), controller_list[idx].tile_width, postfix);
  
  if ( str_exists(s) == 0 )
  {
    str_add(s);
    //FILE *fp = stdout;
    fprintf(buf_code_fp, "uint8_t *%s(uint8_t *page_cnt)\n", s);
    fprintf(buf_code_fp, "{\n");
    fprintf(buf_code_fp, "  static uint8_t buf[%d];\n", buf_len);
    fprintf(buf_code_fp, "  *page_cnt = %d;\n", rows);
    fprintf(buf_code_fp, "  return buf;\n");
    fprintf(buf_code_fp, "}\n");
    
    fprintf(buf_header_fp, "uint8_t *%s(uint8_t *page_cnt);\n", s);
  }
  
  display_idx = 0;
  fprintf(setup_code_fp, "/* %s %s */\n", controller_list[idx].name, postfix);
  while( controller_list[idx].display_list[display_idx].name != NULL )
  {
    do_display(idx, display_idx, postfix);
    display_idx++;
  }
  
}
void do_display(int controller_idx, int display_idx, const char *postfix)
{
  
  do_setup_prototype(setup_header_fp, controller_idx, display_idx, postfix);
  fprintf(setup_header_fp, ";\n");
  
  do_setup_prototype(setup_code_fp, controller_idx, display_idx, postfix);
  fprintf(setup_code_fp, "\n");
  fprintf(setup_code_fp, "{\n");
  fprintf(setup_code_fp, "  uint8_t tile_buf_height;\n");
  fprintf(setup_code_fp, "  uint8_t *buf;\n");
  fprintf(setup_code_fp, "  u8g2_SetupDisplay(u8g2, u8x8_d_");
  fprintf(setup_code_fp, "%s_", strlowercase(controller_list[controller_idx].name));
  fprintf(setup_code_fp, "%s, ", strlowercase(controller_list[controller_idx].display_list[display_idx].name));
  fprintf(setup_code_fp, "%s, ", controller_list[controller_idx].cad);
  fprintf(setup_code_fp, "byte_cb, gpio_and_delay_cb);\n");    
  fprintf(setup_code_fp, "  buf = ");
  fprintf(setup_code_fp, "u8g2_m_%s_%d_%s(&tile_buf_height);\n", strlowercase(controller_list[controller_idx].name), controller_list[controller_idx].tile_width, postfix);
  fprintf(setup_code_fp, "  u8g2_SetupBuffer(u8g2, buf, tile_buf_height, %s, rotation);\n", controller_list[controller_idx].ll_hvline);
  fprintf(setup_code_fp, "}\n");
  
  /* generate interfaces for this display */
  if ( controller_list[controller_idx].com & COM_4WSPI )
  {
    do_display_interface(controller_idx, display_idx, postfix, 0);		/* SW SPI */
    do_display_interface(controller_idx, display_idx, postfix, 1);		/* HW SPI */
  }
  if ( controller_list[controller_idx].com & COM_3WSPI )
  {
    do_display_interface(controller_idx, display_idx, postfix, 4);		/* 3wire SW SPI */
    //do_display_interface(controller_idx, display_idx, postfix, 5);		/* 3wire HW SPI (not implemented) */
  }
  if ( controller_list[controller_idx].com & COM_6800 )
  {
    do_display_interface(controller_idx, display_idx, postfix, 2);		/* 6800 mode */    
  }
  if ( controller_list[controller_idx].com & COM_8080 )
  {
    do_display_interface(controller_idx, display_idx, postfix, 3);		/* 8080 mode */    
  }
  if ( controller_list[controller_idx].com & COM_I2C )
  {
    do_display_interface(controller_idx, display_idx, postfix, 6);		/* SW I2C */
    do_display_interface(controller_idx, display_idx, postfix, 7);		/* HW I2C */
    do_display_interface(controller_idx, display_idx, postfix, 10);	/* 2nd HW I2C */
  }
  if ( controller_list[controller_idx].com & COM_ST7920SPI )
  {
    do_display_interface(controller_idx, display_idx, postfix, 8);		/* ST7920 SW SPI */
    do_display_interface(controller_idx, display_idx, postfix, 9);		/* HW SPI (not yet implemented) */
  }
  if ( controller_list[controller_idx].com & COM_UART )
  {
    /* currently there is no Arduino C++ interface, instead the interface is created manually in the example */
  }
  if ( controller_list[controller_idx].com & COM_KS0108 )
  {
    do_display_interface(controller_idx, display_idx, postfix, 11);	/* KS0108 6800 parallel mode */
  }
  
}