void LED_blink(uint8_t LED) { PIN_toggle(LED); delay_ms(25); PIN_toggle(LED); delay_ms(25); return; }
uint8_t spi_transfer(uint8_t message) { uint8_t* reg_ptr; uint8_t timeout = SPI_TIMEOUT; uint8_t receive_char; uint8_t i, temp, temp2; reg_ptr = SPDR_BASE; // Commence the SPI message. SS_set_low(); *reg_ptr = message; reg_ptr = SPSR_BASE; while(!(*reg_ptr & SPI_SPSR_SPIF)) // Check if the transmission has completed yet. { if(!timeout--) { //SS_set_high(); return 0x00; // Something went wrong, so the function times out. if(SELF_ID != 1) { PIN_toggle(LED2); } } } reg_ptr = SPDR_BASE; receive_char = *reg_ptr; //SS_set_high(); delay_cycles(10); // I was assuming that SPI messages would be received MSB first. // Comment out the following if that is not the case. //temp = 0, temp2 = 0; // //for (i = 0; i < 8; i ++) //{ //temp2 = receive_char << (7 - i); // reverses the order of the bits. //temp2 = temp2 >> 7; //temp2 = temp2 << (7 - i); //temp += temp2; //} return receive_char; // Transmission was successful, return the character that was received. }
void decode_command(uint8_t* command_array) { uint8_t i, command = *(command_array + 5); uint8_t req_by = (*(command_array + 7)) >> 4; switch(command) { case REQ_RESPONSE : if(SELF_ID != 1) { PIN_toggle(LED3); } send_now = 1; case REQ_DATA : if(SELF_ID != 1) { PIN_toggle(LED1); } send_data = 1; for (i = 0; i < 8; i ++) { data_req_arr[i] = *(command_array + i); } case REQ_HK : if(SELF_ID != 1) { PIN_toggle(LED2); } send_hk = 1; case REQ_READ: read_response = 1; for (i = 0; i < 8; i ++) { read_arr[i] = *(command_array + i); } case REQ_WRITE: write_response = 1; for (i = 0; i < 8; i ++) { write_arr[i] = *(command_array + i); } case SET_SENSOR_HIGH: set_sens_h = 1; for (i = 0; i < 8; i ++) { sensh_arr[i] = *(command_array + i); } case SET_SENSOR_LOW: set_sens_l = 1; for (i = 0; i < 8; i ++) { sensl_arr[i] = *(command_array + i); } case SET_VAR: set_varf = 1; for (i = 0; i < 8; i ++) { setv_arr[i] = *(command_array + i); } case SET_TIME: CURRENT_MINUTE = *(command_array); case SEND_TM: new_tm_msgf = 1; for (i = 0; i < 8; i ++) { new_tm_msg[i] = *(command_array + i); } case TM_PACKET_READY: if((!current_tm_fullf) && (!receiving_tmf)) start_tm_packet(); case TC_TRANSACTION_RESP: tc_transfer_completef = *command_array; case OK_START_TC_PACKET: start_tc_transferf = 1; default: return; } return; }