Esempio n. 1
0
void ProjectorWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    //if (_pixmap.isNull())
    if (_current_pattern<0)
    {   //stopped
        QRectF rect = QRectF(QPointF(0,0), QPointF(width(),height()));
        painter.drawText(rect, Qt::AlignCenter, "No image");
    }
    else
    {
        bool updated = false;
        if (_pixmap.isNull())
        {   //update
            updated = true;
            make_pattern();
        }

        //draw
        QRectF rect = QRectF(QPointF(0,0), QPointF(width(),height()));
        painter.drawPixmap(rect, _pixmap, rect);

        if (updated)
        {   //notfy update
            _updated = true;
            emit new_image(_pixmap);
        }
    }
}
Esempio n. 2
0
/**
 * Serves meta information in JSON about a hash.
 */
void route_meta(evhtp_request_t *req, void *arg) {
    evhtp_uri_t *uri = req->uri;
    char *res = uri->path->full;
    char *hash = "";
    res = strtok((char *) res, "/");
    while (res != NULL) {
        if (strlen(res) == 32) {
            hash = res;
            break;
        }
        res = strtok(NULL, "/");
    }

    char *color = malloc(sizeof (char)*7);
    make_color_hex(hash, color);

    int i[8][8];
    make_pattern(hash, i);

    char *pattern = malloc(sizeof (char)*146);
    sprintf(pattern, "[[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d],"
            "[%d,%d,%d,%d,%d,%d,%d,%d]]",
            i[0][0], i[0][1], i[0][2], i[0][3], i[0][4], i[0][5], i[0][6], i[0][7],
            i[1][0], i[1][1], i[1][2], i[1][3], i[1][4], i[1][5], i[1][6], i[1][7],
            i[2][0], i[2][1], i[2][2], i[2][3], i[2][4], i[2][5], i[2][6], i[2][7],
            i[3][0], i[3][1], i[3][2], i[3][3], i[3][4], i[3][5], i[3][6], i[3][7],
            i[4][0], i[4][1], i[4][2], i[4][3], i[4][4], i[4][5], i[4][6], i[4][7],
            i[5][0], i[5][1], i[5][2], i[5][3], i[5][4], i[5][5], i[5][6], i[5][7],
            i[6][0], i[6][1], i[6][2], i[6][3], i[6][4], i[6][5], i[6][6], i[6][7],
            i[7][0], i[7][1], i[7][2], i[7][3], i[7][4], i[7][5], i[7][6], i[7][7]
            );
    pattern[145] = 0;

    evbuffer_add_printf(req->buffer_out, "{\"hash\":\"%s\",\"modified\":false,\"color\":\"%s\",\"pattern\":%s}", hash, color, pattern);
    free(color);
    free(pattern);
    evhtp_headers_add_header(req->headers_out,
            evhtp_header_new("Content-Type", "application/json", 0, 0));
    evhtp_send_reply(req, 200);
}
Esempio n. 3
0
File: main.c Progetto: Drooids/nrf
int main(void)
{
  uint8_t buf[NRF24L01P_PAYLOAD_WIDTH];
  uint32_t counter = 0;
#if 0
  uint8_t x;
#endif

  /* setup spi first */
  spi_setup_master();
  spi_set_sck_freq(SPI_SCK_FREQ_FOSC2);

  uart_setup();

  nrf24l01p_setup();

  /* sparkfun usb serial board configuration */
  /* NOTE: nrf24l01p_enable_crc8(); for nrf24l01p board */
  /* nrf24l01p_enable_crc16(); */
  nrf24l01p_disable_crc();
  /* auto ack disabled */
  /* auto retransmit disabled */
  /* 4 bytes payload */
  /* 1mbps, 0dbm */
  /* nrf24l01p_set_rate(NRF24L01P_RATE_1MBPS); */
  nrf24l01p_set_rate(NRF24L01P_RATE_2MBPS);
  /* nrf24l01p_set_rate(NRF24L01P_RATE_250KBPS); */
  /* channel 2 */
  nrf24l01p_set_chan(2);
  /* 5 bytes addr width */
  /* nrf24l01p_set_addr_width(NRF24L01P_ADDR_WIDTH_5); */
  nrf24l01p_set_addr_width(NRF24L01P_ADDR_WIDTH_3);
  /* rx address */
  nrf24l01p_cmd_buf[0] = 0xe7;
  nrf24l01p_cmd_buf[1] = 0xe7;
  nrf24l01p_cmd_buf[2] = 0xe7;
  nrf24l01p_cmd_buf[3] = 0xe7;
  nrf24l01p_cmd_buf[4] = 0xe7;
  nrf24l01p_write_reg40(NRF24L01P_REG_RX_ADDR_P0);
  /* tx address */
  nrf24l01p_cmd_buf[0] = 0xe7;
  nrf24l01p_cmd_buf[1] = 0xe7;
  nrf24l01p_cmd_buf[2] = 0xe7;
  nrf24l01p_cmd_buf[3] = 0xe7;
  nrf24l01p_cmd_buf[4] = 0xe7;
  nrf24l01p_write_reg40(NRF24L01P_REG_TX_ADDR);
  /* enable tx no ack command */
  nrf24l01p_enable_tx_noack();

  nrf24l01p_powerdown_to_standby();
  nrf24l01p_standby_to_tx();
  if (nrf24l01p_is_tx_empty() == 0) nrf24l01p_flush_tx();

#if 0
  uart_write((uint8_t*)"tx side\r\n", 9);
  uart_write((uint8_t*)"press space\r\n", 13);
  uart_read_uint8(&x);
  uart_write((uint8_t*)"starting\r\n", 10);
#endif

  /* enable interrupts */
  sei();

  while (1)
  {
    if ((++counter) != (200000UL / 8UL)) continue ;
    counter = 0;

    make_pattern(buf);
    nrf24l01p_write_tx_noack_zero(buf);
    nrf24l01p_complete_tx_noack_zero();
    while (nrf24l01p_is_tx_irq() == 0) ;
  }

  return 0;
}
Esempio n. 4
0
void ProjectorWidget::make_pattern(void)
{
    int cols = width();
    int rows = height();

    /*
    if (_current_pattern<1)
    {   //search bit number
        _vbits = 1;
        _hbits = 1;
        for (int i=(1<<_vbits); i<cols; i=(1<<_vbits)) { _vbits++; }
        for (int i=(1<<_hbits); i<rows; i=(1<<_hbits)) { _hbits++; }
        _pattern_count = std::min(std::min(_vbits, _hbits), _pattern_count);
        std::cerr << " vbits " << _vbits << " / cols="<<cols<<", mvalue="<< ((1<<_vbits)-1) << std::endl;
        std::cerr << " hbits " << _hbits << " / rows="<<rows<<", mvalue="<< ((1<<_hbits)-1) << std::endl;
        std::cerr << " pattern_count="<< _pattern_count << std::endl;
    }
    */

    int vmask = 0, voffset = ((1<<_vbits)-cols)/2, hmask = 0, hoffset = ((1<<_hbits)-rows)/2, inverted = (_current_pattern%2)==0;

    // patterns
    // -----------
    // 00 white
    // 01 black
    // -----------
    // 02 vertical, bit N-0, normal
    // 03 vertical, bit N-0, inverted
    // 04 vertical, bit N-1, normal
    // 04 vertical, bit N-2, inverted
    // ..
    // XX =  (2*_pattern_count + 2) - 2 vertical, bit N, normal
    // XX =  (2*_pattern_count + 2) - 1 vertical, bit N, inverted
    // -----------
    // 2+N+00 = 2*(_pattern_count + 2) horizontal, bit N-0, normal
    // 2+N+01 horizontal, bit N-0, inverted
    // ..
    // YY =  (4*_pattern_count + 2) - 2 horizontal, bit N, normal
    // YY =  (4*_pattern_count + 2) - 1 horizontal, bit N, inverted

    if (_current_pattern<2)
    {   //white or black
        _pixmap = make_pattern(rows, cols, vmask, voffset, hmask, hoffset, inverted);
    }
    else if (_current_pattern<2*_pattern_count+2)
    {   //vertical
        int bit = _vbits - _current_pattern/2;
        vmask = 1<<bit;
        //std::cerr << "v# cp: " << _current_pattern << " bit:" << bit << " mask:" << vmask << std::endl;
        _pixmap = make_pattern(rows, cols, vmask, voffset, hmask, hoffset, !inverted);
    }
    else if (_current_pattern<4*_pattern_count+2)
    {   //horizontal
        int bit = _hbits + _pattern_count - _current_pattern/2;
        hmask = 1<<bit;
        //std::cerr << "h# cp: " << _current_pattern << " bit:" << bit << " mask:" << hmask << std::endl;
        _pixmap = make_pattern(rows, cols, vmask, voffset, hmask, hoffset, !inverted);
    }
    else
    {   //error
        assert(false);
        stop();
        return;
    }

    //_pixmap.save(QString("pat_%1.png").arg(_current_pattern, 2, 10, QLatin1Char('0')));
}
Esempio n. 5
0
 pattern<T> const make_simulated_pattern( std::string const& dir_path_, std::complex<T> const& thickness_, std::size_t column_index_ = 0 )
 {
     auto pt = make_pattern( dir_path_, thickness_, column_index_ );
     pt.simulate_intensity();
     return pt;
 }