// ---------------------------------------------------------------------------- // Stop the thread and DMX interface // DMX_STATUS AbstractDMXDriver::stop() { if ( !stopThread() ) return DMX_ERROR; // Disconnect interface return dmx_close(); }
int main(int argc, char* argv[]) { dmx_handler h; int s = socket(AF_INET, SOCK_DGRAM, 0); if(s <= 0 ){ printf("Error while opening socket, abort. %s\n", strerror(errno)); return EXIT_FAILURE; } struct sockaddr_in in; in.sin_addr.s_addr = INADDR_ANY; in.sin_port = htons(21812); in.sin_family = AF_INET; if( bind(s, (struct sockaddr*)&in, sizeof(in)) < 0 ){ printf("Could not bind the socket. %s\n", strerror(errno)); return EXIT_FAILURE; } h = dmx_open(dmx_drv_list[0], 0); if(!h) return EXIT_FAILURE; do{ struct timeval before, after, timeout = { 0, 24e3 }; unsigned char dmx_data[513]; int len = 0; /* send data at full speed rate or wait until data incoming to send to dmx */ fd_set fd; FD_ZERO(&fd); FD_SET(s, &fd); gettimeofday(&before, 0); int error = select(s+1, &fd, 0, 0, &timeout); gettimeofday(&after, 0); if( error == 0 ) wake_up_task("popo"); else if( error > 0 ) { /* flush the buffer, returns only the last packet sent */ int count = 0; struct timeval flush = { 0, 0}; FD_ZERO(&fd); FD_SET(s, &fd); do{ len = recv(s, dmx_data, sizeof(dmx_data), 0); count++; }while( select(s+1, &fd, 0, 0, &flush ) > 0 ); if( len < sizeof(dmx_data) ) printf("corrupted data receive\n"); #if 1 if( count > 1 ) printf("multiple data received %i\n", count); #endif struct timeval timediff; timersub(&after, &before, &timediff); timersub(&timeout, &timediff, &timeout); } dmx_data[0] = 0; len = dmx_send(dmx_drv_list[0], h, dmx_data); if( len != 513) printf("send %i bytes to dmx\r", len); }while(1); dmx_close(dmx_drv_list[0], h); close(s); return EXIT_SUCCESS; }
void power_off_process(void) { struct YCbCrColor bgcolor; extern struct rfm_device* g_rfm_dev; extern struct scart_device* g_scart_dev; #ifdef DVR_PVR_SUPPORT api_pvr_clear_up_all(); #endif // SE: Mute before scart power off to avoid noise api_audio_set_mute(TRUE); #if defined(HW_SS830C)||defined(HW_SS830C2) //Wirte GPIO#5 to high to avoid noise (used on SS830C) HAL_GPIO_BIT_DIR_SET(5, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(5, 1); #endif api_Scart_TVSAT_Switch(0); api_Scart_Power_OnOff(0); api_Scart_RGB_OnOff(0);/*CVBS mode*/ #ifdef VDAC_USE_SVIDEO_TYPE api_Svideo_OnOff(0); #endif api_Scart_OutPut_Switch(0); SetLNBShortDetect(0); Set12VShortDetect(0); api_LNB_power(0); #if(SYS_12V_SWITCH == SYS_FUNC_ON) api_diseqc_set_12v(g_nim_dev, 0); #endif #ifdef USB_MP_SUPPORT if(system_state == SYS_STATE_USB_MP) { ap_udisk_close(); } #endif #ifndef NEW_DEMO_FRAME if(hde_get_mode() != VIEW_MODE_MULTI) UIChChgStopProg(TRUE); #endif #if (TTX_ON == 1) ttx_enable(FALSE); #endif #if (SUBTITLE_ON == 1) subt_enable(FALSE); #endif sie_close(); OSD_ShowOnOff(OSDDRV_OFF); #ifdef NEW_DEMO_FRAME sim_close_monitor(0); #else si_monitor_off(0xFFFFFFFF); #endif stop_tdt(); epg_off(); vpo_win_onoff(g_vpo_dev, FALSE); #ifdef DUAL_VIDEO_OUTPUT if(g_sd_vpo_dev != NULL) vpo_win_onoff(g_sd_vpo_dev,TRUE); #endif dm_set_onoff(0); bgcolor.uY = 16; bgcolor.uCb = 128; bgcolor.uCr = 128; vpo_ioctl(g_vpo_dev,VPO_IO_SET_BG_COLOR,(UINT32)&bgcolor); //close drivers dmx_stop( g_dmx_dev); dmx_close( g_dmx_dev); if (g_dmx_dev2) { dmx_stop(g_dmx_dev2); dmx_close(g_dmx_dev2); } deca_stop(g_deca_dev,0,ADEC_STOP_IMM); deca_close(g_deca_dev); vdec_close(g_decv_dev); // Power HDMI phy at standby mode. #ifdef HDTV_SUPPORT struct hdmi_device *hdmi_dev; hdmi_dev = (struct hdmi_device *)dev_get_by_id(HLD_DEV_TYPE_HDMI, 0); if (hdmi_dev != NULL) { if (SUCCESS != hdmi_dev->close(hdmi_dev)) { PRINTF("hdmi_close failed!!\n"); ASSERT(0); } } #endif vpo_close(g_vpo_dev); #ifdef DUAL_VIDEO_OUTPUT if(RET_SUCCESS!=vpo_close((struct vpo_device *)dev_get_by_id(HLD_DEV_TYPE_DIS, 1))) ASSERT(0); #endif snd_close(g_snd_dev); nim_close(g_nim_dev); if(g_nim_dev2) nim_close(g_nim_dev2); if(g_rfm_dev) rfm_close(g_rfm_dev); #if (SYS_MAIN_BOARD == BOARD_M3329E_DEMO01V01 || SYS_MAIN_BOARD == BOARD_DB_M3602_02V01 || SYS_MAIN_BOARD == BOARD_DB_M3602_04V01) if(g_scart_dev) scart_close(g_scart_dev); #endif led_display_flag = 0; #if (SYS_MAIN_BOARD == BOARD_S3602_DEMO) // Power off HAL_GPIO_BIT_DIR_SET(25, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(25, 0); #elif (SYS_MAIN_BOARD == BOARD_DB_M3602_02V01 || SYS_MAIN_BOARD == BOARD_DB_M3602_04V01) // Power off /*alfred.wu 不允许ali的power off*/ /* HAL_GPIO_BIT_DIR_SET(61, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(61, 1); // Tuner LNB power off HAL_GPIO_BIT_DIR_SET(73, HAL_GPIO_O_DIR); HAL_GPIO_BIT_SET(73, 1); *//*end*/ #endif }