Пример #1
0
void sink_write(Sink sink, const char *buf, int size)
{
    int offset = SinkClaim(sink, size);
    uint8 *dest = SinkMap(sink);
    memcpy(dest + offset, buf, size);
    SinkFlush(sink, size);
}
bool swatSendData(remoteDevice *device, uint8 *data, uint16 len)
{
    uint8 * sink_ptr;      /* Ptr to the first byte in the sink */
    uint16 claim_result;   /* Result from the sink claim */
    
    /* Get the signalling data from the Sink */
    claim_result = SinkClaim(device->signalling_sink, len);
    if (claim_result == 0xffff)
    {
        SWAT_DEBUG(("[SWAT] swatSendData failed claim\n"));
        return FALSE;
    }
    else
    {
        sink_ptr = SinkMap(device->signalling_sink);
        
        if (sink_ptr)
        {   
            sink_ptr += claim_result;                           /* Point to the claimed data area of the sink */
            memmove(sink_ptr, data, len);                       /* Copy data to the sink */
            return(SinkFlush(device->signalling_sink, len));    /* Send the data */
        }
        else
        {
            SWAT_DEBUG(("[SWAT] swatSendData failed ptr\n"));
            return FALSE;
        }
    }
}
Пример #3
0
void ConnectionSendSinkDataTestExtra(Sink sink, uint16 size_data, uint8* data)
{
    uint8* s=SinkMap(sink);
    uint16 o=SinkClaim(sink,size_data);

    memmove(s+o, data, size_data);
    
    SinkFlush(sink, size_data);
}
Пример #4
0
void A2dpSendMediaPacketTestExtra(uint16 device_id, uint16 stream_id)
{
    static const uint8 pkt[] = { 0x80, 0x01, 0x50, 0xcf, 0xcb, 0xd7, 0xd0, 0x20, 0xfa, 0x84, 
                                 0xea, 0x9b, 0x05, 0x9c, 0xbd, 0x3b, 0xff, 0xfc, 0xca, 0x88,
                                 0x78, 0x33, 0x98, 0x86, 0x85, 0x66, 0x7f, 0xbe, 0xee, 0xdd };
    Sink media_sink = A2dpMediaGetSink( device_id, stream_id );
    uint8 *dest = SinkMap(media_sink) +  SinkClaim(media_sink, sizeof(pkt));
    memmove(dest, pkt, sizeof(pkt));
    SinkFlush(media_sink, sizeof(pkt));
}
Пример #5
0
bool uart_write(const char * buffer, uint16 size)
{
    Sink sink = StreamUartSink();
    uint16 offset = SinkClaim(sink, size);
    uint8 * address;
    if (offset == 0xffff) return FALSE;
    address = SinkMap(sink);
    memcpy(address + offset, buffer, size);
    return SinkFlush(sink, size);
}
static uint8 *claimSink(Sink sink, uint16 size)
{
    uint8 *dest = SinkMap(sink);
    uint16 claim_result = SinkClaim(sink, size);
    if (claim_result == 0xffff)
    {
        return 0;
    }

    return (dest + claim_result);
}
Пример #7
0
void ConnectionSendSinkAutoDataTestExtra(Sink sink, uint16 size_data)
{
    uint8* s=SinkMap(sink);
    uint16 o;

    printf("Data to send of size %d",size_data);
    o= SinkClaim(sink,size_data);
    if (0xFFFF == o) 
    {
        printf("Failed to Claim Sink for Data size %d",size_data);
        return;            
    }

    /* Memset with the same value */
    memset(s+o, 0x31, size_data);
    printf("Sending Data of size %d",size_data);
    
    SinkFlush(sink, size_data);
}
Пример #8
0
/**************************************************************************
 * NAME
 *  obexSetPathReq
 *
 * Description
 *   Issue a OBEX Setpath Request 
 *
 * PARAMETERS
 *  session - OBEX session
 *  flags   - Setpath flags
 **************************************************************************/
void obexSetPathReq( Obex session, uint8 flag )
{
    uint8* pkt = SinkMap( session->sink );

   /* Check the current state */
    if( !(IsObexConnected( session )))
    {
        /* Invalid state */
         OBEX_OBJ_DELETE( session );
         obexSetPathCfm( session, obex_invalid_command ); 
         return;     
    }

    /* 3rd byte of setpath is flag and 4th byte reserved */
    pkt[3] = flag;
    pkt[4] = 0;  

    /* send the packet */
    obexFlushPacket( session, OBEX_SET_PATH );

    /* set the state */        
    SET_OBEX_IN_SETPATH( session );
}
Пример #9
0
/* Check which AT cmd was waiting for this response */
static void atCmdAckReceived(hfp_link_data* link, hfp_lib_status status)
{
    Sink sink = hfpGetLinkSink(link);
    MessageId cfm_id = HFP_NO_CFM;
    
    /* Cancel the AT response timeout message */
    (void) MessageCancelAll(&theHfp->task, hfpGetLinkTimeoutMessage(link, HFP_INTERNAL_WAIT_AT_TIMEOUT_LINK_0_IND));

    /* Which message was waiting for this? */
    switch (link->at_cmd_resp_pending)
    {
    case hfpCmdPending:
        /* This is a cmd which we don't particularly care about, as long as we get the ack */
        break;

    case hfpBrsfCmdPending:
        /* Have received response to AT+BRSF */
        hfpHandleBrsfAtAck(link, status);
        break;

    case hfpBacCmdPending:
        /* Have received response to AT+BAC */
        hfpHandleBacAtAck(link, status);
        break;
        
    case hfpCindTestCmdPending:
        /* Have received response to AT+CIND=? */
        hfpHandleCindTestAtAck(link, status);
        break;
    
    case hfpCindReadCmdPending:
        /* Have received response to AT+CIND? */
        hfpHandleCindReadAtAck(link, status);
        break;
        
    case hfpCmerCmdPending:
        /* Have received response to AT+CMER */
        hfpHandleCmerAtAck(link, status);
        break;
    
    case hfpChldStatusCmdPending:
        /* Have received response to AT+CHLD=? */
        (void)hfpSlcCheckAtAck(link, status);
        break;
        
    case hfpBccCmdPending:
        /* Have received a response to AT+BCC */
        hfpHandleBccAtAck(link, status);
        break;
    
    case hfpBcsCmdPending:
        /* Have received a response to AT+BCS */
        hfpHandleBcsAtAck(link, status);
        break;
        
    case hfpBldnCmdPending:
        /* Have received a response to AT+BLDN */
        cfm_id = HFP_DIAL_LAST_NUMBER_CFM;
        /* This is necessary when dealing with 0.96 AGs */
        hfpHandleCallDialComplete(link, status);
        break;
    
    case hfpAtdNumberCmdPending:
        /* Have received a response to ATD */
        cfm_id = HFP_DIAL_NUMBER_CFM;
        /* This is necessary when dealing with 0.96 AGs */
        hfpHandleCallDialComplete(link, status);
        break;
    
    case hfpAtdMemoryCmdPending:
        /* Have received a response to ATD> */
        cfm_id = HFP_DIAL_MEMORY_CFM;
        /* This is necessary when dealing with 0.96 AGs */
        hfpHandleCallDialComplete(link, status);
        break;
        
    case hfpBvraCmdPending:
        /* Have received a response to AT+BVRA */
        cfm_id = HFP_VOICE_RECOGNITION_ENABLE_CFM;
        /* This is necessary when dealing with 0.96 AGs */
        hfpHandleCallDialComplete(link, status);
        break;
    
    case hfpNrecCmdPending:
        /* Have received a response to AT+NREC */
        hfpHandleNrecAtAck(link, status);
        break;
    
    case hfpBiaCmdPending:
        /* Have received a response to AT+BIA */
        hfpHandleBiaAtAck(link, status);
        break;
    
    case hfpCopsFormatCmdPending:
        /* Have received a response to AT+COPS= */
        cfm_id = hfpHandleCopsFormatAtAck(link, status);
        break;
        
    case hfpChldOneCmdPending:
        /* Have received response to AT+CHLD=1 */
        hfpHandleChldAtAck(link, hfp_chld_release_active_accept_other, status);
        break;
        
    case hfpChldThreeCmdPending:
        /* Have received response to AT+CHLD=3 */
        hfpHandleChldAtAck(link, hfp_chld_add_held_to_multiparty, status);
        break;
        
    case hfpBtrhStatusCmdPending:
        /* Have received a response to AT+BTRH? */
        hfpHandleBtrhStatusAtAck(link, status);
        break;
    
    case hfpCsrSfPending:
        /* Have received a response to AT+CSRSF */
        hfpCsrFeaturesHandleCsrSfAtAck(link, status);
        break;
        
    case hfpCsrGetSmsPending:
        /* Have received a response to AT+CSRGETSMS */
        hfpCsrFeaturesHandleGetSmsAtAck(link, status);
        break;

#ifndef HFP_MIN_CFM
    case hfpClipCmdPending:
        /* Have received a response to AT+CLIP= */
        cfm_id = HFP_CALLER_ID_ENABLE_CFM;
        break;

    case hfpAtaCmdPending:
        /* Have received response to ATA */
        cfm_id = HFP_CALL_ANSWER_CFM;
        break;

    case hfpChupCmdPending:
        /* Have received response to AT+CHUP */
        cfm_id = hfpHandleChupAtAck(link);
        break;
        
    case hfpCcwaCmdPending:
        /* Have received response to AT+CCWA */
        cfm_id = HFP_CALL_WAITING_ENABLE_CFM;
        break;
    
    case hfpBtrhZeroCmdPending:
        /* Have received a response to AT+BTRH=0 */
        hfpHandleBtrhAtAck(link, hfp_incoming_call_held, status);
        break;
    
    case hfpBtrhOneCmdPending:
        /* Have received a response to AT+BTRH=1 */
        hfpHandleBtrhAtAck(link, hfp_held_call_accepted, status);
        break;
    
    case hfpBtrhTwoCmdPending:
        /* Have received a response to AT+BTRH=2 */
        hfpHandleBtrhAtAck(link, hfp_held_call_rejected, status);
        break;
        
    case hfpChldZeroCmdPending:
        /* Have received response to AT+CHLD=0 */
        hfpHandleChldAtAck(link, hfp_chld_release_held_reject_waiting, status);
        break;
        
    case hfpChldOneIdxCmdPending:
        /* Have received response to AT+CHLD=1x */
        hfpHandleChldAtAck(link, hfp_chld_release_active_accept_other, status);
        break;
        
    case hfpChldTwoCmdPending:
        /* Have received response to AT+CHLD=2 */
        hfpHandleChldAtAck(link, hfp_chld_hold_active_accept_other, status);
        break;
        
    case hfpChldTwoIdxCmdPending:
        /* Have received response to AT+CHLD=2x */
        hfpHandleChldAtAck(link, hfp_chld_hold_active_accept_other, status);
        break;
        
    /* Always need to handle multiparty ack */
        
    case hfpChldFourCmdPending:
        /* Have received response to AT+CHLD=4 */
        hfpHandleChldAtAck(link, hfp_chld_join_calls_and_hang_up, status);
        break;
        
    case hfpCkpdCmdPending:
        /* Have received a response to AT+CKPD=200 */
        cfm_id = HFP_HS_BUTTON_PRESS_CFM;
        break;
    
    case hfpVtsCmdPending:
        /* Have received a response to AT+VTS */
        cfm_id = HFP_DTMF_CFM;
        break;
    
    case hfpCnumCmdPending:
        /* Have received a response to AT+CNUM */
        cfm_id = HFP_SUBSCRIBER_NUMBERS_CFM;
        break;
    
    case hfpClccCmdPending:
        /* Have received a response to AT+CLCC */
        cfm_id = HFP_CURRENT_CALLS_CFM;
        break;
    
    case hfpCopsReqCmdPending:
        /* Have received a response to AT+COPS? */
        cfm_id = HFP_NETWORK_OPERATOR_CFM;
        break;
    
    case hfpBinpCmdPending:
        /* Have received a response to AT+BINP */
        cfm_id = HFP_VOICE_TAG_NUMBER_CFM;
        break;
        
    case hfpAtCmdPending:
        cfm_id = HFP_AT_CMD_CFM;
        break;
#endif
    
    case hfpNoCmdPending:
    default:
        /* This should not happen, if we get an ack we should be waiting for it! */
        break;
    }

    /* Send _CFM message to app if necessary */
    if(cfm_id) hfpSendCommonCfmMessageToApp(cfm_id, link, status);
    
    /* Reset the flag as we've just received a response */ 
    link->at_cmd_resp_pending = hfpNoCmdPending;

    PRINT(("\n"));
    
    /* Try to send the next AT cmd pending */
    hfpSendNextAtCmd(link, SinkClaim(sink, 0), SinkMap(sink));
}