int advp_scan(void) { int error; systime_t time1; systime_t time2; systime_t sleep; bg_param_t conf; //prepare a background scan procedure data_proc_conf.pack_class = BACKGROUND_CLASS; data_proc_config(&data_proc_conf); //scan the packet error = advp_scan_bg(&conf); if(error) return error; time1 = chTimeNow(); //prepare a foreground scan procedure data_proc_conf.pack_class = FOREGROUND_CLASS; data_proc_conf.channel = conf.channel; data_proc_config(&data_proc_conf); time2 = chTimeNow(); sleep = d7_ti_to_systime(conf.time) - (time2 - time1) - SAFE_SLEEP_WINDOW - RX_TIME; //sleep until the time to receive the packet is reached chThdSleepMilliseconds(sleep); //scan the foreground packet error = data_listen(); if(error < 0) return error - 10; else return error; }
int advp_scan_bg(bg_param_t *advp_conf) { uint8_t frame[FG_FRAME_SIZE]; int error; error = data_listen(); if(error < 0) return error; error = data_get_frame(frame,FG_FRAME_SIZE); if(error < 0) return error -5; bg_get_advp(frame,advp_conf); if(advp_conf->protocol != 0xF0) return BG_BAD_PROTOCOL; else return 0; }
size_t device::send_data(const std::vector<unsigned char>& data_buf, int device_number, int channel ) { listen( device_number ); data_listen( channel ); size_t sent = 0; try { sent = send_to_bus(data_buf); } catch (raspbiec_error &e) { unlisten(); throw; } unlisten(); return sent; }