AT91SAM7 用の Atmel ライブラリ USB を調べましたが、理解できないことがあります。エンドポイントは、次のように定義された構造体です。
typedef struct {
volatile unsigned char state;
volatile unsigned char bank;
volatile unsigned short size;
Transfer transfer; //thus Endpoint contains an instance of "Transfer"
} Endpoint
点; また、 Transfer 自体は次のような構造です。
typedef struct {
char *pData;
volatile int buffered;
volatile int transferred;
volatile int remaining;
volatile TransferCallback fCallback;
void *pArgument;
} Transfer;
TransferCallback は、次のプロトタイプを持つ関数です。
typedef void (*TransferCallback)(void *pArg, unsigned char status, unsigned int transferred, unsigned int remaining);
また、2 つのポインターが次のように定義されています。
Endpoint *pEndpoint = &(endpoints[bEndpoint]);
Transfer *pTransfer = &(pEndpoint->transfer);
関数 TransferCallback を呼び出すこのような方法が有効である理由を知りたいです。
((TransferCallback) pTransfer->fCallback) (followed by the required arguments passed )
しかし、これは有効ではありません:
((TransferCallback)pEndpoint->transfer->fCallback)?
間に pTransfer などのポインターを使用せずに TransferCallback を直接呼び出すにはどうすればよいですか? いくつかの組み合わせを試しましたが、どれもうまくいきませんでした。