nt9856x/code/application/sifarsdk/333DE/hal/NetworkModule333DE.cpp

85 lines
2.5 KiB
C++

#include "NetworkModule333DE.h"
#include "SfTypeDefine.h"
#include "Log.h"
#include <unistd.h>
#include <thread>
constexpr U32 GPIOID_SIM_INSRET = 4;
constexpr U32 GPIOID_USB_MUX1 = 16;
RETURN_CODE NetworkModule333DE::Init(void)
{
LogInfo("NetworkModule333DE::Init.\n");
GpioInit(GPIOID_SIM_INSRET, GPIO_DIR_IN);
GpioInit(GPIOID_USB_MUX1, GPIO_DIR_OUT);
GpioSet(GPIOID_USB_MUX1, GPIO_PIN_HIGHT);
NetworkModule::Init();
return VReturnCode::NewCode(VReturnCodeDefine::OK);
}
RETURN_CODE NetworkModule333DE::UnInit(void)
{
NetworkModule::UnInit();
GpioDeinit(GPIOID_SIM_INSRET);
GpioDeinit(GPIOID_USB_MUX1);
return VReturnCode::NewCode(VReturnCodeDefine::OK);
}
RETURN_CODE NetworkModule333DE::IsHardwareSupport(void)
{
LogInfo("NetworkModule333DE::IsHardwareSupport.\n");
SINT8 regValue = 0;
// TODO: Multi thread safe?
// GpioInit(GPIOID_SIM_INSRET, GPIO_DIR_IN);
GpioGet(GPIOID_SIM_INSRET, regValue);
// GpioDeinit(GPIOID_SIM_INSRET);
if (regValue & 0xFF)
{
return VReturnCode::NewCode(VReturnCodeDefine::OK);
}
LogError("Don't support usd network module.\n");
return VReturnCode::NewCode(VReturnCodeDefine::NOT_OK_UNDEFINE_REASON);
}
RETURN_CODE NetworkModule333DE::NetDriverLoad(void)
{
constexpr int CMD_BUF_LENGTH = 128;
char cmd[CMD_BUF_LENGTH] = {0};
int ret = SF_FAILURE;
for (UINT8 i = 0; i < 40; i++)
{
if (access("/dev/qcqmi0", F_OK) == SF_SUCCESS)
{
ret = SF_SUCCESS;
LogInfo("usb net ko exist!\n");
break;
}
else
{
usleep(100 * 1000);
}
}
if (ret == SF_SUCCESS)
{
sprintf(cmd, "/customer/quectel-CM -n %d&", E_PDP_INDEX);
int resutl = system(cmd);
LogInfo("system function result = %d\n", resutl);
std::this_thread::sleep_for(std::chrono::milliseconds(1000 * 5));
return VReturnCode::NewCode(VReturnCodeDefine::OK);
}
return VReturnCode::NewCode(VReturnCodeDefine::NOT_OK_UNDEFINE_REASON);
}
unsigned int NetworkModule333DE::GetPdpIndex(void)
{
return E_PDP_INDEX;
}
const char *USB_NODE = "/dev/ttyUSB2";
SF_SERIAL_DATA_FRAME_TYPE_S NetworkModule333DE::GetUsbNode(void)
{
SF_SERIAL_DATA_FRAME_TYPE_S node = {
USB_NODE,
'N',
'N',
8,
1,
460800};
// LogInfo("Get 333DE node message.\n");
return node;
}