Compare commits

..
10 Commits
12 changed files with 188 additions and 26 deletions
+21
View File
@@ -0,0 +1,21 @@
---
name: build-arch-package
description: Build an Arch Linux package
inputs:
PKGBUILD:
description: PKGBUILD path
required: true
OUTDIR:
description: Output directory to store the built package (relative to $HOME)
required: false
default: $HOME/arch-packages
BUILD_SCRIPT:
description: Pacman configuration file used
required: false
default: extra-x86_64-build
branding:
color: blue
icon: archive
runs:
using: node16
main: index.js
+19
View File
@@ -79,3 +79,22 @@ jobs:
with:
files: monocoque-${{ matrix.os }}.rpm
arch-build:
runs-on: ubuntu-latest
container:
image: archlinux
options: --privileged
steps:
- uses: actions/checkout@v3
- name: Set proper repository url in PKGBUILD
run: sed -i "s|%URL%|${{ github.server_url }}/${{ github.repository }}|" $GITHUB_WORKSPACE/tools/distro/arch/git/PKGBUILD
- name: Build Arch Linux package
uses: $GITHUB_WORKSPACE/.github/actions/archpkgbuild/action.yml
with:
BUILD_SCRIPT: extra-x86_64-build
PKGBUILD: $GITHUB_WORKSPACE/tools/distro/arch/git/PKGBUILD
OUTDIR: $HOME/arch-packages
- name: Release the Package
uses: softprops/action-gh-release@v1
with:
files: $HOME/arch-packages/monocoque*.zst
+2
View File
@@ -25,6 +25,8 @@ set(devices_source_files
usb/cslelitev3.c
usb/simagicp1000.h
usb/simagicp1000.c
usb/simnetpedals.h
usb/simnetpedals.c
usb/wheels/logitechg29.h
usb/wheels/logitechg29.c
usb/wheels/cammusc5.h
+6 -7
View File
@@ -128,21 +128,20 @@ int GetNumberOfLeds(SerialDevice* serialdevice, int* numlights)
int arduino_init(SerialDevice* serialdevice, const char* portdev)
{
serialdevice->id = monocoque_serial_open(serialdevice, portdev);
return serialdevice->id;
int id = monocoque_serial_open(serialdevice, portdev);
if (id < 0) return id;
serialdevice->id = id;
return 0;
}
int arduino_custom_init(SerialDevice* serialdevice, const char* portdev, const char* luafile, bool uselights)
{
serialdevice->id = monocoque_serial_open(serialdevice, portdev);
int error = arduino_init(serialdevice, portdev);
int numlights = 0;
monocoque_serial_device serialdev = monocoque_serial_devices[serialdevice->id];
int error = 0;
if(uselights == true)
{
error = GetNumberOfLeds(serialdevice, &numlights);
@@ -179,7 +178,7 @@ int arduino_custom_init(SerialDevice* serialdevice, const char* portdev, const c
slogi("LUA config setup successful.");
return serialdevice->id;
return 0;
}
-16
View File
@@ -261,10 +261,6 @@ int serialdev_init(SerialDevice* serialdevice, DeviceSettings* ds, SimInfo* simi
{
free(serialdevice->m.device_specific_config_file);
}
if(error > 0)
{
error = 0;
}
break;
case ARDUINODEV__CUSTOM:
serialdevice->m.device_specific_config_file = strdup(ds->specific_config_file);
@@ -273,24 +269,12 @@ int serialdev_init(SerialDevice* serialdevice, DeviceSettings* ds, SimInfo* simi
{
free(serialdevice->m.device_specific_config_file);
}
if(error > 0)
{
error = 0;
}
break;
case ARDUINODEV__SIMLED:
error = arduino_custom_init(serialdevice, ds->serialdevsettings.portdev, NULL, false);
if(error > 0)
{
error = 0;
}
break;
default:
error = arduino_init(serialdevice, ds->serialdevsettings.portdev);
if(error > 0)
{
error = 0;
}
break;
}
+90
View File
@@ -0,0 +1,90 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glob.h>
#include "usbhapticdevice.h"
#include "../../helper/confighelper.h"
#include "../slog/slog.h"
#define SIMNETPEDALS_BUFSIZE 64
//Byte[0] : 0x01 (fixed) = Report ID
//Byte[1] : 0x00 (fixed)
//Byte[2] : motor number (0x01, 0x2 or 0x4)
//Byte[3]: motor 1 frequency in hz
//Byte[4] : motor 1 amplitude (0 to 100%)
//Byte[5] : motor 2 frequency in hz
//Byte[6]: motor 2 amplitude (0 to 100%)
//Byte[7]: motor 3 frequency in hz
//Byte[8]: motor 3 amplitude (0 to 100%)
int simnetpedals_update(USBGenericHapticDevice* usbhapticdevice, int effecttype, int play)
{
int res = 0;
unsigned char bytes[SIMNETPEDALS_BUFSIZE];
for (int x = 0; x < SIMNETPEDALS_BUFSIZE; x++)
{
bytes[x] = 0x00;
}
bytes[0] = 0x01;
bytes[1] = 0x00;
bytes[2] = usbhapticdevice->motorposition;
uint8_t motormultiple = usbhapticdevice->motorposition - 1;
if(usbhapticdevice->motorposition == 0x04)
{
motormultiple = 2;
}
if(play > 0)
{
bytes[3 + (motormultiple * 2)] = usbhapticdevice->frequency;
bytes[4 + (motormultiple * 2)] = usbhapticdevice->amplitude;
}
if (usbhapticdevice->handle)
{
slogt("writing bytes x%02xx%02xx%02xx%02xx%02xx%02xx%02xx%02xx%02x", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4], bytes[5], bytes[6], bytes[7], bytes[8]);
res = hid_write(usbhapticdevice->handle, bytes, SIMNETPEDALS_BUFSIZE);
}
else
{
slogd("no handle");
}
return res;
}
int simnetpedals_free(USBGenericHapticDevice* usbhapticdevice)
{
int res = 0;
hid_close(usbhapticdevice->handle);
res = hid_exit();
return res;
}
int simnetpedals_init(USBGenericHapticDevice* usbhapticdevice)
{
slogi("initializing simnet pedals...");
int res = 0;
res = hid_init();
usbhapticdevice->handle = hid_open(0xcafe, 0xa301, NULL);
if (!usbhapticdevice->handle)
{
sloge("Could not find attached Simnet Pedals");
res = hid_exit();
return 1;
}
slogd("Found Simnet Pedals handle %i...", usbhapticdevice->handle);
return res;
}
+8
View File
@@ -0,0 +1,8 @@
#ifndef _SIMNETPEDALS_H
#define _SIMNETPEDALS_H
int simnetpedals_update(USBGenericHapticDevice* usbhapticdevice, int effecttype, int play);
int simnetpedals_init(USBGenericHapticDevice* usbhapticdevice);
int simnetpedals_free(USBGenericHapticDevice* usbhapticdevice);
#endif
+17
View File
@@ -7,6 +7,7 @@
#include "hapticeffect.h"
#include "usb/cslelitev3.h"
#include "usb/simagicp1000.h"
#include "usb/simnetpedals.h"
#include "../../helper/confighelper.h"
#include "../../simulatorapi/simapi/simapi/simdata.h"
@@ -32,6 +33,9 @@ int usbhapticdev_update(USBGenericHapticDevice* usbhapticdevice, SimData* simdat
case USBHAPTIC_SIMAGICP1000PEDALS:
simagicp1000_update(usbhapticdevice, usbhapticdevice->effecttype, rplay);
break;
case USBHAPTIC_SIMNETPEDALS:
simnetpedals_update(usbhapticdevice, usbhapticdevice->effecttype, rplay);
break;
}
}
else
@@ -44,6 +48,9 @@ int usbhapticdev_update(USBGenericHapticDevice* usbhapticdevice, SimData* simdat
case USBHAPTIC_SIMAGICP1000PEDALS:
simagicp1000_update(usbhapticdevice, usbhapticdevice->effecttype, rplay);
break;
case USBHAPTIC_SIMNETPEDALS:
simnetpedals_update(usbhapticdevice, usbhapticdevice->effecttype, rplay);
break;
}
}
usbhapticdevice->state = play;
@@ -62,6 +69,9 @@ int usbhapticdev_free(USBGenericHapticDevice* usbhapticdevice)
case USBHAPTIC_SIMAGICP1000PEDALS:
simagicp1000_free(usbhapticdevice);
break;
case USBHAPTIC_SIMNETPEDALS:
simnetpedals_free(usbhapticdevice);
break;
}
return 0;
@@ -107,6 +117,13 @@ int usbhapticdev_init(USBGenericHapticDevice* usbhapticdevice, DeviceSettings* d
usbhapticdevice->type = USBHAPTIC_CSLELITEV3PEDALS;
error = cslelitev3_init(usbhapticdevice);
break;
case (SIMDEVSUBTYPE_SIMNETPEDALS):
usbhapticdevice->type = USBHAPTIC_SIMNETPEDALS;
usbhapticdevice->motorposition = ds->usbdevsettings.motorsposition;
usbhapticdevice->frequency = ds->usbdevsettings.frequency;
usbhapticdevice->amplitude = ds->usbdevsettings.amplitude;
error = simnetpedals_init(usbhapticdevice);
break;
default:
slogw("Possibly unknown device");
}
+5 -1
View File
@@ -10,7 +10,8 @@ typedef enum
{
USBHAPTIC_UNKNOWN = 0,
USBHAPTIC_CSLELITEV3PEDALS = 1,
USBHAPTIC_SIMAGICP1000PEDALS = 2
USBHAPTIC_SIMAGICP1000PEDALS = 2,
USBHAPTIC_SIMNETPEDALS = 3
}
HapticType;
@@ -22,6 +23,9 @@ typedef struct
double threshold;
int value0;
int value1;
uint32_t frequency;
uint32_t amplitude;
uint32_t motorposition;
VibrationEffectType effecttype;
FILE* filehandle;
hid_device* handle;
+14
View File
@@ -128,6 +128,11 @@ int strtodevsubsubtype(const char* device_subsubtype, DeviceSettings* ds)
ds->dev_subsubtype = SIMDEVSUBTYPE_CSLELITEV3PEDALS;
devfound = true;
}
if (strcicmp(device_subsubtype, "SIMNETPEDALS") == 0)
{
ds->dev_subsubtype = SIMDEVSUBTYPE_SIMNETPEDALS;
devfound = true;
}
if (strcicmp(device_subsubtype, "SIMAGICP1000PEDALS") == 0)
{
ds->dev_subsubtype = SIMDEVSUBTYPE_SIMAGICP1000PEDALS;
@@ -731,6 +736,15 @@ int devsetup(const char* device_type, const char* device_subtype, const char* co
{
b = strtodevsubsubtype(temp, ds);
}
ds->usbdevsettings.frequency = 0;
ds->usbdevsettings.amplitude = 0;
ds->usbdevsettings.motorsposition = 0;
config_setting_lookup_int(device_settings, "frequency", &ds->usbdevsettings.frequency);
config_setting_lookup_int(device_settings, "amplitude", &ds->usbdevsettings.amplitude);
int motorposition = 1;
config_setting_lookup_int(device_settings, "motors", &motorposition);
ds->usbdevsettings.motorsposition = motorposition;
}
if (ds->dev_subtype == SIMDEVTYPE_USBHAPTIC || ds->dev_type == SIMDEV_SOUND || ds->dev_subtype == SIMDEVTYPE_SERIALHAPTIC)
+5 -1
View File
@@ -46,7 +46,8 @@ typedef enum
SIMDEVSUBTYPE_SIMAGICGTNEO = 6,
SIMDEVSUBTYPE_MOZA_NEW = 7,
SIMDEVSUBTYPE_LOGITECH_G29 = 8,
SIMDEVSUBTYPE_MOZA_KS_PRO_WHEEL = 9
SIMDEVSUBTYPE_MOZA_KS_PRO_WHEEL = 9,
SIMDEVSUBTYPE_SIMNETPEDALS = 10
}
DeviceSubSubType;
@@ -196,6 +197,9 @@ typedef struct
{
int value0;
int value1;
uint32_t frequency;
uint32_t amplitude;
MotorPosition motorsposition;
char* dev;
}
USBDeviceSettings;