/**@snippet [Handling the data received over BLE] */
static void ossw_data_handler(ble_ossw_t * p_ossw, uint8_t * p_data, uint16_t length)
{ 
		#ifdef OSSW_DEBUG
				sd_nvic_critical_region_enter(0);
				printf("DAT: 0x%02x 0x%02x 0x%02x\r\n", p_data[0], p_data[1], p_data[2]);
				sd_nvic_critical_region_exit(0);
		#endif
	
	 switch(p_data[0]) {	
		 case 0x01:
					scr_mngr_handle_event(SCR_EVENT_APP_CONNECTION_CONFIRMED, NULL);
					break;
		 case 0x10:
			    // set current time
					rtc_set_current_time(((uint32_t)p_data[1]<<24) | ((uint32_t)p_data[2]<<16)
						| ((uint32_t)p_data[3]<<8) | (uint32_t)p_data[4]);
					break; 
		 case 0x40:
					// command first part
					command_reset_data();
					command_append_data(p_data+1, length-1);
					break;
		 case 0x41:
					// command next part
					command_append_data(p_data+1, length-1);
					break;
		 case 0x42:
					// command last part
					command_append_data(p_data+1, length-1);
					command_data_complete();
					break;
		 case 0x43:
					// command first and last part
					command_reset_data();
					command_append_data(p_data+1, length-1);
					command_data_complete();
					break;
	 }
}
/**@snippet [Handling the data received over BLE] */
static void ossw_data_handler(ble_ossw_t * p_ossw, uint8_t * p_data, uint16_t length)
{ 
	 switch(p_data[0]) {	
		 case 0x10:
			    // set current time
					rtc_set_current_time((p_data[1]<<24) | (p_data[2]<<16) | (p_data[3]<<8) | p_data[4]);
					break; 
	/*	 case 0x20:
			    // init data upload
					init_data_upload(p_data[1], (p_data[2]<<24) | (p_data[3]<<16) | (p_data[4]<<8) | p_data[5]);
					break;
		 case 0x21:
			    // upload data part
		 			handle_data_upload_part(&p_data[1], length - 1);
					break;
		 case 0x22:
			    // upload data finished
					handle_data_upload_done();
			    break;	*/
		 case 0x40:
					// command first part
					command_reset_data();
					command_append_data(p_data+1, length-1);
					break;
		 case 0x41:
					// command next part
					command_append_data(p_data+1, length-1);
					break;
		 case 0x42:
					// command last part
					command_append_data(p_data+1, length-1);
					command_data_complete();
					break;
		 case 0x43:
					// command first and last part
					command_reset_data();
					command_append_data(p_data+1, length-1);
					command_data_complete();
					break;
		 case 0x23:
			    // init notification upload
					init_notification_upload((p_data[1]<<8) | p_data[2]);
					break;
		 case 0x24:
			    // upload notification part
		 			handle_notification_upload_part(&p_data[1], length - 1);
					break;
		 case 0x25:
			    // upload notification finished
					handle_notification_upload_done();
			    break;	
		 case 0x26:
			    // extend alert notification
					handle_notification_alert_extend(p_data[1] << 8 | p_data[2], p_data[3] << 8 | p_data[4]);
			    break;		
		 case 0x27:
			    // stop alert notification
					handle_notification_alert_stop(p_data[1] << 8 | p_data[2]);
			    break;
		 case 0x30:
			    // set ext param
					set_external_property_data(p_data[1], &p_data[2], length-2);
					break;
	 }
}