======================================== void amberbt_write_local_name (unsigned char *name); amberbt_write_local_name ("N*A*M*E"); void amberbt_write_local_name (unsigned char *name) { int len; amberbt.packet_pending = 0; for (len = 0; len < 30; len++) { if (name[len] == 0) { break; } } // null termination len = len + 1; // send header amberbt_send_request_header (GAP_WRITE_LOCAL_NAME, len + 1); // send payload uart0_send_byte (len); // name len uart0_send (name, len); // name uart0_send_byte (ETX); // End_delimiter system_wait_while (&amberbt.packet_pending, 0, 5000); } ======================================== void amberbt_send_request_header (unsigned char op_code, unsigned int data_len); void amberbt_send_request_header (unsigned char op_code, unsigned int data_len) { uart0_send_byte (STX); // Start_delimiter uart0_send_byte (REQ); // Packet_Type_identification uart0_send_byte ((BYTE) op_code); // Op_code uart0_send_byte ((BYTE) data_len); // Data_length_LSB uart0_send_byte ((BYTE) (data_len >> 8)); // Data_length_MSB uart0_send_byte ((BYTE) (REQ + op_code + data_len)); // Checksum } ======================================= int system_wait_while (unsigned char *event, int value, int timeout); int system_wait_while (unsigned char *event, int value, int timeout) { int i = 0; timeout /= 100; while (*event == value && i < timeout) { system_sleep (100); i++; } // return true in case of timeout return (*event == value); } ========================================= void uart0_send_byte (BYTE c); void uart0_send_byte (BYTE c) { // wait until USART0 TX buffer is ready while (!(IFG2 & UTXIFG0)); TXBUF0 = c; } ===========================================