CEXIETHERNET::CEXIETHERNET()
{
	tx_fifo = new u8[1518];
	mBbaMem = new u8[BBA_MEM_SIZE];

	mRecvBuffer = new u8[BBA_RECV_SIZE];
	mRecvBufferLength = 0;

	MXHardReset();

	// Parse MAC address from config, and generate a new one if it doesn't
	// exist or can't be parsed.
	std::string &mac_addr_setting = SConfig::GetInstance().m_bba_mac;
	u8 mac_addr[MAC_ADDRESS_SIZE] = { 0 };

	if (!StringToMacAddress(mac_addr_setting, mac_addr))
	{
		GenerateMacAddress(BBA, mac_addr);
		mac_addr_setting = MacAddressToString(mac_addr);
		SConfig::GetInstance().SaveSettings();
	}

	memcpy(&mBbaMem[BBA_NAFR_PAR0], mac_addr, MAC_ADDRESS_SIZE);

	// HACK: .. fully established 100BASE-T link
	mBbaMem[BBA_NWAYS] = NWAYS_LS100 | NWAYS_LPNWAY | NWAYS_100TXF | NWAYS_ANCLPT;

#if defined(_WIN32)
	mHAdapter = INVALID_HANDLE_VALUE;
	mHRecvEvent = INVALID_HANDLE_VALUE;
	mHReadWait = INVALID_HANDLE_VALUE;
#elif defined(__linux__) || defined(__APPLE__)
	fd = -1;
#endif
}
Exemplo n.º 2
0
CEXIETHERNET::CEXIETHERNET()
{
  tx_fifo = std::make_unique<u8[]>(BBA_TXFIFO_SIZE);
  mBbaMem = std::make_unique<u8[]>(BBA_MEM_SIZE);

  mRecvBuffer = std::make_unique<u8[]>(BBA_RECV_SIZE);
  mRecvBufferLength = 0;

  MXHardReset();

  // Parse MAC address from config, and generate a new one if it doesn't
  // exist or can't be parsed.
  std::string& mac_addr_setting = SConfig::GetInstance().m_bba_mac;
  u8 mac_addr[Common::MAC_ADDRESS_SIZE] = {0};

  if (!Common::StringToMacAddress(mac_addr_setting, mac_addr))
  {
    Common::GenerateMacAddress(Common::MACConsumer::BBA, mac_addr);
    mac_addr_setting = Common::MacAddressToString(mac_addr);
    SConfig::GetInstance().SaveSettings();
  }

  memcpy(&mBbaMem[BBA_NAFR_PAR0], mac_addr, Common::MAC_ADDRESS_SIZE);

  // HACK: .. fully established 100BASE-T link
  mBbaMem[BBA_NWAYS] = NWAYS_LS100 | NWAYS_LPNWAY | NWAYS_100TXF | NWAYS_ANCLPT;

#if defined(_WIN32)
  mHAdapter = INVALID_HANDLE_VALUE;
  memset(&mReadOverlapped, 0, sizeof(mReadOverlapped));
  memset(&mWriteOverlapped, 0, sizeof(mWriteOverlapped));
  mWritePending = false;
#elif defined(__linux__) || defined(__APPLE__)
  fd = -1;
#endif
}
Exemplo n.º 3
0
CEXIETHERNET::CEXIETHERNET()
{
	tx_fifo = new u8[1518];
	mBbaMem = new u8[BBA_MEM_SIZE];

	mRecvBuffer = new u8 [BBA_RECV_SIZE];
	mRecvBufferLength = 0;

	MXHardReset();

	// Parse MAC address from config, and generate a new one if it doesn't
	// exist or can't be parsed.

	auto &mac_addr_setting = SConfig::GetInstance().m_bba_mac;
	bool mac_addr_valid = false;
	u8 mac_addr[6] = { 0 };

	if (!mac_addr_setting.empty())
	{
		int x = 0;

		for (size_t i = 0; i < mac_addr_setting.size() && x < 12; i++)
		{
			char c = mac_addr_setting.at(i);
			if (c >= '0' && c <= '9')
			{
				mac_addr[x / 2] |= (c - '0') << ((x & 1) ? 0 : 4); x++;
			}
			else if (c >= 'A' && c <= 'F')
			{
				mac_addr[x / 2] |= (c - 'A' + 10) << ((x & 1) ? 0 : 4); x++;
			}
			else if (c >= 'a' && c <= 'f')
			{
				mac_addr[x / 2] |= (c - 'a' + 10) << ((x & 1) ? 0 : 4); x++;
			}
		}

		if (x / 2 == 6)
		{
			memcpy(&mBbaMem[BBA_NAFR_PAR0], mac_addr, 6);
			mac_addr_valid = true;
		}
	}

	if (!mac_addr_valid)
	{
		GenerateMAC(BBA, mac_addr);

		mac_addr_setting = ArrayToString(mac_addr, 6, 10, false);
		SConfig::GetInstance().SaveSettings();

		memcpy(&mBbaMem[BBA_NAFR_PAR0], mac_addr, 6);
	}

	// HACK: .. fully established 100BASE-T link
	mBbaMem[BBA_NWAYS] = NWAYS_LS100 | NWAYS_LPNWAY | NWAYS_100TXF | NWAYS_ANCLPT;

#if defined(_WIN32)
	mHAdapter = INVALID_HANDLE_VALUE;
	mHRecvEvent = INVALID_HANDLE_VALUE;
	mHReadWait = INVALID_HANDLE_VALUE;
#elif defined(__linux__)
	fd = -1;
#endif
}