Exemplo n.º 1
0
//
// The main read loop is in ANT.cpp, it will pass us
// the inbound message received for our channel.
// XXX fix this up to re-use ANTMessage for decoding
// all the inbound messages
//
void ANTChannel::receiveMessage(unsigned char *ant_message)
{
    switch (ant_message[2]) {
    case ANT_CHANNEL_EVENT:
        channelEvent(ant_message);
        break;
    case ANT_BROADCAST_DATA:
        broadcastEvent(ant_message);
        break;
    case ANT_ACK_DATA:
        ackEvent(ant_message);
        break;
    case ANT_CHANNEL_ID:
        channelId(ant_message);
        break;
    case ANT_BURST_DATA:
        burstData(ant_message);
        break;
    default:
        break; //XXX should trap error here, but silently ignored for now
    }

    if (get_timestamp() > blanking_timestamp + timeout_blanking) {
        if (!blanked) {
            blanked=1;
            value2=value=0;
            emit staleInfo(number);
        }
    } else blanked=0;
}
// ---------------------------------------------------------
// CDpMif::SendNameAddReqL
// This method sends name add request to Name Service.
// ---------------------------------------------------------
//
void CDpMif::SendNameAddReqL(
    const TUint aUnit )
    {
    OstTrace0( TRACE_NORMAL, CDPMIF_SENDNAMEADDREQL, "CDpMif::SendNameAddReqL" );
    LOGM(" CDpMif::SendNameAddReq");

    __ASSERT_ALWAYS( aUnit <= KDataPortCommHighUnit,
        User::Leave( KErrNotSupported ) );

    TBuf8<SIZE_PNS_NAME_ADD_REQ> messageData;

    // Add reserved bytes
    messageData.Append( KDpPadding );
    messageData.Append( KDpPadding );

    // Add 32bit name (Big-endian)
    switch ( aUnit )
        {
        case KDpCsdPort:
        case KDpPort6:
            {
            messageData.Append( aUnit );                //name
            messageData.Append( PN_PEP_SUB_TYPE_SYMBIAN_INTERNAL ); //name
            messageData.Append( PN_PEP_TYPE_COMM );     //name
            messageData.Append( PN_PIPE );              //name
            break;
            }
        case KDpDialUpPort:
        case KDpPort4:
        case KDpPort5:
            {
            messageData.Append( aUnit );                //name
            messageData.Append( KDpPadding );           //name
            messageData.Append( PN_PEP_TYPE_COMM );     //name
            messageData.Append( PN_PIPE );              //name
            break;
            }
        case KDpBtAccHfPort:
            {
            messageData.Append( KDpPadding );           //name
            messageData.Append( PN_PEP_SUB_TYPE_BT_ACC_HF ); //name
            messageData.Append( PN_PEP_TYPE_BT_ACC );   //name
            messageData.Append( PN_PIPE );              //name
            break;
            }
        case KDpBtAccHsPort:
            {
            messageData.Append( KDpPadding );           //name
            messageData.Append( PN_PEP_SUB_TYPE_BT_ACC_HS ); //name
            messageData.Append( PN_PEP_TYPE_BT_ACC );   //name
            messageData.Append( PN_PIPE );              //name
            break;
            }
        default:
            {
            User::Leave( KErrGeneral );
            }
        }

    // Add Device id
    messageData.Append( THIS_DEVICE );

    // Create Object id
    TUint8 channelId( 0 );

    switch ( aUnit )
        {
        case KDpCsdPort:
            {
            channelId = EIscNokiaDataport1;
            break;
            }
        case KDpDialUpPort:
            {
            channelId = EIscNokiaDataport2;
            break;
            }
        case KDpBtAccHfPort:
        case KDpBtAccHsPort:
            {
            channelId = EIscNokiaBtAppl;
            break;
            }
        case KDpPort4:
            {
            channelId = EIscNokiaDataport3;
            break;
            }
        case KDpPort5:
            {
            channelId = EIscNokiaDataport4;
            break;
            }
        case KDpPort6:
            {
            channelId = EIscNokiaDataport5;
            break;
            }
        default:
            {
            //Do nothing
            break;
            }
        }

    TBuf8<2> data;
    TInt ret( iDataPort.ISAHandle().GetChannelInfo( channelId, data ) );

    _LIT(KPanicStr, "Dataport::SendNameAddReqL");
    __ASSERT_ALWAYS( KErrNone == ret, User::Panic( KPanicStr, 0 ) );

    // Set obj id
    TUint16 obj( static_cast<TUint16>(
        ( static_cast<TUint16>( data[0] ) << 8 ) + data[1] ) );

    LOG1(" Dataport::SendNameAddReqL obj = 0x%x", obj );
    OstTraceExt1( TRACE_NORMAL, DUP1_CDPMIF_SENDNAMEADDREQL, "CDpMif:: obj = 0x%hx", obj );

    // Add Object id
    messageData.Append( obj );
    // Add Record flags
    messageData.Append( PN_NAME_UNDEF/**PN_NAME_CLEARED**/ );
    //fill
    messageData.Append( KDpPadding );

#if defined(_DEBUG)
    ret =
#endif
    SendMessage(
        PN_NAMESERVICE,
        iDataPort.CreateTransactionId(),
        PNS_NAME_ADD_REQ,
        messageData );

    LOG1("  <== PNS_NAME_ADD_REQ req sent, obj id: %x", obj );
    OstTraceExt1( TRACE_NORMAL, DUP2_CDPMIF_SENDNAMEADDREQL, "CDpMif:: <== PNS_NAME_ADD_REQ req sent, obj id: %hx", obj );

#if defined(_DEBUG)
    if (KErrNone != ret )
        {
        LOG1("  Error isc api send %d", ret );
        OstTrace1( TRACE_NORMAL, DUP3_CDPMIF_SENDNAMEADDREQL, "CDpMif:: Error isc api send %d", ret );
        }
    //no else
#endif
    }