diff -ur SDInstall/config.txt SDInstall_DMG/config.txt
--- SDInstall/config.txt 2022-03-24 16:13:42.000000000 -0700
+++ SDInstall_DMG/config.txt 2021-01-01 14:18:02.000000000 -0800
@@ -11,15 +11,14 @@
#over_voltage=6
#hdmi_enable_4kp60=1
-gpu_mem=512
-initial_turbo=60
-
[all]
##Base Settings
avoid_warnings=2
+gpu_mem=512
disable_overscan=1
disable_splash=1
boot_delay=0
+initial_turbo=60
force_eeprom_read=0
##Enable DPI gpio
Binary files SDInstall/payload/home/pi/osd/osd and SDInstall_DMG/payload/home/pi/osd/osd differ
Only in SDInstall/payload/home/pi/osd/resources: menu.png
diff -ur SDInstall/payload/usr/src/xpi_gamecon-1.0/xpi_gamecon.c SDInstall_DMG/payload/usr/src/xpi_gamecon-1.0/xpi_gamecon.c
--- SDInstall/payload/usr/src/xpi_gamecon-1.0/xpi_gamecon.c 2022-08-22 18:04:14.000000000 -0700
+++ SDInstall_DMG/payload/usr/src/xpi_gamecon-1.0/xpi_gamecon.c 2022-03-10 18:14:54.000000000 -0800
@@ -1,8 +1,3 @@
-#include <linux/platform_device.h>
-#include <linux/power_supply.h>
-#include <linux/err.h>
-#include <linux/errno.h>
-#include <linux/init.h>
#include <linux/delay.h>
#include <linux/input.h>
#include <linux/of_device.h>
@@ -12,27 +7,9 @@
#include <asm/io.h>
MODULE_AUTHOR("Nathan Scherdin");
-MODULE_DESCRIPTION("Experimental Pi Controls driver");
+MODULE_DESCRIPTION("PiBoy DMG Controls driver");
MODULE_LICENSE("GPL");
-#define EXPI_MANUFACTURER "Experimental Pi"
-#define EXPI_DRIVER_NAME "Experimental Pi Driver"
-
-struct expi {
- struct power_supply *psy;
- struct power_supply_desc psy_desc;
- int status;
- bool cable_plugged;
-};
-
-static const enum power_supply_property expi_props[] = {
- POWER_SUPPLY_PROP_STATUS,
- POWER_SUPPLY_PROP_VOLTAGE_NOW,
- POWER_SUPPLY_PROP_CURRENT_NOW,
- POWER_SUPPLY_PROP_CAPACITY,
- POWER_SUPPLY_PROP_MODEL_NAME,
-};
-
static struct gc *gc_base;
static const int gc_gpio_clk = 26;
static const int gc_gpio_data = 27;
@@ -65,7 +42,7 @@
struct kobject *kobj_ref;
-#define GC_LENGTH 14
+#define GC_LENGTH 12
#define GPIO_SET *(gpio+7)
#define GPIO_CLR *(gpio+10)
@@ -77,23 +54,21 @@
static volatile unsigned *gpio;
-static const short gc_btn[] = {
- BTN_TRIGGER_HAPPY3, //DPAD Up
- BTN_TRIGGER_HAPPY4, //DPAD Down
- BTN_TRIGGER_HAPPY1, //DPAD Left
- BTN_TRIGGER_HAPPY2, //DPAD Right
- BTN_A, //A
- BTN_B, //B
- BTN_X, //X
- BTN_Y, //Y
- BTN_TL, //Left Button
- BTN_TR, //Right Button
- BTN_TL2, //Left Trigger
- BTN_TR2, //Right Trigger
- BTN_THUMBL, //Left Thumb
- BTN_THUMBR, //Right Thumb
- BTN_SELECT, //Select
- BTN_START, //Start
+static const short gc_btn[] = { BTN_A, //A
+ BTN_B, //B
+ BTN_C, //C
+ BTN_X, //X
+ BTN_Y, //Y
+ BTN_Z, //Z
+ BTN_SELECT, //Select
+ BTN_START, //Start
+ BTN_THUMBL, //Left Thumb
+ BTN_DPAD_UP, //DPAD Up
+ BTN_DPAD_DOWN, //DPAD Down
+ BTN_DPAD_LEFT, //DPAD Left
+ BTN_DPAD_RIGHT, //DPAD Right
+ BTN_TL, //Left Trigger
+ BTN_TR, //Right Trigger
};
int gc_btn_size = sizeof(gc_btn);
@@ -145,50 +120,6 @@
struct kobj_attribute stat = __ATTR(status, 0660, stat_show, stat_store);
struct kobj_attribute vol = __ATTR(volume, 0660, vol_show, vol_store);
-static int expi_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val)
-{
- int status;
- struct expi *adc_bat = (struct expi *)power_supply_get_drvdata(psy);
- if (!adc_bat) {
- dev_err(&psy->dev, "no battery infos ?!\n");
- return -EINVAL;
- }
-
- status = adc_bat->status;
- adc_bat->cable_plugged = stat_val&0x80 ? 1 : 0;;
-
- if (!adc_bat->cable_plugged)
- adc_bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
- else if (percent_val==100)
- adc_bat->status = POWER_SUPPLY_STATUS_NOT_CHARGING;
- else
- adc_bat->status = POWER_SUPPLY_STATUS_CHARGING;
-
- if (status != adc_bat->status)
- power_supply_changed(adc_bat->psy);
-
- switch (psp) {
- case POWER_SUPPLY_PROP_STATUS:
- val->intval = adc_bat->status;
- break;
- case POWER_SUPPLY_PROP_VOLTAGE_NOW:
- val->intval = batt_val; //original; value in mv
- break;
- case POWER_SUPPLY_PROP_CURRENT_NOW:
- val->intval = cur_val*10; //original value in 10mA increments
- break;
- case POWER_SUPPLY_PROP_CAPACITY:
- val->intval = percent_val;
- break;
- case POWER_SUPPLY_PROP_MODEL_NAME:
- val->strval = EXPI_MANUFACTURER;
- break;
- default:
- return -EINVAL;
- }
- return 0;
-}
-
void gpio_func(int pin, int state)
{
volatile unsigned *tgpio = gpio;
@@ -243,9 +174,6 @@
int byteindex;
long bitindex;
- if(running)
- mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
-
gpio_func(gc_gpio_data,1); //input
for(byteindex=0;byteindex<GC_LENGTH;byteindex++){
@@ -270,14 +198,36 @@
udelay(BITRATE);
if(data[0] && !check_crc16(data)){
- version_val = ((data[0]&0xC0)<<2) | (data[0]&0x3F);
-
- data[GC_LENGTH+0] = 0xC0 | (index&0x3);
- data[GC_LENGTH+1] = values.data[index&0x3];
- calc_crc16(&data[GC_LENGTH],2);
- index++;
+ uint8_t len = 0;
+ if(data[0]==0xA5){
+ unsigned char val;
+ len = 2;
+ version_val = 0x0100;
+ val = values.fan_val | (values.flags_val&0x1 ? 0x00 : 0x80);
+ data[GC_LENGTH] = val;
+ data[GC_LENGTH+1] = ~val;
+ data[GC_LENGTH+2] = 0;
+ data[GC_LENGTH+3] = 0;
+ }
+ else
+ if(data[0]==0x5A){
+ len = 4;
+ version_val = 0x0101;
+ data[GC_LENGTH+0] = 0xC0 | (index&0x3);
+ data[GC_LENGTH+1] = values.data[index&0x3];
+ calc_crc16(&data[GC_LENGTH],2);
+ index++;
+ }
+ else{
+ len = 4;
+ version_val = ((data[0]&0xC0)<<2) | (data[0]&0x3F);
+ data[GC_LENGTH+0] = 0xC0 | (index&0x3);
+ data[GC_LENGTH+1] = values.data[index&0x3];
+ calc_crc16(&data[GC_LENGTH],2);
+ index++;
+ }
- for(byteindex=GC_LENGTH;byteindex<GC_LENGTH+4;byteindex++){
+ for(byteindex=GC_LENGTH;byteindex<GC_LENGTH+len;byteindex++){
for(bitindex=0;bitindex<8;bitindex++){
if(data[byteindex]&(0x80>>bitindex))
GPIO_SET |= gc_data_bit;
@@ -295,33 +245,30 @@
input_report_abs(dev, ABS_X, (int16_t)data[1]); //X Axis
input_report_abs(dev, ABS_Y, (int16_t)data[2]); //Y Axis
- input_report_abs(dev, ABS_RX, (int16_t)data[3]); //RX Axis
- input_report_abs(dev, ABS_RY, (int16_t)data[4]); //RY Axis
- input_report_key(dev, gc_btn[0], !(data[5]&0x01)); //DPAD Up
- input_report_key(dev, gc_btn[1], !(data[5]&0x02)); //DPAD Down
- input_report_key(dev, gc_btn[2], !(data[5]&0x04)); //DPAD Left
- input_report_key(dev, gc_btn[3], !(data[5]&0x08)); //DPAD Right
- input_report_key(dev, gc_btn[4], !(data[5]&0x10)); //A
- input_report_key(dev, gc_btn[5], !(data[5]&0x20)); //B
- input_report_key(dev, gc_btn[6], !(data[5]&0x40)); //X
- input_report_key(dev, gc_btn[7], !(data[5]&0x80)); //Y
- input_report_key(dev, gc_btn[8], !(data[6]&0x01)); //Left Button
- input_report_key(dev, gc_btn[9], !(data[6]&0x02)); //Right Button
- input_report_key(dev, gc_btn[10], !(data[6]&0x04)); //Left Trigger
- input_report_key(dev, gc_btn[11], !(data[6]&0x08)); //Right Trigger
- input_report_key(dev, gc_btn[12], !(data[6]&0x10)); //Left Thumb
- input_report_key(dev, gc_btn[13], !(data[6]&0x20)); //Right Thumb
- input_report_key(dev, gc_btn[14], !(data[6]&0x40)); //Select
- input_report_key(dev, gc_btn[15], !(data[6]&0x80)); //Start
+ input_report_key(dev, gc_btn[0], !(data[3]&0x01)); //A
+ input_report_key(dev, gc_btn[1], !(data[3]&0x02)); //B
+ input_report_key(dev, gc_btn[2], !(data[3]&0x04)); //C
+ input_report_key(dev, gc_btn[3], !(data[3]&0x08)); //X
+ input_report_key(dev, gc_btn[4], !(data[3]&0x10)); //Y
+ input_report_key(dev, gc_btn[5], !(data[3]&0x20)); //Z
+ input_report_key(dev, gc_btn[6], data[3]&0x40); //Select
+ input_report_key(dev, gc_btn[7], data[3]&0x80); //Start
+ input_report_key(dev, gc_btn[8], data[4]&0x40); //Left Thumb
+ input_report_key(dev, gc_btn[9], data[4]&0x01); //DPAD Up
+ input_report_key(dev, gc_btn[10], data[4]&0x02); //DPAD Down
+ input_report_key(dev, gc_btn[11], data[4]&0x04); //DPAD Left
+ input_report_key(dev, gc_btn[12], data[4]&0x08); //DPAD Right
+ input_report_key(dev, gc_btn[13], data[4]&0x10); //Left Shoulder
+ input_report_key(dev, gc_btn[14], data[4]&0x20); //Right Shoulder
input_sync(dev);
- stat_val = data[7]; //VBus,Shutdown
- vol_val = data[8]; //Volume
- batt_val = (int)(data[9]*5)+2950; //Battery Voltage
- cur_val = (int)((signed char)data[10])*50; //Current
- percent_val = data[11]; //battery percentage
+ batt_val = (int)(data[7]*5)+2950; //Battery Voltage
+ cur_val = (int)((signed char)data[8])*50; //Current
+ percent_val = data[9]; //battery percentage
+ stat_val = data[5]&0xC6; //VBus,Shutdown,VSTAT2,VSTAT1
+ vol_val = data[6]; //Volume
lasterror = 0;
}
@@ -338,9 +285,12 @@
}
gpio_func(gc_gpio_data,1); //input
+
+ if(running)
+ mod_timer(&gc->timer, jiffies + GC_REFRESH_TIME);
}
-static int gc_setup_pad(struct gc *gc)
+static int __init gc_setup_pad(struct gc *gc)
{
struct input_dev *input_dev;
int i;
@@ -352,7 +302,7 @@
return -ENOMEM;
}
- input_dev->name = "Experimental Pi Controller";
+ input_dev->name = "PiBoy DMG Controller";
input_dev->phys = "input0";
input_dev->id.bustype = BUS_PARPORT;
input_dev->id.vendor = 0x0001;
@@ -363,15 +313,13 @@
input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
- input_set_abs_params(input_dev, ABS_X, 0, 255, 0, 0);
- input_set_abs_params(input_dev, ABS_Y, 0, 255, 0, 0);
- input_set_abs_params(input_dev, ABS_RX, 0, 255, 0, 0);
- input_set_abs_params(input_dev, ABS_RY, 0, 255, 0, 0);
-
for (i = 0; i < gc_btn_size; i++){
__set_bit(gc_btn[i], input_dev->keybit);
}
+ input_set_abs_params(input_dev, ABS_X, 0, 255, 0, 0);
+ input_set_abs_params(input_dev, ABS_Y, 0, 255, 0, 0);
+
err = input_register_device(input_dev);
if (err)
goto err_free_dev;
@@ -380,8 +328,8 @@
gpio_func(gc_gpio_clk,0); //output
gpio_func(gc_gpio_data,1); //input
- printk(KERN_INFO "GPIO%i and GPIO%i configured for Experimental Pi controller pins\n",gc_gpio_clk,gc_gpio_data);
- printk(KERN_INFO "Experimental Pi Controls module loaded");
+ printk(KERN_INFO "GPIO%i and GPIO%i configured for Piboy DMG controller pins\n",gc_gpio_clk,gc_gpio_data);
+ printk(KERN_INFO "PiBoy DMG Controls module loaded");
return 0;
@@ -391,7 +339,7 @@
return err;
}
-static struct gc *gc_probe(void)
+static struct gc __init *gc_probe(void)
{
struct gc *gc;
int err;
@@ -481,7 +429,7 @@
printk(KERN_INFO "Executing OSD: %i",result);
}
-static int gc_init(void)
+static int __init gc_init(void)
{
/* BCM board peripherals address base */
static u32 gc_bcm2708_peri_base;
@@ -509,10 +457,8 @@
}
gc_base = gc_probe();
- if (IS_ERR(gc_base)){
- printk(KERN_INFO "failed to probe controls\n");
+ if (IS_ERR(gc_base))
return -ENODEV;
- }
/*Creating a directory in /sys/kernel/ */
kobj_ref = kobject_create_and_add("xpi_gamecon",kernel_kobj);
@@ -558,8 +504,10 @@
goto r_sysfs;
}
- running = 1;
+ printk(KERN_INFO "Device Driver Insert...Done!!!\n");
+ running = 1;
+
mod_timer(&gc_base->timer, jiffies + GC_REFRESH_TIME);
return 0;
@@ -585,7 +533,7 @@
return -1;
}
-static void gc_exit(void)
+static void __exit gc_exit(void)
{
running = 0;
@@ -608,75 +556,9 @@
sysfs_remove_file(kernel_kobj, &red.attr);
sysfs_remove_file(kernel_kobj, &flags.attr);
sysfs_remove_file(kernel_kobj, &version.attr);
-}
-
-static int expi_probe(struct platform_device *pdev)
-{
- struct expi *adc_bat;
- struct power_supply_desc *psy_desc;
- struct power_supply_config psy_cfg = {};
-
- int ret = gc_init();
- if(ret){
- printk(KERN_INFO "failed to init controls\n");
- return ret;
- }
-
- adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL);
- if (!adc_bat) {
- dev_err(&pdev->dev, "failed to allocate memory\n");
- return -ENOMEM;
- }
-
- psy_cfg.drv_data = adc_bat;
- psy_desc = &adc_bat->psy_desc;
- psy_desc->name = EXPI_DRIVER_NAME;
-
- /* bootup default values for the battery */
- adc_bat->cable_plugged = false;
- adc_bat->status = POWER_SUPPLY_STATUS_DISCHARGING;
- psy_desc->type = POWER_SUPPLY_TYPE_BATTERY;
- psy_desc->get_property = expi_get_property;
-
- adc_bat->psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg);
- if (IS_ERR(adc_bat->psy)) {
- printk(KERN_INFO "failed to register battery\n");
- goto err_reg_fail;
- }
-
- platform_set_drvdata(pdev, adc_bat);
-
- printk(KERN_INFO "Experimental Pi Driver Insert...Done!!!\n");
- return 0;
-
-err_reg_fail:
- return PTR_ERR(adc_bat->psy);
-}
-
-static int expi_remove(struct platform_device *pdev)
-{
- struct expi *adc_bat = platform_get_drvdata(pdev);
-
- gc_exit();
-
- power_supply_unregister(adc_bat->psy);
-
- printk(KERN_INFO "Experimental Pi Driver unloaded");
-
- return 0;
+ printk(KERN_INFO "PiBoy DMG Controls module unloaded");
}
-static struct platform_driver expi_driver = {
- .driver = {
- .name = EXPI_DRIVER_NAME,
- },
- .probe = expi_probe,
- .remove = expi_remove,
-};
-
-//module_platform_driver(expi_driver);
-
module_init(gc_init);
module_exit(gc_exit);
-
Created
January 4, 2024 23:25
-
-
Save pearagit/ceffd628a44c4b97583445744b12cc5c to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment