-void * reply_handler() {
-
-
- cnt++;
- if (cnt > 16) {
- for(;;);
- }
-
- rclrbit(TIM4_SR1, 0);
- rclrbit(TIM4_SR1, 1);
- switch(read_status) {
- case(READ_INIT):
- in_conf();
- read_status = READ;
- rsetbit(GPIOB_BSRR, 22); // low (<- reset)
- if (rchkbit(GPIOB_IDR, 6)) {
- printf("h\n");
- }
- else {
- printf("l\n");
- }
- timer_config(60);
- break;
- case(READ):
- out_conf();
- rclrbit(GPIOB_ODR, 6); // low
- read_status = READ_INIT;
- timer_config(1);
- break;
- case(READ_DONE):
- // terminate
- break;
- }
-
-
-}
-
-
-void read_init() {
-
-
- rclrbit(TIM4_CR1, 0); // stop
- rclrbit(TIM4_CCER, 0);
- rclrbit(TIM4_CCER, 1);
-
- //rwrite(GPIOB_CRL, 0x46444444); // floating
- out_conf();
- rsetbit(TIM4_CR1, 2); // only overflow generates update
- read_status = READ_INIT;
- timer_config(1); // init 1us
-
- ivt_set_gate(46, reply_handler, 0);
- rsetbit(NVIC_ISER0, 30); // interupt 41 - 32
-
- //rclrbit(TIM4_DIER, 0);
-
- rclrbit(GPIOB_ODR, 6); // low
- rsetbit(TIM4_DIER, 0);
-
- rsetbit(TIM4_CR1, 0);
-
-}
-
-
-void write_init() {
-
- sensor_cmd.cmd = 0x33;
- sensor_cmd.pos = 0;
-
- rsetbit(RCC_APB2ENR, 3); // GPIOB enable
- rsetbit(RCC_APB1ENR, 2); // TIM4 enable
- rsetbitsfrom(TIM4_CR1, 5, 0x00); // edge-aligned mode
- rclrbit(TIM4_CR1, 4); // upcounter (clrbit! not needed to set)
- rsetbit(TIM4_CR1, 2); // only overflow generates update
- rwrite(TIM4_PSC, PRESCALER - 1);
- rwrite(GPIOB_CRL, 0x4A444444);
-
-
- timer_config(61);
-
- if ((sensor_cmd.cmd >> sensor_cmd.pos) & 0x01) {
- printf("1\n");
- rwrite(TIM4_CCR1, 5); // < 15ms
- }
- else {
- printf("0\n");
- rwrite(TIM4_CCR1, 60);
- }
-
- rsetbitsfrom(TIM4_CCMR1, 4, 0x6); // forced high on match
-
- rsetbit(TIM4_CCER, 0);
- rsetbit(TIM4_CCER, 1);
-
- // set write handler
- ivt_set_gate(46, write_handler, 0);
- rsetbit(NVIC_ISER0, 30); // interupt 41 - 32
-
- //rsetbit(TIM4_DIER, 1);
- rsetbit(TIM4_DIER, 0);
- rsetbit(TIM4_CR1, 0);
-
-}
-
-
-void * init_handler() {
-
- switch(current_status) {
- case (INIT):
- printf("M: reset\n");
- presence_reply_conf();
- break;
- case (WAIT_INIT):
- if (!rchkbit(GPIOB_IDR, 6)) {
- printf("S: yes\n");
- }
- else {
- printf("S: no\n");
- }
- finish_init();
- break;
-
- case (INIT_DONE):
- printf("M: fin\n");
- write_init();
- break;
-
- default:
- printf("no status\n");
- }
-
- rclrbit(TIM4_SR1, 0);
-}
-
-/* TODO: write
- * uint8_t cmd = 0x33
- * if (cmd & 0x01)
- * 1 slot
- * else 0 slot
- * cmd = cmd >> 1
- *
- * read, similar as pulse response */
-
-
-void * bare_handler() {
-
-//w2 cnt += 1;
-//w2 printf("CHECKING STATUS\n");
-//w2
-//w2 if(rchkbit(GPIOB_IDR, 6)) {
-//w2 printf("port high\n");
-//w2 }
-//w2 else {
-//w2 printf("port low\n");
-//w2 }
-
-
- cnt += 1;
- printf("Count event %d\n", cnt);
- int switchled = cnt % 2;
- if (switchled) {
- rwrite(GPIOB_CRL, 0x46444444); // open drain general for sensor?
- printf("setting low\n");
- rclrbit(GPIOB_ODR, 6); // low
- }
- else {
- printf("pulling high \n");
- rwrite(GPIOB_CRL, 0x44444444); // open drain general for sensor?
- //rsetbit(GPIOB_ODR, 6); // high
-
- }
- rclrbit(TIM4_SR1, 0);
-}
-
-void send_cmd(unsigned char cmd) {
-