Esempio n. 1
0
//audio task
void AudioTask()
{
    OS_STATUS     os_status;
    UBYTE         os_err;
    AUDIO_STATUS  audio;
    USHORT        actualflagmask;
    GBOOL         audioStatus = GFALSE;
    U8            tsInput;
    U32           rx,wx;
    U32           offset;

    OSSemPend(driver_sync_sem, 0, &os_err);
    /* Do initialisation that requires the OS to be running or interrupts enabled*/
    /* None of the Core/Verifier or Application tasks are running */
    OSSemPost(driver_sync_sem);

    tsInput = GH_BM_getm_ReadEnable_HW_BUF_SEL();
    if(tsInput == GD_TSD_2)
        offset = GH_BM2_get_BufferSize(GD_TSD_AUDIO_PES);
    else
        offset = GH_BM1_get_BufferSize(GD_TSD_AUDIO_PES);

    while(1)
    {
        os_status = OSFlagPend(eventflagmask, eventflagtype, 0, &actualflagmask);

        //SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask ",actualflagmask,0,0);

        if((actualflagmask&AUDIO_FILE_PLAYED) == AUDIO_FILE_PLAYED)
        {
            OSFlagClear(eventflagmask, &actualflagmask);

            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask1 ",actualflagmask,0,0);
            while(dataIndex < memDataSize)
            {
                OSTimeDly(50);
                GD_TSD_GetBufferPointer(GD_TSD_AUDIO_PES, tsInput, &rx, &wx);
                GHA_ResumeFeedData(memDataAddr, memDataSize, &dataIndex, &lastDataIndex, &pesLen, wx, rx-1);
                if(rx == 0)
                    wx =offset;
                else
                    wx =rx-1;
                if(tsInput == GD_TSD_2 )
                    GH_BM2_set_BufferWritePointer(GD_TSD_AUDIO_PES, wx);
                else
                    GH_BM1_set_BufferWritePointer(GD_TSD_AUDIO_PES, wx);
            }

            if(soundFileFlag == AUDIO_PLAYED)
            {
                //OSQPostToCore(HDI_PL_AUDIO_FILE_COMPLETED_XT, (void*)&loadcompleted, sizeof(HDI_PL_AUDIO_FILE_COMPLETED_XT));
                SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     loadcompleted.event_qualifier: ",loadcompleted.event_qualifier,0,0);
            }
            soundFileFlag = AUDIO_COMPLETED;

            GD_AUD_Stop();
            GD_AUD_Close();
            if(audioStatus == GTRUE)
            {
                HDIStartAudio();
                SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"  start audio",0,0,0);
            }
        }
        else if((actualflagmask&AUDIO_FILE_STOPPED) == AUDIO_FILE_STOPPED)
        {
            OSFlagClear(eventflagmask, &actualflagmask);
            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask2 ",actualflagmask,0,0);
            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     loadcompleted.event_qualifier: ",loadcompleted.event_qualifier,0,0);
        }
        else if((actualflagmask&AUDIO_STATUS_STARTED) == AUDIO_STATUS_STARTED)
        {
            OSFlagClear(eventflagmask, &actualflagmask);
            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask3 ",actualflagmask,0,0);

            if(audioStatus == GFALSE)
            {
                audioStatus = GTRUE;
                aoparameter.change_mask |= 0x01;
                aoparameter.audio_state.state = AUDIO_RUNNING;

                audio.standard_id = MPEG;
                audio.parameters.mpeg_status.layer = aoparameter.audio_state.parameters.mpeg_status.layer;
                audio.parameters.mpeg_status.bitrate_index  = aoparameter.audio_state.parameters.mpeg_status.bitrate_index;
                audio.parameters.mpeg_status.sampling_frequency = aoparameter.audio_state.parameters.mpeg_status.sampling_frequency;
                audio.parameters.mpeg_status.mode = aoparameter.audio_state.parameters.mpeg_status.mode;
                audio.parameters.mpeg_status.emphasis = aoparameter.audio_state.parameters.mpeg_status.emphasis;

                OSTimeDly(30);
                HDIGetAudioStatus(&audio);

                SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     aoparameter.change_mask ",aoparameter.change_mask,0,0);

                if((aoparameter.audio_state.parameters.mpeg_status.layer!=audio.parameters.mpeg_status.layer)||
                    (aoparameter.audio_state.parameters.mpeg_status.bitrate_index!=audio.parameters.mpeg_status.bitrate_index)||
                    (aoparameter.audio_state.parameters.mpeg_status.sampling_frequency!=audio.parameters.mpeg_status.sampling_frequency)||
                    (aoparameter.audio_state.parameters.mpeg_status.mode!=audio.parameters.mpeg_status.mode)||
                    (aoparameter.audio_state.parameters.mpeg_status.emphasis!=audio.parameters.mpeg_status.emphasis))
                {
                    aoparameter.change_mask |= 0x04;
                    aoparameter.audio_state.parameters.mpeg_status.layer = audio.parameters.mpeg_status.layer;
                    aoparameter.audio_state.parameters.mpeg_status.bitrate_index = audio.parameters.mpeg_status.bitrate_index;
                    aoparameter.audio_state.parameters.mpeg_status.sampling_frequency = audio.parameters.mpeg_status.sampling_frequency;
                    aoparameter.audio_state.parameters.mpeg_status.mode = audio.parameters.mpeg_status.mode;
                    aoparameter.audio_state.parameters.mpeg_status.emphasis = audio.parameters.mpeg_status.emphasis;
                }

                //OSQPostToCore(HDI_EV_AUDIO_STATUS_CHANGED, (void*)&aoparameter, sizeof(HDI_PL_AUDIO_STATUS_CHANGED_XT));
            }
            aoparameter.change_mask = 0;
        }
        else if((actualflagmask&AUDIO_STATUS_STOPPED) == AUDIO_STATUS_STOPPED)
        {
            OSFlagClear(eventflagmask, &actualflagmask);
            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask4 ",actualflagmask,0,0);

            if(audioStatus == GTRUE)
            {
                audioStatus = GFALSE;
                aoparameter.change_mask |= 0x01;
                aoparameter.audio_state.state = AUDIO_STOPPED;
                //OSQPostToCore(HDI_EV_AUDIO_STATUS_CHANGED, (void*)&aoparameter, sizeof(HDI_PL_AUDIO_STATUS_CHANGED_XT));
            }

            aoparameter.change_mask = 0;
        }
        else if((actualflagmask&AUDIO_TUNER_RECONNECTED) == AUDIO_TUNER_RECONNECTED)
        {
            OSFlagClear(eventflagmask, &actualflagmask);
            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask5 ",actualflagmask,0,0);
            if(audioStatus == GTRUE)
            {
                audioStatus = GFALSE;
                aoparameter.change_mask |= 0x01;
                aoparameter.audio_state.state = AUDIO_STOPPED;
                //OSQPostToCore(HDI_EV_AUDIO_STATUS_CHANGED, (void*)&aoparameter, sizeof(HDI_PL_AUDIO_STATUS_CHANGED_XT));
            }
        }
        else if((actualflagmask&AUDIO_TUNER_REMOVED) == AUDIO_TUNER_REMOVED)
        {
            OSFlagClear(eventflagmask, &actualflagmask);
            SYS_DEBUG_INFO(DEBL0_NSTR, (CSTR*)"8     actualflagmask6 ",actualflagmask,0,0);

            if(audioStatus == GFALSE)
            {
                audioStatus = GTRUE;
                aoparameter.change_mask |= 0x01;
                aoparameter.audio_state.state = AUDIO_RUNNING;
                //OSQPostToCore(HDI_EV_AUDIO_STATUS_CHANGED, (void*)&aoparameter, sizeof(HDI_PL_AUDIO_STATUS_CHANGED_XT));
            }
        }
    }
}
Esempio n. 2
0
void UserMain(void * pd) {
  int x;
  DWORD flag = 0;
  int cnt;

  InitializeStack();
  GetDHCPAddressIfNecessary();
  if (EthernetIP == 0) GetDHCPAddress();
  OSChangePrio(MAIN_PRIO);
  EnableAutoUpdate();

  #ifdef _DEBUG
    /* InitializeNetworkGDB_and_Wait(); */
    InitializeNetworkGDB();
  #endif

  /* note, this may not work in all cases.
  1) all systems might boot at the same time
  2) when they get to this point, they may not have an ip yet
  */
    /* init our acn stack */
    acn_port_protect_startup();
#if CONFIG_NSK
  srand(GetPreciseTime() + netx_getmyip(0));
  netx_init();
  netx_startup();
#endif

#if CONFIG_SLP
  slp_init();
  slp_open();
  slp_active_discovery_start();
#endif

#if CONFIG_RLP
  rlp_init();
#if CONFIG_SDT
  sdt_init(); /* indirectly calls sdtm_init(), rlp_init(), rlpm_init() */
  sdt_startup(true);
#endif

#if CONFIG_DMP
  /* dmp_startup(); */
#endif

#endif /* RLP */

  CreateTasks();

  x = OSChangePrio( DEBUG_TERM_PRIORITY );
  if (x) {
    PRINTF("%s","OUCH\n");
  }

  PRINTF("%s","Hello ACN World\n");

  ioctl( 0, IOCTL_CLR | IOCTL_RX_ECHO ); /* turn sdtin echo off */

  process_keys();

  /* shut things down - these require the threads to continue run... */
#if CONFIG_SDT
  sdt_shutdown();
#endif

#if CONFIG_SLP
  slp_close();
#endif

#if CONFIG_DMP
  /* dmp_shutdown() */
#endif

  /* shut down receive thread */
  OSFlagClear(&recv_flag, 1);
  PRINTF("%s","Waiting for task to recv to shut down..");
  cnt = 0;
  flag = 0;
  while (!flag) {
    cnt++;
    if (cnt == 80) {
      cnt = 0;
      PRINTF("%s","\n");
    }
    PRINTF("%s",".");
    flag = OSFlagState(&recv_flag);
  }

  /* shut down tick thread */
  OSFlagClear(&tick_flag, 1);
  PRINTF("%s","Waiting for task to tick to shut down..");
  cnt = 0;
  flag = 0;
  while (!flag) {
    cnt++;
    if (cnt == 80) {
      cnt = 0;
      PRINTF("%s","\n");
    }
    PRINTF("%s",".");
    flag = OSFlagState(&tick_flag);
  }

#if CONFIG_NSK
  netx_shutdown();
#endif
  acn_port_protect_shutdown();

  slp_stats();
  sdt_stats();
  PRINTF("%s","========================\n");

  PRINTF("%s","\nDone....\n");
  while (1) {
    OSTimeDly(20);
  }
}