mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 02:37:10 +00:00 
			
		
		
		
	func_volume: Add read capability to function.
Up until now, the VOLUME function has been write only, so that TX/RX values can be set but not read afterwards. Now, previously set TX/RX values can be read later. ASTERISK-29439 Change-Id: Ia23e92fa2e755c36e9c8e69f2940d2703ccccb5f
This commit is contained in:
		
				
					committed by
					
						 Friendly Automation
						Friendly Automation
					
				
			
			
				
	
			
			
			
						parent
						
							2193cf1b26
						
					
				
				
					commit
					19b5097d87
				
			| @@ -42,7 +42,7 @@ | ||||
| /*** DOCUMENTATION | ||||
| 	<function name="VOLUME" language="en_US"> | ||||
| 		<synopsis> | ||||
| 			Set the TX or RX volume of a channel. | ||||
| 			Set or get the TX or RX volume of a channel. | ||||
| 		</synopsis> | ||||
| 		<syntax> | ||||
| 			<parameter name="direction" required="true"> | ||||
| @@ -221,9 +221,55 @@ static int volume_write(struct ast_channel *chan, const char *cmd, char *data, c | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int volume_read(struct ast_channel *chan, const char *cmd, char *data, char *buffer, size_t buflen) | ||||
| { | ||||
| 	struct ast_datastore *datastore = NULL; | ||||
| 	struct volume_information *vi = NULL; | ||||
|  | ||||
| 	/* Separate options from argument */ | ||||
|  | ||||
| 	AST_DECLARE_APP_ARGS(args, | ||||
| 		AST_APP_ARG(direction); | ||||
| 		AST_APP_ARG(options); | ||||
| 	); | ||||
|  | ||||
| 	if (!chan) { | ||||
| 		ast_log(LOG_WARNING, "No channel was provided to %s function.\n", cmd); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	AST_STANDARD_APP_ARGS(args, data); | ||||
|  | ||||
| 	ast_channel_lock(chan); | ||||
| 	if (!(datastore = ast_channel_datastore_find(chan, &volume_datastore, NULL))) { | ||||
| 		ast_channel_unlock(chan); | ||||
| 		return -1; /* no active audiohook, nothing to read */ | ||||
| 	} else { | ||||
| 		ast_channel_unlock(chan); | ||||
| 		vi = datastore->data; | ||||
| 	} | ||||
|  | ||||
| 	/* Obtain current gain using volume information structure */ | ||||
| 	if (ast_strlen_zero(args.direction)) { | ||||
| 		ast_log(LOG_ERROR, "Direction must be specified for VOLUME function\n"); | ||||
| 		return -1; | ||||
| 	} | ||||
|  | ||||
| 	if (!strcasecmp(args.direction, "tx")) { | ||||
| 		snprintf(buffer, buflen, "%f", vi->tx_gain); | ||||
| 	} else if (!strcasecmp(args.direction, "rx")) { | ||||
| 		snprintf(buffer, buflen, "%f", vi->rx_gain); | ||||
| 	} else { | ||||
| 		ast_log(LOG_ERROR, "Direction must be either RX or TX\n"); | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static struct ast_custom_function volume_function = { | ||||
| 	.name = "VOLUME", | ||||
| 	.write = volume_write, | ||||
| 	.read = volume_read, | ||||
| }; | ||||
|  | ||||
| static int unload_module(void) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user