-
Notifications
You must be signed in to change notification settings - Fork 0
Home
通过关键字搜索附近开启的蓝牙设备,关键字为WOOKONG BIO 当搜索到设备时候调用连接方法,搜索超时时间为15s
int devInfoState = PAEW_GetDeviceListWithDevContext(nDeviceType, szDeviceNames, &nDeviceNameLen, &nDevCount, &DevContext, sizeof(DevContext)); int connectDev = PAEW_InitContextWithDevNameAndDevContext(&ppPAEWContext, szDeviceName, nDeviceType, &additional, sizeof(additional));连接时会判断首先判断该设备是否为本地设备(曾经连接过的为本地设备),然后判断该设备是否已经连接,如果处于连接状态则断开连接。当手机连接到其他设备时候,先断开其他设备,然后连接该设备。
之前的闪退是下面这个方法会导致空指针异常,现在库里最新的包是他们的debug版本,我目前测试下来没有出现闪退问题,等后续他们还会给我们一个release版本
int connectDev = PAEW_InitContextWithDevNameAndDevContext(&ppPAEWContext, szDeviceName, nDeviceType, &additional, sizeof(additional));只有设备连接成功后才可以调用下面的方法来获取卡的状态。会有三种情况,未初始化(需进行初始化操作),初始化好但是没有助记词(跳入助记词备份),初始化好(直接跳入硬件钱包主页)。对硬件钱包来说,初始化仅代表生成了PIN码,生成钱包需生成内部生成助记词。
int devInfoState = PAEW_GetDevInfo(ppPAEWContext, i, nDevInfoType, &devInfo);在调用下面的方法生成助记词后,需要调用check方法,助记词才被确认
iRtn = PAEW_GenerateSeed_GetMnes(ppPAEWContext, devIdx, nSeedLen, pbMneWord, &pnMneWordLen, pnCheckIndex, &pnCheckIndexCount); int iRtn = PAEW_GenerateSeed_CheckMnes(ppPAEWContext, devIdx, (const unsigned char *)[pbMneWordStr UTF8String], pbMneWordStr.length);通过下面方法可以获取BTC ETH地址以及EOS公钥,传入对应参数,bAddress为地址
iRtn = PAEW_DeriveTradeAddress(ppPAEWContext, devIdx, PAEW_COIN_TYPE_BTC, puiDerivePathBTC, sizeof(puiDerivePathBTC)/sizeof(puiDerivePathBTC[0]));
iRtn = PAEW_GetTradeAddress(ppPAEWContext, devIdx, PAEW_COIN_TYPE_BTC, showOnScreen, bAddress, &nAddressLen);这里指从未连接过得设备,如果该设备未初始化,则走连接流程,如果该设备已经初始化过,需要验证该设备PIN码才能进入下一步
下面方法分别为电池状态回调,设备异常断开回调,第二个方法只有在未正常调用断开连接方法,如设备长时间未操作,设备电量不足。这时候在进行重设密码,重设指纹,格式化等操作会提示错误信息
int BatteryCallback(const int nBatterySource, const int nBatteryState)
{
NSLog(@"current battery source is: %d, current battery state is: 0x%X", nBatterySource, nBatteryState);
return PAEW_RET_SUCCESS;
}
int DisconnectedCallback(const int status, const char *description)
{
NSLog(@"device has disconnected already, status code is: %d, detail is: %s", status, description);
[HardwareManger shareInstance].isDisconnected = YES;
return PAEW_RET_SUCCESS;
}该方法为手动断开连接
iRtn = PAEW_FreeContext(ppPAEWContext);当设备进行修改PIN码、格式化、初始化输入PIN码时需要按卡右上角的物理按键。三种情况下会同意调起HardWareConfirmViewController页面,使用block形式进行回调,返回是否进行物理按键确认
int initState = PAEW_ChangePIN_Input_Ex(ppPAEWContext, devIdx, [self.oldPassword UTF8String], [self.password UTF8String], PutState_Callback, NULL);
iRtn = PAEW_Format_Ex(ppPAEWContext, devIdx, PutState_Callback, NULL);
int initState = PAEW_InitPIN_Ex(ppPAEWContext, devIdx, [self.password UTF8String], PutState_Callback, NULL);硬件钱包交易原理为,将我们构造的交易体通过调用SDK方法进行签名,签名后重新构造交易体。签名同样需要进行物理按键确认。签名阶段硬件钱包一直在等待设备签名成功。当指纹出错多次后,回切入密码验证
iRtn = PAEW_EOS_GetSignResult(ppPAEWContext, devIdx, authType, pbTXSig, &pnTXSigLen);
iRtn = PAEW_EOS_GetSignResult(ppPAEWContext, devIdx, authType, pbTXSig, &pnTXSigLen);用于管理硬件设备,储存了卡的序列号 以太坊地址 比特币地址 Eos公钥。当设备成功连接时,写入序列号,当助记词成功初始化时,写入比特币和以太坊钱包,EOS公钥会在EOS主页写入。由于比特币的签名问题,如果这个硬件钱包不是在我们钱包初始化的话,不会写入比特币钱包,会在点击时要求导入助记词。