#include #include #include #include #include #include ///////////////////////////////////////////////////////////////////////////// typedef struct _GFA_MININET_DEVICE { HGFADEVICE hDev; GFA_GENERIC_DEVICE_INTERFACE itf; }GFA_MININET_DEVICE, *LPGFA_MININET_DEVICE; typedef const GFA_MININET_DEVICE *LPCGFA_MININET_DEVICE; ///////////////////////////////////////////////////////////////////////////// HMINETDEV GfaMininetDeviceOpen(LPCGFA_MININET_DEV_CFG_PARAMS pmdcp) { if(pmdcp && pmdcp->itf.pfnOpen) { HGFADEVICE hDev; if((hDev = (*pmdcp->itf.pfnOpen)(pmdcp->pszDeviceName, pmdcp->pDevParams, pmdcp->nSizeDevParams))) { LPGFA_MININET_DEVICE pDev = malloc(sizeof(GFA_MININET_DEVICE)); memset(pDev, 0, sizeof(GFA_MININET_DEVICE)); memcpy(&pDev->itf, &pmdcp->itf, sizeof(GFA_GENERIC_DEVICE_INTERFACE)); pDev->hDev = hDev; return (HMINETDEV)pDev; } return NULL; } errno = EINVAL; return NULL; } ///////////////////////////////////////////////////////////////////////////// void GfaMininetDeviceClose(HMINETDEV hDev) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnClose) (*pDev->itf.pfnClose)(pDev->hDev); free(pDev); } } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDeviceGetConfigParams(HMINETDEV hDev, void *pDevCfgParams, size_t nSizeDevCfgParams) { if(hDev && pDevCfgParams && nSizeDevCfgParams) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnGetConfig) return (*pDev->itf.pfnGetConfig)(pDev->hDev, pDevCfgParams, nSizeDevCfgParams); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// int GfaMininetDeviceSetConfigParams(HMINETDEV hDev, const void *pDevCfgParams, size_t nSizeDevCfgParams) { if(hDev && pDevCfgParams && nSizeDevCfgParams) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnSetConfig) return (*pDev->itf.pfnSetConfig)(pDev->hDev, pDevCfgParams, nSizeDevCfgParams); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// bool GfaMininetDeviceGetTimeouts(HMINETDEV hDev, struct timeval *ptvRX, struct timeval *ptvTX) { if(hDev && (ptvRX || ptvTX)) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnGetTimeouts) return (*pDev->itf.pfnGetTimeouts)(pDev->hDev, ptvRX, ptvTX); errno = EOPNOTSUPP; return false; } errno = EINVAL; return false; } ///////////////////////////////////////////////////////////////////////////// bool GfaMininetDeviceSetTimeouts(HMINETDEV hDev, const struct timeval *ptvRX, const struct timeval *ptvTX) { if(hDev && (ptvRX || ptvTX)) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnSetTimeouts) return (*pDev->itf.pfnSetTimeouts)(pDev->hDev, ptvRX, ptvTX); errno = EOPNOTSUPP; return false; } errno = EINVAL; return false; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDevicePurgeRXBuffer(HMINETDEV hDev) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnPurgeRXBuffer) return (*pDev->itf.pfnPurgeRXBuffer)(pDev->hDev); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDeviceReceive(HMINETDEV hDev, void *pBuf, size_t nCbToRead) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnReceive) return (*pDev->itf.pfnReceive)(pDev->hDev, pBuf, nCbToRead); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDeviceRead(HMINETDEV hDev, void *pBuf, size_t nCbToRead) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnRead) return (*pDev->itf.pfnRead)(pDev->hDev, pBuf, nCbToRead); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDevicePop(HMINETDEV hDev, uint8_t *pb) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnPop) return (*pDev->itf.pfnPop)(pDev->hDev, pb); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDevicePeek(HMINETDEV hDev) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnPeek) return (*pDev->itf.pfnPeek)(pDev->hDev); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDeviceTransmit(HMINETDEV hDev, const void *pData, size_t nCbData) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnTransmit) return (*pDev->itf.pfnTransmit)(pDev->hDev, pData, nCbData); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDeviceWrite(HMINETDEV hDev, const void *pData, size_t nCbData) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnWrite) return (*pDev->itf.pfnWrite)(pDev->hDev, pData, nCbData); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; } ///////////////////////////////////////////////////////////////////////////// ssize_t GfaMininetDevicePush(HMINETDEV hDev, uint8_t b) { if(hDev) { LPGFA_MININET_DEVICE pDev = (LPGFA_MININET_DEVICE)hDev; if(pDev->itf.pfnPush) return (*pDev->itf.pfnPush)(pDev->hDev, b); errno = EOPNOTSUPP; return -1; } errno = EINVAL; return -1; }