/* 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); }
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 */ } }