Esempio n. 1
0
/* 获取当前所有温度传感器最高的温度 */
static INT8 local_max_temperature_get()
{
    UINT8 sensor_id, max = 0, i;
    INT16 temperature;
    /* 获取温度 */
    temperature = ds_get_id_temperaturex16_unblock(&sensor_id);
    if(temperature > -1000 && sensor_id < TEMPERATURE_SENSOR_NUM){	/* 成功获取温度 */
	temperature_info[0].temperature[sensor_id] = temperature / 16;
	temperature_info[0].lastTime[sensor_id] = timebase_get();
    }else{			/* 有错误发生 */
	
    }
    for(i=0; i<1; i++){
	UINT32 diff = time_diff_ms(temperature_info[0].lastTime[i]);
	if(diff > 60000){	/* 60秒没有成功获取温度 */
	    temperature_info[0].temperature[i] = 120;
	}
	if(diff > 10000){	/* 十秒没有成功获取温度,温度+10度 */
	    temperature_info[0].lastTime[i] = local_ms_get();
	    temperature_info[0].temperature[i] += 10;
	    if(temperature_info[0].temperature[i] > 120)
	      temperature_info[0].temperature[i] = 120;
	}
	if(max < temperature_info[0].temperature[i])
	  max = temperature_info[0].temperature[i];
    }
    return max;
}
Esempio n. 2
0
int main()
{
    UINT32 val;
    char c, forceClearCfg = 0;
    /* enable watchdog */
    wdt_enable(WDTO_8S);
#ifdef INCLUDE_KTANK_UART
    /* init UART */
    init_uart(9600);
    printk("\n\n\n!!!!!!!!!!ktank start!!!!!!!!!!!!!!\n\n\n");
#endif
    /* init PWM, local time */
    pwm_init();
    /* enable i2c bus, rtc need it  */
    I2C_init();
    /* init timer */
    timer_init();
    val = timebase_get();
#ifdef INCLUDE_KTANK_UART
    do{
        if(uart_poll_c((UINT8*)&c) > 0 && c == 'c'){
            forceClearCfg++;
        }
    }while(time_diff_ms(val) < 2000);
#endif
    if(forceClearCfg > 10){
        DBG_PRINT("slave force clear cfg..\n");
        EEPROM_put(EEPROM_OFS_RFAVAIL, 0xff);
    }
    local_device_info_load();
    local_device_info_show();
    if(RF_CFG_AVAL()){
        rf_init(NULL, SLAVE_MODE_NORMAL);

        rf_config(EEPROM_get(EEPROM_OFS_HOSTID), EEPROM_get(EEPROM_OFS_DEVID));
        DBG_PRINT("slave start hostid 0x%x devid 0x%x\n", 
               EEPROM_get(EEPROM_OFS_HOSTID), EEPROM_get(EEPROM_OFS_DEVID));
        nrf_enter_rx_mode();
    }else{
#if 0
        rf_init(NULL, SLAVE_MODE_WAIT_SYNC);
        DBG_PRINT("no cfg, force device id 1, host id 0xef\n");
        rf_config(0xef, 1);
        nrf_enter_rx_mode();
#else

        rf_init(NULL, SLAVE_MODE_WAIT_DISCOVER);
        rf_config(0xc0, 0x80);
        DBG_PRINT("slave start without rf cfg\n");
#endif
    }
    sei();
    while(1){
        wdt_reset();
        rf_process();
	local_device_update();
    }
}
Esempio n. 3
0
void waveform_update(const chunk_pt chunk){
    //const float alpha = 0.98;

    float vall = 0.;
    float vhigh = 0.;
    float vmid = 0.;
    float vlow = 0.;

    static float slow = 0.;
    static float shigh = 0.;

    static float qlow = 0.;
    static float qmid = 0.;
    static float qhigh = 0.;

#define MAX(a, b) ((a > b) ? a : b)
#define MIN(a, b) ((a < b) ? a : b)
#define LB1 0.03
#define LB2 0.0
//#define LA2 0.9914878835315175  // exp(-pi * f_1 / F_n); F_n = 22050Hz; f_1 = 60Hz
//#define LA2 0.9719069870254697  // exp(-pi * f_1 / F_n); F_n = 22050Hz; f_1 = 200Hz
#define LA2 0.98
#define L2A2 0.98 // DC-blocking 1-pole lpf
#define LN  ((1. - LA2) / (LB1 + LB2)) 
#define HB1 1.0
#define HB2 -1.0
//#define HA2 0.6521846367685737 // exp(-pi * f_1 / F_n); F_n = 22050Hz; f_1 = 3000Hz
#define HA2 0.65 // exp(-pi * f_1 / F_n); F_n = 22050Hz; f_1 = 3000Hz
#define HN  ((1. + LA2) / 2.) * 4
#define H2A2 0.7 // DC-blocking 1-pole lpf

#define LC1 0.9
#define MC1 0.8
#define HC1 0.7


    for(int i = 0; i < config.audio.chunk_size; i++){
        vall = MAX(vall, fabs(chunk[i]));

        //slow = slow * alpha + chunk[i] * (1 - alpha);
        //vlow = MAX(vlow, fabs(slow));
       
        //vlow = MAX(vlow, fabs( (chunk[i] - slow * LA2) * LB1 + slow * LB2) * LN);
        //slow = chunk[i] - slow * LA2;

        slow = LA2 * slow + (1. - LA2) * chunk[i];
        //vlow = MAX(vlow, fabs(slow));
        vlow = L2A2 * vlow + (1.0 - L2A2) * fabs(slow);

        //shigh = - shigh * alpha + chunk[i] * (1 - alpha);
        //vhigh = MAX(vhigh, fabs(shigh));
        
        //vhigh = MAX(vhigh, fabs( (chunk[i] - shigh * HA2) * HB1 + shigh * HB2) * HN);
        vhigh = H2A2 * vhigh + (1.0 - H2A2) * fabs(((chunk[i] - shigh * HA2) * HB1 + shigh * HB2) * HN);
        shigh = chunk[i] - shigh * HA2;
    }
    vhigh *= 1.5;
    vlow *= 2.0;
    vhigh = MIN(vhigh, vall);
    vlow = MIN(vlow, vall);
    vmid = MAX(0., vall - vlow - vhigh);

    waveform_bin_update(&waveform_bins[WF_LOW], (vlow + vmid + vhigh));
    waveform_bin_update(&waveform_bins[WF_MID], (vhigh + vmid));
    waveform_bin_update(&waveform_bins[WF_HIGH], (vhigh));
    waveform_bin_update(&beat_bin, MB2B(timebase_get() % 1000));

    qlow = LC1 * qlow + (1. - LC1) * vlow;
    qmid = MC1 * qmid + (1. - MC1) * vmid;
    qhigh = HC1 * qhigh + (1. - HC1) * vhigh;

    param_output_set(&waveform_bins[WF_LOW].output, MIN(qlow * 2., 1.));
    param_output_set(&waveform_bins[WF_MID].output, MIN(qmid * 2., 1.));
    param_output_set(&waveform_bins[WF_HIGH].output, MIN(qhigh * 2., 1.));

    memmove(beat_lines + 1, beat_lines, (WAVEFORM_HISTORY_SIZE - 1) * sizeof(char));
    beat_lines[0] = 0;
}
Esempio n. 4
0
void output_run(void* args)
{
    FPSmanager fps_manager;
    unsigned char frame[4096];

    SDL_initFramerate(&fps_manager);
    SDL_setFramerate(&fps_manager, 100);
    stat_ops = 100;

    output_running = 1;   
    unsigned int last_tick = SDL_GetTicks();

    while(output_running)
    {
        mbeat_t tb = timebase_get();

        update_patterns(tb);
        update_signals(tb);

        for(int i=0; i<n_output_strips; i++)
        {
            if(!output_strips[i].bus)
                continue;

            output_to_buffer(&output_strips[i], output_buffers[i]);

            float energy = 0.;
            float scalar = 1.0;
            for(int k = 0; k < output_strips[i].length; k++){
                energy += output_buffers[i][k].r;
                energy += output_buffers[i][k].g;
                energy += output_buffers[i][k].b;
            }
            scalar = output_strips[i].length * config.output.max_energy / energy * 255.;
            if(scalar > 255.)
                scalar = 255.;

            int j = 0;
            for(int k = 0; k < output_strips[i].length; k++){
                frame[j++] = output_buffers[i][k].r * scalar;
                frame[j++] = output_buffers[i][k].g * scalar;
                frame[j++] = output_buffers[i][k].b * scalar;
            }

            if(output_on_flux && (output_strips[i].bus & OUTPUT_FLUX))
                output_flux_push(&output_strips[i], frame, j);
        }
        SDL_framerateDelay(&fps_manager);
        //stat_ops = SDL_getFramerate(&fps_manager);
        stat_ops = 0.8 * stat_ops + 0.2 * (1000. / (SDL_GetTicks() - last_tick));
        last_tick = SDL_GetTicks();
    }

    for(int i=0; i<n_output_strips; i++)
    {
        free(output_buffers[i]);
    }

    free(output_buffers);

    if(output_on_flux)
        output_flux_del();
}