#include #include "gcn64lib.h" #include "../requests.h" int gcn64lib_getConfig(gcn64_hdl_t hdl, unsigned char param, unsigned char *rx, unsigned char rx_max) { unsigned char cmd[2]; int n; cmd[0] = RQ_GCN64_GET_CONFIG_PARAM; cmd[1] = param; n = gcn64_exchange(hdl, cmd, 2, rx, rx_max); if (n<2) return n; n -= 2; // Drop the leading CMD and PARAM if (n) { memmove(rx, rx+2, n); } return n; } int gcn64lib_setConfig(gcn64_hdl_t hdl, unsigned char param, unsigned char *data, unsigned char len) { unsigned char cmd[2 + len]; int n; cmd[0] = RQ_GCN64_SET_CONFIG_PARAM; cmd[1] = param; memcpy(cmd + 2, data, len); n = gcn64_exchange(hdl, cmd, 2 + len, cmd, sizeof(cmd)); if (n<0) return n; return 0; } int gcn64lib_suspendPolling(gcn64_hdl_t hdl, unsigned char suspend) { unsigned char cmd[2]; int n; cmd[0] = RQ_GCN64_SUSPEND_POLLING; cmd[1] = suspend; n = gcn64_exchange(hdl, cmd, 2, cmd, sizeof(cmd)); if (n<0) return n; return 0; } int gcn64lib_rawSiCommand(gcn64_hdl_t hdl, unsigned char channel, unsigned char *tx, unsigned char tx_len, unsigned char *rx, unsigned char max_rx) { unsigned char cmd[3 + tx_len]; int cmdlen, rx_len, n; cmd[0] = RQ_GCN64_RAW_SI_COMMAND; cmd[1] = channel; cmd[2] = tx_len; memcpy(cmd+3, tx, tx_len); cmdlen = 3 + tx_len; n = gcn64_exchange(hdl, cmd, cmdlen, rx, max_rx); if (n<0) return n; rx_len = rx[2]; memmove(rx, rx + 3, rx_len); return rx_len; }