diff --git a/src/gdisp/driver.h b/src/gdisp/driver.h index 98bf64fc..8d22135d 100644 --- a/src/gdisp/driver.h +++ b/src/gdisp/driver.h @@ -620,7 +620,7 @@ typedef struct GDISPVMT { #ifdef __cplusplus extern "C" { #endif - bool_t _gdispInitDriver(GDriver *g, unsigned driverinstance, unsigned systeminstance); + bool_t _gdispInitDriver(GDriver *g, void *param, unsigned driverinstance, unsigned systeminstance); void _gdispPostInitDriver(GDriver *g); void _gdispDeInitDriver(GDriver *g); #ifdef __cplusplus diff --git a/src/gdisp/gdisp_gdisp.c b/src/gdisp/gdisp_gdisp.c index 74cfb67e..1552cea6 100644 --- a/src/gdisp/gdisp_gdisp.c +++ b/src/gdisp/gdisp_gdisp.c @@ -572,7 +572,7 @@ void _gdispInit(void) static const struct GDriverVMT const * dclist[] = {GDISP_DRIVER_LIST}; for(i = 0; i < sizeof(dclist)/sizeof(dclist[0]); i++) - gdriverRegister(dclist[i]); + gdriverRegister(dclist[i], 0); } #elif GDISP_TOTAL_DISPLAYS > 1 { @@ -580,13 +580,13 @@ void _gdispInit(void) extern GDriverVMTList GDISPVMT_OnlyOne; for(i = 0; i < GDISP_TOTAL_DISPLAYS; i++) - gdriverRegister(GDISPVMT_OnlyOne); + gdriverRegister(GDISPVMT_OnlyOne, 0); } #else { extern GDriverVMTList GDISPVMT_OnlyOne; - gdriverRegister(GDISPVMT_OnlyOne); + gdriverRegister(GDISPVMT_OnlyOne, 0); } #endif @@ -620,9 +620,10 @@ void _gdispDeinit(void) /* ToDo */ } -bool_t _gdispInitDriver(GDriver *g, unsigned driverinstance, unsigned systeminstance) { +bool_t _gdispInitDriver(GDriver *g, void *param, unsigned driverinstance, unsigned systeminstance) { #define gd ((GDisplay *)g) bool_t ret; + (void) param; // Intialise fields gd->systemdisplay = systeminstance; diff --git a/src/gdriver/gdriver_gdriver.c b/src/gdriver/gdriver_gdriver.c index 3c17fca0..d44d6f3c 100644 --- a/src/gdriver/gdriver_gdriver.c +++ b/src/gdriver/gdriver_gdriver.c @@ -27,7 +27,7 @@ void _gdriverDeinit(void) { } -GDriver *gdriverRegister(const GDriverVMT *vmt) { +GDriver *gdriverRegister(const GDriverVMT *vmt, void *param) { GDriver * pd; GDriver * dtail; unsigned dinstance, sinstance; @@ -47,7 +47,7 @@ GDriver *gdriverRegister(const GDriverVMT *vmt) { return 0; memset(pd, 0, vmt->objsize); pd->vmt = vmt; - if (vmt->init && !vmt->init(pd, dinstance, sinstance)) { + if (vmt->init && !vmt->init(pd, param, dinstance, sinstance)) { gfxFree(pd); return 0; } diff --git a/src/gdriver/sys_defs.h b/src/gdriver/sys_defs.h index d8de25fc..f7bf622e 100644 --- a/src/gdriver/sys_defs.h +++ b/src/gdriver/sys_defs.h @@ -67,7 +67,7 @@ typedef struct GDriverVMT { uint16_t type; // @< What type of driver this is uint16_t flags; // @< Flags for the driver. Meaning is specific to each driver type. uint32_t objsize; // @< How big the runtime driver structure is - bool_t (*init)(GDriver *driver, unsigned driverinstance, unsigned systeminstance); // @< Initialise the driver. Returns TRUE if OK. + bool_t (*init)(GDriver *driver, void *param, unsigned driverinstance, unsigned systeminstance); // @< Initialise the driver. Returns TRUE if OK. // driverinstance is the instance 0..n of this driver. // systeminstance is the instance 0..n of this type of device. // The memory allocated is cleared before this call. @@ -102,8 +102,9 @@ extern "C" { * @return The runtime driver structure or NULL if it fails. * * @param[in] vmt The driver's vmt + * @param[in] param An arbitrary paramater passed to the driver init routine. */ - GDriver *gdriverRegister(const GDriverVMT *vmt); + GDriver *gdriverRegister(const GDriverVMT *vmt, void *param); /** * @brief UnRegister a driver instance.