Я написал своб прошивку и последним моментом осталось прикрутить запрос пин-кода при коннекте к модулю.
Я изучил все примеры в папке с blueLab. Судя по описанию и коду, везде должен быть запрос пин-кода 1234. Но на деле соединение устанавливается без запроса. Я пытался изменить ключ PSKEY_FIXED_PIN, но эффекта это не дает.
В сети я нашел бинарник какой-то прошивки, которая работает как UART повторитель. Там пин-код есть (впрочем, как и в заводской прошивке). Но как это реализовано в коде, непонятно.
Я так понимаю, пин код должен запрашиваться тут (на примере spp_dev_b):
Код
case CL_SM_PIN_CODE_IND:
DEBUG(("CL_SM_PIN_CODE_IND\n"));
sppDevHandlePinCodeRequest((CL_SM_PIN_CODE_IND_T *) message);
break;
DEBUG(("CL_SM_PIN_CODE_IND\n"));
sppDevHandlePinCodeRequest((CL_SM_PIN_CODE_IND_T *) message);
break;
А непосредственно сам обработчик такой:
Код
void sppDevHandlePinCodeRequest(const CL_SM_PIN_CODE_IND_T* ind)
{
uint8 pin[16];
uint16 pin_length = 0;
/* Do we have a fixed pin in PS, if not reject pairing (by setting the length to zero) */
if ((pin_length = PsFullRetrieve(PSKEY_FIXED_PIN, pin, 16)) == 0 || pin_length > 16)
pin_length = 0;
ConnectionSmPinCodeResponse(&ind->bd_addr, pin_length, pin);
}
{
uint8 pin[16];
uint16 pin_length = 0;
/* Do we have a fixed pin in PS, if not reject pairing (by setting the length to zero) */
if ((pin_length = PsFullRetrieve(PSKEY_FIXED_PIN, pin, 16)) == 0 || pin_length > 16)
pin_length = 0;
ConnectionSmPinCodeResponse(&ind->bd_addr, pin_length, pin);
}
Но ничего не работет. Любопытно еще, что в коде проекта spp_dev_a код абсолютно аналогичный, но ведь роль у этого проекта иная- быть клиентом, который устанавливает подключение к spp_dev_b