uchar usbFunctionWrite(uchar *data, uchar len) { memcpy(&msg[pos], data, len); pos+=len; if (pos != rq_len) return 0; /* Need moar data */ uint8_t ret = 0; uint8_t retries = 15; switch (last_rq) { case RQ_SET_REMOTE_ADDR: memcpy(remote_addr, msg, 5); break; case RQ_SET_LOCAL_ADDR: memcpy(local_addr, msg, 5); break; case RQ_WRITE: do { rf24_power_up(g_radio); rf24_open_writing_pipe(g_radio, remote_addr); ret = rf24_write(g_radio, msg, pos); PORTC ^= 1<<2; delay_ms(5); } while( ret && retries--); break; } strcpy(msg, ((ret==0) && retries) ? "OK" : "FAIL"); return 1; }
int writeMessage(void* message, uint8_t address[5], uint16_t length) { transmitLedOn(); _delay_ms(250); rf24_stop_listening(&r); rf24_open_writing_pipe(&r, address); int writeReturn = rf24_write(&r, &message, length*sizeof(uint8_t)); _delay_ms(250); rf24_start_listening(&r); transmitLedOff(); return writeReturn }
int sendConfigRequest(uint8_t address[5]) { message_type_t type = REQUESTCONFIG; ConfirmAddress msg; msg.messageId = type; msg.length = 3; PORTD ^= (1<<4); _delay_ms(250); rf24_stop_listening(&r); rf24_open_writing_pipe(&r, address); int writeReturn = rf24_write(&r, &msg, msg.length*sizeof(uint8_t)); _delay_ms(250); rf24_start_listening(&r); PORTD ^= (1<<4); printk("sent config request message\n"); return writeReturn; }
uint8_t sendConfigResponse(uint8_t address[5]) { message_type_t type = RESPONDCONFIG; RespondConfig msg; msg.messageId = type; msg.length = 8; msg.numberOfSensors = 3; msg.sensorTypes = sensorIds; PORTD ^= (1<<4); _delay_ms(250); rf24_stop_listening(&r); rf24_open_writing_pipe(&r, address); int writeReturn = rf24_write(&r, &msg, msg.length*sizeof(uint8_t)); _delay_ms(250); rf24_start_listening(&r); PORTD ^= (1<<4); printk("sent config message\n"); return writeReturn; }