You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
309 lines
7.3 KiB
309 lines
7.3 KiB
/* |
|
OBSOLETE, |
|
replaced by codebuild |
|
*/ |
|
|
|
#include <stdio.h> |
|
#include <string.h> |
|
#include <stdlib.h> |
|
|
|
#define CSVLINELEN (1024*16) |
|
|
|
|
|
char csvline[CSVLINELEN]; |
|
char elements[10][CSVLINELEN]; |
|
|
|
#define DEVICE elements[0] |
|
#define PINSET elements[1] |
|
#define CONSTRUCTOR elements[2] |
|
|
|
|
|
/* |
|
copy file from source_file_name to dest_file_name |
|
*/ |
|
int file_copy(const char *source_file_name, const char *dest_file_name) |
|
{ |
|
int ch; |
|
FILE *source_fp; |
|
FILE *dest_fp; |
|
|
|
source_fp = fopen(source_file_name, "r"); |
|
dest_fp = fopen(dest_file_name, "w"); |
|
|
|
if ( source_fp == NULL || dest_fp == NULL ) |
|
return 0; |
|
|
|
while( ( ch = fgetc(source_fp) ) != EOF ) |
|
fputc(ch, dest_fp); |
|
|
|
fclose(source_fp); |
|
fclose(dest_fp); |
|
|
|
return 1; |
|
} |
|
|
|
|
|
/* |
|
Insert file "insertname" between lines "start_line" and "end_line" of file "filename" |
|
*/ |
|
int insert_into_file(const char *filename, const char *insertname, const char *start_line, const char *end_line) |
|
{ |
|
int ch; |
|
static char line[1024*4]; |
|
const char *tmpname = "tmp.h"; |
|
FILE *source_fp; |
|
FILE *dest_fp; |
|
FILE *insert_fp; |
|
|
|
if ( file_copy(filename, tmpname) == 0 ) |
|
return 0; |
|
|
|
source_fp = fopen(tmpname, "r"); |
|
dest_fp = fopen(filename, "w"); |
|
insert_fp = fopen(insertname, "r"); |
|
|
|
if ( source_fp == NULL || dest_fp == NULL || insert_fp == NULL ) |
|
return 0; |
|
|
|
for(;;) |
|
{ |
|
if ( fgets(line, 1024*4, source_fp) == NULL ) |
|
break; |
|
if ( strncmp(line, start_line, strlen(start_line)) == 0 ) |
|
{ |
|
fputs(line, dest_fp); |
|
|
|
while( ( ch = fgetc(insert_fp) ) != EOF ) |
|
fputc(ch, dest_fp); |
|
|
|
fputs("\n", dest_fp); |
|
|
|
for(;;) |
|
{ |
|
if ( fgets(line, 1024*4, source_fp) == NULL ) |
|
break; |
|
if ( strncmp(line, end_line, strlen(end_line)) == 0 ) |
|
{ |
|
fputs(line, dest_fp); |
|
break; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
fputs(line, dest_fp); |
|
} |
|
} |
|
|
|
fclose(insert_fp); |
|
fclose(source_fp); |
|
fclose(dest_fp); |
|
|
|
unlink(tmpname); |
|
|
|
return 1; |
|
} |
|
|
|
/* |
|
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_4Wire_SW_SPI(&u8x8, u8x8_d_ssd1306_128x64_noname, clock, data, cs, dc, reset); |
|
} |
|
}; |
|
*/ |
|
|
|
char *get_args(const char *ps) |
|
{ |
|
static char s[1024]; |
|
if ( strcmp(ps, "4WSWSPI") == 0 ) |
|
sprintf(s, "clock, data, cs, dc, reset"); |
|
else if ( strcmp(ps, "4WHWSPI") == 0 ) |
|
sprintf(s, "cs, dc, reset"); |
|
else if ( strcmp(ps, "3WSWSPI") == 0 ) |
|
sprintf(s, "clock, data, cs, reset"); |
|
else if ( strcmp(ps, "SSDSWI2C") == 0 ) |
|
sprintf(s, "clock, data, reset"); |
|
else if ( strcmp(ps, "6800") == 0 ) |
|
sprintf(s, "d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset"); |
|
else if ( strcmp(ps, "8080") == 0 ) |
|
sprintf(s, "d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset"); |
|
else |
|
sprintf(s, "... unknown pinset ..."); |
|
return s; |
|
} |
|
|
|
void write_u8x8_md(FILE *fp) |
|
{ |
|
fprintf(fp, "| U8X8_%s(", CONSTRUCTOR); |
|
fprintf(fp, "%s) |\n", get_args(PINSET)); |
|
} |
|
|
|
|
|
void write_class(const char *prefix, FILE *fp) |
|
{ |
|
fprintf(fp, "class %s_%s : public %s {\n", prefix, CONSTRUCTOR, prefix); |
|
fprintf(fp, " public: %s_%s(", prefix, CONSTRUCTOR); |
|
|
|
if ( strcmp(PINSET, "4WSWSPI") == 0 ) |
|
fprintf(fp, "uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE"); |
|
else if ( strcmp(PINSET, "4WHWSPI") == 0 ) |
|
fprintf(fp, "uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE"); |
|
else if ( strcmp(PINSET, "3WSWSPI") == 0 ) |
|
fprintf(fp, "uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE"); |
|
else if ( strcmp(PINSET, "SSDSWI2C") == 0 ) |
|
fprintf(fp, "uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE"); |
|
else if ( strcmp(PINSET, "6800") == 0 ) |
|
fprintf(fp, "uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE"); |
|
else if ( strcmp(PINSET, "8080") == 0 ) |
|
fprintf(fp, "uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE"); |
|
else |
|
fprintf(fp, "... unknown pinset ..."); |
|
|
|
|
|
|
|
fprintf(fp, ") : %s() {\n", prefix); |
|
fprintf(fp, " "); |
|
|
|
if ( strcmp(PINSET, "4WSWSPI") == 0 ) |
|
fprintf(fp, "u8x8_Setup_4Wire_SW_SPI"); |
|
else if ( strcmp(PINSET, "4WHWSPI") == 0 ) |
|
fprintf(fp, "u8x8_Setup_4Wire_HW_SPI"); |
|
else if ( strcmp(PINSET, "3WSWSPI") == 0 ) |
|
fprintf(fp, "u8x8_Setup_3Wire_SW_SPI"); |
|
else if ( strcmp(PINSET, "SSDSWI2C") == 0 ) |
|
fprintf(fp, "u8x8_Setup_SSD13xx_SW_I2C"); |
|
else if ( strcmp(PINSET, "6800") == 0 ) |
|
fprintf(fp, "u8x8_Setup_8Bit_6800"); |
|
else if ( strcmp(PINSET, "8080") == 0 ) |
|
fprintf(fp, "u8x8_Setup_8Bit_8080"); |
|
else |
|
fprintf(fp, "... unknown pinset ..."); |
|
|
|
|
|
fprintf(fp, "(getU8x8(), %s", DEVICE); |
|
|
|
fprintf(fp, ", %s", get_args(PINSET)); |
|
|
|
/* |
|
if ( strcmp(PINSET, "4WSWSPI") == 0 ) |
|
fprintf(fp, ", clock, data, cs, dc, reset"); |
|
else if ( strcmp(PINSET, "4WHWSPI") == 0 ) |
|
fprintf(fp, ", cs, dc, reset"); |
|
else if ( strcmp(PINSET, "3WSWSPI") == 0 ) |
|
fprintf(fp, ", clock, data, cs, reset"); |
|
else if ( strcmp(PINSET, "SSDSWI2C") == 0 ) |
|
fprintf(fp, ", clock, data, reset"); |
|
else if ( strcmp(PINSET, "6800") == 0 ) |
|
fprintf(fp, ", d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset"); |
|
else if ( strcmp(PINSET, "8080") == 0 ) |
|
fprintf(fp, ", d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset"); |
|
else |
|
fprintf(fp, "... unknown pinset ..."); |
|
*/ |
|
|
|
fprintf(fp, ");\n"); |
|
|
|
|
|
fprintf(fp, " }\n"); |
|
fprintf(fp, "};\n"); |
|
|
|
} |
|
|
|
void readcsv_createu8x8line(char *s) |
|
{ |
|
char *t; |
|
int i = 0; |
|
t = strtok(s, ",\n\r"); |
|
while( t != NULL ) |
|
{ |
|
while( *t == ' ' || *t == '\t' ) |
|
t++; |
|
//printf("%s\n", t); |
|
strcpy(elements[i], t); |
|
i++; |
|
if ( i >= 10 ) |
|
break; |
|
t = strtok(NULL, ",\n\r"); |
|
} |
|
} |
|
|
|
void readcsv_createu8x8md(const char *name, const char *mdname) |
|
{ |
|
FILE *fp; |
|
FILE *md_fp; |
|
char *s; |
|
fp = fopen(name, "r"); |
|
md_fp = fopen(mdname, "w"); |
|
if ( md_fp != NULL ) |
|
{ |
|
for(;;) |
|
{ |
|
s = fgets(csvline, CSVLINELEN, fp); |
|
if ( s == NULL ) |
|
break; |
|
if ( s[0] == '\0' ) |
|
continue; |
|
if ( s[0] == '\r' ) |
|
continue; |
|
if ( s[0] == '\n' ) |
|
continue; |
|
if ( s[0] == '#' ) |
|
continue; |
|
readcsv_createu8x8line(s); |
|
write_u8x8_md(md_fp); |
|
} |
|
fclose(fp); |
|
fclose(md_fp); |
|
} |
|
|
|
} |
|
|
|
|
|
void readcsv_create(const char *prefix, const char *name, const char *ctorname) |
|
{ |
|
FILE *fp; |
|
FILE *ctor_fp; |
|
char *s; |
|
fp = fopen(name, "r"); |
|
ctor_fp = fopen(ctorname, "w"); |
|
if ( fp != NULL ) |
|
{ |
|
for(;;) |
|
{ |
|
s = fgets(csvline, CSVLINELEN, fp); |
|
if ( s == NULL ) |
|
break; |
|
if ( s[0] == '\0' ) |
|
continue; |
|
if ( s[0] == '\r' ) |
|
continue; |
|
if ( s[0] == '\n' ) |
|
continue; |
|
if ( s[0] == '#' ) |
|
continue; |
|
readcsv_createu8x8line(s); |
|
write_class(prefix, ctor_fp); |
|
} |
|
fclose(fp); |
|
fclose(ctor_fp); |
|
} |
|
|
|
} |
|
|
|
|
|
int main(void) |
|
{ |
|
readcsv_create("U8X8", "display.csv", "ctor.h"); |
|
|
|
//insert_into_file("../../cppsrc/U8x8lib.h", "ctor.h", "// constructor list start", "// constructor list end"); |
|
|
|
readcsv_create("U8G2", "display.csv", "ctor.h"); |
|
readcsv_createu8x8md("display.csv", "md"); |
|
|
|
|
|
return 0; |
|
} |
|
|
|
|