Revision: 9569 http://pure-data.svn.sourceforge.net/pure-data/?rev=9569&view=rev Author: eighthave Date: 2008-03-11 21:20:55 -0700 (Tue, 11 Mar 2008)
Log Message: ----------- added first object for a new library to support Apple-specific hardware and software functions, like screen brightness
Added Paths: ----------- trunk/externals/apple/ trunk/externals/apple/Makefile trunk/externals/apple/brightness-help.pd trunk/externals/apple/brightness.pd trunk/externals/apple/iodisplay-help.pd trunk/externals/apple/iodisplay.c trunk/externals/apple/iodisplay.libs
Added: trunk/externals/apple/Makefile =================================================================== --- trunk/externals/apple/Makefile (rev 0) +++ trunk/externals/apple/Makefile 2008-03-12 04:20:55 UTC (rev 9569) @@ -0,0 +1,17 @@ +TARGET := $(shell pwd | sed 's|.*/(.*)$$|\1|') +EXTERNALS_ROOT := $(shell pwd | sed 's|^(/.*externals).*|\1|') + +default: + make -C $(EXTERNALS_ROOT) $(TARGET) + +install: + make -C $(EXTERNALS_ROOT) $(TARGET)_install + +clean: + make -C $(EXTERNALS_ROOT) $(TARGET)_clean + +test_locations: + make -C $(EXTERNALS_ROOT) test_locations + +etags: + etags *.[ch] ~/code/pure-data/trunk/pd/src/*.[ch] /usr/include/*.h /usr/include/sys/*.h
Added: trunk/externals/apple/brightness-help.pd =================================================================== --- trunk/externals/apple/brightness-help.pd (rev 0) +++ trunk/externals/apple/brightness-help.pd 2008-03-12 04:20:55 UTC (rev 9569) @@ -0,0 +1,11 @@ +#N canvas 293 113 450 300 10; +#X msg 127 72 bang; +#X floatatom 127 186 5 0 0 0 - - -; +#X obj 149 97 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 6800 1; +#X floatatom 162 121 5 0 0 0 - - -; +#X obj 127 155 brightness; +#X connect 0 0 4 0; +#X connect 2 0 3 0; +#X connect 2 0 4 0; +#X connect 4 0 1 0;
Added: trunk/externals/apple/brightness.pd =================================================================== --- trunk/externals/apple/brightness.pd (rev 0) +++ trunk/externals/apple/brightness.pd 2008-03-12 04:20:55 UTC (rev 9569) @@ -0,0 +1,11 @@ +#N canvas 0 22 454 304 10; +#X obj 135 113 iodisplay brightness; +#X obj 135 141 route brightness; +#X obj 131 49 inlet; +#X obj 135 184 outlet; +#X obj 132 79 route float bang; +#X connect 0 0 1 0; +#X connect 1 0 3 0; +#X connect 2 0 4 0; +#X connect 4 0 0 0; +#X connect 4 1 0 0;
Added: trunk/externals/apple/iodisplay-help.pd =================================================================== --- trunk/externals/apple/iodisplay-help.pd (rev 0) +++ trunk/externals/apple/iodisplay-help.pd 2008-03-12 04:20:55 UTC (rev 9569) @@ -0,0 +1,13 @@ +#N canvas 293 113 462 312 10; +#X msg 127 72 bang; +#X obj 149 97 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 +-1 -1 5800 1; +#X floatatom 162 121 5 0 0 0 - - -; +#X obj 127 155 iodisplay brightness; +#X obj 132 191 route brightness; +#X floatatom 131 225 5 0 0 0 - - -; +#X connect 0 0 3 0; +#X connect 1 0 2 0; +#X connect 1 0 3 0; +#X connect 3 0 4 0; +#X connect 4 0 5 0;
Added: trunk/externals/apple/iodisplay.c =================================================================== --- trunk/externals/apple/iodisplay.c (rev 0) +++ trunk/externals/apple/iodisplay.c 2008-03-12 04:20:55 UTC (rev 9569) @@ -0,0 +1,124 @@ +/* --------------------------------------------------------------------------*/ +/* */ +/* control the iodisplay of the display on Apple Mac OS X */ +/* Written by Hans-Christoph Steiner hans@at.or.at */ +/* */ +/* Copyright (c) 2008 Free Software Foundation */ +/* */ +/* This program is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU General Public License */ +/* as published by the Free Software Foundation; either version 2 */ +/* of the License, or (at your option) any later version. */ +/* */ +/* See file LICENSE for further informations on licensing terms. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program; if not, write to the Free Software Foundation, */ +/* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +/* */ +/* --------------------------------------------------------------------------*/ + +#include <IOKit/graphics/IOGraphicsLib.h> +#include <ApplicationServices/ApplicationServices.h> +#include <m_pd.h> + +#define DEBUG(x) +//#define DEBUG(x) x + +/*------------------------------------------------------------------------------ + * CLASS DEF + */ + +static t_class *iodisplay_class; + +typedef struct _iodisplay { + t_object x_obj; + t_float parameter_value; + io_service_t io_service; + CGDirectDisplayID target_display; + t_symbol* parameter; +} t_iodisplay; + +/*------------------------------------------------------------------------------ + * IMPLEMENTATION + */ + +static void iodisplay_output(t_iodisplay* x) +{ + DEBUG(post("iodisplay_output");); + CFStringRef cfs_parameter; + CGDisplayErr err; + t_atom output_atom; + + cfs_parameter = CFStringCreateWithCString(kCFAllocatorDefault, + x->parameter->s_name, + kCFStringEncodingASCII); + err = IODisplayGetFloatParameter(x->io_service, kNilOptions, + cfs_parameter, &(x->parameter_value)); + if (err != kIOReturnSuccess) + pd_error(x,"[iodisplay]: couldn't get %s value", x->parameter->s_name); + + SETFLOAT(&output_atom, x->parameter_value); + outlet_anything(x->x_obj.ob_outlet, x->parameter, 1, &output_atom); +} + + +static void iodisplay_float(t_iodisplay* x, t_float f) +{ + DEBUG(post("iodisplay_float");); + CFStringRef cfs_parameter; + CGDisplayErr err; + + if (f < 0.) x->parameter_value = 0.; + else if (f > 1.) x->parameter_value = 1.; + else x->parameter_value = f; + + cfs_parameter = CFStringCreateWithCString(kCFAllocatorDefault, + x->parameter->s_name, + kCFStringEncodingASCII); + err = IODisplaySetFloatParameter(x->io_service, kNilOptions, + cfs_parameter, x->parameter_value); + if (err != kIOReturnSuccess) + pd_error(x,"[iodisplay]: couldn't set %s", x->parameter->s_name); +} + + +static void iodisplay_free(t_iodisplay* x) +{ + DEBUG(post("iodisplay_free");); +} + + +static void *iodisplay_new(t_symbol *s) +{ + DEBUG(post("iodisplay_new");); + t_iodisplay *x = (t_iodisplay *)pd_new(iodisplay_class); + + x->target_display = CGMainDisplayID(); + x->io_service = CGDisplayIOServicePort(x->target_display); + x->parameter = s; + + symbolinlet_new(&x->x_obj, &x->parameter); + outlet_new(&x->x_obj, &s_anything); + + return (x); +} + +void iodisplay_setup(void) +{ + iodisplay_class = class_new(gensym("iodisplay"), + (t_newmethod)iodisplay_new, + (t_method)iodisplay_free, + sizeof(t_iodisplay), + CLASS_DEFAULT, + A_DEFSYMBOL, 0); + + /* add inlet datatype methods */ + class_addbang(iodisplay_class,(t_method) iodisplay_output); + class_addfloat(iodisplay_class,(t_method) iodisplay_float); +}
Added: trunk/externals/apple/iodisplay.libs =================================================================== --- trunk/externals/apple/iodisplay.libs (rev 0) +++ trunk/externals/apple/iodisplay.libs 2008-03-12 04:20:55 UTC (rev 9569) @@ -0,0 +1 @@ +-framework IOKit
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.