View Single Post
  #1  
Old 28-06-2004, 17:48
rymoez rymoez is offline
Membre junior
 
Join Date: 28-06-2004
Posts: 1
c urgent probleme de capture d'evenemet

salut
je travaille sur vc++, j'utilise une console , j'ai une fonction de prototype suivant ;
GAP_Perform_Inquiry(BluetoothStackID,itGeneralInquiry, 0, 0, 10, 5,GAP_EventCallback,(unsigned long)0);
avec GAP_EventCallback est un pointeur sur fonction qui s'active des qu'il ya un evenement par exemple (faire un inquiry)

cette fonction est definit en bas , mais mon probleme que
Result = GAP_Perform_Inquiry(BluetoothStackID,itGeneralInquiry, 0, 0, 10, 5,GAP_EventCallback,(unsigned long)0);
me retourne un Result >0 (c a dire succes ) mais l'evenement ne se declenche pas et je sais pas pkoi ,j'ai essaie avec le debugueur mais apparament il n'entre pas a l'interieur de la fonction GAP_EventCallback et GAPEventData pointe sur un zero ;vous n'avez pas une solution c urgent


static void BTPSAPI GAP_EventCallback( unsigned int BluetoothStackID,GAP_Event_Data_t *GAPEventData, unsigned long CallbackParameter)
{
int Index;
int Result;
char temp[128];
Byte_t StatusResult, Num_Keys_Written;
BoardStr_t BoardStr;
GAP_Inquiry_Event_Data_t *GAP_Inquiry_Event_Data;
GAP_Remote_Name_Event_Data_t *GAP_Remote_Name_Event_Data;
GAP_Authentication_Information_t GAP_Authentication_Information;
HCI_Stored_Link_Key_Info_t HCI_Stored_Link_Key_Info;
printf("5555");
if((BluetoothStackID) && (GAPEventData))
{printf("!");
switch(GAPEventData->Event_Data_Type)
{printf("2");
case etInquiry_Result:
/* Bluetooth Stack has the results from a previously */
/* issued GAP Inquiry. */
GAP_Inquiry_Event_Data = GAPEventData->Event_Data.GAP_Inquiry_Event_Data;
if(GAP_Inquiry_Event_Data)
{
/* Inform the user of how many Devices were found. */
printf(" GAP Inquiry Result: %d Found", GAP_Inquiry_Event_Data->Number_Devices);

/* If Devices were found, let's add the Devices to our */
/* Local Board List (and inform the User of the Boards */
/* that were found). */
if((GAP_Inquiry_Event_Data->Number_Devices) && (GAP_Inquiry_Event_Data->GAP_Inquiry_Data))
{
for(Index=0; (Index<GAP_Inquiry_Event_Data->Number_Devices) && (Index < (sizeof(BoardList)/sizeof(BD_ADDR_t))); Index++)
{
BoardList[Index] = GAP_Inquiry_Event_Data->GAP_Inquiry_Data[Index].BD_ADDR;
BD_ADDRToStr(GAP_Inquiry_Event_Data->GAP_Inquiry_Data[Index].BD_ADDR, &BoardStr);
printf(" GAP Inquiry Result: %d: %s", (Index+1), BoardStr);

}

/* Inform the Main GUI Application to populate the */
/* Inquiry List Box. */
PopulateInquiryList(GAP_Inquiry_Event_Data->Number_Devices);
/*PopulateInquiryListFromThread(GAP_Inquiry_Event_Data->Number_Devices);*/
}
}
break;
case etAuthentication:
/* An Authentication Event occurred, determine which Type of*/
/* Authentication Event occurred. */
switch(GAPEventData->Event_Data.GAP_Authentication_Event_Data->GAP_Authentication_Event_Type)
{
case atLinkKeyRequest:
BD_ADDRToStr(GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device, &BoardStr);
sprintf(temp, "GAP_LinkKeyRequest : %s.", BoardStr);

/* Setup the Authentication Information Response */
/* structure. */
GAP_Authentication_Information.GAP_Authentication_Type = atLinkKey;
GAP_Authentication_Information.Authentication_Data_Length = 0;
/* Submit the Authentication Response. */
Result = GAP_Authentication_Response(BluetoothStackID, GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device, &GAP_Authentication_Information);
/* Check the result of the submitted command. */
if(!Result)
{
printf("GAP_Authentication_Response() Success.");
}
else
{
printf("GAP_Authentication_Response() Failure: %d.", TRUE);

}
break;

BD_ADDRToStr(GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device, &BoardStr);
sprintf(temp, "GAP_PINCodeRequest: %s.", BoardStr);


/*CurrentRemoteBDADDR = GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device;
GeneratePinCodeFromThread();*/
break;
case atAuthenticationStatus:
/* An Authentication Status Event occurred, display */
/* all relevant information. */
BD_ADDRToStr(GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device, &BoardStr);
printf( "GAP_AuthenticationStatus : %d Board: %s.", GAPEventData->Event_Data.GAP_Authentication_Event_Data->Authentication_Event_Data.Authentication_Status,
BoardStr);

break;
case atLinkKeyCreation:
/* A Link Key Creation Event occurred, first display */
/* the Remote Device that caused this Event. */
BD_ADDRToStr(GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device, &BoardStr);
printf( "GAP_LinkKeyCreation : %s.", BoardStr);

/* The BD_ADDR of the Remote Device has been displayed*/
/* now display the Link Key being created. */
sprintf(temp, "Link Key: 0x");
for(Index = 0; Index < sizeof(Link_Key_t); Index++)
{
sprintf(&(temp[strlen(temp)]), "%02X", ((Byte_t *)(&(GAPEventData->Event_Data.GAP_Authentication_Event_Data->Authentication_Event_Data.Link_Key)))[Index]);
}
printf(&(temp[strlen(temp)]), ".");

HCI_Stored_Link_Key_Info.BD_ADDR = GAPEventData->Event_Data.GAP_Authentication_Event_Data->Remote_Device;
HCI_Stored_Link_Key_Info.Link_Key = GAPEventData->Event_Data.GAP_Authentication_Event_Data->Authentication_Event_Data.Link_Key;
Result = HCI_Write_Stored_Link_Key(BluetoothStackID, 1, &HCI_Stored_Link_Key_Info, &StatusResult, &Num_Keys_Written);

if(!Result)
{
printf("Link Key Saved Successfully.");
}
else
{
printf("Failure to Save Link Key.");
}
break;
}
break;
case etRemote_Name_Result:
/* Bluetooth Stack has responded to a previously issued */
/* Remote Name Request that was issued. */
GAP_Remote_Name_Event_Data = GAPEventData->Event_Data.GAP_Remote_Name_Event_Data;
if(GAP_Remote_Name_Event_Data)
{
/* Inform the user of the Result. */
BD_ADDRToStr(GAP_Remote_Name_Event_Data->Remote_Device, &BoardStr);
printf("GAP Remote Name Result : BD_ADDR: %s", BoardStr);

if(GAP_Remote_Name_Event_Data->Remote_Name)
printf("GAP Remote Name Result : Name : %s.", GAP_Remote_Name_Event_Data->Remote_Name);
else
printf( "Remote Name : NULL Pointer.");

}
break;
}
}
}
Reply With Quote