Beispiel #1
0
/**
 * Close a 7816 channel
 *
 * @param[in] pContext The context
 *
 * @param[in] pNDEFConnection The NDEF connection
 *
 * @param[in] nError The error to send after the channel has been closed
 */
static void static_PNDEFType4CloseChannel(
               tContext* pContext,
               tNDEFConnection* pNDEFConnection,
               tPBasicGenericDataCallbackFunction * pCallback,
               void * pCallbackParameter,
               W_ERROR   nError)
{
   pNDEFConnection->sType.t4.pChannelCallback = pCallback;
   pNDEFConnection->sType.t4.pChannelCallbackParameter = pCallbackParameter;

   /* Save the error */
   pNDEFConnection->nError = nError;

   if (pNDEFConnection->sType.t4.h7816Channel != W_NULL_HANDLE)
   {
      /* Close the channel */
      PBasicCloseHandleSafe(pContext, pNDEFConnection->sType.t4.h7816Channel, static_PNDEFType4CloseChannelCompleted, pNDEFConnection);
      pNDEFConnection->sType.t4.h7816Channel = W_NULL_HANDLE;
   }
   else
   {
      /* Channel is already closed. Send result */
      tDFCCallbackContext sCallbackContext;
      PDFCFillCallbackContext(pContext, (tDFCCallback*)static_PNDEFType4CloseChannelCompleted, pNDEFConnection, &sCallbackContext);
      PDFCPostContext2(&sCallbackContext, W_SUCCESS);
   }
}
Beispiel #2
0
/** Send result after ReadCC
  *
  */
static void static_PNDEFType4ReadCCAutomatonCompleted(
            tContext* pContext,
            void *pCallbackParameter,
            uint32_t nReceivedAPDULength,
            W_ERROR nError)
{
   tNDEFConnection* pNDEFConnection = (tNDEFConnection*)pCallbackParameter;

   PDFCPostContext2(&pNDEFConnection->sCallbackContext, nError);
}
static void static_W15693WriteCompleted (
            tContext* pContext,
            void *pCallbackParameter,
            W_ERROR nError )
{
   /* Get the command table address */
   t15693Format* p15693Format = (t15693Format*)pCallbackParameter;

   PDebugTrace("static_W15693WriteCompleted: nError=0x%02x",nError);

   PDFCPostContext2( &p15693Format->sCallbackContext, nError );
   CMemoryFree(p15693Format);
}
/* See header */
void PP2PCallSocketWriteCallback(
   tContext         * pContext,
   tP2PSocket       * pP2PSocket,
   W_ERROR            nError)
{
   PDebugTrace("PP2PDataConfirmationCallback %08x - %p %s", pP2PSocket->sConfig.hSocket, pP2PSocket, PUtilTraceError(nError));

   pP2PSocket->bXmitInProgress = W_FALSE;
   pP2PSocket->pXmitBuffer = null;
   pP2PSocket->nXmitBufferLength = 0;

   if (pP2PSocket->hXmitOperation != W_NULL_HANDLE)
   {
      PBasicSetOperationCompleted(pContext, pP2PSocket->hXmitOperation);
   }

   PDFCPostContext2(&pP2PSocket->sXmitCC, nError);
}
static void static_PP2PCallLinkReleaseCallback(
   tContext * pContext,
   tP2PLink * pP2PLink,
   W_ERROR    nError)
{
   /* call only the release callback if the establishment callback has been already called */

   PDebugTrace("static_PP2PCallLinkReleaseCallback : hLink %08x - %p %s", pP2PLink->hLink, pP2PLink, PUtilTraceError(nError) );

   if (pP2PLink->bEstablishedCalled != W_FALSE)
   {
      PDFCPostContext2(&pP2PLink->sReleaseCC, nError);
   }
   else
   {
      if (nError == W_SUCCESS)
      {
         nError = W_ERROR_TIMEOUT;
      }

      static_PP2PCallLinkEstablishmentCallback(pContext, pP2PLink, nError);
   }
}
/* See header */
void PP2PCallSocketReadAndWriteCallbacks(
   tContext     * pContext,
   tP2PSocket   * pP2PSocket,
   W_ERROR        nError)
{
   PDebugTrace("static_PP2PCallReadAndWriteCallbacks nError %d", nError);

   /* call the receive callback */
   if (pP2PSocket->bRecvInProgress)
   {
      pP2PSocket->bRecvInProgress = W_FALSE;
      pP2PSocket->pRecvBuffer = null;

      if (pP2PSocket->hRecvOperation != W_NULL_HANDLE)
      {
         PBasicSetOperationCompleted(pContext, pP2PSocket->hRecvOperation);
         pP2PSocket->hRecvOperation = W_NULL_HANDLE;
      }

      PDFCPostContext3(&pP2PSocket->sRecvCC, 0, nError);
   }

   /* call the send callback */
   if (pP2PSocket->bXmitInProgress)
   {
      pP2PSocket->bXmitInProgress = W_FALSE;
      pP2PSocket->pXmitBuffer = null;

      if (pP2PSocket->hXmitOperation != W_NULL_HANDLE)
      {
         PBasicSetOperationCompleted(pContext, pP2PSocket->hXmitOperation);
         pP2PSocket->hXmitOperation = W_NULL_HANDLE;
      }

      PDFCPostContext2(&pP2PSocket->sXmitCC, nError);
   }
}
/* See Header file */
void PBPrimeUserCreateConnection(
            tContext* pContext,
            W_HANDLE hUserConnection,
            W_HANDLE hDriverConnection,
            tPBasicGenericCallbackFunction* pCallback,
            void* pCallbackParameter,
            uint8_t nProtocol,
            const uint8_t* pBuffer,
            uint32_t nLength )
{
   tPBPrimeUserConnection* pBPrimeUserConnection;
   tDFCCallbackContext sCallbackContext;
   W_ERROR nError;

   PDFCFillCallbackContext(
      pContext,
      (tDFCCallback*)pCallback,
      pCallbackParameter,
      &sCallbackContext );

   /* Create the B PRIME buffer */
   pBPrimeUserConnection = (tPBPrimeUserConnection*)CMemoryAlloc( sizeof(tPBPrimeUserConnection) );
   if ( pBPrimeUserConnection == null )
   {
      PDebugError("PBPrimeUserCreateConnection: pBPrimeUserConnection == null");
      nError = W_ERROR_OUT_OF_RESOURCE;
      goto return_function;
   }
   CMemoryFill(pBPrimeUserConnection, 0, sizeof(tPBPrimeUserConnection));

   pBPrimeUserConnection->nProtocol          = nProtocol;

   /* Store the callback context */
   pBPrimeUserConnection->sCallbackContext = sCallbackContext;

   /* Store the connection information */
   pBPrimeUserConnection->hDriverConnection  = hDriverConnection;

   /* Parse the information */
   if ( ( nError = static_PBPrimeUserParseCardInfo(
                     pContext,
                     pBPrimeUserConnection,
                     pBuffer,
                     nLength ) ) != W_SUCCESS )
   {
      PDebugError( "PBPrimeUserCreateConnection: error while parsing the card information");
      CMemoryFree(pBPrimeUserConnection);
      goto return_function;
   }

   /* Add the B PRIME structure */
   if ( ( nError = PHandleAddHeir(
                     pContext,
                     hUserConnection,
                     pBPrimeUserConnection,
                     P_HANDLE_TYPE_B_PRIME_USER_CONNECTION ) ) != W_SUCCESS )
   {
      PDebugError("PBPrimeUserCreateConnection: could not add the B PRIME buffer");
      /* Send the result */
      CMemoryFree(pBPrimeUserConnection);
      goto return_function;
   }



return_function:

   if(nError != W_SUCCESS)
   {
      PDebugError( "PBPrimeUserCreateConnection: returning %s",
         PUtilTraceError(nError) );
   }

   PDFCPostContext2(
         &sCallbackContext,
         nError );
}
void PNDEFFormatNDEFType6(tContext* pContext,
                          W_HANDLE hConnection,
                          tPBasicGenericCallbackFunction *pCallback,
                          void *pCallbackParameter,
                          uint8_t nTypeTag,
                          uint32_t nTagSize)
{
   t15693Format* p15693Format = null;
   tDFCCallbackContext sCallbackContext;

   PDebugTrace("PNDEFFormatNDEFType6");

   /* Get the connection property number to check if it exists */
   PDFCFillCallbackContext(
      pContext,
      (tDFCCallback*)pCallback,
      pCallbackParameter,
      &sCallbackContext );

   p15693Format = (t15693Format*)CMemoryAlloc( sizeof(t15693Format) );

   if ( p15693Format == null )
   {
      PDebugError("PNDEFFormatNDEFType6: p15693Format == null");
      PDFCPostContext2( &sCallbackContext, W_ERROR_OUT_OF_RESOURCE );
      return;
   }

   /* Store the connection information */
   p15693Format->sCallbackContext   = sCallbackContext;

   switch (nTypeTag)
   {
      case W_PROP_TI_TAGIT :

         P15WriteInternal(pContext,
                     hConnection,
                     static_W15693WriteCompleted,
                     p15693Format,
                     g_TagItFormat,
                     0,
                     sizeof(g_TagItFormat),
                     W_FALSE);
         break;

      case W_PROP_NXP_ICODE :

         switch (nTagSize)
         {
         case P_15693_PHILIPS_SL2ICS20_SIZE:
            P15WriteInternal(pContext,
                     hConnection,
                     static_W15693WriteCompleted,
                     p15693Format,
                     g_ICodeSL2ICS20Format,
                     0,
                     sizeof(g_ICodeSL2ICS20Format),
                     W_FALSE);
            break;

         case P_15693_PHILIPS_SL2ICS53_SIZE:
            P15WriteInternal(pContext,
                     hConnection,
                     static_W15693WriteCompleted,
                     p15693Format,
                     g_ICodeSL2ICS53Format,
                     0,
                     sizeof(g_ICodeSL2ICS53Format),
                     W_FALSE);
            break;

         case P_15693_PHILIPS_SL2ICS50_SIZE:
            P15WriteInternal(pContext,
                     hConnection,
                     static_W15693WriteCompleted,
                     p15693Format,
                     g_ICodeSL2ICS50Format,
                     0,
                     sizeof(g_ICodeSL2ICS50Format),
                     W_FALSE);
            break;

         default:
            static_W15693WriteCompleted(pContext, p15693Format, W_ERROR_CONNECTION_COMPATIBILITY);
            break;
         }
         break;

      case W_PROP_ST_LRI_512 :

         P15WriteInternal(pContext,
                     hConnection,
                     static_W15693WriteCompleted,
                     p15693Format,
                     g_LRI512Format,
                     0,
                     sizeof(g_LRI512Format),
                     W_FALSE);
         break;
   }
}