From: Advaith Menon Date: Mon, 17 Nov 2025 04:41:53 +0000 (-0500) Subject: Add working uLCD Library X-Git-Url: https://git.devinivas.org/?a=commitdiff_plain;h=abd877a3c0529383b0561ad034e66d4e1e7535b4;p=smartwatch.git Add working uLCD Library * Namespace all 4DGL extern functions with gl_ * Pass gl_display_t * to all objects to allow using multiple ULCDs * Add a 2sec timeout for the initialization since we need to send but there's no ACK * Modify test program to display a Japanese flag --- diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index ccd5c61..f6bc176 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,4 +1,6 @@ idf_component_register(SRCS "hello_world_main.c" + "goldeloxSerial.c" INCLUDE_DIRS "." PRIV_REQUIRES esp_driver_gpio + esp_driver_uart INCLUDE_DIRS "") diff --git a/main/Goldelox_Types4D.h b/main/Goldelox_Types4D.h index 46f6b0a..8212cfa 100644 --- a/main/Goldelox_Types4D.h +++ b/main/Goldelox_Types4D.h @@ -21,6 +21,7 @@ struct gl_serif_t { int (*write_tx) (const void *, size_t); int (*read_rx) (void *, size_t, uint32_t); int (*flush_rx) (); + int (*flush_tx) (uint32_t); }; diff --git a/main/goldeloxSerial.c b/main/goldeloxSerial.c index e6a45f5..91b97ab 100644 --- a/main/goldeloxSerial.c +++ b/main/goldeloxSerial.c @@ -7,11 +7,11 @@ #include #include -#include -#include -#include -#include -#include +// #include +// #include +// #include +// #include +// #include #include "Goldelox_Types4D.h" // defines data types used by the 4D Routines #include "Goldelox_const4D.h" // defines for 4dgl constants, generated by conversion of 4DGL constants to target language @@ -46,7 +46,8 @@ void WriteBytes(gl_serif_t *serif, unsigned char *psOutput, int nCount) return; } // iOut = write(cPort, psOutput, nCount); - iOut = serif->write(psOutput, nCount, TimeLimit4D); + iOut = serif->write_tx(psOutput, nCount); + serif->flush_tx(TimeLimit4D); if (iOut < 0) { printf("goldelox: write error \n"); @@ -56,14 +57,14 @@ void WriteBytes(gl_serif_t *serif, unsigned char *psOutput, int nCount) return; } -void WriteChars(unsigned char *psOutput) +void WriteChars(gl_serif_t *serif, unsigned char *psOutput) { // Include NULL in output - WriteBytes(psOutput, strlen((char *)psOutput) + 1); + WriteBytes(serif, psOutput, strlen((char *)psOutput) + 1); return; } -void WriteWords(gl_word_t * Source, int Size) +void WriteWords(gl_serif_t *serif, gl_word_t * Source, int Size) { gl_word_t wk ; int i ; @@ -71,7 +72,7 @@ void WriteWords(gl_word_t * Source, int Size) { wk = *Source++ ; wk = (wk >> 8) + (wk << 8) ; - WriteBytes((unsigned char *)&wk, 2); + WriteBytes(serif, (unsigned char *)&wk, 2); } } @@ -95,10 +96,15 @@ int ReadSerPort(gl_serif_t *serif, unsigned char *psData, int iMax) } iIdx = 0; iLeft = iMax; + time_t curTime = time(NULL); while (iLeft > 0) { // iIn = read(cPort, &psData[iIdx], iLeft); iIn = serif->read_rx(&psData[iIdx], iLeft, TimeLimit4D); + if (time(NULL) - curTime > 2) { + printf("goldelox: timeout \n"); + return -1; + } if (iIn < 0) { printf("goldelox: read error \n"); @@ -117,10 +123,10 @@ int ReadSerPort(gl_serif_t *serif, unsigned char *psData, int iMax) return iMax; } -void getbytes(unsigned char *data, int size) +void getbytes(gl_serif_t *serif, unsigned char *data, int size) { int readc; - readc = ReadSerPort(data, size) ; + readc = ReadSerPort(serif, data, size) ; if ((readc != size) && (Callback4D != NULL) ) { @@ -129,7 +135,7 @@ void getbytes(unsigned char *data, int size) } } -void GetAck(void) +void GetAck(gl_serif_t *serif) { int readc; unsigned char readx ; @@ -140,7 +146,7 @@ void GetAck(void) Error4D = Err4D_OK; return; } - readc = ReadSerPort(&readx, 1) ; + readc = ReadSerPort(serif, &readx, 1) ; if (readc != 1) { @@ -160,7 +166,7 @@ void GetAck(void) } -gl_word_t GetWord(void) +gl_word_t GetWord(gl_serif_t *serif) { int readc; unsigned char readx[2] ; @@ -168,7 +174,7 @@ gl_word_t GetWord(void) if (Error4D != Err4D_OK) return 0 ; - readc = ReadSerPort(&readx[0], 2) ; + readc = ReadSerPort(serif, &readx[0], 2) ; if (readc != 2) { @@ -181,7 +187,7 @@ gl_word_t GetWord(void) return readx[0] << 8 | readx[1] ; } -void getString(unsigned char *outStr, int strLen) +void getString(gl_serif_t *serif, unsigned char *outStr, int strLen) { int readc; @@ -191,7 +197,7 @@ void getString(unsigned char *outStr, int strLen) return ; } - readc = ReadSerPort(outStr, strLen) ; + readc = ReadSerPort(serif, outStr, strLen) ; if (readc != strLen) { @@ -206,13 +212,13 @@ void getString(unsigned char *outStr, int strLen) return; } -gl_word_t GetAckResp(void) +gl_word_t GetAckResp(gl_serif_t *serif) { - GetAck() ; - return GetWord() ; + GetAck(serif); + return GetWord(serif); } -gl_word_t WaitForAck(void) +gl_word_t WaitForAck(gl_serif_t *serif) { int saveTimeout = TimeLimit4D; void *saveCB = Callback4D; @@ -222,56 +228,56 @@ gl_word_t WaitForAck(void) TimeLimit4D = 60 * 1000; do { - GetAck(); + GetAck(serif); } while (Error4D != Err4D_OK); // Restore callback/timeout saves TimeLimit4D = saveTimeout; Callback4D = saveCB; - return GetWord(); + return GetWord(serif); } -gl_word_t GetAckRes2Words(gl_word_t * word1, gl_word_t * word2) +gl_word_t GetAckRes2Words(gl_serif_t *serif, gl_word_t * word1, gl_word_t * word2) { int Result ; - GetAck() ; - Result = GetWord() ; - *word1 = GetWord() ; - *word2 = GetWord() ; + GetAck(serif) ; + Result = GetWord(serif) ; + *word1 = GetWord(serif) ; + *word2 = GetWord(serif) ; return Result ; } -void GetAck2Words(gl_word_t * word1, gl_word_t * word2) +void GetAck2Words(gl_serif_t *serif, gl_word_t * word1, gl_word_t * word2) { - GetAck() ; - *word1 = GetWord() ; - *word2 = GetWord() ; + GetAck(serif) ; + *word1 = GetWord(serif) ; + *word2 = GetWord(serif) ; } -gl_word_t GetAckResSector(gl_sector_t Sector) +gl_word_t GetAckResSector(gl_serif_t *serif, gl_sector_t Sector) { int Result; - GetAck() ; - Result = GetWord() ; - getbytes(Sector, 512) ; + GetAck(serif) ; + Result = GetWord(serif) ; + getbytes(serif, Sector, 512) ; return Result ; } -gl_word_t GetAckResStr(unsigned char * OutStr) +gl_word_t GetAckResStr(gl_serif_t *serif, unsigned char * OutStr) { int Result ; - GetAck() ; - Result = GetWord() ; - getString(OutStr, Result) ; + GetAck(serif) ; + Result = GetWord(serif) ; + getString(serif, OutStr, Result) ; return Result ; } -gl_word_t GetAckResData(gl_byte_array_t OutData, gl_word_t size) +gl_word_t GetAckResData(gl_serif_t *serif, gl_byte_array_t OutData, gl_word_t size) { int Result ; - GetAck() ; - Result = GetWord() ; - getbytes(OutData, size) ; + GetAck(serif) ; + Result = GetWord(serif) ; + getbytes(serif, OutData, size) ; return Result ; } @@ -283,38 +289,39 @@ gl_word_t GetAckResData(gl_byte_array_t OutData, gl_word_t size) * Starts of 4D Compound Routines */ -gl_word_t charheight(unsigned char TestChar) +gl_word_t gl_charheight(gl_display_t *display, unsigned char TestChar) { unsigned char towrite[3] ; towrite[0]= F_charheight >> 8 ; towrite[1]= F_charheight ; towrite[2]= TestChar; - WriteBytes(towrite, 3) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 3) ; + return GetAckResp(display->serif); } -gl_word_t charwidth(unsigned char TestChar) +gl_word_t gl_charwidth(gl_display_t *display, unsigned char TestChar) { unsigned char towrite[3] ; towrite[0]= F_charwidth >> 8 ; towrite[1]= F_charwidth ; towrite[2]= TestChar; - WriteBytes(towrite, 3) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 3) ; + return GetAckResp(display->serif) ; } -void gfx_BGcolour(gl_word_t Color) +void gl_gfx_BGcolour(gl_display_t *display, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_gfx_BGcolour >> 8 ; towrite[1]= F_gfx_BGcolour & 0xFF; - towrite[2]= Color >> 8 ; - towrite[3]= Color ; - WriteBytes(towrite, 4) ; - GetAck() ; + towrite[2]= Color >> 8; + towrite[3]= Color; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif); } -void gfx_ChangeColour(gl_word_t OldColor, gl_word_t NewColor) +void gl_gfx_ChangeColour(gl_display_t *display, gl_word_t OldColor, + gl_word_t NewColor) { unsigned char towrite[6] ; towrite[0]= F_gfx_ChangeColour >> 8 ; @@ -323,11 +330,12 @@ void gfx_ChangeColour(gl_word_t OldColor, gl_word_t NewColor) towrite[3]= OldColor ; towrite[4]= NewColor >> 8 ; towrite[5]= NewColor ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6); + GetAck(display->serif); } -void gfx_Circle(gl_word_t X, gl_word_t Y, gl_word_t Radius, gl_word_t Color) +void gl_gfx_Circle(gl_display_t *display, gl_word_t X, gl_word_t Y, + gl_word_t Radius, gl_word_t Color) { unsigned char towrite[10] ; towrite[0]= F_gfx_Circle >> 8 ; @@ -340,11 +348,12 @@ void gfx_Circle(gl_word_t X, gl_word_t Y, gl_word_t Radius, gl_word_t Color) towrite[7]= Radius ; towrite[8]= Color >> 8 ; towrite[9]= Color ; - WriteBytes(towrite, 10) ; - GetAck() ; + WriteBytes(display->serif, towrite, 10) ; + GetAck(display->serif); } -void gfx_CircleFilled(gl_word_t X, gl_word_t Y, gl_word_t Radius, gl_word_t Color) +void gl_gfx_CircleFilled(gl_display_t *display, gl_word_t X, gl_word_t Y, + gl_word_t Radius, gl_word_t Color) { unsigned char towrite[10] ; towrite[0]= F_gfx_CircleFilled >> 8 ; @@ -357,72 +366,73 @@ void gfx_CircleFilled(gl_word_t X, gl_word_t Y, gl_word_t Radius, gl_word_t towrite[7]= Radius ; towrite[8]= Color >> 8 ; towrite[9]= Color ; - WriteBytes(towrite, 10) ; - GetAck() ; + WriteBytes(display->serif, towrite, 10) ; + GetAck(display->serif) ; } -void gfx_Clipping(gl_word_t OnOff) +void gl_gfx_Clipping(gl_display_t *display, gl_word_t OnOff) { unsigned char towrite[4] ; towrite[0]= F_gfx_Clipping >> 8 ; towrite[1]= F_gfx_Clipping & 0xFF; towrite[2]= OnOff >> 8 ; towrite[3]= OnOff ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4); + GetAck(display->serif); } -void gfx_ClipWindow(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2) +void gl_gfx_ClipWindow(gl_display_t *display, gl_word_t X1, gl_word_t Y1, + gl_word_t X2, gl_word_t Y2) { - unsigned char towrite[10] ; + unsigned char towrite[10]; - towrite[0]= F_gfx_ClipWindow >> 8 ; - towrite[1]= F_gfx_ClipWindow ; - towrite[2]= X1 >> 8 ; - towrite[3]= X1 ; - towrite[4]= Y1 >> 8 ; - towrite[5]= Y1 ; - towrite[6]= X2 >> 8 ; - towrite[7]= X2 ; - towrite[8]= Y2 >> 8 ; - towrite[9]= Y2 ; - WriteBytes(towrite, 10) ; - GetAck() ; + towrite[0]= F_gfx_ClipWindow >> 8; + towrite[1]= F_gfx_ClipWindow; + towrite[2]= X1 >> 8; + towrite[3]= X1; + towrite[4]= Y1 >> 8; + towrite[5]= Y1; + towrite[6]= X2 >> 8; + towrite[7]= X2; + towrite[8]= Y2 >> 8; + towrite[9]= Y2; + WriteBytes(display->serif, towrite, 10); + GetAck(display->serif); } -void gfx_Cls() +void gl_gfx_Cls(gl_display_t *display) { - unsigned char towrite[2] ; + unsigned char towrite[2]; - towrite[0]= F_gfx_Cls >> 8 ; - towrite[1]= F_gfx_Cls ; - WriteBytes(towrite, 2) ; - GetAck() ; + towrite[0]= F_gfx_Cls >> 8; + towrite[1]= F_gfx_Cls; + WriteBytes(display->serif, towrite, 2); + GetAck(display->serif); } -void gfx_Contrast(gl_word_t Contrast) +void gl_gfx_Contrast(gl_display_t *display, gl_word_t Contrast) { unsigned char towrite[4] ; towrite[0]= F_gfx_Contrast >> 8 ; towrite[1]= F_gfx_Contrast & 0xFF; towrite[2]= Contrast >> 8 ; towrite[3]= Contrast ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void gfx_FrameDelay(gl_word_t Msec) +void gl_gfx_FrameDelay(gl_display_t *display, gl_word_t Msec) { unsigned char towrite[4] ; towrite[0]= F_gfx_FrameDelay >> 8 ; towrite[1]= F_gfx_FrameDelay & 0xFF; towrite[2]= Msec >> 8 ; towrite[3]= Msec ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -gl_word_t gfx_GetPixel(gl_word_t X, gl_word_t Y) +gl_word_t gl_gfx_GetPixel(gl_display_t *display, gl_word_t X, gl_word_t Y) { unsigned char towrite[6] ; towrite[0]= F_gfx_GetPixel >> 8 ; @@ -431,11 +441,11 @@ gl_word_t gfx_GetPixel(gl_word_t X, gl_word_t Y) towrite[3]= X ; towrite[4]= Y >> 8 ; towrite[5]= Y ; - WriteBytes(towrite, 6) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 6); + return GetAckResp(display->serif); } -void gfx_Line(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) +void gl_gfx_Line(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) { unsigned char towrite[12] ; towrite[0]= F_gfx_Line >> 8 ; @@ -450,22 +460,22 @@ void gfx_Line(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_wor towrite[9]= Y2 ; towrite[10]= Color >> 8 ; towrite[11]= Color ; - WriteBytes(towrite, 12) ; - GetAck() ; + WriteBytes(display->serif, towrite, 12) ; + GetAck(display->serif) ; } -void gfx_LinePattern(gl_word_t Pattern) +void gl_gfx_LinePattern(gl_display_t *display, gl_word_t Pattern) { unsigned char towrite[4] ; towrite[0]= F_gfx_LinePattern >> 8 ; towrite[1]= F_gfx_LinePattern & 0xFF; towrite[2]= Pattern >> 8 ; towrite[3]= Pattern ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4); + GetAck(display->serif); } -void gfx_LineTo(gl_word_t X, gl_word_t Y) +void gl_gfx_LineTo(gl_display_t *display, gl_word_t X, gl_word_t Y) { unsigned char towrite[6] ; towrite[0]= F_gfx_LineTo >> 8 ; @@ -474,11 +484,11 @@ void gfx_LineTo(gl_word_t X, gl_word_t Y) towrite[3]= X ; towrite[4]= Y >> 8 ; towrite[5]= Y ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void gfx_MoveTo(gl_word_t X, gl_word_t Y) +void gl_gfx_MoveTo(gl_display_t *display, gl_word_t X, gl_word_t Y) { unsigned char towrite[6] ; towrite[0]= F_gfx_MoveTo >> 8 ; @@ -487,11 +497,11 @@ void gfx_MoveTo(gl_word_t X, gl_word_t Y) towrite[3]= X ; towrite[4]= Y >> 8 ; towrite[5]= Y ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6); + GetAck(display->serif); } -gl_word_t gfx_Orbit(gl_word_t Angle, gl_word_t Distance, gl_word_t * Xdest, gl_word_t * Ydest) +gl_word_t gl_gfx_Orbit(gl_display_t *display, gl_word_t Angle, gl_word_t Distance, gl_word_t * Xdest, gl_word_t * Ydest) { unsigned char towrite[6] ; towrite[0]= F_gfx_Orbit >> 8 ; @@ -500,55 +510,55 @@ gl_word_t gfx_Orbit(gl_word_t Angle, gl_word_t Distance, gl_word_t * Xdest, g towrite[3]= Angle ; towrite[4]= Distance >> 8 ; towrite[5]= Distance ; - WriteBytes(towrite, 6) ; - GetAck2Words(Xdest,Ydest) ; + WriteBytes(display->serif, towrite, 6) ; + GetAck2Words(display->serif, Xdest,Ydest) ; return 0 ; } -void gfx_OutlineColour(gl_word_t Color) +void gl_gfx_OutlineColour(gl_display_t *display, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_gfx_OutlineColour >> 8 ; towrite[1]= F_gfx_OutlineColour & 0xFF; towrite[2]= Color >> 8 ; towrite[3]= Color ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void gfx_Polygon(gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) +void gl_gfx_Polygon(gl_display_t *display, gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_gfx_Polygon >> 8 ; towrite[1]= F_gfx_Polygon ; towrite[2]= n >> 8 ; towrite[3]= n ; - WriteBytes(towrite, 4) ; - WriteWords(Xvalues, n) ; - WriteWords(Yvalues, n) ; + WriteBytes(display->serif, towrite, 4) ; + WriteWords(display->serif,Xvalues, n) ; + WriteWords(display->serif,Yvalues, n) ; towrite[0]= Color >> 8 ; towrite[1]= Color ; - WriteBytes(towrite, 2) ; - GetAck() ; + WriteBytes(display->serif,towrite, 2) ; + GetAck(display->serif) ; } -void gfx_Polyline(gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) +void gl_gfx_Polyline(gl_display_t *display, gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_gfx_Polyline >> 8 ; towrite[1]= F_gfx_Polyline ; towrite[2]= n >> 8 ; towrite[3]= n ; - WriteBytes(towrite, 4) ; - WriteWords(Xvalues, n) ; - WriteWords(Yvalues, n) ; + WriteBytes(display->serif, towrite, 4) ; + WriteWords(display->serif, Xvalues, n) ; + WriteWords(display->serif, Yvalues, n) ; towrite[0]= Color >> 8 ; towrite[1]= Color ; - WriteBytes(towrite, 2) ; - GetAck() ; + WriteBytes(display->serif, towrite, 2) ; + GetAck(display->serif) ; } -void gfx_PutPixel(gl_word_t X, gl_word_t Y, gl_word_t Color) +void gl_gfx_PutPixel(gl_display_t *display, gl_word_t X, gl_word_t Y, gl_word_t Color) { unsigned char towrite[8] ; towrite[0]= F_gfx_PutPixel >> 8 ; @@ -559,11 +569,11 @@ void gfx_PutPixel(gl_word_t X, gl_word_t Y, gl_word_t Color) towrite[5]= Y ; towrite[6]= Color >> 8 ; towrite[7]= Color ; - WriteBytes(towrite, 8) ; - GetAck() ; + WriteBytes(display->serif, towrite, 8) ; + GetAck(display->serif) ; } -void gfx_Rectangle(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) +void gl_gfx_Rectangle(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) { unsigned char towrite[12] ; towrite[0]= F_gfx_Rectangle >> 8 ; @@ -578,11 +588,11 @@ void gfx_Rectangle(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, g towrite[9]= Y2 ; towrite[10]= Color >> 8 ; towrite[11]= Color ; - WriteBytes(towrite, 12) ; - GetAck() ; + WriteBytes(display->serif, towrite, 12) ; + GetAck(display->serif) ; } -void gfx_RectangleFilled(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) +void gl_gfx_RectangleFilled(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) { unsigned char towrite[12] ; towrite[0]= F_gfx_RectangleFilled >> 8 ; @@ -597,22 +607,22 @@ void gfx_RectangleFilled(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t towrite[9]= Y2 ; towrite[10]= Color >> 8 ; towrite[11]= Color ; - WriteBytes(towrite, 12) ; - GetAck() ; + WriteBytes(display->serif, towrite, 12) ; + GetAck(display->serif) ; } -void gfx_ScreenMode(gl_word_t ScreenMode) +void gl_gfx_ScreenMode(gl_display_t *display, gl_word_t ScreenMode) { unsigned char towrite[4] ; towrite[0]= F_gfx_ScreenMode >> 8 ; towrite[1]= F_gfx_ScreenMode & 0xFF; towrite[2]= ScreenMode >> 8 ; towrite[3]= ScreenMode ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void gfx_Set(gl_word_t Func, gl_word_t Value) +void gl_gfx_Set(gl_display_t *display, gl_word_t Func, gl_word_t Value) { unsigned char towrite[6] ; towrite[0]= F_gfx_Set >> 8 ; @@ -621,42 +631,42 @@ void gfx_Set(gl_word_t Func, gl_word_t Value) towrite[3]= Func ; towrite[4]= Value >> 8 ; towrite[5]= Value ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void gfx_SetClipRegion() +void gl_gfx_SetClipRegion(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_gfx_SetClipRegion >> 8 ; towrite[1]= F_gfx_SetClipRegion ; - WriteBytes(towrite, 2) ; - GetAck() ; + WriteBytes(display->serif, towrite, 2) ; + GetAck(display->serif) ; } -void gfx_Transparency(gl_word_t OnOff) +void gl_gfx_Transparency(gl_display_t *display, gl_word_t OnOff) { unsigned char towrite[4] ; towrite[0]= F_gfx_Transparency >> 8 ; towrite[1]= F_gfx_Transparency & 0xFF; towrite[2]= OnOff >> 8 ; towrite[3]= OnOff ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void gfx_TransparentColour(gl_word_t Color) +void gl_gfx_TransparentColour(gl_display_t *display, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_gfx_TransparentColour >> 8 ; towrite[1]= F_gfx_TransparentColour & 0xFF; towrite[2]= Color >> 8 ; towrite[3]= Color ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void gfx_Triangle(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t X3, gl_word_t Y3, gl_word_t Color) +void gl_gfx_Triangle(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t X3, gl_word_t Y3, gl_word_t Color) { unsigned char towrite[16] ; towrite[0]= F_gfx_Triangle >> 8 ; @@ -675,20 +685,20 @@ void gfx_Triangle(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl towrite[13]= Y3 ; towrite[14]= Color >> 8 ; towrite[15]= Color ; - WriteBytes(towrite, 16) ; - GetAck() ; + WriteBytes(display->serif, towrite, 16) ; + GetAck(display->serif) ; } -gl_word_t media_Flush() +gl_word_t gl_media_Flush(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_media_Flush >> 8 ; towrite[1]= F_media_Flush ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -void media_Image(gl_word_t X, gl_word_t Y) +void gl_media_Image(gl_display_t *display, gl_word_t X, gl_word_t Y) { unsigned char towrite[6] ; towrite[0]= F_media_Image >> 8 ; @@ -697,38 +707,38 @@ void media_Image(gl_word_t X, gl_word_t Y) towrite[3]= X ; towrite[4]= Y >> 8 ; towrite[5]= Y ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -gl_word_t media_Init() +gl_word_t gl_media_Init(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_media_Init >> 8 ; towrite[1]= F_media_Init ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -gl_word_t media_ReadByte() +gl_word_t gl_media_ReadByte(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_media_ReadByte >> 8 ; towrite[1]= F_media_ReadByte ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -gl_word_t media_ReadWord() +gl_word_t gl_media_ReadWord(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_media_ReadWord >> 8 ; towrite[1]= F_media_ReadWord ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -void media_SetAdd(gl_word_t HiWord, gl_word_t LoWord) +void gl_media_SetAdd(gl_display_t *display, gl_word_t HiWord, gl_word_t LoWord) { unsigned char towrite[6] ; towrite[0]= F_media_SetAdd >> 8 ; @@ -737,11 +747,11 @@ void media_SetAdd(gl_word_t HiWord, gl_word_t LoWord) towrite[3]= HiWord ; towrite[4]= LoWord >> 8 ; towrite[5]= LoWord ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void media_SetSector(gl_word_t HiWord, gl_word_t LoWord) +void gl_media_SetSector(gl_display_t *display, gl_word_t HiWord, gl_word_t LoWord) { unsigned char towrite[6] ; towrite[0]= F_media_SetSector >> 8 ; @@ -750,11 +760,11 @@ void media_SetSector(gl_word_t HiWord, gl_word_t LoWord) towrite[3]= HiWord ; towrite[4]= LoWord >> 8 ; towrite[5]= LoWord ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void media_Video(gl_word_t X, gl_word_t Y) +void gl_media_Video(gl_display_t *display, gl_word_t X, gl_word_t Y) { unsigned char towrite[6] ; towrite[0]= F_media_Video >> 8 ; @@ -763,11 +773,11 @@ void media_Video(gl_word_t X, gl_word_t Y) towrite[3]= X ; towrite[4]= Y >> 8 ; towrite[5]= Y ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void media_VideoFrame(gl_word_t X, gl_word_t Y, gl_word_t Framenumber) +void gl_media_VideoFrame(gl_display_t *display, gl_word_t X, gl_word_t Y, gl_word_t Framenumber) { unsigned char towrite[8] ; towrite[0]= F_media_VideoFrame >> 8 ; @@ -778,142 +788,142 @@ void media_VideoFrame(gl_word_t X, gl_word_t Y, gl_word_t Framenumber) towrite[5]= Y ; towrite[6]= Framenumber >> 8 ; towrite[7]= Framenumber ; - WriteBytes(towrite, 8) ; - GetAck() ; + WriteBytes(display->serif, towrite, 8) ; + GetAck(display->serif) ; } -gl_word_t media_WriteByte(gl_word_t Byte) +gl_word_t gl_media_WriteByte(gl_display_t *display, gl_word_t Byte) { unsigned char towrite[4] ; towrite[0]= F_media_WriteByte >> 8 ; towrite[1]= F_media_WriteByte ; towrite[2]= Byte >> 8 ; towrite[3]= Byte ; - WriteBytes(towrite, 4) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 4) ; + return GetAckResp(display->serif) ; } -gl_word_t media_WriteWord(gl_word_t Word) +gl_word_t gl_media_WriteWord(gl_display_t *display, gl_word_t Word) { unsigned char towrite[4] ; towrite[0]= F_media_WriteWord >> 8 ; towrite[1]= F_media_WriteWord ; towrite[2]= Word >> 8 ; towrite[3]= Word ; - WriteBytes(towrite, 4) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 4) ; + return GetAckResp(display->serif) ; } -void putCH(gl_word_t WordChar) +void gl_putCH(gl_display_t *display, gl_word_t WordChar) { unsigned char towrite[4] ; towrite[0]= F_putCH >> 8 ; towrite[1]= F_putCH ; towrite[2]= WordChar >> 8 ; towrite[3]= WordChar ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void putstr(unsigned char * InString) +void gl_putstr(gl_display_t *display, unsigned char * InString) { unsigned char towrite[2] ; towrite[0]= F_putstr >> 8 ; towrite[1]= F_putstr ; - WriteBytes(towrite, 2) ; - WriteChars(InString) ; - GetAck() ; + WriteBytes(display->serif, towrite, 2) ; + WriteChars(display->serif, InString) ; + GetAck(display->serif) ; } -void txt_Attributes(gl_word_t Attribs) +void gl_txt_Attributes(gl_display_t *display, gl_word_t Attribs) { unsigned char towrite[4] ; towrite[0]= F_txt_Attributes >> 8 ; towrite[1]= F_txt_Attributes & 0xFF; towrite[2]= Attribs >> 8 ; towrite[3]= Attribs ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_BGcolour(gl_word_t Color) +void gl_txt_BGcolour(gl_display_t *display, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_txt_BGcolour >> 8 ; towrite[1]= F_txt_BGcolour & 0xFF; towrite[2]= Color >> 8 ; towrite[3]= Color ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Bold(gl_word_t Bold) +void gl_txt_Bold(gl_display_t *display, gl_word_t Bold) { unsigned char towrite[4] ; towrite[0]= F_txt_Bold >> 8 ; towrite[1]= F_txt_Bold & 0xFF; towrite[2]= Bold >> 8 ; towrite[3]= Bold ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_FGcolour(gl_word_t Color) +void gl_txt_FGcolour(gl_display_t *display, gl_word_t Color) { unsigned char towrite[4] ; towrite[0]= F_txt_FGcolour >> 8 ; towrite[1]= F_txt_FGcolour & 0xFF; towrite[2]= Color >> 8 ; towrite[3]= Color ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_FontID(gl_word_t FontNumber) +void gl_txt_FontID(gl_display_t *display, gl_word_t FontNumber) { unsigned char towrite[4] ; towrite[0]= F_txt_FontID >> 8 ; towrite[1]= F_txt_FontID & 0xFF; towrite[2]= FontNumber >> 8 ; towrite[3]= FontNumber ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Height(gl_word_t Multiplier) +void gl_txt_Height(gl_display_t *display, gl_word_t Multiplier) { unsigned char towrite[4] ; towrite[0]= F_txt_Height >> 8 ; towrite[1]= F_txt_Height & 0xFF; towrite[2]= Multiplier >> 8 ; towrite[3]= Multiplier ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Inverse(gl_word_t Inverse) +void gl_txt_Inverse(gl_display_t *display, gl_word_t Inverse) { unsigned char towrite[4] ; towrite[0]= F_txt_Inverse >> 8 ; towrite[1]= F_txt_Inverse & 0xFF; towrite[2]= Inverse >> 8 ; towrite[3]= Inverse ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Italic(gl_word_t Italic) +void gl_txt_Italic(gl_display_t *display, gl_word_t Italic) { unsigned char towrite[4] ; towrite[0]= F_txt_Italic >> 8 ; towrite[1]= F_txt_Italic & 0xFF; towrite[2]= Italic >> 8 ; towrite[3]= Italic ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_MoveCursor(gl_word_t Line, gl_word_t Column) +void gl_txt_MoveCursor(gl_display_t *display, gl_word_t Line, gl_word_t Column) { unsigned char towrite[6] ; towrite[0]= F_txt_MoveCursor >> 8 ; @@ -922,22 +932,22 @@ void txt_MoveCursor(gl_word_t Line, gl_word_t Column) towrite[3]= Line ; towrite[4]= Column >> 8 ; towrite[5]= Column ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void txt_Opacity(gl_word_t TransparentOpaque) +void gl_txt_Opacity(gl_display_t *display, gl_word_t TransparentOpaque) { unsigned char towrite[4] ; towrite[0]= F_txt_Opacity >> 8 ; towrite[1]= F_txt_Opacity & 0xFF; towrite[2]= TransparentOpaque >> 8 ; towrite[3]= TransparentOpaque ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Set(gl_word_t Func, gl_word_t Value) +void gl_txt_Set(gl_display_t *display, gl_word_t Func, gl_word_t Value) { unsigned char towrite[6] ; towrite[0]= F_txt_Set >> 8 ; @@ -946,22 +956,22 @@ void txt_Set(gl_word_t Func, gl_word_t Value) towrite[3]= Func ; towrite[4]= Value >> 8 ; towrite[5]= Value ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -void txt_Underline(gl_word_t Underline) +void gl_txt_Underline(gl_display_t *display, gl_word_t Underline) { unsigned char towrite[4] ; towrite[0]= F_txt_Underline >> 8 ; towrite[1]= F_txt_Underline & 0xFF; towrite[2]= Underline >> 8 ; towrite[3]= Underline ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Width(gl_word_t Multiplier) +void gl_txt_Width(gl_display_t *display, gl_word_t Multiplier) { unsigned char towrite[4] ; @@ -969,33 +979,33 @@ void txt_Width(gl_word_t Multiplier) towrite[1]= F_txt_Width & 0xFF; towrite[2]= Multiplier >> 8 ; towrite[3]= Multiplier ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Xgap(gl_word_t Pixels) +void gl_txt_Xgap(gl_display_t *display, gl_word_t Pixels) { unsigned char towrite[4] ; towrite[0]= F_txt_Xgap >> 8 ; towrite[1]= F_txt_Xgap & 0xFF; towrite[2]= Pixels >> 8 ; towrite[3]= Pixels ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void txt_Ygap(gl_word_t Pixels) +void gl_txt_Ygap(gl_display_t *display, gl_word_t Pixels) { unsigned char towrite[4] ; towrite[0]= F_txt_Ygap >> 8 ; towrite[1]= F_txt_Ygap & 0xFF; towrite[2]= Pixels >> 8 ; towrite[3]= Pixels ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void BeeP(gl_word_t Note, gl_word_t Duration) +void gl_BeeP(gl_display_t *display, gl_word_t Note, gl_word_t Duration) { unsigned char towrite[6] ; towrite[0]= F_BeeP >> 8 ; @@ -1004,38 +1014,38 @@ void BeeP(gl_word_t Note, gl_word_t Duration) towrite[3]= Note ; towrite[4]= Duration >> 8 ; towrite[5]= Duration ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -gl_word_t sys_GetModel(unsigned char * ModelStr) +gl_word_t gl_sys_GetModel(gl_display_t *display, unsigned char * ModelStr) { unsigned char towrite[2] ; towrite[0]= F_sys_GetModel >> 8 ; towrite[1]= F_sys_GetModel ; - WriteBytes(towrite, 2) ; - return GetAckResStr(ModelStr) ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResStr(display->serif, ModelStr) ; } -gl_word_t sys_GetVersion() +gl_word_t gl_sys_GetVersion(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_sys_GetVersion >> 8 ; towrite[1]= F_sys_GetVersion ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -gl_word_t sys_GetPmmC() +gl_word_t gl_sys_GetPmmC(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_sys_GetPmmC >> 8 ; towrite[1]= F_sys_GetPmmC ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -void blitComtoDisplay(gl_word_t X, gl_word_t Y, gl_word_t Width, gl_word_t Height, gl_byte_array_t Pixels) +void gl_blitComtoDisplay(gl_display_t *display, gl_word_t X, gl_word_t Y, gl_word_t Width, gl_word_t Height, gl_byte_array_t Pixels) { unsigned char towrite[10] ; towrite[0]= F_blitComtoDisplay >> 8 ; @@ -1048,35 +1058,35 @@ void blitComtoDisplay(gl_word_t X, gl_word_t Y, gl_word_t Width, gl_word_t H towrite[7]= Width ; towrite[8]= Height >> 8 ; towrite[9]= Height ; - WriteBytes(towrite, 10) ; - WriteBytes(Pixels, Width*Height*2) ; - GetAck() ; + WriteBytes(display->serif, towrite, 10) ; + WriteBytes(display->serif, Pixels, Width*Height*2) ; + GetAck(display->serif) ; } -void setbaudWait(gl_word_t Newrate) +void gl_setbaudWait(gl_display_t *display, gl_word_t Newrate) { unsigned char towrite[4] ; towrite[0]= F_setbaudWait >> 8 ; towrite[1]= F_setbaudWait ; towrite[2]= Newrate >> 8 ; towrite[3]= Newrate ; - WriteBytes(towrite, 4) ; + WriteBytes(display->serif, towrite, 4) ; //SetThisBaudrate(Newrate) ; // change this systems baud rate to match new display rate, ACK is 100ms away - GetAck() ; + GetAck(display->serif) ; } -gl_word_t peekW(gl_word_t Address) +gl_word_t gl_peekW(gl_display_t *display, gl_word_t Address) { unsigned char towrite[4] ; towrite[0]= F_peekW >> 8 ; towrite[1]= F_peekW ; towrite[2]= Address >> 8 ; towrite[3]= Address ; - WriteBytes(towrite, 4) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 4) ; + return GetAckResp(display->serif) ; } -void pokeW(gl_word_t Address, gl_word_t WordValue) +void gl_pokeW(gl_display_t *display, gl_word_t Address, gl_word_t WordValue) { unsigned char towrite[6] ; towrite[0]= F_pokeW >> 8 ; @@ -1085,22 +1095,22 @@ void pokeW(gl_word_t Address, gl_word_t WordValue) towrite[3]= Address ; towrite[4]= WordValue >> 8 ; towrite[5]= WordValue ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -gl_word_t peekB(gl_word_t Address) +gl_word_t gl_peekB(gl_display_t *display, gl_word_t Address) { unsigned char towrite[4] ; towrite[0]= F_peekB >> 8 ; towrite[1]= F_peekB ; towrite[2]= Address >> 8 ; towrite[3]= Address ; - WriteBytes(towrite, 4) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 4) ; + return GetAckResp(display->serif) ; } -void pokeB(gl_word_t Address, gl_word_t ByteValue) +void gl_pokeB(gl_display_t *display, gl_word_t Address, gl_word_t ByteValue) { unsigned char towrite[6] ; towrite[0]= F_pokeB >> 8 ; @@ -1109,50 +1119,50 @@ void pokeB(gl_word_t Address, gl_word_t ByteValue) towrite[3]= Address ; towrite[4]= ByteValue >> 8 ; towrite[5]= ByteValue ; - WriteBytes(towrite, 6) ; - GetAck() ; + WriteBytes(display->serif, towrite, 6) ; + GetAck(display->serif) ; } -gl_word_t joystick() +gl_word_t gl_joystick(gl_display_t *display) { unsigned char towrite[2] ; towrite[0]= F_joystick >> 8 ; towrite[1]= F_joystick ; - WriteBytes(towrite, 2) ; - return GetAckResp() ; + WriteBytes(display->serif, towrite, 2) ; + return GetAckResp(display->serif) ; } -void SSTimeout(gl_word_t Seconds) +void gl_SSTimeout(gl_display_t *display, gl_word_t Seconds) { unsigned char towrite[4] ; towrite[0]= F_SSTimeout >> 8 ; towrite[1]= F_SSTimeout ; towrite[2]= Seconds >> 8 ; towrite[3]= Seconds ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void SSSpeed(gl_word_t Speed) +void gl_SSSpeed(gl_display_t *display, gl_word_t Speed) { unsigned char towrite[4] ; towrite[0]= F_SSSpeed >> 8 ; towrite[1]= F_SSSpeed ; towrite[2]= Speed >> 8 ; towrite[3]= Speed ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } -void SSMode(gl_word_t Parm) +void gl_SSMode(gl_display_t *display, gl_word_t Parm) { unsigned char towrite[4] ; towrite[0]= F_SSMode >> 8 ; towrite[1]= F_SSMode ; towrite[2]= Parm >> 8 ; towrite[3]= Parm ; - WriteBytes(towrite, 4) ; - GetAck() ; + WriteBytes(display->serif, towrite, 4) ; + GetAck(display->serif) ; } /* @@ -1176,7 +1186,8 @@ void setbaudWait(gl_word_t Newrate) gl_err_t gl_init(gl_display_t *disp, gl_serif_t *serif) { - int k, ch, tSave; + int k, tSave; + unsigned char ch; //gl_word_t nBaud; TimeLimit4D = 2000; @@ -1193,8 +1204,10 @@ gl_err_t gl_init(gl_display_t *disp, gl_serif_t *serif) { for (k = 0 ; k < 10 ; k++) { ch = 'X'; - disp->serif->write_tx((void *)&ch, 1, 500); - ReadSerPort(disp->serif, &ch, 1); + disp->serif->write_tx((void *)&ch, 1); + disp->serif->flush_tx(TimeLimit4D); + if (ReadSerPort(disp->serif, &ch, 1) == -1) + break; if (ch == 0x15) break ; } @@ -1204,86 +1217,86 @@ gl_err_t gl_init(gl_display_t *disp, gl_serif_t *serif) { return 0; } -int OpenComm(char *sDeviceName, int newrate) -{ - struct termios new_port_settings; - //gl_word_t nBaud; - int k, ch, tSave, baudr; - -switch(newrate) - { - case 50 : baudr = B50; break; - case 75 : baudr = B75; break; - case 110 : baudr = B110; break; - case 134 : baudr = B134; break; - case 150 : baudr = B150; break; - case 200 : baudr = B200; break; - case 300 : baudr = B300; break; - case 600 : baudr = B600; break; - case 1200 : baudr = B1200; break; - case 1800 : baudr = B1800; break; - case 2400 : baudr = B2400; break; - case 4800 : baudr = B4800; break; - case 9600 : baudr = B9600; break; - case 19200 : baudr = B19200; break; - case 38400 : baudr = B38400; break; - case 57600 : baudr = B57600; break; - case 115200 : baudr = B115200; break; - case 230400 : baudr = B230400; break; - case 460800 : baudr = B460800; break; - case 500000 : baudr = B500000; break; - case 576000 : baudr = B576000; break; - case 921600 : baudr = B921600; break; - case 1000000 : baudr = B1000000; break; - default : printf("invalid baudrate\n"); - return(1); - break; -} - cPort = open(sDeviceName, O_RDWR | O_NOCTTY | O_NDELAY); -// Current config - tcgetattr(cPort, &new_port_settings); - // Set the line to RAW - cfmakeraw(&new_port_settings); - memset(&new_port_settings, 0, sizeof(new_port_settings)); /* clear the new struct */ - new_port_settings.c_cflag = baudr | CS8 | CLOCAL | CREAD; - new_port_settings.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); - new_port_settings.c_iflag = IGNPAR; - new_port_settings.c_oflag = 0; - new_port_settings.c_lflag = 0; - new_port_settings.c_cc[VMIN] = 0; /* block untill n bytes are received */ - new_port_settings.c_cc[VTIME] = 100; /* block untill a timer expires (n * 100 mSec.) */ -/* - cfsetospeed(&new_port_settings, nBaud); - cfsetispeed(&new_port_settings, nBaud); -*/ - // set new config - tcsetattr(cPort, TCSANOW, &new_port_settings); - // Set non-blocking - fcntl(cPort, F_SETFL, FNDELAY); - - tSave = TimeLimit4D; - TimeLimit4D = 500; - for (k = 0 ; k < 10 ; k++) - { - ch = 'X'; - write(cPort, (unsigned char *)&ch, 1); - tcflush(cPort, TCOFLUSH); - ReadSerPort((unsigned char *)&ch, 1); - if (ch == 0x15) - break ; - } - TimeLimit4D = tSave; - - tcflush(cPort, TCIOFLUSH); - return 0; -} - -void CloseComm(void) -{ - close(cPort); - cPort = -1; - Error4D = Err4D_OK; - - return; -} +// int OpenComm(char *sDeviceName, int newrate) +// { +// struct termios new_port_settings; +// //gl_word_t nBaud; +// int k, ch, tSave, baudr; +// +// switch(newrate) +// { +// case 50 : baudr = B50; break; +// case 75 : baudr = B75; break; +// case 110 : baudr = B110; break; +// case 134 : baudr = B134; break; +// case 150 : baudr = B150; break; +// case 200 : baudr = B200; break; +// case 300 : baudr = B300; break; +// case 600 : baudr = B600; break; +// case 1200 : baudr = B1200; break; +// case 1800 : baudr = B1800; break; +// case 2400 : baudr = B2400; break; +// case 4800 : baudr = B4800; break; +// case 9600 : baudr = B9600; break; +// case 19200 : baudr = B19200; break; +// case 38400 : baudr = B38400; break; +// case 57600 : baudr = B57600; break; +// case 115200 : baudr = B115200; break; +// case 230400 : baudr = B230400; break; +// case 460800 : baudr = B460800; break; +// case 500000 : baudr = B500000; break; +// case 576000 : baudr = B576000; break; +// case 921600 : baudr = B921600; break; +// case 1000000 : baudr = B1000000; break; +// default : printf("invalid baudrate\n"); +// return(1); +// break; +// } +// cPort = open(sDeviceName, O_RDWR | O_NOCTTY | O_NDELAY); +// // Current config +// tcgetattr(cPort, &new_port_settings); +// // Set the line to RAW +// cfmakeraw(&new_port_settings); +// memset(&new_port_settings, 0, sizeof(new_port_settings)); /* clear the new struct */ +// new_port_settings.c_cflag = baudr | CS8 | CLOCAL | CREAD; +// new_port_settings.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); +// new_port_settings.c_iflag = IGNPAR; +// new_port_settings.c_oflag = 0; +// new_port_settings.c_lflag = 0; +// new_port_settings.c_cc[VMIN] = 0; /* block untill n bytes are received */ +// new_port_settings.c_cc[VTIME] = 100; /* block untill a timer expires (n * 100 mSec.) */ +// /* +// cfsetospeed(&new_port_settings, nBaud); +// cfsetispeed(&new_port_settings, nBaud); +// */ +// // set new config +// tcsetattr(cPort, TCSANOW, &new_port_settings); +// // Set non-blocking +// fcntl(cPort, F_SETFL, FNDELAY); +// +// tSave = TimeLimit4D; +// TimeLimit4D = 500; +// for (k = 0 ; k < 10 ; k++) +// { +// ch = 'X'; +// write(cPort, (unsigned char *)&ch, 1); +// tcflush(cPort, TCOFLUSH); +// ReadSerPort((unsigned char *)&ch, 1); +// if (ch == 0x15) +// break ; +// } +// TimeLimit4D = tSave; +// +// tcflush(cPort, TCIOFLUSH); +// return 0; +// } +// +// void CloseComm(void) +// { +// close(cPort); +// cPort = -1; +// Error4D = Err4D_OK; +// +// return; +// } diff --git a/main/goldeloxSerial.h b/main/goldeloxSerial.h index 1b71fe0..06643fe 100644 --- a/main/goldeloxSerial.h +++ b/main/goldeloxSerial.h @@ -49,78 +49,190 @@ extern "C" { * @return error code */ gl_err_t gl_init(gl_display_t *disp, gl_serif_t *serif); -int OpenComm(char *comport, int newrate) ; -void blitComtoDisplay(gl_word_t X, gl_word_t Y, gl_word_t Width, gl_word_t Height, gl_byte_array_t Pixels) ; -void gfx_BGcolour(gl_word_t Color) ; -void gfx_ChangeColour(gl_word_t OldColor, gl_word_t NewColor) ; -void gfx_Circle(gl_word_t X, gl_word_t Y, gl_word_t Radius, gl_word_t Color) ; -void gfx_CircleFilled(gl_word_t X, gl_word_t Y, gl_word_t Radius, gl_word_t Color) ; -void gfx_Clipping(gl_word_t OnOff) ; -void gfx_ClipWindow(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2) ; -void gfx_Cls() ; -void gfx_Contrast(gl_word_t Contrast) ; -void gfx_FrameDelay(gl_word_t Msec) ; -void gfx_Line(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) ; -void gfx_LinePattern(gl_word_t Pattern) ; -void gfx_LineTo(gl_word_t X, gl_word_t Y) ; -void gfx_MoveTo(gl_word_t X, gl_word_t Y) ; -void gfx_OutlineColour(gl_word_t Color) ; -void gfx_Polygon(gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) ; -void gfx_Polyline(gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) ; -void gfx_PutPixel(gl_word_t X, gl_word_t Y, gl_word_t Color) ; -void gfx_Rectangle(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) ; -void gfx_RectangleFilled(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) ; -void gfx_ScreenMode(gl_word_t ScreenMode) ; -void gfx_Set(gl_word_t Func, gl_word_t Value) ; -void gfx_Transparency(gl_word_t OnOff) ; -void gfx_TransparentColour(gl_word_t Color) ; -void gfx_Triangle(gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t X3, gl_word_t Y3, gl_word_t Color) ; -void media_Image(gl_word_t X, gl_word_t Y) ; -void media_SetAdd(gl_word_t HiWord, gl_word_t LoWord) ; -void media_SetSector(gl_word_t HiWord, gl_word_t LoWord) ; -void media_Video(gl_word_t X, gl_word_t Y) ; -void media_VideoFrame(gl_word_t X, gl_word_t Y, gl_word_t Framenumber) ; -void pokeB(gl_word_t Address, gl_word_t ByteValue) ; -void pokeW(gl_word_t Address, gl_word_t WordValue) ; -void putCH(gl_word_t WordChar) ; -void setbaudWait(gl_word_t Newrate) ; -void SSMode(gl_word_t Parm) ; -void SSSpeed(gl_word_t Speed) ; -void SSTimeout(gl_word_t Seconds) ; -void txt_Attributes(gl_word_t Attribs) ; -void txt_BGcolour(gl_word_t Color) ; -void txt_Bold(gl_word_t Bold) ; -void txt_FGcolour(gl_word_t Color) ; -void txt_FontID(gl_word_t FontNumber) ; -void txt_Height(gl_word_t Multiplier) ; -void txt_Inverse(gl_word_t Inverse) ; -void txt_Italic(gl_word_t Italic) ; -void txt_MoveCursor(gl_word_t Line, gl_word_t Column) ; -void txt_Opacity(gl_word_t TransparentOpaque) ; -void txt_Set(gl_word_t Func, gl_word_t Value) ; -void txt_Underline(gl_word_t Underline) ; -void txt_Width(gl_word_t Multiplier) ; -void txt_Xgap(gl_word_t Pixels) ; -void txt_Ygap(gl_word_t Pixels) ; -void BeeP(gl_word_t Note, gl_word_t Duration) ; -gl_word_t charheight(unsigned char TestChar) ; -gl_word_t charwidth(unsigned char TestChar) ; -gl_word_t gfx_GetPixel(gl_word_t X, gl_word_t Y) ; -gl_word_t gfx_Orbit(gl_word_t Angle, gl_word_t Distance, gl_word_t * Xdest, gl_word_t * Ydest) ; -void gfx_SetClipRegion() ; -gl_word_t joystick() ; -gl_word_t media_Flush() ; -gl_word_t media_Init() ; -gl_word_t media_ReadByte() ; -gl_word_t media_ReadWord() ; -gl_word_t media_WriteByte(gl_word_t Byte) ; -gl_word_t media_WriteWord(gl_word_t Word) ; -gl_word_t peekB(gl_word_t Address) ; -gl_word_t peekW(gl_word_t Address) ; -void putstr(unsigned char * InString) ; -gl_word_t sys_GetModel(unsigned char * ModelStr) ; -gl_word_t sys_GetPmmC() ; -gl_word_t sys_GetVersion() ; + +/** + * @brief Return Character Height for the given char in + * pixels. + * @param display The display object to use + * @param test_char Presumably, a test character? + * @return The height of that character + */ +gl_word_t gl_charheight(gl_display_t *display, unsigned char test_char); + +/** + * @brief Return Character width for the given char in + * pixels. + * @param display The display object to use + * @param test_char Presumably, a test character? + * @return The width of that character + */ +gl_word_t gl_charwidth(gl_display_t *display, unsigned char TestChar) ; + +/** + * @brief Set the screen background color. + * @param display The display object to use + * @param color The color to set the background to. + */ +void gl_gfx_BGcolour(gl_display_t *display, gl_word_t color); + +/** + * @brief Changes all old colored pixels to new colored pixels. + * @param display The display object to use + * @param old The old color to find + * @param new The new color to replace + */ +void gl_gfx_ChangeColour(gl_display_t *display, gl_word_t old, gl_word_t new); + +/** + * @brief Draw a circle (not filled). + * @param display The display object to use + * @param x The center X coordimate of the circle + * @param y The center Y coordinate of the circle + * @param rad The radius of the circle + * @param col The color of the circle + */ +void gl_gfx_Circle(gl_display_t *display, gl_word_t x, gl_word_t y, + gl_word_t rad, gl_word_t col); + +/** + * @brief Draw a circle (filled). + * @param display The display object to use + * @param x The center X coordimate of the circle + * @param y The center Y coordinate of the circle + * @param rad The radius of the circle + * @param col The color of the circle + */ +void gl_gfx_CircleFilled(gl_display_t *display, gl_word_t x, gl_word_t y, + gl_word_t rad, gl_word_t col); + +/** + * @brief Enables/disables Clipping. + * @param display The display object to use + * @param value zero = disabled, 1 = enabled. + */ +void gl_gfx_Clipping(gl_display_t *display, gl_word_t value); + +/** + * @brief All objects will only be visible in this region. + * + * Enable clipping first using gl_gfx_Clipping. + * @param display The display object to use + * @param x1 Horizontal Top Left position + * @param y1 Vertical Top Left Position + * @param x2 Horizontal Bottom Right position + * @param y2 Vertical Bot Right Position + */ +void gl_gfx_ClipWindow(gl_display_t *display, gl_word_t x1, gl_word_t y1, + gl_word_t x2, gl_word_t y2); + +/** + * @brief Clear screen using the defaults. + * + * Some settings may be reset, such as outline color, pen, origin and text + * magnification. Consult the 4D Library manuals for more info. + * @param display The display object to use + */ +void gl_gfx_Cls(gl_display_t *display); + +/** + * @brief Sets contrast, or turns display on/off depending on model. + * @param display The display object to use + * @param contrast Contrast 0 = Display OFF + * Contrast 1 - 15 = Contrast Level + * + * @note uLCD-144-G2 does not support Contrast ‘levels’, values from 1-15 could + * be set to turn the display ‘On’ and 0 to turn the Display ‘Off’. + */ +void gl_gfx_Contrast(gl_display_t *display, gl_word_t contrast); + +/** + * @brief sets frame delay for Media Video command + * @param display The display object to use + * @param msec 0-255 ms + */ +void gl_gfx_FrameDelay(gl_display_t *display, gl_word_t msec); + +gl_word_t gl_gfx_GetPixel(gl_display_t *display, gl_word_t X, gl_word_t Y); + +void gl_gfx_Line(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) ; + +void gl_gfx_LinePattern(gl_display_t *display, gl_word_t Pattern) ; + +void gl_gfx_LineTo(gl_display_t *display, gl_word_t X, gl_word_t Y) ; + +void gl_gfx_MoveTo(gl_display_t *display, gl_word_t X, gl_word_t Y) ; + +gl_word_t gl_gfx_Orbit(gl_display_t *display, gl_word_t Angle, gl_word_t Distance, gl_word_t * Xdest, gl_word_t * Ydest) ; + +void gl_gfx_OutlineColour(gl_display_t *display, gl_word_t Color) ; + +void gl_gfx_Polygon(gl_display_t *display, gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) ; + +void gl_gfx_Polyline(gl_display_t *display, gl_word_t n, gl_word_array_t Xvalues, gl_word_array_t Yvalues, gl_word_t Color) ; + +void gl_gfx_PutPixel(gl_display_t *disp, gl_word_t X, gl_word_t Y, gl_word_t Color) ; + +void gl_gfx_Rectangle(gl_display_t *disp, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) ; + +void gl_gfx_RectangleFilled(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t Color) ; + +void gl_gfx_ScreenMode(gl_display_t *display, gl_word_t ScreenMode) ; + +void gl_gfx_SetClipRegion(gl_display_t *display) ; +void gl_blitComtoDisplay(gl_display_t *disp, gl_word_t X, gl_word_t Y, gl_word_t Width, gl_word_t Height, gl_byte_array_t Pixels) ; +void gl_gfx_Set(gl_display_t *display, gl_word_t Func, gl_word_t Value) ; +void gl_gfx_Transparency(gl_display_t *display, gl_word_t OnOff) ; +void gl_gfx_TransparentColour(gl_display_t *display, gl_word_t Color) ; +void gl_gfx_Triangle(gl_display_t *display, gl_word_t X1, gl_word_t Y1, gl_word_t X2, gl_word_t Y2, gl_word_t X3, gl_word_t Y3, gl_word_t Color) ; +gl_word_t gl_media_Flush(gl_display_t *display) ; +gl_word_t gl_media_Init(gl_display_t *display) ; +gl_word_t gl_media_ReadByte(gl_display_t *display) ; +gl_word_t gl_media_ReadWord(gl_display_t *display) ; +gl_word_t gl_media_WriteByte(gl_display_t *display, gl_word_t Byte) ; +gl_word_t gl_media_WriteWord(gl_display_t *display, gl_word_t Word) ; +void gl_media_Image(gl_display_t *display, gl_word_t X, gl_word_t Y) ; +void gl_media_SetAdd(gl_display_t *display, gl_word_t HiWord, gl_word_t LoWord) ; +void gl_media_SetSector(gl_display_t *display, gl_word_t HiWord, gl_word_t LoWord) ; +void gl_media_Video(gl_display_t *display, gl_word_t X, gl_word_t Y) ; +void gl_media_VideoFrame(gl_display_t *display, gl_word_t X, gl_word_t Y, gl_word_t Framenumber) ; +void gl_putCH(gl_display_t *display, gl_word_t WordChar) ; +void gl_putstr(gl_display_t *display, unsigned char * InString) ; + +void gl_txt_Attributes(gl_display_t *display, gl_word_t Attribs) ; +void gl_txt_BGcolour(gl_display_t *display, gl_word_t Color) ; +void gl_txt_Bold(gl_display_t *display, gl_word_t Bold) ; +void gl_txt_FGcolour(gl_display_t *display, gl_word_t Color) ; +void gl_txt_FontID(gl_display_t *display, gl_word_t FontNumber) ; +void gl_txt_Height(gl_display_t *display, gl_word_t Multiplier) ; +void gl_txt_Inverse(gl_display_t *display, gl_word_t Inverse) ; +void gl_txt_Italic(gl_display_t *display, gl_word_t Italic) ; +void gl_txt_MoveCursor(gl_display_t *display, gl_word_t Line, gl_word_t Column) ; +void gl_txt_Opacity(gl_display_t *display, gl_word_t TransparentOpaque) ; +void gl_txt_Set(gl_display_t *display, gl_word_t Func, gl_word_t Value) ; +void gl_txt_Underline(gl_display_t *display, gl_word_t Underline) ; +void gl_txt_Width(gl_display_t *display, gl_word_t Multiplier) ; +void gl_txt_Xgap(gl_display_t *display, gl_word_t Pixels) ; +void gl_txt_Ygap(gl_display_t *display, gl_word_t Pixels) ; + +void gl_BeeP(gl_display_t *display, gl_word_t Note, gl_word_t Duration) ; + +gl_word_t gl_sys_GetModel(gl_display_t *display, unsigned char * ModelStr) ; +gl_word_t gl_sys_GetPmmC(gl_display_t *display) ; +gl_word_t gl_sys_GetVersion(gl_display_t *display) ; + +// AVOID ME SINCE I DON"T CHANGE ESP BAUD RATE +void gl_setbaudWait(gl_display_t *display, gl_word_t Newrate) ; + +void gl_pokeB(gl_display_t *display, gl_word_t Address, gl_word_t ByteValue) ; +void gl_pokeW(gl_display_t *display, gl_word_t Address, gl_word_t WordValue) ; +void gl_SSMode(gl_display_t *display, gl_word_t Parm) ; +void gl_SSSpeed(gl_display_t *display, gl_word_t Speed) ; +void gl_SSTimeout(gl_display_t *display, gl_word_t Seconds) ; +gl_word_t gl_joystick(gl_display_t *display) ; +gl_word_t gl_peekB(gl_display_t *display, gl_word_t Address) ; +gl_word_t gl_peekW(gl_display_t *display, gl_word_t Address) ; + + #ifdef __cplusplus diff --git a/main/hello_world_main.c b/main/hello_world_main.c index 5017b86..309d24f 100644 --- a/main/hello_world_main.c +++ b/main/hello_world_main.c @@ -10,43 +10,115 @@ #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "driver/gpio.h" +#include "driver/uart.h" -#define BUTTON_WHITE 0 -#define BUTTON_GREEN 10 -#define BUTTON_YELLOW 11 -#define BUTTON_BLUE 18 -#define BUTTON_RED 15 -#define VIBRATOR 20 +#include "Goldelox_const4D.h" +#include "goldeloxSerial.h" + +#include "pins.h" + + +const uart_port_t uart_num = UART_NUM_1; + +int write_tx(const void *data, size_t sz) { + return uart_write_bytes(uart_num, data, sz); +} + + +int read_rx(void *data, size_t sz, uint32_t wait_ms) { + if (sizeof(size_t) > sizeof(uint32_t) && sz > UINT32_MAX) + return -1; + return uart_read_bytes(uart_num, data, (uint32_t) sz, + (TickType_t) wait_ms / portTICK_PERIOD_MS); +} + + +int flush_rx() { + return (int) uart_flush(uart_num); +} + + +int flush_tx(uint32_t wait_ms) { + return (int) uart_wait_tx_done(uart_num, + (TickType_t) wait_ms / portTICK_PERIOD_MS); +} void app_main(void) { + // Setup UART buffered IO with event queue + const int uart_buffer_size = UART_HW_FIFO_LEN(uart_num) + 4; + QueueHandle_t uart_queue; + + gl_serif_t serif_ulcd = { + .write_tx = write_tx, + .read_rx = read_rx, + .flush_rx = flush_rx, + .flush_tx = flush_tx + }; + + gl_display_t disp; + printf("Hello world!\n"); - ESP_ERROR_CHECK(gpio_reset_pin(BUTTON_WHITE)); - gpio_set_direction(BUTTON_WHITE, GPIO_MODE_INPUT); - gpio_pullup_en(BUTTON_WHITE); + ESP_ERROR_CHECK(gpio_reset_pin(PIN_BUTTON_WHITE)); + ESP_ERROR_CHECK(gpio_set_direction(PIN_BUTTON_WHITE, GPIO_MODE_INPUT)); + ESP_ERROR_CHECK(gpio_pullup_en(PIN_BUTTON_WHITE)); + + ESP_ERROR_CHECK(gpio_reset_pin(PIN_BUTTON_GREEN)); + ESP_ERROR_CHECK(gpio_set_direction(PIN_BUTTON_GREEN, GPIO_MODE_INPUT)); + gpio_pullup_en(PIN_BUTTON_GREEN); + + ESP_ERROR_CHECK(gpio_reset_pin(PIN_BUTTON_YELLOW)); + ESP_ERROR_CHECK(gpio_set_direction(PIN_BUTTON_YELLOW, GPIO_MODE_INPUT)); + gpio_pullup_en(PIN_BUTTON_YELLOW); + + ESP_ERROR_CHECK(gpio_reset_pin(PIN_BUTTON_BLUE)); + gpio_set_direction(PIN_BUTTON_BLUE, GPIO_MODE_INPUT); + gpio_pullup_en(PIN_BUTTON_BLUE); + + ESP_ERROR_CHECK(gpio_reset_pin(PIN_BUTTON_RED)); + gpio_set_direction(PIN_BUTTON_RED, GPIO_MODE_INPUT); + gpio_pullup_en(PIN_BUTTON_RED); - ESP_ERROR_CHECK(gpio_reset_pin(BUTTON_GREEN)); - gpio_set_direction(BUTTON_GREEN, GPIO_MODE_INPUT); - gpio_pullup_en(BUTTON_GREEN); + ESP_ERROR_CHECK(gpio_reset_pin(PIN_VIBRATOR)); + ESP_ERROR_CHECK(gpio_set_direction(PIN_VIBRATOR, GPIO_MODE_OUTPUT)); + ESP_ERROR_CHECK(gpio_set_drive_capability(PIN_VIBRATOR, GPIO_DRIVE_CAP_3)); - ESP_ERROR_CHECK(gpio_reset_pin(BUTTON_YELLOW)); - gpio_set_direction(BUTTON_YELLOW, GPIO_MODE_INPUT); - gpio_pullup_en(BUTTON_YELLOW); + ESP_ERROR_CHECK(gpio_reset_pin(PIN_ULCD_RESET)); + ESP_ERROR_CHECK(gpio_set_direction(PIN_ULCD_RESET, GPIO_MODE_OUTPUT)); + ESP_ERROR_CHECK(gpio_set_drive_capability(PIN_ULCD_RESET, GPIO_DRIVE_CAP_1)); - ESP_ERROR_CHECK(gpio_reset_pin(BUTTON_BLUE)); - gpio_set_direction(BUTTON_BLUE, GPIO_MODE_INPUT); - gpio_pullup_en(BUTTON_BLUE); + gpio_dump_io_configuration(stdout, (1ULL << PIN_VIBRATOR) | (1ULL << PIN_BUTTON_RED)); - ESP_ERROR_CHECK(gpio_reset_pin(BUTTON_RED)); - gpio_set_direction(BUTTON_RED, GPIO_MODE_INPUT); - gpio_pullup_en(BUTTON_RED); + ESP_ERROR_CHECK(uart_driver_install(uart_num, uart_buffer_size, uart_buffer_size, 10, &uart_queue, 0)); - ESP_ERROR_CHECK(gpio_reset_pin(VIBRATOR)); - gpio_set_direction(VIBRATOR, GPIO_MODE_OUTPUT); - ESP_ERROR_CHECK(gpio_set_drive_capability(VIBRATOR, GPIO_DRIVE_CAP_2)); + uart_config_t uart_config = { + .baud_rate = 9600, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_CTS_RTS, + .rx_flow_ctrl_thresh = 10, + }; + // Configure UART parameters + ESP_ERROR_CHECK(uart_param_config(uart_num, &uart_config)); + // tx then rx + ESP_ERROR_CHECK(uart_set_pin(uart_num, PIN_ULCD_TX, PIN_ULCD_RX, + UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE)); - gpio_dump_io_configuration(stdout, (1ULL << VIBRATOR) | (1ULL << BUTTON_RED)); + ESP_ERROR_CHECK(gpio_set_level(PIN_ULCD_RESET, 0)); + vTaskDelay(100 / portTICK_PERIOD_MS); + ESP_ERROR_CHECK(gpio_set_level(PIN_ULCD_RESET, 1)); + printf("Hello world!\n"); + + gl_init(&disp, &serif_ulcd); + printf("Hello world!\n"); + gl_gfx_BGcolour(&disp, WHITE); + printf("Hello world!\n"); + gl_gfx_Cls(&disp); + printf("Hello world!\n"); + gl_gfx_CircleFilled(&disp, 72, 72, 20, TOMATO); + printf("Hello world!\n"); /* for (int i = 10; i >= 0; i--) { printf("Restarting in %d seconds...\n", i); @@ -56,16 +128,17 @@ void app_main(void) fflush(stdout); esp_restart(); */ + /* initialize uart */ while (1) { /* printf("Button levels: [%d|%d|%d|%d|%d]\n", - gpio_get_level(BUTTON_WHITE), - gpio_get_level(BUTTON_GREEN), - gpio_get_level(BUTTON_YELLOW), - gpio_get_level(BUTTON_BLUE), - gpio_get_level(BUTTON_RED)); + gpio_get_level(PIN_BUTTON_WHITE), + gpio_get_level(PIN_BUTTON_GREEN), + gpio_get_level(PIN_BUTTON_YELLOW), + gpio_get_level(PIN_BUTTON_BLUE), + gpio_get_level(PIN_BUTTON_RED)); */ - ESP_ERROR_CHECK(gpio_set_level(VIBRATOR, !gpio_get_level(BUTTON_RED))); + ESP_ERROR_CHECK(gpio_set_level(PIN_VIBRATOR, !gpio_get_level(PIN_BUTTON_RED))); vTaskDelay(100 / portTICK_PERIOD_MS); } } diff --git a/main/pins.h b/main/pins.h new file mode 100644 index 0000000..6d4cb00 --- /dev/null +++ b/main/pins.h @@ -0,0 +1,16 @@ +#pragma once + +#ifndef __PINS_H__ +#define __PINS_H__ + +#define PIN_BUTTON_WHITE 0 +#define PIN_BUTTON_GREEN 10 +#define PIN_BUTTON_YELLOW 11 +#define PIN_BUTTON_BLUE 18 +#define PIN_BUTTON_RED 15 +#define PIN_VIBRATOR 20 +#define PIN_ULCD_TX 23 +#define PIN_ULCD_RX 22 +#define PIN_ULCD_RESET 19 + +#endif