1 package org.coolreader.crengine; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Method; 5 import android.app.Activity; 6 7 /** 8 * Nook Touch EPD controller interface wrapper. 9 * This class is created by DairyKnight for Nook Touch screen support in FBReaderJ. 10 * @author DairyKnight <dairyknight@gmail.com> 11 * http://forum.xda-developers.com/showthread.php?t=1183173 12 */ 13 14 public class N2EpdController { 15 public static final int REGION_APP_1 = 0; 16 public static final int REGION_APP_2 = 1; 17 public static final int REGION_APP_3 = 2; 18 public static final int REGION_APP_4 = 3; 19 20 public static final int WAVE_GC = 0; 21 public static final int WAVE_GU = 1; 22 public static final int WAVE_DU = 2; 23 public static final int WAVE_A2 = 3; 24 public static final int WAVE_GL16 = 4; 25 public static final int WAVE_AUTO = 5; 26 27 public static final int MODE_BLINK = 0; 28 public static final int MODE_ACTIVE = 1; 29 public static final int MODE_ONESHOT = 2; 30 public static final int MODE_CLEAR = 3; 31 public static final int MODE_ACTIVE_ALL = 4; 32 public static final int MODE_ONESHOT_ALL = 5; 33 public static final int MODE_CLEAR_ALL = 6; 34 35 public static String strN2EpdInit = " N2EpdInit: "; 36 37 private static Method mtSetRegion = null; 38 private static Constructor<?> RegionParamsConstructor= null; 39 private static Constructor<?> EpdControllerConstructors[] = null; 40 public static Activity n2MainActivity = null; 41 private static Object mEpdController = null; 42 43 private static Object[] enumsWave = null; 44 private static Object[] enumsRegion = null; 45 private static Object[] enumsMode = null; 46 47 static { 48 if (DeviceInfo.EINK_NOOK) { 49 try { 50 Class<?> clEpdController = Class.forName("android.hardware.EpdController"); 51 Class<?> clEpdControllerWave; 52 if (DeviceInfo.EINK_NOOK_120) 53 clEpdControllerWave = Class.forName("android.hardware.EpdRegionParams$Wave"); 54 else 55 clEpdControllerWave = Class.forName("android.hardware.EpdController$Wave"); 56 Class<?> clEpdControllerMode = Class.forName("android.hardware.EpdController$Mode"); 57 Class<?> clEpdControllerRegion = Class.forName("android.hardware.EpdController$Region"); 58 59 Class<?> clEpdControllerRegionParams; 60 if (DeviceInfo.EINK_NOOK_120) 61 clEpdControllerRegionParams = Class.forName("android.hardware.EpdRegionParams"); 62 else 63 clEpdControllerRegionParams = Class.forName("android.hardware.EpdController$RegionParams"); 64 65 enumsWave = clEpdControllerWave.getEnumConstants(); 66 67 enumsMode = clEpdControllerMode.getEnumConstants(); 68 69 enumsRegion = clEpdControllerRegion.getEnumConstants(); 70 71 RegionParamsConstructor = clEpdControllerRegionParams.getConstructor( 72 new Class[] { Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE, clEpdControllerWave}); 73 mtSetRegion = clEpdController.getMethod("setRegion", String.class, clEpdControllerRegion, 74 clEpdControllerRegionParams, clEpdControllerMode); 75 76 if (DeviceInfo.EINK_NOOK_120) 77 EpdControllerConstructors = clEpdController.getConstructors(); 78 79 strN2EpdInit += "Ok!"; 80 } catch (Exception e) { 81 System.err.println("Failed to init refresh EPD"); 82 System.err.println(e.toString()); 83 strN2EpdInit += "Failed: " + e.toString(); 84 e.printStackTrace(); 85 } 86 } 87 } 88 setMode(int region, int wave, int mode)89 public static void setMode(int region, int wave, int mode) { 90 if (mtSetRegion != null) { 91 try { 92 if (DeviceInfo.EINK_NOOK_120 && mEpdController == null) 93 mEpdController = EpdControllerConstructors[0].newInstance(new Object[] { n2MainActivity }); 94 Object regionParams = RegionParamsConstructor.newInstance(new Object[] { 0, 0, 600, 800, enumsWave[wave]}); 95 mtSetRegion.invoke(mEpdController, "CoolReader", enumsRegion[region], regionParams, enumsMode[mode]); 96 } catch (Exception e) { 97 System.err.println("Failed: SetMode"); 98 System.err.println(e.toString()); 99 strN2EpdInit += "Failed: setMode: " + e.toString(); 100 e.printStackTrace(); 101 } 102 } 103 } 104 } 105