コード例 #1
0
__intrinsic void
reg_set(void *d, unsigned int s_val, size_t n)
{
    /* Make sure the parameters are as we expect */
    ctassert(__is_in_reg_or_lmem(d));
    ctassert(__is_ct_const(n));
    ctassert(n <= 64);
    ctassert((n % 4) == 0);
#ifdef __REG_SET
    #error "Attempting to redefine __REG_SET"
#endif

    if (__is_in_lmem(d)) {
        /* if type lmem must be defined as such */
#define __REG_SET(_x) ((__lmem unsigned int *)d)[_x] = s_val

        _REG_UTILS_SWITCH_CASE_IMPLEMENT(n, __REG_SET);

#undef __REG_SET
    } else {
        /* else is a register type */
#define __REG_SET(_x) ((__gpr unsigned int *)d)[_x] = s_val

        _REG_UTILS_SWITCH_CASE_IMPLEMENT(n, __REG_SET);

#undef __REG_SET
    }
}
コード例 #2
0
__intrinsic int
reg_eq(void *s1, void *s2, size_t n)
{
    int ret = 0;

    /* Make sure the parameters are as we expect */
    ctassert(__is_in_reg_or_lmem(s1));
    ctassert(__is_in_reg_or_lmem(s2));
    ctassert(__is_ct_const(n));
    ctassert(n <= 64);
    ctassert((n % 4) == 0);

#ifdef __REG_EQ
    #error "Attempting to redefine __REG_EQ"
#endif

    if (__is_in_lmem(s1) && __is_in_lmem(s2)) {
        /* both s1 and s2 are lmem */
#define __REG_EQ(_x) (((__lmem unsigned int *)s1)[_x] == \
                      ((__lmem unsigned int *)s2)[_x])

        _REG_UTILS_EQ_SWITCH_CASE_IMPLEMENT(n);

#undef __REG_EQ
    } else if (__is_in_lmem(s1) && __is_in_reg(s2)) {
        /* s1 is lmem and s2 is reg */
#define __REG_EQ(_x) (((__lmem unsigned int *)s1)[_x] == \
                      ((__gpr  unsigned int *)s2)[_x])

        _REG_UTILS_EQ_SWITCH_CASE_IMPLEMENT(n);

#undef __REG_EQ
    } else if (__is_in_reg(s1) && __is_in_lmem(s2)) {
        /* s1 is reg and s2 is lmem */
#define __REG_EQ(_x) (((__gpr  unsigned int *)s1)[_x] == \
                      ((__lmem unsigned int *)s2)[_x])

        _REG_UTILS_EQ_SWITCH_CASE_IMPLEMENT(n);

        #undef __REG_EQ
    } else {
        /* s1 and s2 are reg */
#define __REG_EQ(_x) (((__gpr unsigned int *)s1)[_x] == \
                      ((__gpr unsigned int *)s2)[_x])

        _REG_UTILS_EQ_SWITCH_CASE_IMPLEMENT(n);

#undef __REG_EQ
    }
    return ret;
}
コード例 #3
0
__intrinsic void
reg_cp(void *d, void *s, size_t n)
{
    /* Make sure the parameters are as we expect */
    ctassert(__is_in_reg_or_lmem(d));
    ctassert(__is_in_reg_or_lmem(s));
    ctassert(__is_ct_const(n));
    ctassert(n <= 64);
    ctassert((n % 4) == 0);

#ifdef __REG_CP
    #error "Attempting to redefine __REG_CP"
#endif
    if (__is_in_lmem(d) && __is_in_lmem(s)) {
        /* both dst and src are lmem */
#define __REG_CP(_x) (((__lmem unsigned int *)d)[_x] = \
                      ((__lmem unsigned int *)s)[_x])

        _REG_UTILS_SWITCH_CASE_IMPLEMENT(n, __REG_CP);

#undef __REG_CP
    } else if (__is_in_lmem(d) && __is_in_reg(s)){
        /* dst is lmem and src is reg */
#define __REG_CP(_x) (((__lmem unsigned int *)d)[_x] = \
                      ((__gpr  unsigned int *)s)[_x])

        _REG_UTILS_SWITCH_CASE_IMPLEMENT(n, __REG_CP);

#undef __REG_CP
    } else if (__is_in_reg(d) && __is_in_lmem(s)){
        /* else if dst is reg and src is lmem */
#define __REG_CP(_x) (((__gpr  unsigned int *)d)[_x] = \
                      ((__lmem unsigned int *)s)[_x])

        _REG_UTILS_SWITCH_CASE_IMPLEMENT(n, __REG_CP);

#undef __REG_CP
    } else {
        /* both dst and src are reg */
#define __REG_CP(_x) (((__gpr unsigned int *)d)[_x] = \
                      ((__gpr unsigned int *)s)[_x])

        _REG_UTILS_SWITCH_CASE_IMPLEMENT(n, __REG_CP);

#undef __REG_CP
    }
}
コード例 #4
0
ファイル: Pixel565toHSV.cpp プロジェクト: Craug/cbc
void Pixel565toHSV::test()
{
  ctassert(convert(Pixel565::black())   == HSV(  0,  0,  0));       
  ctassert(convert(Pixel565::white())   == HSV(  0,  0,255));     
  ctassert(convert(Pixel565::red())     == HSV(  0,255,255));
  ctassert(convert(Pixel565::yellow())  == HSV( 60,255,255));
  ctassert(convert(Pixel565::green())   == HSV(120,255,255));
  ctassert(convert(Pixel565::cyan())    == HSV(180,255,255));
  ctassert(convert(Pixel565::blue())    == HSV(240,255,255));
  ctassert(convert(Pixel565::magenta()) == HSV(300,255,255));
}
コード例 #5
0
ファイル: Vision.cpp プロジェクト: Craug/cbc
Vision::Vision() :
        m_colorTracker(Vision::NUM_CHANNELS)
{
    ctassert(sizeof(Pixel565) == 2);
    ctassert(sizeof(ushort) == 2);
    ctassert(sizeof(short) == 2);

    Pixel565toHSV::init();

    m_camera=NULL;

#ifdef HAS_MICRODIA_CAMERA
    bool use_simulated_camera = false;  // change to true to use simulated cam on chumby
#else
    bool use_simulated_camera = true;
#endif

    if (use_simulated_camera) {
        printf("Using simulated camera\n");
        SimulatedCamera *sc = new SimulatedCamera(160, 120);
        //Image simulatedImage(120, 160);
        //simulatedImage.loadRaw("/mnt/usb/crashframe.raw");
        QImage simulatedImage("simulated.png");
        if (!simulatedImage.width()) {
            fprintf(stderr, "Can't load simulated.png");
            exit(1);
        }
        sc->loadSimulatedImage(simulatedImage);
        m_camera = sc;
    } else {
#ifdef HAS_MICRODIA_CAMERA
        printf("Using Microdia camera\n");
        m_camera = new MicrodiaCamera();
#else
        ctassert(0);
#endif
    }

    m_colorTracker.shareResults("/tmp/color_tracking_results");

    ctassert(m_camera);
    m_camera->addFrameHandler(&m_colorTracker);
    m_camera->requestContinuousFrames();
}
コード例 #6
0
ファイル: rotary.c プロジェクト: goebish/deviation
void ROTARY_Init()
{
    // This assumes all rotary pins are handled by the same interrupt
    ctassert(ROTARY_PIN0.port == ROTARY_PIN1.port, All_rotary_pins_0_1_must_be_on_same_port);
    ctassert(ROTARY_PIN0.port == ROTARY_PRESS_PIN.port, rotary_pins_0_ent_must_be_on_same_port);
    ctassert(NVIC_EXTIx_IRQ(ROTARY_PIN0) == NVIC_EXTIx_IRQ(ROTARY_PIN1), rotary_pins_0_1_must_be_on_same_irq);
    ctassert(NVIC_EXTIx_IRQ(ROTARY_PIN0) == NVIC_EXTIx_IRQ(ROTARY_PRESS_PIN), rotary_pins_0_ent_must_be_on_same_irq);

    // All pins guaranteed to be on the same port
    rcc_periph_clock_enable(get_rcc_from_pin(ROTARY_PIN0));

    /*Rotary */
    GPIO_setup_input(ROTARY_PIN0, ITYPE_PULLUP);
    GPIO_setup_input(ROTARY_PIN1, ITYPE_PULLUP);
    GPIO_setup_input(ROTARY_PRESS_PIN, ITYPE_PULLUP);

    nvic_enable_irq(NVIC_EXTIx_IRQ(ROTARY_PIN0));
    nvic_set_priority(NVIC_EXTIx_IRQ(ROTARY_PIN0), 66);  // Medium priority
    exti_select_source(EXTIx(ROTARY_PIN0) | EXTIx(ROTARY_PIN1), ROTARY_PIN0.port);
    exti_set_trigger(EXTIx(ROTARY_PIN0) | EXTIx(ROTARY_PIN1), EXTI_TRIGGER_BOTH);
    exti_enable_request(EXTIx(ROTARY_PIN0) | EXTIx(ROTARY_PIN1));
}